diff --git a/DEPS b/DEPS
index ef686a9b..e3496fa 100644
--- a/DEPS
+++ b/DEPS
@@ -145,11 +145,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': '17b9d1d1deaf57acd8d2abd3f84a0e3cb8a635c8',
+  'skia_revision': '4df3d5340ef3f6a63ab33b47f049d0c0c2278656',
   # 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': '7550297429f9368192c5ef4570696526e8e0b773',
+  'v8_revision': 'dd07fe70fb1090c0e0a4e2288d9ee78d084e53d3',
   # 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.
@@ -157,15 +157,15 @@
   # 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': 'ad77f55e018305e7faaa455583a225a26c77da13',
+  'angle_revision': '9031bdd9ba3b24fffdaba60463de49f72be8b811',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '029a36c7cbfcdb5bc84d98b3dbcf22a4bd3fc586',
+  'swiftshader_revision': '060fcf7771596edc080198a881568dd80a9e5dcd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '25661d1e1dc69283fad42f5ac39502fd08270432',
+  'pdfium_revision': '77548ac65167a273c34e0e7c4d8eaf77eb8e0bb7',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
@@ -196,7 +196,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '12af46b649fdb946bacf150428e5cdfc3470a7ca',
+  'freetype_revision': 'ad3443c93121c59181fc4b46c5179d0d00bfcc4e',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling HarfBuzz
   # and whatever else without interference from each other.
@@ -208,7 +208,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '4f68ff26e4e9a74f1d227d98c9df781e868e4d5e',
+  'catapult_revision': 'a5468613faffc9681dc7148e1ff8c353d1a1f491',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -224,7 +224,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'feed_revision': '24f0eac37fc3d70ff410b0391f7a0cadc018df9a',
+  'feed_revision': '4f87f10f5d5a589dbfd10815222d5d37fe267f06',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling android_sdk_build-tools_version
   # and whatever else without interference from each other.
@@ -280,11 +280,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '54b4df706968359c8c5a332e06de3dc3d372e2c8',
+  'dawn_revision': 'ccf805046ae3762de0ef44432ba4ce5bcd56ec2a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': '7deaf37e9442e433e4d90d11c940f59cdbb184cc',
+  'quiche_revision': 'c691071e933e05b53f65d97374de4ab91fed4c20',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ios_webkit
   # and whatever else without interference from each other.
@@ -809,7 +809,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '4af1fe027b83e35aecf0112585e2c51e70d3da30',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '5861c8614d481e2f45bbd5260117afc95586d54c',
       'condition': 'checkout_linux',
   },
 
@@ -834,7 +834,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '59bb8cce842ce937f07064f64f18a6f9192110de',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '921f6a17514698ebc9b037f1f1e8696b6c359fdd',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -1375,7 +1375,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'abaae129d9a0c6e1e092067e0b105475df43352e',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '054e3bbbe7921b8b84213ecbbb58f68cd5712f6d',
+    Var('webrtc_git') + '/src.git' + '@' + 'cdbaeeb737676f69419ff4a73229a6c6df4549ff',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1416,7 +1416,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@9873ee0de15a87fdf436169bc895ab5df3f509fb',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@0453b000cc337565e7d1e09df1d62ef2d8e7ab27',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index 04403fe0..aeb5d013 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -495,8 +495,6 @@
     "browser/aw_content_browser_overlay_manifest.h",
     "browser/aw_content_renderer_overlay_manifest.cc",
     "browser/aw_content_renderer_overlay_manifest.h",
-    "browser/aw_content_utility_overlay_manifest.cc",
-    "browser/aw_content_utility_overlay_manifest.h",
     "browser/aw_contents.cc",
     "browser/aw_contents.h",
     "browser/aw_contents_client_bridge.cc",
@@ -581,16 +579,10 @@
     "browser/js_java_interaction/js_java_configurator_host.h",
     "browser/memory_metrics_logger.cc",
     "browser/memory_metrics_logger.h",
-    "browser/net/aw_cookie_change_dispatcher_wrapper.cc",
-    "browser/net/aw_cookie_change_dispatcher_wrapper.h",
-    "browser/net/aw_cookie_store_wrapper.cc",
-    "browser/net/aw_cookie_store_wrapper.h",
     "browser/net/aw_http_user_agent_settings.cc",
     "browser/net/aw_http_user_agent_settings.h",
     "browser/net/aw_proxy_config_monitor.cc",
     "browser/net/aw_proxy_config_monitor.h",
-    "browser/net/init_native_callback.cc",
-    "browser/net/init_native_callback.h",
     "browser/network_service/android_stream_reader_url_loader.cc",
     "browser/network_service/android_stream_reader_url_loader.h",
     "browser/network_service/aw_network_change_notifier.cc",
diff --git a/android_webview/browser/OWNERS b/android_webview/browser/OWNERS
index 852fa10..2a4425c1 100644
--- a/android_webview/browser/OWNERS
+++ b/android_webview/browser/OWNERS
@@ -1,5 +1,3 @@
-per-file aw_content_utility_overlay_manifest.cc=set noparent
-per-file aw_content_utility_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
 per-file aw_content_renderer_overlay_manifest.cc=set noparent
 per-file aw_content_renderer_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
 per-file aw_content_browser_overlay_manifest.h=set noparent
@@ -8,5 +6,3 @@
 per-file aw_content_renderer_overlay_manifest.h=file://ipc/SECURITY_OWNERS
 per-file aw_content_browser_overlay_manifest.cc=set noparent
 per-file aw_content_browser_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
-per-file aw_content_utility_overlay_manifest.h=set noparent
-per-file aw_content_utility_overlay_manifest.h=file://ipc/SECURITY_OWNERS
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 41e5b5d..46e18e1ff 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -13,7 +13,6 @@
 #include "android_webview/browser/aw_browser_main_parts.h"
 #include "android_webview/browser/aw_content_browser_overlay_manifest.h"
 #include "android_webview/browser/aw_content_renderer_overlay_manifest.h"
-#include "android_webview/browser/aw_content_utility_overlay_manifest.h"
 #include "android_webview/browser/aw_contents.h"
 #include "android_webview/browser/aw_contents_client_bridge.h"
 #include "android_webview/browser/aw_contents_io_thread_client.h"
@@ -66,8 +65,6 @@
 #include "components/safe_browsing/browser/browser_url_loader_throttle.h"
 #include "components/safe_browsing/browser/mojo_safe_browsing_impl.h"
 #include "components/safe_browsing/features.h"
-#include "components/services/heap_profiling/heap_profiling_service.h"
-#include "components/services/heap_profiling/public/mojom/constants.mojom.h"
 #include "components/spellcheck/spellcheck_buildflags.h"
 #include "content/public/browser/browser_message_filter.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -692,21 +689,9 @@
     return GetAWContentBrowserOverlayManifest();
   if (name == content::mojom::kRendererServiceName)
     return GetAWContentRendererOverlayManifest();
-  if (name == content::mojom::kUtilityServiceName)
-    return GetAWContentUtilityOverlayManifest();
   return base::nullopt;
 }
 
-void AwContentBrowserClient::RunServiceInstanceOnIOThread(
-    const service_manager::Identity& identity,
-    mojo::PendingReceiver<service_manager::mojom::Service>* receiver) {
-  if (identity.name() == heap_profiling::mojom::kServiceName) {
-    heap_profiling::HeapProfilingService::GetServiceFactory().Run(
-        std::move(*receiver));
-    return;
-  }
-}
-
 void AwContentBrowserClient::BindInterfaceRequestFromFrame(
     content::RenderFrameHost* render_frame_host,
     const std::string& interface_name,
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h
index 5a8fd89..dee82cd0 100644
--- a/android_webview/browser/aw_content_browser_client.h
+++ b/android_webview/browser/aw_content_browser_client.h
@@ -143,10 +143,6 @@
   content::DevToolsManagerDelegate* GetDevToolsManagerDelegate() override;
   base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
       base::StringPiece name) override;
-  void RunServiceInstanceOnIOThread(
-      const service_manager::Identity& identity,
-      mojo::PendingReceiver<service_manager::mojom::Service>* receiver)
-      override;
   void BindInterfaceRequestFromFrame(
       content::RenderFrameHost* render_frame_host,
       const std::string& interface_name,
diff --git a/android_webview/browser/aw_content_browser_overlay_manifest.cc b/android_webview/browser/aw_content_browser_overlay_manifest.cc
index d192cef..7fef1900 100644
--- a/android_webview/browser/aw_content_browser_overlay_manifest.cc
+++ b/android_webview/browser/aw_content_browser_overlay_manifest.cc
@@ -8,7 +8,6 @@
 #include "base/no_destructor.h"
 #include "components/autofill/content/common/mojom/autofill_driver.mojom.h"
 #include "components/safe_browsing/common/safe_browsing.mojom.h"
-#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
 #include "components/spellcheck/common/spellcheck.mojom.h"
 #include "content/public/common/service_names.mojom.h"
 #include "services/service_manager/public/cpp/manifest_builder.h"
@@ -23,8 +22,6 @@
                             service_manager::Manifest::InterfaceList<
                                 safe_browsing::mojom::SafeBrowsing,
                                 spellcheck::mojom::SpellCheckHost>())
-          .RequireCapability("heap_profiling", "profiling")
-          .RequireCapability("heap_profiling", "heap_profiler")
           .ExposeInterfaceFilterCapability_Deprecated(
               "navigation:frame", "renderer",
               service_manager::Manifest::InterfaceList<
diff --git a/android_webview/browser/aw_content_utility_overlay_manifest.cc b/android_webview/browser/aw_content_utility_overlay_manifest.cc
deleted file mode 100644
index ff61e90..0000000
--- a/android_webview/browser/aw_content_utility_overlay_manifest.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "android_webview/browser/aw_content_utility_overlay_manifest.h"
-
-#include "base/no_destructor.h"
-#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
-#include "services/service_manager/public/cpp/manifest_builder.h"
-
-const service_manager::Manifest& GetAWContentUtilityOverlayManifest() {
-  static base::NoDestructor<service_manager::Manifest> manifest{
-      service_manager::ManifestBuilder()
-          .ExposeCapability("browser",
-                            service_manager::Manifest::InterfaceList<
-                                heap_profiling::mojom::ProfilingClient>())
-          .Build()};
-  return *manifest;
-}
diff --git a/android_webview/browser/aw_content_utility_overlay_manifest.h b/android_webview/browser/aw_content_utility_overlay_manifest.h
deleted file mode 100644
index 12a54b0..0000000
--- a/android_webview/browser/aw_content_utility_overlay_manifest.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ANDROID_WEBVIEW_BROWSER_AW_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
-#define ANDROID_WEBVIEW_BROWSER_AW_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
-
-#include "services/service_manager/public/cpp/manifest.h"
-
-// Returns the Manifest Android WebView amends to Contents's content_utility
-// service manifest. This allows WebView to extend the capabilities exposed
-// and/or // required by content_utility service instances
-const service_manager::Manifest& GetAWContentUtilityOverlayManifest();
-
-#endif  // ANDROID_WEBVIEW_BROWSER_AW_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
diff --git a/android_webview/browser/aw_cookie_access_policy.cc b/android_webview/browser/aw_cookie_access_policy.cc
index bd29a80..b753bde8 100644
--- a/android_webview/browser/aw_cookie_access_policy.cc
+++ b/android_webview/browser/aw_cookie_access_policy.cc
@@ -7,15 +7,12 @@
 #include <memory>
 
 #include "android_webview/browser/aw_contents_io_thread_client.h"
-#include "base/feature_list.h"
 #include "base/logging.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/websocket_handshake_request_info.h"
 #include "net/base/net_errors.h"
 #include "net/base/static_cookie_policy.h"
-#include "net/url_request/url_request.h"
-#include "services/network/public/cpp/features.h"
 #include "url/gurl.h"
 
 using base::AutoLock;
@@ -66,20 +63,6 @@
   return io_thread_client->ShouldAcceptThirdPartyCookies();
 }
 
-bool AwCookieAccessPolicy::GetShouldAcceptThirdPartyCookies(
-    const net::URLRequest& request) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  return false;
-}
-
-bool AwCookieAccessPolicy::AllowCookies(const net::URLRequest& request) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  DCHECK(!base::FeatureList::IsEnabled(network::features::kNetworkService));
-  bool third_party = GetShouldAcceptThirdPartyCookies(request);
-  return CanAccessCookies(request.url(), request.site_for_cookies(),
-                          third_party);
-}
-
 bool AwCookieAccessPolicy::AllowCookies(const GURL& url,
                                         const GURL& first_party,
                                         int render_process_id,
diff --git a/android_webview/browser/aw_cookie_access_policy.h b/android_webview/browser/aw_cookie_access_policy.h
index 12a12f8..4d41138f 100644
--- a/android_webview/browser/aw_cookie_access_policy.h
+++ b/android_webview/browser/aw_cookie_access_policy.h
@@ -38,10 +38,6 @@
                                         int frame_tree_node_id);
   bool GetShouldAcceptThirdPartyCookies(const net::URLRequest& request);
 
-  // Whether or not to allow cookies to bet sent or set for |request|. Can only
-  // be called from the IO thread.
-  bool AllowCookies(const net::URLRequest& request);
-
   // Whether or not to allow cookies for requests with these parameters.
   bool AllowCookies(const GURL& url,
                     const GURL& first_party,
diff --git a/android_webview/browser/aw_cookie_access_policy_unittest.cc b/android_webview/browser/aw_cookie_access_policy_unittest.cc
deleted file mode 100644
index 63a3d07..0000000
--- a/android_webview/browser/aw_cookie_access_policy_unittest.cc
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2014 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 "android_webview/browser/aw_cookie_access_policy.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-namespace android_webview {
-
-namespace {
-const GURL kUrlFirstParty("http://first.example");
-const GURL kUrlThirdParty("http://third.example");
-const GURL kFileUrl1("file:///path/to/any_file.html");
-const GURL kFileUrl2("file:///path/to/some/other_file.html");
-}  // namespace
-
-class AwCookieAccessPolicyTest : public testing::Test {
- public:
-  AwCookieAccessPolicyTest() {}
-
-  bool CanAccessCookies(const GURL& url,
-                        const GURL& site_for_cookies,
-                        bool accept_cookies,
-                        bool accept_third_party_cookies) {
-    AwCookieAccessPolicy policy;
-    policy.SetShouldAcceptCookies(accept_cookies);
-    return policy.CanAccessCookies(url, site_for_cookies,
-                                   accept_third_party_cookies);
-  }
-};
-
-TEST_F(AwCookieAccessPolicyTest, BlockAllCookies) {
-  EXPECT_FALSE(CanAccessCookies(kUrlFirstParty, kUrlFirstParty,
-                                false /* allow_cookies */,
-                                false /* allow_third_party_cookies */));
-  EXPECT_FALSE(CanAccessCookies(kUrlFirstParty, kUrlThirdParty,
-                                false /* allow_cookies */,
-                                false /* allow_third_party_cookies */));
-  EXPECT_FALSE(CanAccessCookies(kFileUrl1, kFileUrl1, false /* allow_cookies */,
-                                false /* allow_third_party_cookies */));
-  EXPECT_FALSE(CanAccessCookies(kFileUrl1, kFileUrl2, false /* allow_cookies */,
-                                false /* allow_third_party_cookies */));
-}
-
-TEST_F(AwCookieAccessPolicyTest, BlockAllCookiesWithThirdPartySet) {
-  EXPECT_FALSE(CanAccessCookies(kUrlFirstParty, kUrlFirstParty,
-                                false /* allow_cookies */,
-                                true /* allow_third_party_cookies */));
-  EXPECT_FALSE(CanAccessCookies(kUrlFirstParty, kUrlThirdParty,
-                                false /* allow_cookies */,
-                                true /* allow_third_party_cookies */));
-  EXPECT_FALSE(CanAccessCookies(kFileUrl1, kFileUrl1, false /* allow_cookies */,
-                                true /* allow_third_party_cookies */));
-  EXPECT_FALSE(CanAccessCookies(kFileUrl1, kFileUrl2, false /* allow_cookies */,
-                                true /* allow_third_party_cookies */));
-}
-
-TEST_F(AwCookieAccessPolicyTest, FirstPartyCookiesOnly) {
-  EXPECT_TRUE(CanAccessCookies(kUrlFirstParty, kUrlFirstParty,
-                               true /* allow_cookies */,
-                               false /* allow_third_party_cookies */));
-  EXPECT_FALSE(CanAccessCookies(kUrlFirstParty, kUrlThirdParty,
-                                true /* allow_cookies */,
-                                false /* allow_third_party_cookies */));
-  EXPECT_TRUE(CanAccessCookies(kFileUrl1, kFileUrl1, true /* allow_cookies */,
-                               false /* allow_third_party_cookies */));
-  EXPECT_TRUE(CanAccessCookies(kFileUrl1, kFileUrl2, true /* allow_cookies */,
-                               false /* allow_third_party_cookies */));
-}
-
-TEST_F(AwCookieAccessPolicyTest, AllowAllCookies) {
-  EXPECT_TRUE(CanAccessCookies(kUrlFirstParty, kUrlFirstParty,
-                               true /* allow_cookies */,
-                               true /* allow_third_party_cookies */));
-  EXPECT_TRUE(CanAccessCookies(kUrlFirstParty, kUrlThirdParty,
-                               true /* allow_cookies */,
-                               true /* allow_third_party_cookies */));
-  EXPECT_TRUE(CanAccessCookies(kFileUrl1, kFileUrl1, true /* allow_cookies */,
-                               true /* allow_third_party_cookies */));
-  EXPECT_TRUE(CanAccessCookies(kFileUrl1, kFileUrl2, true /* allow_cookies */,
-                               true /* allow_third_party_cookies */));
-}
-
-}  // namespace android_webview
diff --git a/android_webview/browser/cookie_manager.cc b/android_webview/browser/cookie_manager.cc
index 86bd4d6..5bbd04f 100644
--- a/android_webview/browser/cookie_manager.cc
+++ b/android_webview/browser/cookie_manager.cc
@@ -12,7 +12,6 @@
 
 #include "android_webview/browser/aw_browser_context.h"
 #include "android_webview/browser/aw_cookie_access_policy.h"
-#include "android_webview/browser/net/init_native_callback.h"
 #include "android_webview/native_jni/AwCookieManager_jni.h"
 #include "base/android/callback_android.h"
 #include "base/android/jni_string.h"
@@ -253,10 +252,6 @@
   }
 }
 
-base::SingleThreadTaskRunner* CookieManager::GetCookieStoreTaskRunner() {
-  return cookie_store_task_runner_.get();
-}
-
 net::CookieStore* CookieManager::GetCookieStore() {
   DCHECK(cookie_store_task_runner_->RunsTasksInCurrentSequence());
 
@@ -706,16 +701,4 @@
   return CookieManager::GetInstance()->SetAcceptFileSchemeCookies(accept);
 }
 
-// The following two methods are used to avoid a circular project dependency.
-// TODO(mmenke):  This is weird. Maybe there should be a leaky Singleton in
-// browser/net that creates and owns there?
-
-scoped_refptr<base::SingleThreadTaskRunner> GetCookieStoreTaskRunner() {
-  return CookieManager::GetInstance()->GetCookieStoreTaskRunner();
-}
-
-net::CookieStore* GetCookieStore() {
-  return CookieManager::GetInstance()->GetCookieStore();
-}
-
 }  // namespace android_webview
diff --git a/android_webview/browser/cookie_manager.h b/android_webview/browser/cookie_manager.h
index fc6891a..88e57910 100644
--- a/android_webview/browser/cookie_manager.h
+++ b/android_webview/browser/cookie_manager.h
@@ -41,11 +41,6 @@
  public:
   static CookieManager* GetInstance();
 
-  // Returns the TaskRunner on which the CookieStore lives.
-  base::SingleThreadTaskRunner* GetCookieStoreTaskRunner();
-  // Returns the CookieStore, creating it if necessary. This must only be called
-  // on the CookieStore TaskRunner.
-  net::CookieStore* GetCookieStore();
   // Passes a |cookie_manager_info|, which this will use for CookieManager APIs
   // going forward. Only called in the Network Service path, with the intention
   // this is called once during content initialization (when we create the
@@ -77,6 +72,10 @@
   CookieManager();
   ~CookieManager();
 
+  // Returns the CookieStore, creating it if necessary. This must only be called
+  // on the CookieStore TaskRunner.
+  net::CookieStore* GetCookieStore();
+
   // Gets the Network Service CookieManager if it's been passed via
   // |SetMojoCookieManager|. Otherwise (if Network Service is disabled or
   // content layer has not yet initialized the NetworkContext), this returns
diff --git a/android_webview/browser/gfx/BUILD.gn b/android_webview/browser/gfx/BUILD.gn
index 237fb03f..a84f09e 100644
--- a/android_webview/browser/gfx/BUILD.gn
+++ b/android_webview/browser/gfx/BUILD.gn
@@ -44,12 +44,16 @@
     "render_thread_manager.h",
     "scoped_app_gl_state_restore.cc",
     "scoped_app_gl_state_restore.h",
+    "skia_output_surface_dependency_webview.cc",
+    "skia_output_surface_dependency_webview.h",
     "surfaces_instance.cc",
     "surfaces_instance.h",
     "task_forwarding_sequence.cc",
     "task_forwarding_sequence.h",
     "task_queue_web_view.cc",
     "task_queue_web_view.h",
+    "viz_compositor_thread_runner_webview.cc",
+    "viz_compositor_thread_runner_webview.h",
   ]
 
   deps = [
@@ -63,6 +67,7 @@
     "//gpu/skia_bindings",
     "//gpu/vulkan:vulkan",
     "//gpu/vulkan/init",
+    "//services/viz/privileged/mojom",
     "//services/viz/public/mojom",
     "//skia",
     "//ui/gfx",
diff --git a/android_webview/browser/gfx/DEPS b/android_webview/browser/gfx/DEPS
index f1e883d..fcab8f3f1 100644
--- a/android_webview/browser/gfx/DEPS
+++ b/android_webview/browser/gfx/DEPS
@@ -6,5 +6,6 @@
   "+android_webview/browser/aw_feature_list.h",
   "+android_webview/common/aw_switches.h",
   "+android_webview/public/browser",
+  "+components/viz/service/main",
 ]
 
diff --git a/android_webview/browser/gfx/skia_output_surface_dependency_webview.cc b/android_webview/browser/gfx/skia_output_surface_dependency_webview.cc
new file mode 100644
index 0000000..8b93d42
--- /dev/null
+++ b/android_webview/browser/gfx/skia_output_surface_dependency_webview.cc
@@ -0,0 +1,107 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/gfx/skia_output_surface_dependency_webview.h"
+
+#include "android_webview/browser/gfx/aw_vulkan_context_provider.h"
+#include "android_webview/browser/gfx/gpu_service_web_view.h"
+#include "android_webview/browser/gfx/parent_output_surface.h"
+#include "android_webview/browser/gfx/task_forwarding_sequence.h"
+#include "android_webview/browser/gfx/task_queue_web_view.h"
+
+namespace android_webview {
+
+SkiaOutputSurfaceDependencyWebView::SkiaOutputSurfaceDependencyWebView(
+    TaskQueueWebView* task_queue,
+    GpuServiceWebView* gpu_service,
+    gpu::SharedContextState* shared_context_state,
+    gl::GLSurface* gl_surface)
+    : gl_surface_(gl_surface),
+      task_queue_(task_queue),
+      gpu_service_(gpu_service),
+      workarounds_(
+          gpu_service_->gpu_feature_info().enabled_gpu_driver_bug_workarounds),
+      shared_context_state_(shared_context_state) {}
+
+SkiaOutputSurfaceDependencyWebView::~SkiaOutputSurfaceDependencyWebView() =
+    default;
+
+std::unique_ptr<gpu::SingleTaskSequence>
+SkiaOutputSurfaceDependencyWebView::CreateSequence() {
+  return std::make_unique<TaskForwardingSequence>(
+      this->task_queue_, this->gpu_service_->sync_point_manager());
+}
+
+bool SkiaOutputSurfaceDependencyWebView::IsUsingVulkan() {
+  return shared_context_state_ && shared_context_state_->GrContextIsVulkan();
+}
+
+gpu::SharedImageManager*
+SkiaOutputSurfaceDependencyWebView::GetSharedImageManager() {
+  return gpu_service_->shared_image_manager();
+}
+
+gpu::SyncPointManager*
+SkiaOutputSurfaceDependencyWebView::GetSyncPointManager() {
+  return gpu_service_->sync_point_manager();
+}
+
+const gpu::GpuDriverBugWorkarounds&
+SkiaOutputSurfaceDependencyWebView::GetGpuDriverBugWorkarounds() {
+  return workarounds_;
+}
+
+scoped_refptr<gpu::SharedContextState>
+SkiaOutputSurfaceDependencyWebView::GetSharedContextState() {
+  return shared_context_state_;
+}
+
+gpu::raster::GrShaderCache*
+SkiaOutputSurfaceDependencyWebView::GetGrShaderCache() {
+  return nullptr;
+}
+
+viz::VulkanContextProvider*
+SkiaOutputSurfaceDependencyWebView::GetVulkanContextProvider() {
+  return shared_context_state_->vk_context_provider();
+}
+
+const gpu::GpuPreferences&
+SkiaOutputSurfaceDependencyWebView::GetGpuPreferences() {
+  return gpu_service_->gpu_preferences();
+}
+
+const gpu::GpuFeatureInfo&
+SkiaOutputSurfaceDependencyWebView::GetGpuFeatureInfo() {
+  return gpu_service_->gpu_feature_info();
+}
+
+gpu::MailboxManager* SkiaOutputSurfaceDependencyWebView::GetMailboxManager() {
+  return gpu_service_->mailbox_manager();
+}
+
+void SkiaOutputSurfaceDependencyWebView::ScheduleGrContextCleanup() {
+  // There is no way to access the gpu thread here, so leave it no-op for now.
+}
+
+void SkiaOutputSurfaceDependencyWebView::PostTaskToClientThread(
+    base::OnceClosure closure) {
+  task_queue_->ScheduleClientTask(std::move(closure));
+}
+
+bool SkiaOutputSurfaceDependencyWebView::IsOffscreen() {
+  return false;
+}
+
+gpu::SurfaceHandle SkiaOutputSurfaceDependencyWebView::GetSurfaceHandle() {
+  return gpu::kNullSurfaceHandle;
+}
+
+scoped_refptr<gl::GLSurface>
+SkiaOutputSurfaceDependencyWebView::CreateGLSurface(
+    base::WeakPtr<gpu::ImageTransportSurfaceDelegate> stub) {
+  return gl_surface_;
+}
+
+}  // namespace android_webview
diff --git a/android_webview/browser/gfx/skia_output_surface_dependency_webview.h b/android_webview/browser/gfx/skia_output_surface_dependency_webview.h
new file mode 100644
index 0000000..ab743c0
--- /dev/null
+++ b/android_webview/browser/gfx/skia_output_surface_dependency_webview.h
@@ -0,0 +1,58 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_GFX_SKIA_OUTPUT_SURFACE_DEPENDENCY_WEBVIEW_H_
+#define ANDROID_WEBVIEW_BROWSER_GFX_SKIA_OUTPUT_SURFACE_DEPENDENCY_WEBVIEW_H_
+
+#include "components/viz/service/display_embedder/skia_output_surface_dependency.h"
+#include "gpu/command_buffer/service/shared_context_state.h"
+#include "gpu/config/gpu_driver_bug_workarounds.h"
+
+namespace android_webview {
+
+class TaskQueueWebView;
+class GpuServiceWebView;
+
+// Implementation for access to gpu objects and task queue for WebView.
+class SkiaOutputSurfaceDependencyWebView
+    : public viz::SkiaOutputSurfaceDependency {
+ public:
+  SkiaOutputSurfaceDependencyWebView(
+      TaskQueueWebView* task_queue,
+      GpuServiceWebView* gpu_service,
+      gpu::SharedContextState* shared_context_state,
+      gl::GLSurface* gl_surface);
+  ~SkiaOutputSurfaceDependencyWebView() override;
+
+  std::unique_ptr<gpu::SingleTaskSequence> CreateSequence() override;
+  bool IsUsingVulkan() override;
+  gpu::SharedImageManager* GetSharedImageManager() override;
+  gpu::SyncPointManager* GetSyncPointManager() override;
+  const gpu::GpuDriverBugWorkarounds& GetGpuDriverBugWorkarounds() override;
+  scoped_refptr<gpu::SharedContextState> GetSharedContextState() override;
+  gpu::raster::GrShaderCache* GetGrShaderCache() override;
+  viz::VulkanContextProvider* GetVulkanContextProvider() override;
+  const gpu::GpuPreferences& GetGpuPreferences() override;
+  const gpu::GpuFeatureInfo& GetGpuFeatureInfo() override;
+  gpu::MailboxManager* GetMailboxManager() override;
+  void ScheduleGrContextCleanup() override;
+  void PostTaskToClientThread(base::OnceClosure closure) override;
+  bool IsOffscreen() override;
+  gpu::SurfaceHandle GetSurfaceHandle() override;
+  scoped_refptr<gl::GLSurface> CreateGLSurface(
+      base::WeakPtr<gpu::ImageTransportSurfaceDelegate> stub) override;
+
+ private:
+  gl::GLSurface* const gl_surface_;
+  TaskQueueWebView* task_queue_;
+  GpuServiceWebView* gpu_service_;
+  gpu::GpuDriverBugWorkarounds workarounds_;
+  gpu::SharedContextState* const shared_context_state_;
+
+  DISALLOW_COPY_AND_ASSIGN(SkiaOutputSurfaceDependencyWebView);
+};
+
+}  // namespace android_webview
+
+#endif  // ANDROID_WEBVIEW_BROWSER_GFX_SKIA_OUTPUT_SURFACE_DEPENDENCY_WEBVIEW_H_
diff --git a/android_webview/browser/gfx/surfaces_instance.cc b/android_webview/browser/gfx/surfaces_instance.cc
index 434c112..66617e1 100644
--- a/android_webview/browser/gfx/surfaces_instance.cc
+++ b/android_webview/browser/gfx/surfaces_instance.cc
@@ -13,7 +13,7 @@
 #include "android_webview/browser/gfx/deferred_gpu_command_service.h"
 #include "android_webview/browser/gfx/gpu_service_web_view.h"
 #include "android_webview/browser/gfx/parent_output_surface.h"
-#include "android_webview/browser/gfx/task_forwarding_sequence.h"
+#include "android_webview/browser/gfx/skia_output_surface_dependency_webview.h"
 #include "android_webview/browser/gfx/task_queue_web_view.h"
 #include "android_webview/common/aw_switches.h"
 #include "base/command_line.h"
@@ -26,7 +26,6 @@
 #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
 #include "components/viz/service/display/display.h"
 #include "components/viz/service/display/display_scheduler.h"
-#include "components/viz/service/display_embedder/skia_output_surface_dependency.h"
 #include "components/viz/service/display_embedder/skia_output_surface_impl.h"
 #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
@@ -51,136 +50,6 @@
   NOTREACHED() << "Non owned context lost!";
 }
 
-// Implementation for access to gpu objects and task queue for WebView.
-class SkiaOutputSurfaceDependencyWebView
-    : public viz::SkiaOutputSurfaceDependency {
- public:
-  SkiaOutputSurfaceDependencyWebView(
-      TaskQueueWebView* task_queue,
-      GpuServiceWebView* gpu_service,
-      scoped_refptr<gpu::SharedContextState> shared_context_state,
-      scoped_refptr<gl::GLSurface> gl_surface);
-  ~SkiaOutputSurfaceDependencyWebView() override;
-
-  std::unique_ptr<gpu::SingleTaskSequence> CreateSequence() override;
-  bool IsUsingVulkan() override;
-  gpu::SharedImageManager* GetSharedImageManager() override;
-  gpu::SyncPointManager* GetSyncPointManager() override;
-  const gpu::GpuDriverBugWorkarounds& GetGpuDriverBugWorkarounds() override;
-  scoped_refptr<gpu::SharedContextState> GetSharedContextState() override;
-  gpu::raster::GrShaderCache* GetGrShaderCache() override;
-  viz::VulkanContextProvider* GetVulkanContextProvider() override;
-  const gpu::GpuPreferences& GetGpuPreferences() override;
-  const gpu::GpuFeatureInfo& GetGpuFeatureInfo() override;
-  gpu::MailboxManager* GetMailboxManager() override;
-  void ScheduleGrContextCleanup() override;
-  void PostTaskToClientThread(base::OnceClosure closure) override;
-  bool IsOffscreen() override;
-  gpu::SurfaceHandle GetSurfaceHandle() override;
-  scoped_refptr<gl::GLSurface> CreateGLSurface(
-      base::WeakPtr<gpu::ImageTransportSurfaceDelegate> stub) override;
-
- private:
-  scoped_refptr<gl::GLSurface> gl_surface_;
-  TaskQueueWebView* task_queue_;
-  GpuServiceWebView* gpu_service_;
-  gpu::GpuDriverBugWorkarounds workarounds_;
-  scoped_refptr<gpu::SharedContextState> shared_context_state_;
-  DISALLOW_COPY_AND_ASSIGN(SkiaOutputSurfaceDependencyWebView);
-};
-
-SkiaOutputSurfaceDependencyWebView::SkiaOutputSurfaceDependencyWebView(
-    TaskQueueWebView* task_queue,
-    GpuServiceWebView* gpu_service,
-    scoped_refptr<gpu::SharedContextState> shared_context_state,
-    scoped_refptr<gl::GLSurface> gl_surface)
-    : gl_surface_(std::move(gl_surface)),
-      task_queue_(task_queue),
-      gpu_service_(gpu_service),
-      workarounds_(
-          gpu_service_->gpu_feature_info().enabled_gpu_driver_bug_workarounds),
-      shared_context_state_(std::move(shared_context_state)) {}
-
-SkiaOutputSurfaceDependencyWebView::~SkiaOutputSurfaceDependencyWebView() =
-    default;
-
-std::unique_ptr<gpu::SingleTaskSequence>
-SkiaOutputSurfaceDependencyWebView::CreateSequence() {
-  return std::make_unique<TaskForwardingSequence>(
-      this->task_queue_, this->gpu_service_->sync_point_manager());
-}
-
-bool SkiaOutputSurfaceDependencyWebView::IsUsingVulkan() {
-  return shared_context_state_ && shared_context_state_->GrContextIsVulkan();
-}
-
-gpu::SharedImageManager*
-SkiaOutputSurfaceDependencyWebView::GetSharedImageManager() {
-  return gpu_service_->shared_image_manager();
-}
-
-gpu::SyncPointManager*
-SkiaOutputSurfaceDependencyWebView::GetSyncPointManager() {
-  return gpu_service_->sync_point_manager();
-}
-
-const gpu::GpuDriverBugWorkarounds&
-SkiaOutputSurfaceDependencyWebView::GetGpuDriverBugWorkarounds() {
-  return workarounds_;
-}
-
-scoped_refptr<gpu::SharedContextState>
-SkiaOutputSurfaceDependencyWebView::GetSharedContextState() {
-  return shared_context_state_;
-}
-
-gpu::raster::GrShaderCache*
-SkiaOutputSurfaceDependencyWebView::GetGrShaderCache() {
-  return nullptr;
-}
-
-viz::VulkanContextProvider*
-SkiaOutputSurfaceDependencyWebView::GetVulkanContextProvider() {
-  return shared_context_state_->vk_context_provider();
-}
-
-const gpu::GpuPreferences&
-SkiaOutputSurfaceDependencyWebView::GetGpuPreferences() {
-  return gpu_service_->gpu_preferences();
-}
-
-const gpu::GpuFeatureInfo&
-SkiaOutputSurfaceDependencyWebView::GetGpuFeatureInfo() {
-  return gpu_service_->gpu_feature_info();
-}
-
-gpu::MailboxManager* SkiaOutputSurfaceDependencyWebView::GetMailboxManager() {
-  return gpu_service_->mailbox_manager();
-}
-
-void SkiaOutputSurfaceDependencyWebView::ScheduleGrContextCleanup() {
-  // There is no way to access the gpu thread here, so leave it no-op for now.
-}
-
-void SkiaOutputSurfaceDependencyWebView::PostTaskToClientThread(
-    base::OnceClosure closure) {
-  task_queue_->ScheduleClientTask(std::move(closure));
-}
-
-bool SkiaOutputSurfaceDependencyWebView::IsOffscreen() {
-  return false;
-}
-
-gpu::SurfaceHandle SkiaOutputSurfaceDependencyWebView::GetSurfaceHandle() {
-  return gpu::kNullSurfaceHandle;
-}
-
-scoped_refptr<gl::GLSurface>
-SkiaOutputSurfaceDependencyWebView::CreateGLSurface(
-    base::WeakPtr<gpu::ImageTransportSurfaceDelegate> stub) {
-  return gl_surface_;
-}
-
 }  // namespace
 
 // static
@@ -258,7 +127,7 @@
     }
     auto skia_dependency = std::make_unique<SkiaOutputSurfaceDependencyWebView>(
         TaskQueueWebView::GetInstance(), GpuServiceWebView::GetInstance(),
-        shared_context_state_, gl_surface_);
+        shared_context_state_.get(), gl_surface_.get());
     output_surface = viz::SkiaOutputSurfaceImpl::Create(
         std::move(skia_dependency), settings);
     DCHECK(output_surface);
diff --git a/android_webview/browser/gfx/surfaces_instance.h b/android_webview/browser/gfx/surfaces_instance.h
index 52a27d4..672d879 100644
--- a/android_webview/browser/gfx/surfaces_instance.h
+++ b/android_webview/browser/gfx/surfaces_instance.h
@@ -97,7 +97,11 @@
 
   viz::FrameSinkId frame_sink_id_;
 
+  // These need to outlive viz objects such as |display_| below.
   scoped_refptr<AwGLSurface> gl_surface_;
+  scoped_refptr<gl::GLShareGroup> share_group_;
+  scoped_refptr<gpu::SharedContextState> shared_context_state_;
+
   std::unique_ptr<viz::FrameSinkManagerImpl> frame_sink_manager_;
   std::unique_ptr<viz::BeginFrameSource> begin_frame_source_;
   std::unique_ptr<viz::Display> display_;
@@ -112,9 +116,6 @@
 
   gfx::Size surface_size_;
 
-  scoped_refptr<gl::GLShareGroup> share_group_;
-  scoped_refptr<gpu::SharedContextState> shared_context_state_;
-
   DISALLOW_COPY_AND_ASSIGN(SurfacesInstance);
 };
 
diff --git a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.cc b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.cc
new file mode 100644
index 0000000..1d0f347
--- /dev/null
+++ b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.cc
@@ -0,0 +1,119 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/gfx/viz_compositor_thread_runner_webview.h"
+
+#include <utility>
+
+#include "android_webview/browser/gfx/task_queue_web_view.h"
+#include "base/logging.h"
+#include "base/no_destructor.h"
+#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
+
+namespace android_webview {
+
+namespace {
+void RunAndDone(base::OnceClosure viz_task, base::OnceClosure done_task) {
+  std::move(viz_task).Run();
+
+  // |done_task| is provided by TaskQueueWebView unblocks the gpu service.
+  std::move(done_task).Run();
+}
+}  // namespace
+
+// static
+VizCompositorThreadRunnerWebView*
+VizCompositorThreadRunnerWebView::GetInstance() {
+  static base::NoDestructor<VizCompositorThreadRunnerWebView> instance;
+  return instance.get();
+}
+
+VizCompositorThreadRunnerWebView::VizCompositorThreadRunnerWebView()
+    : viz_thread_("VizWebView") {
+  base::Thread::Options options;
+  options.priority = base::ThreadPriority::DISPLAY;
+  CHECK(viz_thread_.StartWithOptions(options));
+  viz_task_runner_ = viz_thread_.task_runner();
+  TaskQueueWebView::GetInstance()->InitializeVizThread(viz_task_runner_);
+
+  DETACH_FROM_THREAD(viz_thread_checker_);
+
+  viz_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          &VizCompositorThreadRunnerWebView::InitFrameSinkManagerOnViz,
+          base::Unretained(this)));
+}
+
+void VizCompositorThreadRunnerWebView::InitFrameSinkManagerOnViz() {
+  DCHECK_CALLED_ON_VALID_THREAD(viz_thread_checker_);
+
+  // The SharedBitmapManager is null as we do not support or use software
+  // compositing on Android.
+  frame_sink_manager_ = std::make_unique<viz::FrameSinkManagerImpl>(
+      /*shared_bitmap_manager=*/nullptr);
+}
+
+viz::FrameSinkManagerImpl*
+VizCompositorThreadRunnerWebView::GetFrameSinkManager() {
+  DCHECK_CALLED_ON_VALID_THREAD(viz_thread_checker_);
+  DCHECK(frame_sink_manager_);
+  return frame_sink_manager_.get();
+}
+
+void VizCompositorThreadRunnerWebView::ScheduleOnVizAndBlock(
+    base::OnceClosure task) {
+  TaskQueueWebView::GetInstance()->ScheduleOnVizAndBlock(
+      base::BindOnce(&RunAndDone, std::move(task)));
+}
+
+VizCompositorThreadRunnerWebView::~VizCompositorThreadRunnerWebView() = default;
+
+base::SingleThreadTaskRunner* VizCompositorThreadRunnerWebView::task_runner() {
+  return viz_task_runner_.get();
+}
+
+void VizCompositorThreadRunnerWebView::CreateFrameSinkManager(
+    viz::mojom::FrameSinkManagerParamsPtr params) {
+  // Does not support software compositing.
+  NOTREACHED();
+}
+
+void VizCompositorThreadRunnerWebView::CreateFrameSinkManager(
+    viz::mojom::FrameSinkManagerParamsPtr params,
+    gpu::CommandBufferTaskExecutor* task_executor,
+    viz::GpuServiceImpl* gpu_service) {
+  viz_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(
+          &VizCompositorThreadRunnerWebView::BindFrameSinkManagerOnViz,
+          base::Unretained(this), std::move(params)));
+}
+
+void VizCompositorThreadRunnerWebView::BindFrameSinkManagerOnViz(
+    viz::mojom::FrameSinkManagerParamsPtr params) {
+  DCHECK_CALLED_ON_VALID_THREAD(viz_thread_checker_);
+  DCHECK(frame_sink_manager_);
+
+  frame_sink_manager_->BindAndSetClient(
+      std::move(params->frame_sink_manager), viz_task_runner_,
+      viz::mojom::FrameSinkManagerClientPtr(
+          std::move(params->frame_sink_manager_client)));
+}
+
+#if defined(USE_VIZ_DEVTOOLS)
+void VizCompositorThreadRunnerWebView::CreateVizDevTools(
+    viz::mojom::VizDevToolsParamsPtr params) {
+  NOTIMPLEMENTED();
+}
+#endif
+
+void VizCompositorThreadRunnerWebView::CleanupForShutdown(
+    base::OnceClosure cleanup_finished_callback) {
+  // In-process gpu is not supposed to shutdown.
+  // Plus viz thread in webview architecture is not owned by the gpu thread.
+  NOTREACHED();
+}
+
+}  // namespace android_webview
diff --git a/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
new file mode 100644
index 0000000..bb73240
--- /dev/null
+++ b/android_webview/browser/gfx/viz_compositor_thread_runner_webview.h
@@ -0,0 +1,73 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_GFX_VIZ_COMPOSITOR_THREAD_RUNNER_WEBVIEW_H_
+#define ANDROID_WEBVIEW_BROWSER_GFX_VIZ_COMPOSITOR_THREAD_RUNNER_WEBVIEW_H_
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/threading/thread.h"
+#include "base/threading/thread_checker.h"
+#include "components/viz/service/main/viz_compositor_thread_runner.h"
+
+namespace viz {
+class FrameSinkManagerImpl;
+}  // namespace viz
+
+namespace android_webview {
+
+// This class overrides VizCompositorThreadRunner largely so that
+// FrameSinkManagerImpl and other viz classes are connected to their mojo end
+// points using the same code path (through VizMainImpl) as other chromium
+// platforms. The benefit of this include:
+// * code path sharing
+// * keep illusion in content and below that webview does not assume
+//   in-process gpu
+// * no need to introduce more "if webview" conditions in shared code
+// However these viz classes actually do not talk to the gpu service
+// in VizMainImpl, which may cause confusion for developers. If this proves to
+// be common, then an alternative is assume viz runs in the browser process
+// and directly connect viz classes to mojo end points in the browser.
+class VizCompositorThreadRunnerWebView : public viz::VizCompositorThreadRunner {
+ public:
+  static VizCompositorThreadRunnerWebView* GetInstance();
+
+  viz::FrameSinkManagerImpl* GetFrameSinkManager();
+  void ScheduleOnVizAndBlock(base::OnceClosure task);
+
+  // viz::VizCompositorThreadRunner overrides.
+  base::SingleThreadTaskRunner* task_runner() override;
+  void CreateFrameSinkManager(
+      viz::mojom::FrameSinkManagerParamsPtr params) override;
+  void CreateFrameSinkManager(viz::mojom::FrameSinkManagerParamsPtr params,
+                              gpu::CommandBufferTaskExecutor* task_executor,
+                              viz::GpuServiceImpl* gpu_service) override;
+#if defined(USE_VIZ_DEVTOOLS)
+  void CreateVizDevTools(viz::mojom::VizDevToolsParamsPtr params) override;
+#endif
+  void CleanupForShutdown(base::OnceClosure cleanup_finished_callback) override;
+
+ private:
+  friend class base::NoDestructor<VizCompositorThreadRunnerWebView>;
+
+  VizCompositorThreadRunnerWebView();
+  ~VizCompositorThreadRunnerWebView() override;
+
+  void InitFrameSinkManagerOnViz();
+  void BindFrameSinkManagerOnViz(viz::mojom::FrameSinkManagerParamsPtr params);
+
+  base::Thread viz_thread_;
+  scoped_refptr<base::SingleThreadTaskRunner> viz_task_runner_;
+
+  // Only accessed on |viz_task_runner_|.
+  THREAD_CHECKER(viz_thread_checker_);
+  std::unique_ptr<viz::FrameSinkManagerImpl> frame_sink_manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(VizCompositorThreadRunnerWebView);
+};
+
+}  // namespace android_webview
+
+#endif  // ANDROID_WEBVIEW_BROWSER_GFX_VIZ_COMPOSITOR_THREAD_RUNNER_WEBVIEW_H_
diff --git a/android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.cc b/android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.cc
deleted file mode 100644
index 5202e93..0000000
--- a/android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.cc
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2018 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 "android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.h"
-
-#include "android_webview/browser/net/init_native_callback.h"
-#include "base/bind.h"
-#include "base/memory/ref_counted_delete_on_sequence.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "net/cookies/canonical_cookie.h"
-#include "net/cookies/cookie_store.h"
-#include "url/gurl.h"
-
-namespace android_webview {
-
-namespace {
-
-using CookieChangeCallbackList =
-    base::CallbackList<void(const net::CanonicalCookie& cookie,
-                            net::CookieChangeCause cause)>;
-
-class AwCookieChangeSubscription : public net::CookieChangeSubscription {
- public:
-  explicit AwCookieChangeSubscription(
-      std::unique_ptr<CookieChangeCallbackList::Subscription> subscription)
-      : subscription_(std::move(subscription)) {}
-
- private:
-  std::unique_ptr<CookieChangeCallbackList::Subscription> subscription_;
-
-  DISALLOW_COPY_AND_ASSIGN(AwCookieChangeSubscription);
-};
-
-// Wraps a subscription to cookie change notifications for the global
-// CookieStore for a consumer that lives on another thread. Handles passing
-// messages between threads, and destroys itself when the consumer unsubscribes.
-// Must be created on the consumer's thread. Each instance only supports a
-// single subscription.
-class SubscriptionWrapper {
- public:
-  SubscriptionWrapper() : weak_factory_(this) {}
-
-  enum Mode {
-    kByCookie,
-    kByUrl,
-  };
-
-  std::unique_ptr<net::CookieChangeSubscription> Subscribe(
-      Mode mode,
-      const GURL& url,
-      const std::string& name,
-      net::CookieChangeCallback callback) {
-    // This class is only intended to be used for a single subscription.
-    DCHECK(callback_list_.empty());
-
-    nested_subscription_ =
-        NestedSubscription::Create(mode, url, name, weak_factory_.GetWeakPtr());
-    return std::make_unique<AwCookieChangeSubscription>(
-        callback_list_.Add(std::move(callback)));
-  }
-
- private:
-  // The NestedSubscription is responsible for creating and managing the
-  // underlying subscription to the real CookieStore, and posting notifications
-  // back to |callback_list_|.
-  class NestedSubscription
-      : public base::RefCountedDeleteOnSequence<NestedSubscription> {
-   public:
-    static scoped_refptr<NestedSubscription> Create(
-        Mode mode,
-        const GURL& url,
-        const std::string& name,
-        base::WeakPtr<SubscriptionWrapper> subscription_wrapper) {
-      auto subscription = base::WrapRefCounted(
-          new NestedSubscription(std::move(subscription_wrapper)));
-      PostTaskToCookieStoreTaskRunner(base::BindOnce(
-          &NestedSubscription::Subscribe, subscription, mode, url, name));
-      return subscription;
-    }
-
-   private:
-    friend class base::RefCountedDeleteOnSequence<NestedSubscription>;
-    friend class base::DeleteHelper<NestedSubscription>;
-
-    explicit NestedSubscription(
-        base::WeakPtr<SubscriptionWrapper> subscription_wrapper)
-        : base::RefCountedDeleteOnSequence<NestedSubscription>(
-              GetCookieStoreTaskRunner()),
-          subscription_wrapper_(subscription_wrapper),
-          client_task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
-
-    ~NestedSubscription() {}
-
-    void Subscribe(Mode mode, const GURL& url, const std::string& name) {
-      switch (mode) {
-        case kByCookie:
-          subscription_ =
-              GetCookieStore()->GetChangeDispatcher().AddCallbackForCookie(
-                  url, name,
-                  base::BindRepeating(&NestedSubscription::OnChanged, this));
-          break;
-        case kByUrl:
-          subscription_ =
-              GetCookieStore()->GetChangeDispatcher().AddCallbackForUrl(
-                  url,
-                  base::BindRepeating(&NestedSubscription::OnChanged, this));
-      }
-    }
-
-    void OnChanged(const net::CanonicalCookie& cookie,
-                   net::CookieChangeCause cause) {
-      client_task_runner_->PostTask(
-          FROM_HERE, base::BindOnce(&SubscriptionWrapper::OnChanged,
-                                    subscription_wrapper_, cookie, cause));
-    }
-
-    base::WeakPtr<SubscriptionWrapper> subscription_wrapper_;
-    scoped_refptr<base::TaskRunner> client_task_runner_;
-
-    std::unique_ptr<net::CookieChangeSubscription> subscription_;
-
-    DISALLOW_COPY_AND_ASSIGN(NestedSubscription);
-  };
-
-  void OnChanged(const net::CanonicalCookie& cookie,
-                 net::CookieChangeCause cause) {
-    callback_list_.Notify(cookie, cause);
-  }
-
-  // The "list" only had one entry, so can just clean up now.
-  void OnUnsubscribe() { delete this; }
-
-  scoped_refptr<NestedSubscription> nested_subscription_;
-  CookieChangeCallbackList callback_list_;
-  base::WeakPtrFactory<SubscriptionWrapper> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(SubscriptionWrapper);
-};
-
-}  // anonymous namespace
-
-AwCookieChangeDispatcherWrapper::AwCookieChangeDispatcherWrapper()
-#if DCHECK_IS_ON()
-    : client_task_runner_(base::ThreadTaskRunnerHandle::Get())
-#endif  // DCHECK_IS_ON()
-{
-}
-
-AwCookieChangeDispatcherWrapper::~AwCookieChangeDispatcherWrapper() = default;
-
-std::unique_ptr<net::CookieChangeSubscription>
-AwCookieChangeDispatcherWrapper::AddCallbackForCookie(
-    const GURL& url,
-    const std::string& name,
-    net::CookieChangeCallback callback) {
-#if DCHECK_IS_ON()
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-#endif  // DCHECK_IS_ON()
-
-  // The SubscriptionWrapper is owned by the subscription itself, and has no
-  // connection to the AwCookieStoreWrapper after creation. Other CookieStore
-  // implementations DCHECK if a subscription outlasts the cookie store,
-  // unfortunately, this design makes DCHECKing if there's an outstanding
-  // subscription when the AwCookieStoreWrapper is destroyed a bit ugly.
-  // TODO(mmenke):  Still worth adding a DCHECK?
-  SubscriptionWrapper* subscription = new SubscriptionWrapper();
-  return subscription->Subscribe(SubscriptionWrapper::kByCookie, url, name,
-                                 std::move(callback));
-}
-
-std::unique_ptr<net::CookieChangeSubscription>
-AwCookieChangeDispatcherWrapper::AddCallbackForUrl(
-    const GURL& url,
-    net::CookieChangeCallback callback) {
-#if DCHECK_IS_ON()
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-#endif  // DCHECK_IS_ON()
-
-  SubscriptionWrapper* subscription = new SubscriptionWrapper();
-  return subscription->Subscribe(SubscriptionWrapper::kByUrl, url,
-                                 /* name=, ignored */ "", std::move(callback));
-}
-
-std::unique_ptr<net::CookieChangeSubscription>
-AwCookieChangeDispatcherWrapper::AddCallbackForAllChanges(
-    net::CookieChangeCallback callback) {
-  // Implement when needed by Android Webview consumers.
-  NOTIMPLEMENTED();
-  return nullptr;
-}
-
-}  // namespace android_webview
diff --git a/android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.h b/android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.h
deleted file mode 100644
index 652d01e..0000000
--- a/android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2018 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 ANDROID_WEBVIEW_BROWSER_NET_AW_COOKIE_CHANGE_DISPATCHER_WRAPPER_H_
-#define ANDROID_WEBVIEW_BROWSER_NET_AW_COOKIE_CHANGE_DISPATCHER_WRAPPER_H_
-
-#include <memory>
-#include <string>
-
-#include "base/callback.h"
-#include "base/callback_list.h"
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/memory/scoped_refptr.h"
-#include "base/single_thread_task_runner.h"
-#include "net/cookies/cookie_change_dispatcher.h"
-
-class GURL;
-
-namespace android_webview {
-
-// CookieChangeDispatcher implementation used by AwCookieStoreWrapper.
-//
-// AwCookieStoreWrapper wraps a CookieStore that lives on a different thread and
-// proxies calls and callbacks between the originating thread and the
-// CookieStore's thread via task posting.
-//
-// By extension, AwCookieChangeDispatcherWrapper proxies cookie change
-// notifications between the CookieStore's thread and the thread that subscribes
-// to the notifications.
-class AwCookieChangeDispatcherWrapper : public net::CookieChangeDispatcher {
- public:
-  AwCookieChangeDispatcherWrapper();
-  ~AwCookieChangeDispatcherWrapper() override;
-
-  // net::CookieChangeDispatcher
-  std::unique_ptr<net::CookieChangeSubscription> AddCallbackForCookie(
-      const GURL& url,
-      const std::string& name,
-      net::CookieChangeCallback callback) override WARN_UNUSED_RESULT;
-  std::unique_ptr<net::CookieChangeSubscription> AddCallbackForUrl(
-      const GURL& url,
-      net::CookieChangeCallback callback) override WARN_UNUSED_RESULT;
-  std::unique_ptr<net::CookieChangeSubscription> AddCallbackForAllChanges(
-      net::CookieChangeCallback callback) override WARN_UNUSED_RESULT;
-
- private:
-#if DCHECK_IS_ON()
-  scoped_refptr<base::TaskRunner> client_task_runner_;
-#endif  // DCHECK_IS_ON()
-
-  DISALLOW_COPY_AND_ASSIGN(AwCookieChangeDispatcherWrapper);
-};
-
-}  // namespace android_webview
-
-#endif  // ANDROID_WEBVIEW_BROWSER_NET_AW_COOKIE_CHANGE_DISPATCHER_WRAPPER_H_
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper.cc b/android_webview/browser/net/aw_cookie_store_wrapper.cc
deleted file mode 100644
index 93d4da1..0000000
--- a/android_webview/browser/net/aw_cookie_store_wrapper.cc
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright 2016 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 "android_webview/browser/net/aw_cookie_store_wrapper.h"
-
-#include <memory>
-#include <string>
-
-#include "android_webview/browser/net/init_native_callback.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "net/cookies/canonical_cookie.h"
-#include "url/gurl.h"
-
-namespace android_webview {
-
-namespace {
-
-void SetCookieWithOptionsAsyncOnCookieThread(
-    const GURL& url,
-    const std::string& cookie_line,
-    const net::CookieOptions& options,
-    net::CookieStore::SetCookiesCallback callback) {
-  GetCookieStore()->SetCookieWithOptionsAsync(url, cookie_line, options,
-                                              std::move(callback));
-}
-
-void SetCanonicalCookieAsyncOnCookieThread(
-    std::unique_ptr<net::CanonicalCookie> cookie,
-    std::string source_scheme,
-    const net::CookieOptions& options,
-    net::CookieStore::SetCookiesCallback callback) {
-  GetCookieStore()->SetCanonicalCookieAsync(std::move(cookie),
-                                            std::move(source_scheme), options,
-                                            std::move(callback));
-}
-
-void GetCookieListWithOptionsAsyncOnCookieThread(
-    const GURL& url,
-    const net::CookieOptions& options,
-    net::CookieStore::GetCookieListCallback callback) {
-  GetCookieStore()->GetCookieListWithOptionsAsync(url, options,
-                                                  std::move(callback));
-}
-
-void GetAllCookiesAsyncOnCookieThread(
-    net::CookieStore::GetCookieListCallback callback) {
-  GetCookieStore()->GetAllCookiesAsync(std::move(callback));
-}
-
-void DeleteCanonicalCookieAsyncOnCookieThread(
-    const net::CanonicalCookie& cookie,
-    net::CookieStore::DeleteCallback callback) {
-  GetCookieStore()->DeleteCanonicalCookieAsync(cookie, std::move(callback));
-}
-
-void DeleteAllCreatedWithinRangeAsyncOnCookieThread(
-    const net::CookieDeletionInfo::TimeRange& creation_range,
-    net::CookieStore::DeleteCallback callback) {
-  GetCookieStore()->DeleteAllCreatedInTimeRangeAsync(creation_range,
-                                                     std::move(callback));
-}
-
-void DeleteAllMatchingInfoAsyncOnCookieThread(
-    net::CookieDeletionInfo delete_info,
-    net::CookieStore::DeleteCallback callback) {
-  GetCookieStore()->DeleteAllMatchingInfoAsync(std::move(delete_info),
-                                               std::move(callback));
-}
-
-void DeleteSessionCookiesAsyncOnCookieThread(
-    net::CookieStore::DeleteCallback callback) {
-  GetCookieStore()->DeleteSessionCookiesAsync(std::move(callback));
-}
-
-void FlushStoreOnCookieThread(base::OnceClosure callback) {
-  GetCookieStore()->FlushStore(std::move(callback));
-}
-
-void SetForceKeepSessionStateOnCookieThread() {
-  GetCookieStore()->SetForceKeepSessionState();
-}
-
-void SetCookieableSchemesOnCookieThread(
-    const std::vector<std::string>& schemes,
-    net::CookieStore::SetCookieableSchemesCallback callback) {
-  GetCookieStore()->SetCookieableSchemes(schemes, std::move(callback));
-}
-
-}  // namespace
-
-AwCookieStoreWrapper::AwCookieStoreWrapper()
-    : client_task_runner_(base::ThreadTaskRunnerHandle::Get()),
-      weak_factory_(this) {}
-
-AwCookieStoreWrapper::~AwCookieStoreWrapper() {}
-
-void AwCookieStoreWrapper::SetCookieWithOptionsAsync(
-    const GURL& url,
-    const std::string& cookie_line,
-    const net::CookieOptions& options,
-    net::CookieStore::SetCookiesCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(base::BindOnce(
-      &SetCookieWithOptionsAsyncOnCookieThread, url, cookie_line, options,
-      CreateWrappedCallback<net::CanonicalCookie::CookieInclusionStatus>(
-          std::move(callback))));
-}
-
-void AwCookieStoreWrapper::SetCanonicalCookieAsync(
-    std::unique_ptr<net::CanonicalCookie> cookie,
-    std::string source_scheme,
-    const net::CookieOptions& options,
-    SetCookiesCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(base::BindOnce(
-      &SetCanonicalCookieAsyncOnCookieThread, std::move(cookie),
-      std::move(source_scheme), options,
-      CreateWrappedCallback<net::CanonicalCookie::CookieInclusionStatus>(
-          std::move(callback))));
-}
-
-void AwCookieStoreWrapper::GetCookieListWithOptionsAsync(
-    const GURL& url,
-    const net::CookieOptions& options,
-    GetCookieListCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(
-      base::BindOnce(&GetCookieListWithOptionsAsyncOnCookieThread, url, options,
-                     CreateWrappedGetCookieListCallback(std::move(callback))));
-}
-
-void AwCookieStoreWrapper::GetAllCookiesAsync(GetCookieListCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(
-      base::BindOnce(&GetAllCookiesAsyncOnCookieThread,
-                     CreateWrappedGetCookieListCallback(std::move(callback))));
-}
-
-void AwCookieStoreWrapper::DeleteCanonicalCookieAsync(
-    const net::CanonicalCookie& cookie,
-    DeleteCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(
-      base::BindOnce(&DeleteCanonicalCookieAsyncOnCookieThread, cookie,
-                     CreateWrappedCallback<uint32_t>(std::move(callback))));
-}
-
-void AwCookieStoreWrapper::DeleteAllCreatedInTimeRangeAsync(
-    const net::CookieDeletionInfo::TimeRange& creation_range,
-    DeleteCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(base::BindOnce(
-      &DeleteAllCreatedWithinRangeAsyncOnCookieThread, creation_range,
-      CreateWrappedCallback<uint32_t>(std::move(callback))));
-}
-
-void AwCookieStoreWrapper::DeleteAllMatchingInfoAsync(
-    net::CookieDeletionInfo delete_info,
-    DeleteCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(base::BindOnce(
-      &DeleteAllMatchingInfoAsyncOnCookieThread, std::move(delete_info),
-      CreateWrappedCallback<uint32_t>(std::move(callback))));
-}
-
-void AwCookieStoreWrapper::DeleteSessionCookiesAsync(DeleteCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(
-      base::BindOnce(&DeleteSessionCookiesAsyncOnCookieThread,
-                     CreateWrappedCallback<uint32_t>(std::move(callback))));
-}
-
-void AwCookieStoreWrapper::FlushStore(base::OnceClosure callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(
-      base::BindOnce(&FlushStoreOnCookieThread,
-                     CreateWrappedClosureCallback(std::move(callback))));
-}
-
-void AwCookieStoreWrapper::SetForceKeepSessionState() {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(
-      base::BindOnce(&SetForceKeepSessionStateOnCookieThread));
-}
-
-net::CookieChangeDispatcher& AwCookieStoreWrapper::GetChangeDispatcher() {
-  return change_dispatcher_;
-}
-
-void AwCookieStoreWrapper::SetCookieableSchemes(
-    const std::vector<std::string>& schemes,
-    SetCookieableSchemesCallback callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  PostTaskToCookieStoreTaskRunner(
-      base::BindOnce(&SetCookieableSchemesOnCookieThread, schemes,
-                     CreateWrappedCallback<bool>(std::move(callback))));
-}
-
-base::OnceClosure AwCookieStoreWrapper::CreateWrappedClosureCallback(
-    base::OnceClosure callback) {
-  if (callback.is_null())
-    return callback;
-  return base::BindOnce(
-      base::IgnoreResult(&base::TaskRunner::PostTask), client_task_runner_,
-      FROM_HERE,
-      base::BindOnce(&AwCookieStoreWrapper::RunClosureCallback,
-                     weak_factory_.GetWeakPtr(), std::move(callback)));
-}
-
-void AwCookieStoreWrapper::RunClosureCallback(base::OnceClosure callback) {
-  DCHECK(client_task_runner_->RunsTasksInCurrentSequence());
-  std::move(callback).Run();
-}
-
-}  // namespace android_webview
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper.h b/android_webview/browser/net/aw_cookie_store_wrapper.h
deleted file mode 100644
index d0b77e10..0000000
--- a/android_webview/browser/net/aw_cookie_store_wrapper.h
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2016 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 ANDROID_WEBVIEW_BROWSER_NET_AW_COOKIE_STORE_WRAPPER_H_
-#define ANDROID_WEBVIEW_BROWSER_NET_AW_COOKIE_STORE_WRAPPER_H_
-
-#include <string>
-
-#include "android_webview/browser/net/aw_cookie_change_dispatcher_wrapper.h"
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "base/single_thread_task_runner.h"
-#include "base/task_runner.h"
-#include "base/time/time.h"
-#include "net/cookies/canonical_cookie.h"
-#include "net/cookies/cookie_change_dispatcher.h"
-#include "net/cookies/cookie_constants.h"
-#include "net/cookies/cookie_store.h"
-
-namespace android_webview {
-
-// A cross-threaded cookie store implementation that wraps the CookieManager's
-// CookieStore. It posts tasks to the CookieStore's thread, and invokes
-// callbacks on the originating thread. Deleting it cancels pending callbacks.
-// This is needed to allow Webview to run the CookieStore on its own thread, to
-// enable synchronous calls into the store on the IO Thread from Java.
-//
-// AwCookieStoreWrapper will only grab the CookieStore pointer from the
-// CookieManager when it's needed, allowing for lazy creation of the
-// CookieStore.
-//
-// AwCookieStoreWrapper may only be called from the thread on which it's
-// created.
-//
-// The CookieManager must outlive the AwCookieStoreWrapper.
-class AwCookieStoreWrapper : public net::CookieStore {
- public:
-  AwCookieStoreWrapper();
-  ~AwCookieStoreWrapper() override;
-
-  // CookieStore implementation:
-  void SetCookieWithOptionsAsync(const GURL& url,
-                                 const std::string& cookie_line,
-                                 const net::CookieOptions& options,
-                                 SetCookiesCallback callback) override;
-  void SetCanonicalCookieAsync(std::unique_ptr<net::CanonicalCookie> cookie,
-                               std::string source_scheme,
-                               const net::CookieOptions& options,
-                               SetCookiesCallback callback) override;
-  void GetCookieListWithOptionsAsync(const GURL& url,
-                                     const net::CookieOptions& options,
-                                     GetCookieListCallback callback) override;
-  void GetAllCookiesAsync(GetCookieListCallback callback) override;
-  void DeleteCanonicalCookieAsync(const net::CanonicalCookie& cookie,
-                                  DeleteCallback callback) override;
-  void DeleteAllCreatedInTimeRangeAsync(
-      const net::CookieDeletionInfo::TimeRange& creation_range,
-      DeleteCallback callback) override;
-  void DeleteAllMatchingInfoAsync(net::CookieDeletionInfo delete_info,
-                                  DeleteCallback callback) override;
-  void DeleteSessionCookiesAsync(DeleteCallback callback) override;
-  void FlushStore(base::OnceClosure callback) override;
-  void SetForceKeepSessionState() override;
-  net::CookieChangeDispatcher& GetChangeDispatcher() override;
-  void SetCookieableSchemes(const std::vector<std::string>& schemes,
-                            SetCookieableSchemesCallback callback) override;
-
- private:
-  // Used by CreateWrappedCallback below. Takes an argument of Type and posts
-  // a task to |task_runner| to invoke |callback| with that argument. If
-  // |weak_cookie_store| is deleted before the task is run, the task will not
-  // be run.
-  template <class Type>
-  static void RunCallbackOnClientThread(
-      base::TaskRunner* task_runner,
-      base::WeakPtr<AwCookieStoreWrapper> weak_cookie_store,
-      base::OnceCallback<void(Type)> callback,
-      Type argument) {
-    task_runner->PostTask(
-        FROM_HERE,
-        base::BindOnce(&AwCookieStoreWrapper::RunClosureCallback,
-                       weak_cookie_store,
-                       base::BindOnce(std::move(callback), argument)));
-  }
-
-  // Returns a base::Callback that takes an argument of Type and posts a task to
-  // the |client_task_runner_| to invoke |callback| with that argument.
-  template <class Type>
-  base::OnceCallback<void(Type)> CreateWrappedCallback(
-      base::OnceCallback<void(Type)> callback) {
-    if (callback.is_null())
-      return std::move(callback);
-    return base::BindOnce(
-        &AwCookieStoreWrapper::RunCallbackOnClientThread<Type>,
-        base::RetainedRef(client_task_runner_), weak_factory_.GetWeakPtr(),
-        std::move(callback));
-  }
-
-  // These are the same as above, but specifically for GetCookieListCallback,
-  // which has two arguments
-  static void RunGetCookieListCallbackOnClientThread(
-      base::TaskRunner* task_runner,
-      base::WeakPtr<AwCookieStoreWrapper> weak_cookie_store,
-      net::CookieStore::GetCookieListCallback callback,
-      const net::CookieList& cookies,
-      const net::CookieStatusList& excluded_cookies) {
-    task_runner->PostTask(
-        FROM_HERE,
-        base::BindOnce(
-            &AwCookieStoreWrapper::RunClosureCallback, weak_cookie_store,
-            base::BindOnce(std::move(callback), cookies, excluded_cookies)));
-  }
-
-  net::CookieStore::GetCookieListCallback CreateWrappedGetCookieListCallback(
-      net::CookieStore::GetCookieListCallback callback) {
-    if (callback.is_null())
-      return callback;
-    return base::BindOnce(
-        &AwCookieStoreWrapper::RunGetCookieListCallbackOnClientThread,
-        base::RetainedRef(client_task_runner_), weak_factory_.GetWeakPtr(),
-        std::move(callback));
-  }
-
-  // Returns a base::OnceClosure that posts a task to the |client_task_runner_|
-  // to invoke |callback|.
-  base::OnceClosure CreateWrappedClosureCallback(base::OnceClosure callback);
-
-  // Runs |callback|. Used to prevent callbacks from being invoked after the
-  // AwCookieStoreWrapper has been destroyed.
-  void RunClosureCallback(base::OnceClosure callback);
-
-  scoped_refptr<base::SingleThreadTaskRunner> client_task_runner_;
-
-  AwCookieChangeDispatcherWrapper change_dispatcher_;
-
-  base::WeakPtrFactory<AwCookieStoreWrapper> weak_factory_;
-};
-
-}  // namespace android_webview
-
-#endif  // ANDROID_WEBVIEW_BROWSER_NET_AW_COOKIE_STORE_WRAPPER_H_
diff --git a/android_webview/browser/net/aw_cookie_store_wrapper_unittest.cc b/android_webview/browser/net/aw_cookie_store_wrapper_unittest.cc
deleted file mode 100644
index fb58ad0..0000000
--- a/android_webview/browser/net/aw_cookie_store_wrapper_unittest.cc
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2016 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 "android_webview/browser/net/aw_cookie_store_wrapper.h"
-
-#include <stdint.h>
-
-#include <memory>
-
-#include "android_webview/browser/net/init_native_callback.h"
-#include "base/bind.h"
-#include "base/run_loop.h"
-#include "net/cookies/cookie_store.h"
-#include "net/cookies/cookie_store_change_unittest.h"
-#include "net/cookies/cookie_store_test_callbacks.h"
-#include "net/cookies/cookie_store_unittest.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace android_webview {
-
-struct AwCookieStoreWrapperTestTraits {
-  static std::unique_ptr<net::CookieStore> Create() {
-    auto cookie_store = std::make_unique<AwCookieStoreWrapper>();
-
-    // Android Webview can run multiple tests without restarting the binary,
-    // so have to delete any cookies the global store may have from an earlier
-    // test.
-    net::ResultSavingCookieCallback<uint32_t> callback;
-    cookie_store->DeleteAllAsync(
-        base::BindOnce(&net::ResultSavingCookieCallback<uint32_t>::Run,
-                       base::Unretained(&callback)));
-    callback.WaitUntilDone();
-
-    return cookie_store;
-  }
-
-  static void DeliverChangeNotifications() {
-    base::RunLoop run_loop;
-    GetCookieStoreTaskRunner()->PostTaskAndReply(
-        FROM_HERE, base::BindOnce([] { base::RunLoop().RunUntilIdle(); }),
-        base::BindOnce([](base::RunLoop* run_loop) { run_loop->Quit(); },
-                       base::Unretained(&run_loop)));
-    run_loop.Run();
-
-    base::RunLoop().RunUntilIdle();
-  }
-
-  static const bool supports_http_only = true;
-  static const bool supports_non_dotted_domains = true;
-  static const bool preserves_trailing_dots = true;
-  static const bool filters_schemes = true;
-  static const bool has_path_prefix_bug = false;
-  static const bool forbids_setting_empty_name = false;
-  static const bool supports_global_cookie_tracking = false;
-  static const bool supports_url_cookie_tracking = false;
-  static const bool supports_named_cookie_tracking = true;
-  static const bool supports_multiple_tracking_callbacks = false;
-  static const bool has_exact_change_cause = true;
-  static const bool has_exact_change_ordering = true;
-  static const int creation_time_granularity_in_ms = 0;
-};
-
-}  // namespace android_webview
-
-// Run the standard cookie tests with AwCookieStoreWrapper. Macro must be in
-// net namespace.
-namespace net {
-INSTANTIATE_TYPED_TEST_SUITE_P(AwCookieStoreWrapper,
-                               CookieStoreTest,
-                               android_webview::AwCookieStoreWrapperTestTraits);
-INSTANTIATE_TYPED_TEST_SUITE_P(AwCookieStoreWrapper,
-                               CookieStoreChangeGlobalTest,
-                               android_webview::AwCookieStoreWrapperTestTraits);
-INSTANTIATE_TYPED_TEST_SUITE_P(AwCookieStoreWrapper,
-                               CookieStoreChangeUrlTest,
-                               android_webview::AwCookieStoreWrapperTestTraits);
-INSTANTIATE_TYPED_TEST_SUITE_P(AwCookieStoreWrapper,
-                               CookieStoreChangeNamedTest,
-                               android_webview::AwCookieStoreWrapperTestTraits);
-}  // namespace net
diff --git a/android_webview/browser/net/init_native_callback.cc b/android_webview/browser/net/init_native_callback.cc
deleted file mode 100644
index f62a311..0000000
--- a/android_webview/browser/net/init_native_callback.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2012 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 "android_webview/browser/net/init_native_callback.h"
-
-#include "base/callback.h"
-#include "base/single_thread_task_runner.h"
-
-namespace android_webview {
-
-void PostTaskToCookieStoreTaskRunner(base::OnceClosure task) {
-  GetCookieStoreTaskRunner()->PostTask(FROM_HERE, std::move(task));
-}
-
-}  // namespace android_webview
diff --git a/android_webview/browser/net/init_native_callback.h b/android_webview/browser/net/init_native_callback.h
deleted file mode 100644
index e6c8ab11..0000000
--- a/android_webview/browser/net/init_native_callback.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2012 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 ANDROID_WEBVIEW_BROWSER_NET_INIT_NATIVE_CALLBACK_H_
-#define ANDROID_WEBVIEW_BROWSER_NET_INIT_NATIVE_CALLBACK_H_
-
-#include <memory>
-
-#include "base/memory/ref_counted.h"
-
-namespace base {
-class SingleThreadTaskRunner;
-}
-
-namespace net {
-class CookieStore;
-}  // namespace net
-
-namespace android_webview {
-
-// Gets the TaskRunner that the CookieStore must be called on.
-scoped_refptr<base::SingleThreadTaskRunner> GetCookieStoreTaskRunner();
-
-// Posts |task| to the thread that the global CookieStore lives on.
-void PostTaskToCookieStoreTaskRunner(base::OnceClosure task);
-
-// Gets a pointer to the CookieStore managed by the CookieManager.
-// The CookieStore is never deleted. May only be called on the
-// CookieStore's TaskRunner.
-net::CookieStore* GetCookieStore();
-
-}  // namespace android_webview
-
-#endif  // ANDROID_WEBVIEW_BROWSER_NET_INIT_NATIVE_CALLBACK_H_
diff --git a/android_webview/gpu/aw_content_gpu_client.cc b/android_webview/gpu/aw_content_gpu_client.cc
index 922f62f..75cc6a98 100644
--- a/android_webview/gpu/aw_content_gpu_client.cc
+++ b/android_webview/gpu/aw_content_gpu_client.cc
@@ -8,9 +8,13 @@
 
 AwContentGpuClient::AwContentGpuClient(
     const GetSyncPointManagerCallback& sync_point_manager_callback,
-    const GetSharedImageManagerCallback& shared_image_manager_callback)
+    const GetSharedImageManagerCallback& shared_image_manager_callback,
+    const GetVizCompositorThreadRunnerCallback&
+        viz_compositor_thread_runner_callback)
     : sync_point_manager_callback_(sync_point_manager_callback),
-      shared_image_manager_callback_(shared_image_manager_callback) {}
+      shared_image_manager_callback_(shared_image_manager_callback),
+      viz_compositor_thread_runner_callback_(
+          viz_compositor_thread_runner_callback) {}
 
 AwContentGpuClient::~AwContentGpuClient() {}
 
@@ -22,4 +26,9 @@
   return shared_image_manager_callback_.Run();
 }
 
+viz::VizCompositorThreadRunner*
+AwContentGpuClient::GetVizCompositorThreadRunner() {
+  return viz_compositor_thread_runner_callback_.Run();
+}
+
 }  // namespace android_webview
diff --git a/android_webview/gpu/aw_content_gpu_client.h b/android_webview/gpu/aw_content_gpu_client.h
index 4819c60..381fed2 100644
--- a/android_webview/gpu/aw_content_gpu_client.h
+++ b/android_webview/gpu/aw_content_gpu_client.h
@@ -17,19 +17,25 @@
       base::RepeatingCallback<gpu::SyncPointManager*()>;
   using GetSharedImageManagerCallback =
       base::RepeatingCallback<gpu::SharedImageManager*()>;
+  using GetVizCompositorThreadRunnerCallback =
+      base::RepeatingCallback<viz::VizCompositorThreadRunner*()>;
 
   AwContentGpuClient(
       const GetSyncPointManagerCallback& sync_point_manager_callback,
-      const GetSharedImageManagerCallback& shared_image_manager_callback);
+      const GetSharedImageManagerCallback& shared_image_manager_callback,
+      const GetVizCompositorThreadRunnerCallback&
+          viz_compositor_thread_runner_callback);
   ~AwContentGpuClient() override;
 
   // content::ContentGpuClient implementation.
   gpu::SyncPointManager* GetSyncPointManager() override;
   gpu::SharedImageManager* GetSharedImageManager() override;
+  viz::VizCompositorThreadRunner* GetVizCompositorThreadRunner() override;
 
  private:
   GetSyncPointManagerCallback sync_point_manager_callback_;
   GetSharedImageManagerCallback shared_image_manager_callback_;
+  GetVizCompositorThreadRunnerCallback viz_compositor_thread_runner_callback_;
   DISALLOW_COPY_AND_ASSIGN(AwContentGpuClient);
 };
 
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwImeTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwImeTest.java
index 9176c2e..f9d6139 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwImeTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwImeTest.java
@@ -254,8 +254,10 @@
     }
 
     // https://crbug.com/920061
+    // Flaky! - https://crbug.com/990208
     @Test
     @SmallTest
+    @DisabledTest
     public void testFocusAndViewSizeChangeCausesScroll() throws Throwable {
         loadBottomInputHtml();
         Rect currentRect = new Rect();
diff --git a/android_webview/lib/aw_main_delegate.cc b/android_webview/lib/aw_main_delegate.cc
index ec08ecbd..f597a79 100644
--- a/android_webview/lib/aw_main_delegate.cc
+++ b/android_webview/lib/aw_main_delegate.cc
@@ -7,9 +7,11 @@
 #include <memory>
 
 #include "android_webview/browser/aw_content_browser_client.h"
+#include "android_webview/browser/aw_feature_list.h"
 #include "android_webview/browser/aw_media_url_interceptor.h"
 #include "android_webview/browser/gfx/browser_view_renderer.h"
 #include "android_webview/browser/gfx/gpu_service_web_view.h"
+#include "android_webview/browser/gfx/viz_compositor_thread_runner_webview.h"
 #include "android_webview/browser/scoped_add_feature_flags.h"
 #include "android_webview/browser/tracing/aw_trace_event_args_whitelist.h"
 #include "android_webview/common/aw_descriptors.h"
@@ -319,6 +321,7 @@
   DCHECK(GpuServiceWebView::GetInstance());
   return GpuServiceWebView::GetInstance()->sync_point_manager();
 }
+
 gpu::SharedImageManager* GetSharedImageManager() {
   DCHECK(GpuServiceWebView::GetInstance());
   const bool enable_shared_image =
@@ -328,12 +331,20 @@
              ? GpuServiceWebView::GetInstance()->shared_image_manager()
              : nullptr;
 }
+
+viz::VizCompositorThreadRunner* GetVizCompositorThreadRunner() {
+  return base::FeatureList::IsEnabled(features::kVizForWebView)
+             ? VizCompositorThreadRunnerWebView::GetInstance()
+             : nullptr;
+}
+
 }  // namespace
 
 content::ContentGpuClient* AwMainDelegate::CreateContentGpuClient() {
   content_gpu_client_ = std::make_unique<AwContentGpuClient>(
       base::BindRepeating(&GetSyncPointManager),
-      base::BindRepeating(&GetSharedImageManager));
+      base::BindRepeating(&GetSharedImageManager),
+      base::BindRepeating(&GetVizCompositorThreadRunner));
   return content_gpu_client_.get();
 }
 
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn
index d9f16a22..b35379b 100644
--- a/android_webview/test/BUILD.gn
+++ b/android_webview/test/BUILD.gn
@@ -364,7 +364,6 @@
     "../browser/aw_browser_context_unittest.cc",
     "../browser/aw_content_browser_client_unittest.cc",
     "../browser/aw_contents_client_bridge_unittest.cc",
-    "../browser/aw_cookie_access_policy_unittest.cc",
     "../browser/aw_form_database_service_unittest.cc",
     "../browser/aw_media_url_interceptor_unittest.cc",
     "../browser/aw_metrics_service_client_unittest.cc",
@@ -375,7 +374,6 @@
     "../browser/gfx/test/rendering_test.cc",
     "../browser/gfx/test/rendering_test.h",
     "../browser/input_stream_unittest.cc",
-    "../browser/net/aw_cookie_store_wrapper_unittest.cc",
     "../browser/network_service/android_stream_reader_url_loader_unittest.cc",
     "../browser/network_service/input_stream_reader_unittest.cc",
     "../browser/permission/media_access_permission_request_unittest.cc",
diff --git a/ash/DEPS b/ash/DEPS
index 147544fe..af5500c 100644
--- a/ash/DEPS
+++ b/ash/DEPS
@@ -55,6 +55,7 @@
   "-chromeos",
   "+chromeos/audio",
   "+chromeos/components/multidevice/logging/logging.h",
+  "+chromeos/components/proximity_auth/public/mojom",
   "+chromeos/constants",
   # TODO(https://crbug.com/940810): Eliminate this.
   "+chromeos/dbus/initialize_dbus_client.h",
@@ -89,9 +90,6 @@
   "ash_service\.*": [
     "+chromeos/cryptohome",
   ],
-  "login_types\.*": [
-    "+chromeos/components/proximity_auth/public/mojom/auth_type.mojom.h",
-  ],
   "policy_recommendation_restorer_unittest.cc": [
     "+components/sync_preferences/testing_pref_service_syncable.h"
   ],
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc
index 2725eb5..1fdc88ff 100644
--- a/ash/accelerators/accelerator_controller_impl.cc
+++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -82,7 +82,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/system/sys_info.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/user_manager/user_type.h"
 #include "ui/base/accelerators/accelerator.h"
@@ -800,7 +800,7 @@
 }
 
 bool CanHandleStartAmbientMode() {
-  return chromeos::switches::IsAmbientModeEnabled();
+  return chromeos::features::IsAmbientModeEnabled();
 }
 
 void HandleToggleAmbientMode(const ui::Accelerator& accelerator) {
@@ -808,7 +808,7 @@
 }
 
 bool CanHandleStartVoiceInteraction() {
-  return chromeos::switches::IsAssistantEnabled();
+  return chromeos::features::IsAssistantEnabled();
 }
 
 void HandleToggleVoiceInteraction(const ui::Accelerator& accelerator) {
diff --git a/ash/accessibility/accessibility_panel_layout_manager.cc b/ash/accessibility/accessibility_panel_layout_manager.cc
index 0700a9d..03d2462 100644
--- a/ash/accessibility/accessibility_panel_layout_manager.cc
+++ b/ash/accessibility/accessibility_panel_layout_manager.cc
@@ -112,6 +112,13 @@
   } else if (panel_state_ == AccessibilityPanelState::FULL_WIDTH) {
     bounds.set_x(0);
     bounds.set_width(root_window->bounds().width());
+
+    // TODO(isandrk, crbug.com/959786): Temporary fix that prevents ChromeVox
+    // panel from showing up in locked fullscreen mode (the panel was enabling
+    // an escape from locked mode crbug.com/957950).  Remove once a more proper
+    // fix exists.
+    if (Shell::Get()->screen_pinning_controller()->IsPinned())
+      bounds.set_height(0);
   }
 
   // If a fullscreen browser window is open, give the panel a height of 0
diff --git a/ash/ambient/ambient_controller.cc b/ash/ambient/ambient_controller.cc
index 40bb74e..c4053da 100644
--- a/ash/ambient/ambient_controller.cc
+++ b/ash/ambient/ambient_controller.cc
@@ -9,7 +9,7 @@
 #include "ash/ambient/util/ambient_util.h"
 #include "ash/login/ui/lock_screen.h"
 #include "ash/public/cpp/ambient/photo_controller.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "ui/views/widget/widget.h"
 
 namespace ash {
@@ -17,7 +17,7 @@
 namespace {
 
 bool CanStartAmbientMode() {
-  return chromeos::switches::IsAmbientModeEnabled() && PhotoController::Get() &&
+  return chromeos::features::IsAmbientModeEnabled() && PhotoController::Get() &&
          !ambient::util::IsShowing(LockScreen::ScreenType::kLogin);
 }
 
diff --git a/ash/ambient/ui/ambient_container_view_unittest.cc b/ash/ambient/ui/ambient_container_view_unittest.cc
index ffdebc924..07b16c8 100644
--- a/ash/ambient/ui/ambient_container_view_unittest.cc
+++ b/ash/ambient/ui/ambient_container_view_unittest.cc
@@ -9,7 +9,7 @@
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
 #include "base/test/scoped_feature_list.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "ui/aura/window.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
@@ -40,7 +40,7 @@
 
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        chromeos::switches::kAmbientModeFeature);
+        chromeos::features::kAmbientModeFeature);
     photo_controller_ = std::make_unique<PhotoControllerTest>();
     AshTestBase::SetUp();
   }
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 4edaaf58..0c705ae 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -47,7 +47,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
@@ -1174,7 +1174,7 @@
 }
 
 bool AppListControllerImpl::IsAssistantAllowedAndEnabled() const {
-  if (!chromeos::switches::IsAssistantEnabled())
+  if (!chromeos::features::IsAssistantEnabled())
     return false;
 
   if (!Shell::Get()->assistant_controller()->IsAssistantReady())
diff --git a/ash/app_list/views/app_list_main_view.cc b/ash/app_list/views/app_list_main_view.cc
index 26bfac8..b8ebf27 100644
--- a/ash/app_list/views/app_list_main_view.cc
+++ b/ash/app_list/views/app_list_main_view.cc
@@ -29,7 +29,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
 #include "base/strings/string_util.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "ui/aura/window.h"
 #include "ui/chromeos/search_box/search_box_view_base.h"
 #include "ui/gfx/geometry/insets.h"
@@ -217,7 +217,7 @@
 }
 
 void AppListMainView::AssistantButtonPressed() {
-  DCHECK(chromeos::switches::IsAssistantEnabled());
+  DCHECK(chromeos::features::IsAssistantEnabled());
   delegate_->StartAssistant();
 }
 
diff --git a/ash/app_list/views/app_list_view_unittest.cc b/ash/app_list/views/app_list_view_unittest.cc
index 1de1816..a250264 100644
--- a/ash/app_list/views/app_list_view_unittest.cc
+++ b/ash/app_list/views/app_list_view_unittest.cc
@@ -50,7 +50,7 @@
 #include "base/test/icu_test_util.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "services/content/public/cpp/test/fake_navigable_contents.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/models/simple_menu_model.h"
@@ -2380,7 +2380,7 @@
 // Tests selecting search result to show embedded Assistant UI.
 TEST_F(AppListViewFocusTest, ShowEmbeddedAssistantUI) {
   scoped_feature_list_.InitWithFeatures(
-      {chromeos::switches::kAssistantFeature,
+      {chromeos::features::kAssistantFeature,
        app_list_features::kEnableEmbeddedAssistantUI},
       {});
   Show();
@@ -2414,7 +2414,7 @@
 TEST_F(AppListViewTest, NoAnswerCardWhenEmbeddedAssistantUIEnabled) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitWithFeatures(
-      {chromeos::switches::kAssistantFeature,
+      {chromeos::features::kAssistantFeature,
        app_list_features::kEnableEmbeddedAssistantUI},
       {});
   ASSERT_TRUE(app_list_features::IsEmbeddedAssistantUIEnabled());
@@ -2430,7 +2430,7 @@
 TEST_F(AppListViewTest, EscapeKeyEmbeddedAssistantUIToSearch) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitWithFeatures(
-      {chromeos::switches::kAssistantFeature,
+      {chromeos::features::kAssistantFeature,
        app_list_features::kEnableEmbeddedAssistantUI},
       {});
   ASSERT_TRUE(app_list_features::IsEmbeddedAssistantUIEnabled());
@@ -2454,7 +2454,7 @@
 TEST_F(AppListViewTest, ClickOutsideEmbeddedAssistantUIToPeeking) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitWithFeatures(
-      {chromeos::switches::kAssistantFeature,
+      {chromeos::features::kAssistantFeature,
        app_list_features::kEnableEmbeddedAssistantUI},
       {});
   ASSERT_TRUE(app_list_features::IsEmbeddedAssistantUIEnabled());
@@ -2491,7 +2491,7 @@
 TEST_F(AppListViewTest, ExpandArrowNotVisibleInEmbeddedAssistantUI) {
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitWithFeatures(
-      {chromeos::switches::kAssistantFeature,
+      {chromeos::features::kAssistantFeature,
        app_list_features::kEnableEmbeddedAssistantUI},
       {});
   ASSERT_TRUE(app_list_features::IsEmbeddedAssistantUIEnabled());
diff --git a/ash/assistant/assistant_cache_controller.cc b/ash/assistant/assistant_cache_controller.cc
index ccc8b0e..bee96b283 100644
--- a/ash/assistant/assistant_cache_controller.cc
+++ b/ash/assistant/assistant_cache_controller.cc
@@ -14,6 +14,7 @@
 #include "ash/public/cpp/voice_interaction_controller.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "base/feature_list.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/rand_util.h"
 #include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
diff --git a/ash/assistant/assistant_controller_unittest.cc b/ash/assistant/assistant_controller_unittest.cc
index e66cc8f..c6f6958f 100644
--- a/ash/assistant/assistant_controller_unittest.cc
+++ b/ash/assistant/assistant_controller_unittest.cc
@@ -11,7 +11,7 @@
 #include "ash/test/ash_test_base.h"
 #include "base/macros.h"
 #include "base/test/scoped_feature_list.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/services/assistant/test_support/mock_assistant.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
@@ -41,8 +41,8 @@
 
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        chromeos::switches::kAssistantFeature);
-    ASSERT_TRUE(chromeos::switches::IsAssistantEnabled());
+        chromeos::features::kAssistantFeature);
+    ASSERT_TRUE(chromeos::features::IsAssistantEnabled());
 
     AshTestBase::SetUp();
 
diff --git a/ash/assistant/assistant_notification_controller_unittest.cc b/ash/assistant/assistant_notification_controller_unittest.cc
index f0ae4c2..10fe0eb4 100644
--- a/ash/assistant/assistant_notification_controller_unittest.cc
+++ b/ash/assistant/assistant_notification_controller_unittest.cc
@@ -9,6 +9,7 @@
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
 #include "base/test/scoped_task_environment.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -55,12 +56,11 @@
 class AssistantNotificationControllerTest : public AshTestBase {
  protected:
   AssistantNotificationControllerTest()
-      : AshTestBase(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {}
+      : AshTestBase(base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
   ~AssistantNotificationControllerTest() override = default;
 
   void SetUp() override {
-    ASSERT_TRUE(chromeos::switches::IsAssistantEnabled());
+    ASSERT_TRUE(chromeos::features::IsAssistantEnabled());
 
     AshTestBase::SetUp();
 
diff --git a/ash/assistant/assistant_prefs_controller_unittest.cc b/ash/assistant/assistant_prefs_controller_unittest.cc
index 0c1fbdf..cbd373d 100644
--- a/ash/assistant/assistant_prefs_controller_unittest.cc
+++ b/ash/assistant/assistant_prefs_controller_unittest.cc
@@ -11,7 +11,7 @@
 #include "ash/test/ash_test_base.h"
 #include "base/macros.h"
 #include "base/test/scoped_feature_list.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/prefs/pref_service.h"
 
 namespace ash {
@@ -41,8 +41,8 @@
 
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        chromeos::switches::kAssistantFeature);
-    ASSERT_TRUE(chromeos::switches::IsAssistantEnabled());
+        chromeos::features::kAssistantFeature);
+    ASSERT_TRUE(chromeos::features::IsAssistantEnabled());
 
     AshTestBase::SetUp();
 
diff --git a/ash/assistant/assistant_screen_context_controller_unittest.cc b/ash/assistant/assistant_screen_context_controller_unittest.cc
index 91be17b..addb756 100644
--- a/ash/assistant/assistant_screen_context_controller_unittest.cc
+++ b/ash/assistant/assistant_screen_context_controller_unittest.cc
@@ -15,7 +15,7 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/test/scoped_feature_list.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "ui/aura/window.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_tree_owner.h"
@@ -47,8 +47,8 @@
 
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        chromeos::switches::kAssistantFeature);
-    ASSERT_TRUE(chromeos::switches::IsAssistantEnabled());
+        chromeos::features::kAssistantFeature);
+    ASSERT_TRUE(chromeos::features::IsAssistantEnabled());
 
     AshTestBase::SetUp();
 
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc
index 97a6124..0ed5fedf 100644
--- a/ash/login/ui/lock_contents_view.cc
+++ b/ash/login/ui/lock_contents_view.cc
@@ -42,6 +42,7 @@
 #include "base/command_line.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chromeos/components/proximity_auth/public/mojom/auth_type.mojom.h"
 #include "components/user_manager/user_type.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/ash/login/ui/lock_screen_media_controls_view.cc b/ash/login/ui/lock_screen_media_controls_view.cc
index 300bc5c1..28aceca 100644
--- a/ash/login/ui/lock_screen_media_controls_view.cc
+++ b/ash/login/ui/lock_screen_media_controls_view.cc
@@ -19,6 +19,7 @@
 #include "services/service_manager/public/cpp/connector.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/vector_icons.h"
@@ -64,6 +65,11 @@
 constexpr gfx::Size kCloseButtonSize = gfx::Size(24, 24);
 constexpr int kCloseButtonIconSize = 20;
 
+constexpr int kDragVelocityThreshold = -6;
+constexpr int kHeightDismissalThreshold = 20;
+constexpr base::TimeDelta kAnimationDuration =
+    base::TimeDelta::FromMilliseconds(200);
+
 // How long to wait (in milliseconds) for a new media session to begin.
 constexpr base::TimeDelta kNextMediaDelay =
     base::TimeDelta::FromMilliseconds(2500);
@@ -135,18 +141,22 @@
   DCHECK(callbacks.hide_media_controls);
   DCHECK(callbacks.show_media_controls);
 
-  set_notify_enter_exit_on_child(true);
+  // Media controls have not been dismissed initially.
+  Shell::Get()->media_controller()->SetMediaControlsDismissed(false);
 
-  SetLayoutManager(std::make_unique<views::BoxLayout>(
-      views::BoxLayout::Orientation::kVertical));
-
-  SetBackground(views::CreateRoundedRectBackground(kMediaControlsBackground,
-                                                   kMediaControlsCornerRadius));
   middle_spacing_ = std::make_unique<NonAccessibleView>();
   middle_spacing_->set_owned_by_client();
 
-  // Media controls have not been dismissed initially.
-  Shell::Get()->media_controller()->SetMediaControlsDismissed(false);
+  set_notify_enter_exit_on_child(true);
+
+  contents_view_ = AddChildView(std::make_unique<views::View>());
+  contents_view_->SetLayoutManager(std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kVertical));
+  contents_view_->SetBackground(views::CreateRoundedRectBackground(
+      kMediaControlsBackground, kMediaControlsCornerRadius));
+
+  contents_view_->SetPaintToLayer();  // Needed for opacity animation.
+  contents_view_->layer()->SetFillsBoundsOpaquely(false);
 
   // |close_button_row| contains the close button to dismiss the controls.
   auto close_button_row = std::make_unique<NonAccessibleView>();
@@ -170,19 +180,20 @@
   close_button->SetAccessibleName(close_button_label);
   close_button_ = close_button_layout->AddView(std::move(close_button));
   close_button_->SetVisible(false);
-  AddChildView(std::move(close_button_row));
+  contents_view_->AddChildView(std::move(close_button_row));
 
   // |header_row_| contains the app icon and source title of the current media
   // session.
-  header_row_ = AddChildView(std::make_unique<MediaControlsHeaderView>());
+  header_row_ =
+      contents_view_->AddChildView(std::make_unique<MediaControlsHeaderView>());
 
   auto session_artwork = std::make_unique<views::ImageView>();
   session_artwork->SetPreferredSize(
       gfx::Size(kArtworkViewWidth, kArtworkViewHeight));
   session_artwork->SetBorder(views::CreateEmptyBorder(kArtworkInsets));
-  session_artwork_ = AddChildView(std::move(session_artwork));
+  session_artwork_ = contents_view_->AddChildView(std::move(session_artwork));
 
-  progress_ = AddChildView(
+  progress_ = contents_view_->AddChildView(
       std::make_unique<media_message_center::MediaControlsProgressView>());
 
   // |button_row_| contains the buttons for controlling playback.
@@ -196,7 +207,7 @@
   button_row_layout->set_main_axis_alignment(
       views::BoxLayout::MainAxisAlignment::kCenter);
   button_row->SetPreferredSize(kMediaControlsButtonRowSize);
-  button_row_ = AddChildView(std::move(button_row));
+  button_row_ = contents_view_->AddChildView(std::move(button_row));
 
   CreateMediaButton(
       kChangeTrackIconSize, MediaSessionAction::kPreviousTrack,
@@ -285,6 +296,10 @@
   return gfx::Size(kMediaControlsTotalWidthDp, kMediaControlsTotalHeightDp);
 }
 
+void LockScreenMediaControlsView::Layout() {
+  contents_view_->SetBoundsRect(GetContentsBounds());
+}
+
 void LockScreenMediaControlsView::GetAccessibleNodeData(
     ui::AXNodeData* node_data) {
   node_data->role = ax::mojom::Role::kListItem;
@@ -298,10 +313,16 @@
 }
 
 void LockScreenMediaControlsView::OnMouseEntered(const ui::MouseEvent& event) {
+  if (is_in_drag_ || contents_view_->layer()->GetAnimator()->is_animating())
+    return;
+
   close_button_->SetVisible(true);
 }
 
 void LockScreenMediaControlsView::OnMouseExited(const ui::MouseEvent& event) {
+  if (is_in_drag_ || contents_view_->layer()->GetAnimator()->is_animating())
+    return;
+
   close_button_->SetVisible(false);
 }
 
@@ -431,11 +452,14 @@
   }
 }
 
+void LockScreenMediaControlsView::OnImplicitAnimationsCompleted() {
+  Dismiss();
+}
+
 void LockScreenMediaControlsView::ButtonPressed(views::Button* sender,
                                                 const ui::Event& event) {
   if (sender == close_button_) {
-    media_controller_ptr_->Stop();
-    hide_media_controls_.Run();
+    Dismiss();
     return;
   }
 
@@ -450,6 +474,40 @@
       media_controller_ptr_);
 }
 
+void LockScreenMediaControlsView::OnGestureEvent(ui::GestureEvent* event) {
+  gfx::Point point_in_screen = event->location();
+  ConvertPointToScreen(this, &point_in_screen);
+
+  switch (event->type()) {
+    case ui::ET_SCROLL_FLING_START:
+    case ui::ET_GESTURE_SCROLL_BEGIN: {
+      if (is_in_drag_)
+        break;
+
+      initial_drag_point_ = point_in_screen;
+      is_in_drag_ = true;
+      event->SetHandled();
+      break;
+    }
+    case ui::ET_GESTURE_SCROLL_UPDATE: {
+      last_fling_velocity_ = event->details().scroll_y();
+      UpdateDrag(point_in_screen);
+      event->SetHandled();
+      break;
+    }
+    case ui::ET_GESTURE_END: {
+      if (!is_in_drag_)
+        break;
+
+      EndDrag();
+      event->SetHandled();
+      break;
+    }
+    default:
+      break;
+  }
+}
+
 void LockScreenMediaControlsView::FlushForTesting() {
   media_controller_ptr_.FlushForTesting();
 }
@@ -502,6 +560,11 @@
   UpdateActionButtonsVisibility();
 }
 
+void LockScreenMediaControlsView::Dismiss() {
+  media_controller_ptr_->Stop();
+  hide_media_controls_.Run();
+}
+
 void LockScreenMediaControlsView::SetArtwork(
     base::Optional<gfx::ImageSkia> img) {
   if (!img.has_value()) {
@@ -514,4 +577,68 @@
   session_artwork_->SetImage(*img);
 }
 
+void LockScreenMediaControlsView::UpdateDrag(
+    const gfx::Point& location_in_screen) {
+  is_in_drag_ = true;
+  int drag_delta = location_in_screen.y() - initial_drag_point_.y();
+
+  // Don't let the user drag |contents_view_| below the view area.
+  if (contents_view_->bounds().bottom() + drag_delta >=
+      GetLocalBounds().bottom()) {
+    return;
+  }
+
+  gfx::Transform transform;
+  transform.Translate(0, drag_delta);
+  contents_view_->layer()->SetTransform(transform);
+  UpdateOpacity();
+}
+
+void LockScreenMediaControlsView::EndDrag() {
+  is_in_drag_ = false;
+
+  // If the user releases the drag with velocity over the threshold or drags
+  // |contents_view_| past the height threshold, dismiss the controls.
+  if (last_fling_velocity_ <= kDragVelocityThreshold ||
+      (contents_view_->GetBoundsInScreen().y() <= kHeightDismissalThreshold &&
+       last_fling_velocity_ < 0)) {
+    RunHideControlsAnimation();
+    return;
+  }
+
+  RunResetControlsAnimation();
+}
+
+void LockScreenMediaControlsView::UpdateOpacity() {
+  float progress =
+      static_cast<float>(contents_view_->GetBoundsInScreen().bottom()) /
+      GetBoundsInScreen().bottom();
+  contents_view_->layer()->SetOpacity(progress);
+}
+
+void LockScreenMediaControlsView::RunHideControlsAnimation() {
+  ui::ScopedLayerAnimationSettings animation(
+      contents_view_->layer()->GetAnimator());
+  animation.AddObserver(this);
+  animation.SetPreemptionStrategy(
+      ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
+  animation.SetTransitionDuration(kAnimationDuration);
+
+  gfx::Transform transform;
+  transform.Translate(0, -GetBoundsInScreen().bottom());
+  contents_view_->layer()->SetTransform(transform);
+  contents_view_->layer()->SetOpacity(0);
+}
+
+void LockScreenMediaControlsView::RunResetControlsAnimation() {
+  ui::ScopedLayerAnimationSettings animation(
+      contents_view_->layer()->GetAnimator());
+  animation.SetPreemptionStrategy(
+      ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
+  animation.SetTransitionDuration(kAnimationDuration);
+
+  contents_view_->layer()->SetTransform(gfx::Transform());
+  contents_view_->layer()->SetOpacity(1);
+}
+
 }  // namespace ash
diff --git a/ash/login/ui/lock_screen_media_controls_view.h b/ash/login/ui/lock_screen_media_controls_view.h
index 75fa3979..54c36de 100644
--- a/ash/login/ui/lock_screen_media_controls_view.h
+++ b/ash/login/ui/lock_screen_media_controls_view.h
@@ -12,6 +12,7 @@
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/media_session/public/mojom/media_controller.mojom.h"
+#include "ui/compositor/layer_animation_observer.h"
 #include "ui/views/controls/button/button.h"
 
 namespace service_manager {
@@ -37,7 +38,8 @@
     : public views::View,
       public media_session::mojom::MediaControllerObserver,
       public media_session::mojom::MediaControllerImageObserver,
-      public views::ButtonListener {
+      public views::ButtonListener,
+      public ui::ImplicitAnimationObserver {
  public:
   using MediaControlsEnabled = base::RepeatingCallback<bool()>;
 
@@ -65,6 +67,7 @@
   // views::View:
   const char* GetClassName() const override;
   gfx::Size CalculatePreferredSize() const override;
+  void Layout() override;
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   void OnMouseEntered(const ui::MouseEvent& event) override;
   void OnMouseExited(const ui::MouseEvent& event) override;
@@ -89,9 +92,15 @@
       media_session::mojom::MediaSessionImageType type,
       const SkBitmap& bitmap) override;
 
+  // ui::ImplicitAnimationObserver:
+  void OnImplicitAnimationsCompleted() override;
+
   // views::ButtonListener:
   void ButtonPressed(views::Button* sender, const ui::Event& event) override;
 
+  // ui::EventHandler:
+  void OnGestureEvent(ui::GestureEvent* event) override;
+
   void FlushForTesting();
 
   void set_media_controller_for_testing(
@@ -106,6 +115,9 @@
  private:
   friend class LockScreenMediaControlsViewTest;
 
+  // Hides the controls and stops media playback.
+  void Dismiss();
+
   // Sets the media artwork to |img|. If |img| is nullopt, the default artwork
   // is set instead.
   void SetArtwork(base::Optional<gfx::ImageSkia> img);
@@ -124,6 +136,23 @@
   // necessary.
   void SetIsPlaying(bool playing);
 
+  // Updates the y position and opacity of |contents_view_| during dragging.
+  void UpdateDrag(const gfx::Point& location_in_screen);
+
+  // If the drag velocity is past the threshold or the drag position is past
+  // the height threshold, this calls |HideControlsAnimation()|. Otherwise, this
+  // will call |ResetControlsAnimation()|.
+  void EndDrag();
+
+  // Updates the opacity of |contents_view_| based on its current position.
+  void UpdateOpacity();
+
+  // Animates |contents_view_| up and off the screen.
+  void RunHideControlsAnimation();
+
+  // Animates |contents_view_| to its original position.
+  void RunResetControlsAnimation();
+
   // Used to connect to the Media Session service.
   service_manager::Connector* const connector_;
 
@@ -159,7 +188,10 @@
   // Set of enabled actions.
   std::set<media_session::mojom::MediaSessionAction> enabled_actions_;
 
-  // Container views directly attached to this view.
+  // Contains the visible and draggable UI of the media controls.
+  views::View* contents_view_ = nullptr;
+
+  // Container views attached to |contents_view_|.
   MediaControlsHeaderView* header_row_ = nullptr;
   views::ImageView* session_artwork_ = nullptr;
   NonAccessibleView* button_row_ = nullptr;
@@ -172,6 +204,15 @@
   const base::RepeatingClosure hide_media_controls_;
   const base::RepeatingClosure show_media_controls_;
 
+  // The location of the initial gesture event in screen coordinates.
+  gfx::Point initial_drag_point_;
+
+  // The velocity of the gesture event.
+  float last_fling_velocity_ = 0;
+
+  // True if the user is in the process of gesture-dragging |contents_view_|.
+  bool is_in_drag_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(LockScreenMediaControlsView);
 };
 
diff --git a/ash/login/ui/lock_screen_media_controls_view_unittest.cc b/ash/login/ui/lock_screen_media_controls_view_unittest.cc
index 708ebd76..4ec5f231 100644
--- a/ash/login/ui/lock_screen_media_controls_view_unittest.cc
+++ b/ash/login/ui/lock_screen_media_controls_view_unittest.cc
@@ -18,6 +18,8 @@
 #include "ui/gfx/paint_vector_icon.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/vector_icons.h"
+#include "ui/views/animation/bounds_animator.h"
+#include "ui/views/animation/bounds_animator_observer.h"
 #include "ui/views/controls/image_view.h"
 
 namespace ash {
@@ -44,6 +46,34 @@
          class_name == views::ToggleImageButton::kViewClassName;
 }
 
+class AnimationWaiter : public ui::LayerAnimationObserver {
+ public:
+  explicit AnimationWaiter(views::View* host)
+      : animator_(host->layer()->GetAnimator()) {
+    animator_->AddObserver(this);
+  }
+  ~AnimationWaiter() override { animator_->RemoveObserver(this); }
+
+  // ui::LayerAnimationObserver:
+  void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override {
+    if (!animator_->is_animating()) {
+      animator_->RemoveObserver(this);
+      run_loop_.Quit();
+    }
+  }
+  void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override {}
+  void OnLayerAnimationScheduled(
+      ui::LayerAnimationSequence* sequence) override {}
+
+  void Wait() { run_loop_.Run(); }
+
+ private:
+  ui::LayerAnimator* animator_;
+  base::RunLoop run_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(AnimationWaiter);
+};
+
 }  // namespace
 
 class LockScreenMediaControlsViewTest : public LoginTestBase {
@@ -73,6 +103,8 @@
 
     media_controls_view_ = lock_contents.media_controls_view();
 
+    animation_waiter_ = new AnimationWaiter(contents_view());
+
     // Inject the test media controller into the media controls view.
     media_controller_ = std::make_unique<TestMediaController>();
     media_controls_view_->set_media_controller_for_testing(
@@ -156,6 +188,10 @@
     return media_controller_.get();
   }
 
+  views::View* contents_view() const {
+    return media_controls_view_->contents_view_;
+  }
+
   MediaControlsHeaderView* header_row() const {
     return media_controls_view_->header_row_;
   }
@@ -185,6 +221,7 @@
   }
 
   LockScreenMediaControlsView* media_controls_view_ = nullptr;
+  AnimationWaiter* animation_waiter_ = nullptr;
 
  private:
   void NotifyUpdatedActions() {
@@ -598,4 +635,82 @@
             data.GetString16Attribute(ax::mojom::StringAttribute::kName));
 }
 
+TEST_F(LockScreenMediaControlsViewTest, DismissControlsVelocity) {
+  gfx::Point scroll_start(
+      media_controls_view_->GetBoundsInScreen().CenterPoint());
+  gfx::Point scroll_end(scroll_start.x(), scroll_start.y() - 50);
+
+  // Simulate scroll with velocity past the threshold.
+  ui::test::EventGenerator* generator = GetEventGenerator();
+  generator->GestureScrollSequence(scroll_start, scroll_end,
+                                   base::TimeDelta::FromMilliseconds(100), 3);
+
+  animation_waiter_->Wait();
+
+  // Verify the controls were hidden.
+  EXPECT_FALSE(media_controls_view_->IsDrawn());
+}
+
+TEST_F(LockScreenMediaControlsViewTest, DismissControlsHeight) {
+  gfx::Point scroll_start(
+      media_controls_view_->GetBoundsInScreen().CenterPoint());
+  gfx::Point scroll_end(scroll_start.x(), scroll_start.y() - 200);
+
+  // Simulate scroll with height past the threshold.
+  ui::test::EventGenerator* generator = GetEventGenerator();
+  generator->GestureScrollSequence(scroll_start, scroll_end,
+                                   base::TimeDelta::FromSeconds(3), 3);
+
+  animation_waiter_->Wait();
+
+  // Verify the controls were hidden.
+  EXPECT_FALSE(media_controls_view_->IsDrawn());
+}
+
+TEST_F(LockScreenMediaControlsViewTest, DragReset) {
+  // Verify |contents_view()| is in its initial position.
+  EXPECT_EQ(media_controls_view_->GetBoundsInScreen(),
+            contents_view()->GetBoundsInScreen());
+  EXPECT_TRUE(media_controls_view_->IsDrawn());
+
+  gfx::Point scroll_start(
+      media_controls_view_->GetBoundsInScreen().CenterPoint());
+  gfx::Point scroll_end(scroll_start.x(), scroll_start.y() - 10);
+
+  // Simulate scroll with neither height nor velocity past the thresholds.
+  ui::test::EventGenerator* generator = GetEventGenerator();
+  generator->GestureScrollSequence(scroll_start, scroll_end,
+                                   base::TimeDelta::FromSeconds(3), 3);
+
+  animation_waiter_->Wait();
+
+  // Verify |contents_view()| is reset to its initial position.
+  EXPECT_EQ(media_controls_view_->GetBoundsInScreen(),
+            contents_view()->GetBoundsInScreen());
+  EXPECT_TRUE(media_controls_view_->IsDrawn());
+}
+
+TEST_F(LockScreenMediaControlsViewTest, DragBounds) {
+  // Verify |contents_view()| is in its initial position.
+  EXPECT_EQ(media_controls_view_->GetBoundsInScreen(),
+            contents_view()->GetBoundsInScreen());
+  EXPECT_TRUE(media_controls_view_->IsDrawn());
+
+  gfx::Point scroll_start(
+      media_controls_view_->GetBoundsInScreen().CenterPoint());
+  gfx::Point scroll_end(scroll_start.x(), scroll_start.y() + 10);
+
+  // Simulate scroll that attempts to go below the view bounds.
+  ui::test::EventGenerator* generator = GetEventGenerator();
+  generator->GestureScrollSequence(scroll_start, scroll_end,
+                                   base::TimeDelta::FromSeconds(3), 3);
+
+  animation_waiter_->Wait();
+
+  // Verify |contents_view()| does not go below its initial position.
+  EXPECT_EQ(media_controls_view_->GetBoundsInScreen(),
+            contents_view()->GetBoundsInScreen());
+  EXPECT_TRUE(media_controls_view_->IsDrawn());
+}
+
 }  // namespace ash
diff --git a/ash/mojo_interface_factory.cc b/ash/mojo_interface_factory.cc
index 49466198..fe158efe 100644
--- a/ash/mojo_interface_factory.cc
+++ b/ash/mojo_interface_factory.cc
@@ -25,7 +25,7 @@
 #include "base/bind.h"
 #include "base/lazy_instance.h"
 #include "base/single_thread_task_runner.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 
 namespace ash {
 namespace mojo_interface_factory {
@@ -106,7 +106,7 @@
 void RegisterInterfaces(
     service_manager::BinderRegistry* registry,
     scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) {
-  if (chromeos::switches::IsAssistantEnabled()) {
+  if (chromeos::features::IsAssistantEnabled()) {
     registry->AddInterface(
         base::BindRepeating(
             &BindAssistantAlarmTimerControllerRequestOnMainThread),
diff --git a/ash/public/cpp/BUILD.gn b/ash/public/cpp/BUILD.gn
index 2af825f4..2a0fa18 100644
--- a/ash/public/cpp/BUILD.gn
+++ b/ash/public/cpp/BUILD.gn
@@ -246,7 +246,7 @@
   public_deps = [
     "//ash/public/mojom",
     "//base",
-    "//components/arc/common:notifications",
+    "//components/arc/mojom:notifications",
     "//components/session_manager:base",
     "//components/user_manager",
     "//ui/gfx",
diff --git a/ash/public/cpp/DEPS b/ash/public/cpp/DEPS
index 401e5bf..20cc386 100644
--- a/ash/public/cpp/DEPS
+++ b/ash/public/cpp/DEPS
@@ -1,7 +1,7 @@
 include_rules = [
   "+chromeos/constants",
   "+chromeos/services",
-  "+components/arc/common",
+  "+components/arc/mojom",
   "+components/prefs",
   "+services/data_decoder/public",
   "+services/device/public",
diff --git a/ash/public/cpp/app_list/app_list_features.cc b/ash/public/cpp/app_list/app_list_features.cc
index 254c641..edf8dd01 100644
--- a/ash/public/cpp/app_list/app_list_features.cc
+++ b/ash/public/cpp/app_list/app_list_features.cc
@@ -7,7 +7,7 @@
 #include "ash/public/cpp/app_list/app_list_switches.h"
 #include "base/feature_list.h"
 #include "base/metrics/field_trial_params.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 
 namespace app_list_features {
 
@@ -97,7 +97,7 @@
 }
 
 bool IsEmbeddedAssistantUIEnabled() {
-  return chromeos::switches::IsAssistantEnabled() &&
+  return chromeos::features::IsAssistantEnabled() &&
          base::FeatureList::IsEnabled(kEnableEmbeddedAssistantUI);
 }
 
diff --git a/ash/public/cpp/arc_notifications_host_initializer.h b/ash/public/cpp/arc_notifications_host_initializer.h
index 35ef5f4..3238ad58 100644
--- a/ash/public/cpp/arc_notifications_host_initializer.h
+++ b/ash/public/cpp/arc_notifications_host_initializer.h
@@ -6,7 +6,7 @@
 #define ASH_PUBLIC_CPP_ARC_NOTIFICATIONS_HOST_INITIALIZER_H_
 
 #include "ash/public/cpp/ash_public_export.h"
-#include "components/arc/common/notifications.mojom.h"
+#include "components/arc/mojom/notifications.mojom.h"
 
 namespace ash {
 
diff --git a/ash/public/cpp/login_types.cc b/ash/public/cpp/login_types.cc
index 83b91faa..00ff1382 100644
--- a/ash/public/cpp/login_types.cc
+++ b/ash/public/cpp/login_types.cc
@@ -4,6 +4,8 @@
 
 #include "ash/public/cpp/login_types.h"
 
+#include "chromeos/components/proximity_auth/public/mojom/auth_type.mojom.h"
+
 namespace ash {
 
 EasyUnlockIconOptions::EasyUnlockIconOptions() = default;
@@ -45,7 +47,8 @@
 PublicAccountInfo& PublicAccountInfo::operator=(PublicAccountInfo&& other) =
     default;
 
-LoginUserInfo::LoginUserInfo() = default;
+LoginUserInfo::LoginUserInfo()
+    : auth_type(proximity_auth::mojom::AuthType::OFFLINE_PASSWORD) {}
 LoginUserInfo::LoginUserInfo(const LoginUserInfo& other) = default;
 LoginUserInfo::LoginUserInfo(LoginUserInfo&& other) = default;
 LoginUserInfo::~LoginUserInfo() = default;
diff --git a/ash/public/cpp/login_types.h b/ash/public/cpp/login_types.h
index 7f7439f..2ccd02b 100644
--- a/ash/public/cpp/login_types.h
+++ b/ash/public/cpp/login_types.h
@@ -9,7 +9,7 @@
 #include "ash/public/cpp/session/user_info.h"
 #include "base/time/time.h"
 #include "base/token.h"
-#include "chromeos/components/proximity_auth/public/mojom/auth_type.mojom.h"
+#include "chromeos/components/proximity_auth/public/mojom/auth_type.mojom-forward.h"
 
 namespace ash {
 
@@ -223,8 +223,8 @@
   UserInfo basic_user_info;
 
   // What method the user can use to sign in.
-  proximity_auth::mojom::AuthType auth_type =
-      proximity_auth::mojom::AuthType::OFFLINE_PASSWORD;
+  // Initialized in .cc file because the mojom header is huge.
+  proximity_auth::mojom::AuthType auth_type;
 
   // True if this user has already signed in.
   bool is_signed_in = false;
diff --git a/ash/public/cpp/voice_interaction_controller.cc b/ash/public/cpp/voice_interaction_controller.cc
index 4e4d8c3d..2705dab 100644
--- a/ash/public/cpp/voice_interaction_controller.cc
+++ b/ash/public/cpp/voice_interaction_controller.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 
 namespace ash {
 namespace {
@@ -21,7 +21,7 @@
 VoiceInteractionController::VoiceInteractionController() {
   DCHECK(!g_voice_interaction_cotroller);
   g_voice_interaction_cotroller = this;
-  if (chromeos::switches::IsAssistantEnabled())
+  if (chromeos::features::IsAssistantEnabled())
     voice_interaction_state_ = mojom::VoiceInteractionState::NOT_READY;
 }
 
diff --git a/ash/public/mojom/voice_interaction_controller.mojom b/ash/public/mojom/voice_interaction_controller.mojom
index dd8daa3..b296b6da 100644
--- a/ash/public/mojom/voice_interaction_controller.mojom
+++ b/ash/public/mojom/voice_interaction_controller.mojom
@@ -5,7 +5,7 @@
 module ash.mojom;
 
 // There is another copy of the VoiceInteractionState definition in
-// //components/arc/common/voice_interaction_framework.mojom
+// //components/arc/mojom/voice_interaction_framework.mojom
 // Please also update the other one if you change it.
 // The duplicate definition is because we do not use extensible widely
 // (crbug.com/731893).
diff --git a/ash/screen_util_unittest.cc b/ash/screen_util_unittest.cc
index 6fcaf00..75464fa 100644
--- a/ash/screen_util_unittest.cc
+++ b/ash/screen_util_unittest.cc
@@ -6,8 +6,6 @@
 
 #include <memory>
 
-#include "ash/accessibility/accessibility_controller_impl.h"
-#include "ash/accessibility/accessibility_panel_layout_manager.h"
 #include "ash/magnifier/docked_magnifier_controller_impl.h"
 #include "ash/root_window_controller.h"
 #include "ash/shelf/shelf.h"
@@ -28,33 +26,6 @@
 
 namespace ash {
 
-namespace {
-
-AccessibilityPanelLayoutManager* GetLayoutManager() {
-  aura::Window* container =
-      Shell::GetContainer(Shell::GetPrimaryRootWindow(),
-                          kShellWindowId_AccessibilityPanelContainer);
-  return static_cast<AccessibilityPanelLayoutManager*>(
-      container->layout_manager());
-}
-
-// Simulates Chrome creating the ChromeVoxPanel widget.
-std::unique_ptr<views::Widget> CreateChromeVoxPanel() {
-  std::unique_ptr<views::Widget> widget = std::make_unique<views::Widget>();
-  views::Widget::InitParams params(
-      views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
-  params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
-  aura::Window* root_window = Shell::GetPrimaryRootWindow();
-  params.parent = Shell::GetContainer(
-      root_window, kShellWindowId_AccessibilityPanelContainer);
-  params.activatable = views::Widget::InitParams::ACTIVATABLE_NO;
-  params.bounds = gfx::Rect(root_window->bounds().size());
-
-  widget->Init(std::move(params));
-  return widget;
-}
-}  // namespace
-
 using ScreenUtilTest = AshTestBase;
 
 TEST_F(ScreenUtilTest, Bounds) {
@@ -279,28 +250,4 @@
   EXPECT_EQ(expected_bounds, window->bounds());
 }
 
-// Tests that making a window fullscreen while the chromevox is enabled won't
-// create an empty bar instead of the chromevox panel, but the fullscreened
-// window will take the whole screen size.
-TEST_F(ScreenUtilTest, FullscreenWindowBoundsWithChromeVox) {
-  UpdateDisplay("1366x768");
-
-  // Create ChromeVox Panel
-  AccessibilityPanelLayoutManager* layout_manager = GetLayoutManager();
-  std::unique_ptr<views::Widget> widget = CreateChromeVoxPanel();
-  widget->Show();
-  layout_manager->SetPanelBounds(
-      gfx::Rect(0, 0, 0, AccessibilityPanelLayoutManager::kDefaultPanelHeight),
-      AccessibilityPanelState::FULL_WIDTH);
-
-  std::unique_ptr<aura::Window> window = CreateToplevelTestWindow(
-      gfx::Rect(300, 300, 200, 150), desks_util::GetActiveDeskContainerId());
-
-  const WMEvent event(WM_EVENT_TOGGLE_FULLSCREEN);
-  WindowState::Get(window.get())->OnWMEvent(&event);
-
-  constexpr gfx::Rect kDisplayBounds{1366, 768};
-  EXPECT_EQ(window->bounds(), kDisplayBounds);
-}
-
 }  // namespace ash
diff --git a/ash/shelf/home_button_controller.cc b/ash/shelf/home_button_controller.cc
index 4d4607f..bdbef0b 100644
--- a/ash/shelf/home_button_controller.cc
+++ b/ash/shelf/home_button_controller.cc
@@ -22,7 +22,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/timer/timer.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/account_id/account_id.h"
 #include "ui/display/screen.h"
 #include "ui/views/animation/ink_drop_state.h"
@@ -57,7 +57,7 @@
   // session has already started. This could happen when an external monitor
   // is plugged in.
   if (shell->session_controller()->IsActiveUserSessionStarted() &&
-      chromeos::switches::IsAssistantEnabled()) {
+      chromeos::features::IsAssistantEnabled()) {
     InitializeVoiceInteractionOverlay();
   }
 }
@@ -166,7 +166,7 @@
   // Initialize voice interaction overlay when primary user session becomes
   // active.
   if (Shell::Get()->session_controller()->IsUserPrimary() &&
-      !assistant_overlay_ && chromeos::switches::IsAssistantEnabled()) {
+      !assistant_overlay_ && chromeos::features::IsAssistantEnabled()) {
     InitializeVoiceInteractionOverlay();
   }
 }
@@ -192,7 +192,7 @@
       // If we are showing the bursting or waiting animation, no need to do
       // anything. Otherwise show the waiting animation now.
       // NOTE: No waiting animation for native assistant.
-      if (!chromeos::switches::IsAssistantEnabled() &&
+      if (!chromeos::features::IsAssistantEnabled() &&
           !assistant_overlay_->IsBursting() &&
           !assistant_overlay_->IsWaiting()) {
         assistant_overlay_->WaitingAnimation();
diff --git a/ash/shell.cc b/ash/shell.cc
index 9650ac53..fbacac41 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -354,6 +354,11 @@
   return GetOpenSystemModalWindowContainerId() >= 0;
 }
 
+AssistantController* Shell::assistant_controller() {
+  DCHECK(chromeos::features::IsAssistantEnabled());
+  return assistant_controller_.get();
+}
+
 display::DisplayConfigurator* Shell::display_configurator() {
   return display_manager_->configurator();
 }
@@ -664,7 +669,7 @@
   // Destroy |assistant_controller_| earlier than |tablet_mode_controller_| so
   // that the former will destroy the Assistant view hierarchy which has a
   // dependency on the latter.
-  if (chromeos::switches::IsAssistantEnabled())
+  if (chromeos::features::IsAssistantEnabled())
     assistant_controller_.reset();
 
   // Destroy tablet mode controller early on since it has some observers which
@@ -1054,13 +1059,13 @@
 
   magnification_controller_ = std::make_unique<MagnificationController>();
   mru_window_tracker_ = std::make_unique<MruWindowTracker>();
-  assistant_controller_ = chromeos::switches::IsAssistantEnabled()
+  assistant_controller_ = chromeos::features::IsAssistantEnabled()
                               ? std::make_unique<AssistantController>()
                               : nullptr;
 
   // |assistant_controller_| is put before |ambient_controller_| as it will be
   // used by the latter.
-  if (chromeos::switches::IsAmbientModeEnabled())
+  if (chromeos::features::IsAmbientModeEnabled())
     ambient_controller_ = std::make_unique<AmbientController>();
 
   home_screen_controller_ = std::make_unique<HomeScreenController>();
diff --git a/ash/shell.h b/ash/shell.h
index bffe8a5..2e006ac 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -18,7 +18,6 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
-#include "chromeos/constants/chromeos_switches.h"
 #include "ui/aura/window.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/display/screen.h"
@@ -312,10 +311,7 @@
     return app_list_controller_.get();
   }
   AmbientController* ambient_controller() { return ambient_controller_.get(); }
-  AssistantController* assistant_controller() {
-    DCHECK(chromeos::switches::IsAssistantEnabled());
-    return assistant_controller_.get();
-  }
+  AssistantController* assistant_controller();
   AutoclickController* autoclick_controller() {
     return autoclick_controller_.get();
   }
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 6aa6883..166a289 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{ከአንድ መሣሪያ ጋር ተገናኝቷል}one{ከ# መሣሪያዎች ጋር ተገናኝቷል}other{ከ# መሣሪያዎች ጋር ተገናኝቷል}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> ተጨማሪ</translation>
 <translation id="3236488194889173876">ምንም የተንቀሳቃሽ ስልክ አውታረ መረብ የለም</translation>
+<translation id="3249513730522716925">መስኮት <ph name="WINDOW_TITLE" /> ከዴስክ <ph name="ACTIVE_DESK" /> ወደ ዴስክ <ph name="TARGET_DESK" /> ይወሰዳል</translation>
 <translation id="3255483164551725916">ምን ማድረግ ይችላሉ?</translation>
 <translation id="3294437725009624529">እንግዳ</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> አሁንም በኋላ በመለያ መግባት ይችላሉ።</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">ወደ «<ph name="FROM_LOCALE" />» መልሰህ ቀይር (ዳግም ማስጀመር ይፈልጋል)</translation>
 <translation id="3576141592585647168">የጊዜ ሰቅ ይለውጡ</translation>
 <translation id="3595596368722241419">ባትሪ ሙሉ ነው</translation>
+<translation id="3604801046548457007">ዴስክ <ph name="DESK_TITILE" /> ተፈጥሯል</translation>
 <translation id="3606978283550408104">የብሬይል ማሳያ ተገናኝቷል።</translation>
 <translation id="3621202678540785336">ግብዓት</translation>
 <translation id="3626281679859535460">ብሩህነት</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">እነዚህ የእርስዎ የስታይለስ መሣሪያዎች ናቸው</translation>
 <translation id="4389184120735010762">የተተከለ የማጉያ የቁልፍ ሰሌዳ አቋራጩን ተጭነዋል። ሊያበሩት ይፈልጋሉ?</translation>
 <translation id="4421231901400348175">የማያ ገጽዎን ቁጥጥር በርቀት እርዳታ በኩል ለ<ph name="HELPER_NAME" /> በማጋራት ላይ።</translation>
-<translation id="4430019312045809116">ድምፅ</translation>
 <translation id="4450893287417543264">ዳግም አታሳይ</translation>
 <translation id="4477350412780666475">ቀጣይ ትራክ</translation>
 <translation id="4479639480957787382">ኢተርኔት</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">መታ አድርጎ መጎተት</translation>
 <translation id="5750765938512549687">ብሉቱዝ ጠፍቷል</translation>
 <translation id="5777841717266010279">ማያ ገጽ ማጋራት ይቁም?</translation>
-<translation id="57838592816432529">ድምጽ ይዝጉ</translation>
 <translation id="5820394555380036790">Chromium ስርዓተ ክወና</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> ላይ <ph name="ROUTE_TITLE" />ን አስቁም</translation>
 <translation id="5860033963881614850">አጥፋ</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">ኃይል</translation>
 <translation id="6727969043791803658">ተገናኝቷል፣ <ph name="BATTERY_PERCENTAGE" />% ባትሪ</translation>
 <translation id="6751826523481687655">የአፈጻጸም ክትትል በርቷል</translation>
+<translation id="6752912906630585008">ዴስክ <ph name="REMOVED_DESK" /> ተወግዶ ከዴስክ <ph name="RECEIVE_DESK" /> ጋር ተዋህዷል</translation>
 <translation id="6790428901817661496">አጫውት</translation>
 <translation id="6803622936009808957">ምንም የሚደገፉ ጥራቶች ስላልተገኙ ማሳያዎችን ማሳየት አልተቻለም። ይልቁንስ ወደ የተስፋፋ ዴስክቶፕ ሁነታ ተገብቷል።</translation>
 <translation id="6820676911989879663">እረፍት ይውሰዱ!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">ቅንብሮች</translation>
 <translation id="8433186206711564395">የአውታረ መረብ ቅንብሮች</translation>
 <translation id="8433977262951327081">በመደርደሪያው ውስጥ የግቤት አማራጮች ምናሌ አረፋን ለማሳየት የሚሆነው አቋራጭ ተለውጧል። እባክዎ በ<ph name="OLD_SHORTCUT" /> ምትክ <ph name="NEW_SHORTCUT" />ን ይጠቀሙ።</translation>
+<translation id="8444246603146515890">ዴስክ <ph name="DESK_TITILE" /> ገቢር ተደርጓል</translation>
 <translation id="8452135315243592079">ሲም ካርድ ይጎድላል</translation>
 <translation id="8454013096329229812">Wi-Fi በርቷል።</translation>
 <translation id="847056008324733326">የልኬት ቅንብሮችን አሳይ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index e7fae57..2772bede 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{تم الاتصال بجهاز واحد}zero{تم الاتصال بـ # جهاز}two{تم الاتصال بجهازين (#)}few{تم الاتصال بـ # أجهزة}many{تم الاتصال بـ # جهازًا}other{تم الاتصال بـ # جهاز}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> والمزيد</translation>
 <translation id="3236488194889173876">ليست هناك شبكة جوّال متاحة</translation>
+<translation id="3249513730522716925">تم نقل النافذة <ph name="WINDOW_TITLE" /> من سطح المكتب <ph name="ACTIVE_DESK" /> إلى سطح المكتب <ph name="TARGET_DESK" />.</translation>
 <translation id="3255483164551725916">ما الإجراء المطلوب؟</translation>
 <translation id="3294437725009624529">ضيف</translation>
 <translation id="3308453408813785101">سيظل بإمكان <ph name="USER_EMAIL_ADDRESS" /> تسجيل الدخول لاحقًا.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">التغيير مرة أخرى إلى "<ph name="FROM_LOCALE" />" (يتطلب إعادة التشغيل)</translation>
 <translation id="3576141592585647168">تغيير المنطقة الزمنية</translation>
 <translation id="3595596368722241419">البطارية ممتلئة</translation>
+<translation id="3604801046548457007">تم إنشاء سطح المكتب <ph name="DESK_TITILE" />.</translation>
 <translation id="3606978283550408104">تم توصيل شاشة برايل.</translation>
 <translation id="3621202678540785336">الإدخال</translation>
 <translation id="3626281679859535460">السطوع</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">هذه هي أدوات قلم الشاشة</translation>
 <translation id="4389184120735010762">لقد ضغطت على اختصار لوحة المفاتيح للمُكبِّر الذي تم إرساؤه. هل ترغب في تفعيله؟</translation>
 <translation id="4421231901400348175">مشاركة التحكم في شاشتك مع <ph name="HELPER_NAME" /> عن طريق المساعدة عن بُعد.</translation>
-<translation id="4430019312045809116">مستوى الصوت</translation>
 <translation id="4450893287417543264">عدم الإظهار مرة أخرى</translation>
 <translation id="4477350412780666475">المقطع الصوتي التالي</translation>
 <translation id="4479639480957787382">إيثرنت</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">السحب بعد النقر</translation>
 <translation id="5750765938512549687">تم إيقاف البلوتوث</translation>
 <translation id="5777841717266010279">هل ترغب في إيقاف مشاركة الشاشة؟</translation>
-<translation id="57838592816432529">كتم الصوت</translation>
 <translation id="5820394555380036790">‏نظام التشغيل Chromium</translation>
 <translation id="5837036133683224804">إيقاف <ph name="ROUTE_TITLE" /> في <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">غير مفعّل</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">الطاقة</translation>
 <translation id="6727969043791803658">البلوتوث متصل، ومستوى شحن البطارية: <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6751826523481687655">تتبّع الأداء قيْد التفعيل</translation>
+<translation id="6752912906630585008">تمت إزالة سطح المكتب <ph name="REMOVED_DESK" /> ودمجه مع سطح المكتب <ph name="RECEIVE_DESK" />.</translation>
 <translation id="6790428901817661496">التشغيل</translation>
 <translation id="6803622936009808957">تعذر إجراء النسخ المطابق للعروض نظرًا لعدم العثور على درجات دقة متوافقة. تم الدخول إلى سطح المكتب الممتد بدلاً من ذلك.</translation>
 <translation id="6820676911989879663">حان وقت الاستراحة</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">الإعدادات</translation>
 <translation id="8433186206711564395">إعدادات الشبكة</translation>
 <translation id="8433977262951327081">تم تغيير اختصار عرض الفقاعة التفسيرية لقائمة خيارات الإدخال في الرف. يُرجى استخدام <ph name="NEW_SHORTCUT" /> بدلاً من <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">تم تفعيل سطح المكتب <ph name="DESK_TITILE" />.</translation>
 <translation id="8452135315243592079">‏شريحة SIM مفقودة</translation>
 <translation id="8454013096329229812">‏تم تشغيل Wi-Fi.</translation>
 <translation id="847056008324733326">عرض إعدادات المقياس</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 3473fdb..e910fca4 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Установена е връзка с едно устройство}other{Установена е връзка с # устройства}}</translation>
 <translation id="3226991577105957773">+ още <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Няма мобилни мрежи</translation>
+<translation id="3249513730522716925">Прозорецът <ph name="WINDOW_TITLE" /> бе преместен от работен кът <ph name="ACTIVE_DESK" /> в работен кът <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">„What can you do?“ („Какво можеш да правиш?“)</translation>
 <translation id="3294437725009624529">Гост</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> пак може да влезе в профила си по-късно.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Връщане към „<ph name="FROM_LOCALE" />“ (изисква рестартиране)</translation>
 <translation id="3576141592585647168">Промяна на часовата зона</translation>
 <translation id="3595596368722241419">Батерията е заредена</translation>
+<translation id="3604801046548457007">Работен кът <ph name="DESK_TITILE" /> е създаден</translation>
 <translation id="3606978283550408104">Брайловият дисплей е свързан.</translation>
 <translation id="3621202678540785336">Вход</translation>
 <translation id="3626281679859535460">Яркост</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Това са инструментите ви за писане</translation>
 <translation id="4389184120735010762">Използвахте клавишната комбинация за лупата в прикрепен режим. Искате ли да включите функцията?</translation>
 <translation id="4421231901400348175">Споделяте с/ъс <ph name="HELPER_NAME" /> контрола върху екрана си чрез отдалечено съдействие.</translation>
-<translation id="4430019312045809116">Звук</translation>
 <translation id="4450893287417543264">Да не се показва отново</translation>
 <translation id="4477350412780666475">Следващ запис</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Преместване чрез докосване</translation>
 <translation id="5750765938512549687">Функцията за Bluetooth е изключена</translation>
 <translation id="5777841717266010279">Да се спре ли споделянето на екрана?</translation>
-<translation id="57838592816432529">Заглушаване</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Спиране на предаването на <ph name="ROUTE_TITLE" /> към „<ph name="RECEIVER_NAME" />“</translation>
 <translation id="5860033963881614850">Изключено</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Захранване</translation>
 <translation id="6727969043791803658">Свързано, <ph name="BATTERY_PERCENTAGE" />% батерия</translation>
 <translation id="6751826523481687655">Проследяването на ефективността е включено</translation>
+<translation id="6752912906630585008">Работен кът <ph name="REMOVED_DESK" /> е премахнат и е обединен с работен кът <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Пускане</translation>
 <translation id="6803622936009808957">Дисплеите не можаха да се дублират, тъй като не бяха намерени поддържани разделителни способности. Вместо това влязохте в режима за разширен работен плот.</translation>
 <translation id="6820676911989879663">Време е за почивка!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8433186206711564395">Настройки на мрежата</translation>
 <translation id="8433977262951327081">Комбинацията за показване в лавицата на балончето с менюто за опциите за въвеждане е променена. Моля, използвайте <ph name="NEW_SHORTCUT" /> вместо <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Работен кът <ph name="DESK_TITILE" /> е активиран</translation>
 <translation id="8452135315243592079">SIM картата липсва</translation>
 <translation id="8454013096329229812">Wi-Fi е включен.</translation>
 <translation id="847056008324733326">Настройки за мащаба на показване</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index decf944b..f1113cc 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{একটি ডিভাইসে কানেক্ট রয়েছে}one{#টি ডিভাইসে কানেক্ট রয়েছে}other{#টি ডিভাইসে কানেক্ট রয়েছে}}</translation>
 <translation id="3226991577105957773">+ আরও <ph name="COUNT" />টি</translation>
 <translation id="3236488194889173876">কোনো মোবাইল নেটওয়ার্ক উপলব্ধ নেই</translation>
+<translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> ডেস্ক <ph name="ACTIVE_DESK" /> থেকে ডেস্ক <ph name="TARGET_DESK" />-এ সরানো হয়েছে</translation>
 <translation id="3255483164551725916">আপনি কি করতে পারেন?</translation>
 <translation id="3294437725009624529">অতিথি</translation>
 <translation id="3308453408813785101">তা সত্ত্বেও, <ph name="USER_EMAIL_ADDRESS" /> পরে সাইন-ইন করতে পারবেন।</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" তে ফেরান (পুনর্সূচনা প্রয়োজন)</translation>
 <translation id="3576141592585647168">টাইমজোন পরিবর্তন করা</translation>
 <translation id="3595596368722241419">ব্যাটারি পুরো চার্জ</translation>
+<translation id="3604801046548457007">ডেস্ক <ph name="DESK_TITILE" /> তৈরি করা হয়েছে</translation>
 <translation id="3606978283550408104">ব্রেইল প্রদর্শন সংযুক্ত হয়েছে৷</translation>
 <translation id="3621202678540785336">ইনপুট</translation>
 <translation id="3626281679859535460">উজ্জ্বলতা</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">এগুলি হল আপনার স্টাইলাস টুল</translation>
 <translation id="4389184120735010762">ডক করা ম্যাগনিফায়ারের জন্য আপনি কীবোর্ড শর্টকাট টিপেছেন। আপনি কি এটি চালু করতে চান?</translation>
 <translation id="4421231901400348175">রিমোট সহায়কের মাধ্যমে <ph name="HELPER_NAME" />-এর সাথে আপনার স্ক্রিন নিয়ন্ত্রন ভাগ করুন৷</translation>
-<translation id="4430019312045809116">ভলিউম</translation>
 <translation id="4450893287417543264">আর দেখতে চাই না</translation>
 <translation id="4477350412780666475">পরের ট্র্যাক চালান</translation>
 <translation id="4479639480957787382">ইথারনেট</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">ট্যাপ করে টেনে আনা</translation>
 <translation id="5750765938512549687">ব্লুটুথ বন্ধ আছে</translation>
 <translation id="5777841717266010279">স্ক্রিন শেয়ার করা থামাবেন?</translation>
-<translation id="57838592816432529">মিউট করুন</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" />-এ <ph name="ROUTE_TITLE" /> বন্ধ করুন</translation>
 <translation id="5860033963881614850">বন্ধ করুন</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">পাওয়ার</translation>
 <translation id="6727969043791803658">কানেক্ট করা আছে, ব্যাটারিতে <ph name="BATTERY_PERCENTAGE" />% চার্জ আছে</translation>
 <translation id="6751826523481687655">পারফরম্যান্স ট্রেস করার বিকল্প চালু আছে</translation>
+<translation id="6752912906630585008">ডেস্ক <ph name="REMOVED_DESK" />-কে সরিয়ে দিয়ে <ph name="RECEIVE_DESK" />-এর সাথে মার্জ করা হয়েছে</translation>
 <translation id="6790428901817661496">চালু করুন</translation>
 <translation id="6803622936009808957">সমর্থিত রেসুলিউশানগুলি খুঁজে না পাওয়ায় প্রদর্শনগুলি মিরর মানে প্রতিবিম্বিত করতে পারেনি। এর পরিবর্তে প্রসারিত ডেস্কটপে প্রবেশ করেছে।</translation>
 <translation id="6820676911989879663">বিরতি নিন!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">সেটিংস</translation>
 <translation id="8433186206711564395">নেটওয়ার্ক সেটিংস</translation>
 <translation id="8433977262951327081">শেল্ফে ইনপুট বিকল্পের মেনুর বুদবুদ দেখানোর শর্টকাটটি পরিবর্তন করা হয়েছে। অনুগ্রহ করে <ph name="OLD_SHORTCUT" /> এর পরিবর্তে <ph name="NEW_SHORTCUT" /> ব্যবহার করুন।</translation>
+<translation id="8444246603146515890">ডেস্ক <ph name="DESK_TITILE" /> অ্যাক্টিভেট করা হয়েছে</translation>
 <translation id="8452135315243592079">সিম কার্ড পাওয়া যাচ্ছে না</translation>
 <translation id="8454013096329229812">ওয়াই-ফাই চালু আছে৷</translation>
 <translation id="847056008324733326">স্কেলের সেটিংস দেখান</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 9ace1c31..8dd185a 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Connectat a un dispositiu}other{Connectat a # dispositius}}</translation>
 <translation id="3226991577105957773"><ph name="COUNT" /> més</translation>
 <translation id="3236488194889173876">No hi ha cap xarxa mòbil disponible</translation>
+<translation id="3249513730522716925">La finestra <ph name="WINDOW_TITLE" /> ha passat de l'escriptori <ph name="ACTIVE_DESK" /> a l'escriptori <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Què pots fer?</translation>
 <translation id="3294437725009624529">Convidat</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> pot iniciar la sessió més tard.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Torna a canviar a "<ph name="FROM_LOCALE" />" (requereix reiniciar)</translation>
 <translation id="3576141592585647168">Canvia la zona horària</translation>
 <translation id="3595596368722241419">Bateria carregada.</translation>
+<translation id="3604801046548457007">S'ha creat l'escriptori <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">S'ha connectat la pantalla Braille.</translation>
 <translation id="3621202678540785336">Entrada</translation>
 <translation id="3626281679859535460">Brillantor</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Aquestes són les eines del llapis òptic</translation>
 <translation id="4389184120735010762">Has premut la tecla de drecera de la lupa acoblada. Vols activar-la?</translation>
 <translation id="4421231901400348175">Es comparteix el control de la pantalla amb <ph name="HELPER_NAME" /> mitjançant l'Assistència remota.</translation>
-<translation id="4430019312045809116">Volum</translation>
 <translation id="4450893287417543264">No ho tornis a mostrar</translation>
 <translation id="4477350412780666475">Pista següent</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Tocar i arrossegar</translation>
 <translation id="5750765938512549687">El Bluetooth està desactivat</translation>
 <translation id="5777841717266010279">Vols aturar la compartició de pantalla?</translation>
-<translation id="57838592816432529">Silencia</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Atura <ph name="ROUTE_TITLE" /> a <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Desactivat</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Bateria</translation>
 <translation id="6727969043791803658">Connectat, <ph name="BATTERY_PERCENTAGE" />% de bateria</translation>
 <translation id="6751826523481687655">La traça del rendiment està activada</translation>
+<translation id="6752912906630585008">L'escriptori <ph name="REMOVED_DESK" /> s'ha suprimit i s'ha fusionat amb l'escriptori <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Reprodueix</translation>
 <translation id="6803622936009808957">No s'ha pogut fer la rèplica de les pantalles, perquè no s'ha trobat cap resolució compatible. S'està entrant al mode d'escriptori ampliat.</translation>
 <translation id="6820676911989879663">Fes una pausa</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Configuració</translation>
 <translation id="8433186206711564395">Configuració de la xarxa</translation>
 <translation id="8433977262951327081">La drecera per mostrar el quadre d'ajuda amb el menú d'opcions d'introducció al prestatge ha canviat. Fes servir <ph name="NEW_SHORTCUT" /> en lloc de la drecera <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">L'escriptori <ph name="DESK_TITILE" /> està activat</translation>
 <translation id="8452135315243592079">Falta la targeta SIM</translation>
 <translation id="8454013096329229812">La Wi-Fi està activada.</translation>
 <translation id="847056008324733326">Configuració de l'escala de visualització</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 12a59a0a..df51436 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Připojeno k zařízení}few{Připojeno k # zařízením}many{Připojeno k # zařízení}other{Připojeno k # zařízením}}</translation>
 <translation id="3226991577105957773">a ještě <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Není k dispozici žádná mobilní síť</translation>
+<translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> bylo přesunuto z plochy <ph name="ACTIVE_DESK" /> na plochu <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Co umíš?</translation>
 <translation id="3294437725009624529">Host</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> se i nadále bude moci přihlásit.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Změnit zpět na jazyk <ph name="FROM_LOCALE" /> (vyžaduje restart)</translation>
 <translation id="3576141592585647168">Změnit časové pásmo</translation>
 <translation id="3595596368722241419">Baterie je nabitá</translation>
+<translation id="3604801046548457007">Byla vytvořena plocha <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Je připojen hmatový displej.</translation>
 <translation id="3621202678540785336">Vstup</translation>
 <translation id="3626281679859535460">Jas</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Toto jsou nástroje pro dotykové pero</translation>
 <translation id="4389184120735010762">Stiskli jste klávesovou zkratku pro zadokovanou lupu. Chcete ji zapnout?</translation>
 <translation id="4421231901400348175">Ovládání obrazovky je prostřednictvím Vzdálené pomoci sdíleno s uživatelem <ph name="HELPER_NAME" />.</translation>
-<translation id="4430019312045809116">Hlasitost</translation>
 <translation id="4450893287417543264">Tuto zprávu již nezobrazovat</translation>
 <translation id="4477350412780666475">Další skladba</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Přetažení klepnutím</translation>
 <translation id="5750765938512549687">Rozhraní Bluetooth je vypnuté</translation>
 <translation id="5777841717266010279">Ukončit sdílení obrazovky?</translation>
-<translation id="57838592816432529">Ztlumit</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Zastavit <ph name="ROUTE_TITLE" /> na přijímači <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Vypnuto</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Napájení</translation>
 <translation id="6727969043791803658">Připojeno, <ph name="BATTERY_PERCENTAGE" /> % baterie</translation>
 <translation id="6751826523481687655">Trasování výkonu je zapnuté</translation>
+<translation id="6752912906630585008">Plocha <ph name="REMOVED_DESK" /> byla odstraněna a sloučena s plochou <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Přehrát</translation>
 <translation id="6803622936009808957">Zobrazení nelze zrcadlit, protože nebyla nalezena podporovaná rozlišení. Místo toho se spustil režim rozšířené pracovní plochy.</translation>
 <translation id="6820676911989879663">Dejte si pauzu.</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Nastavení</translation>
 <translation id="8433186206711564395">Nastavení sítě</translation>
 <translation id="8433977262951327081">Klávesová zkratka k zobrazení bubliny s možnostmi vstupu na poličce se změnila. Namísto zkratky <ph name="OLD_SHORTCUT" /> používejte zkratku <ph name="NEW_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Plocha <ph name="DESK_TITILE" /> byla aktivována</translation>
 <translation id="8452135315243592079">Chybí SIM karta</translation>
 <translation id="8454013096329229812">Připojení Wi-Fi je zapnuto.</translation>
 <translation id="847056008324733326">Zobrazit nastavení měřítka</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index c81c616..d308198 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Forbundet til en enhed}one{Forbundet til # enhed}other{Forbundet til # enheder}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> andre</translation>
 <translation id="3236488194889173876">Der er ingen tilgængelige mobilnetværk</translation>
+<translation id="3249513730522716925">Vindue <ph name="WINDOW_TITLE" /> blev flyttet fra Skrivebord <ph name="ACTIVE_DESK" /> til Skrivebord <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Hvad kan du gøre?</translation>
 <translation id="3294437725009624529">Gæst</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> kan stadig logge ind senere.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Skift tilbage til "<ph name="FROM_LOCALE" />" (kræver genstart)</translation>
 <translation id="3576141592585647168">Skift tidszone</translation>
 <translation id="3595596368722241419">Batteri helt opladet</translation>
+<translation id="3604801046548457007">Skrivebord <ph name="DESK_TITILE" /> blev oprettet</translation>
 <translation id="3606978283550408104">Der er tilsluttet en brailleskærm.</translation>
 <translation id="3621202678540785336">Input</translation>
 <translation id="3626281679859535460">Lysstyrke</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Dette er dine styluspenværktøjer</translation>
 <translation id="4389184120735010762">Du trykkede på tastaturgenvejen for det fastgjorte lupvindue. Vil du aktivere indstillingen?</translation>
 <translation id="4421231901400348175">Skærmdeling med <ph name="HELPER_NAME" /> via Fjernsupport.</translation>
-<translation id="4430019312045809116">Lydstyrke</translation>
 <translation id="4450893287417543264">Vis ikke igen</translation>
 <translation id="4477350412780666475">Næste nummer</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Tryk og træk</translation>
 <translation id="5750765938512549687">Bluetooth er slået fra</translation>
 <translation id="5777841717266010279">Vil du afslutte skærmdeling?</translation>
-<translation id="57838592816432529">Slå lyden fra</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Stop <ph name="ROUTE_TITLE" /> på <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Fra</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Strøm</translation>
 <translation id="6727969043791803658">Tilsluttet, <ph name="BATTERY_PERCENTAGE" /> % batteri</translation>
 <translation id="6751826523481687655">Sporing af effektivitet er slået til</translation>
+<translation id="6752912906630585008">Skrivebord <ph name="REMOVED_DESK" /> blev fjernet og slået sammen med Skrivebord <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Afspil</translation>
 <translation id="6803622936009808957">Skærmene kunne ikke spejles, da der ikke fandtes en understøttet opløsning. I stedet anvendes Udvidet skrivebord.</translation>
 <translation id="6820676911989879663">Hold en pause</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Indstillinger</translation>
 <translation id="8433186206711564395">Netværksindstillinger</translation>
 <translation id="8433977262951327081">Genvejen til menuboblen med indtastningsmuligheder på hylden har ændret sig. Brug <ph name="NEW_SHORTCUT" /> i stedet for <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Skrivebord <ph name="DESK_TITILE" /> er aktiveret</translation>
 <translation id="8452135315243592079">SIM-kort mangler</translation>
 <translation id="8454013096329229812">Wi-Fi er slået til.</translation>
 <translation id="847056008324733326">Indstillinger for visningsskala</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index fb11bad0..82f215f 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Mit einem Gerät verbunden}other{Mit # Geräten verbunden}}</translation>
 <translation id="3226991577105957773">+ <ph name="COUNT" /> weitere</translation>
 <translation id="3236488194889173876">Kein Mobilfunknetz verfügbar</translation>
+<translation id="3249513730522716925">Das Fenster "<ph name="WINDOW_TITLE" />" wurde von Arbeitsbereich <ph name="ACTIVE_DESK" /> zu Arbeitsbereich <ph name="TARGET_DESK" /> verschoben</translation>
 <translation id="3255483164551725916">Was kannst du alles tun?</translation>
 <translation id="3294437725009624529">Gast</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> kann sich später weiterhin anmelden.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Zurücksetzen auf "<ph name="FROM_LOCALE" />" (Neustart erforderlich)</translation>
 <translation id="3576141592585647168">Zeitzone ändern</translation>
 <translation id="3595596368722241419">Akku voll</translation>
+<translation id="3604801046548457007">Arbeitsbereich <ph name="DESK_TITILE" /> erstellt</translation>
 <translation id="3606978283550408104">Verbindung zur Braillezeile hergestellt</translation>
 <translation id="3621202678540785336">Eingang</translation>
 <translation id="3626281679859535460">Helligkeit</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Dies sind Ihre Eingabestift-Tools</translation>
 <translation id="4389184120735010762">Sie haben die Tastenkombination für den Modus "Angedockte Lupe" gedrückt. Möchten Sie ihn aktivieren?</translation>
 <translation id="4421231901400348175">Sie teilen sich die Bildschirmsteuerung mit <ph name="HELPER_NAME" /> per Remote-Unterstützung.</translation>
-<translation id="4430019312045809116">Lautstärke</translation>
 <translation id="4450893287417543264">Nicht mehr anzeigen</translation>
 <translation id="4477350412780666475">Nächster Titel</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Antippen und Ziehen</translation>
 <translation id="5750765938512549687">Bluetooth ist deaktiviert</translation>
 <translation id="5777841717266010279">Bildschirmfreigabe beenden?</translation>
-<translation id="57838592816432529">Stummschalten</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="ROUTE_TITLE" /> auf <ph name="RECEIVER_NAME" /> beenden</translation>
 <translation id="5860033963881614850">Aus</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Akkuleistung</translation>
 <translation id="6727969043791803658">Verbunden, Akkustand bei <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6751826523481687655">Leistungsverfolgung ist aktiviert</translation>
+<translation id="6752912906630585008">Arbeitsbereich <ph name="REMOVED_DESK" /> wurde entfernt und mit Arbeitsbereich <ph name="RECEIVE_DESK" /> zusammengeführt</translation>
 <translation id="6790428901817661496">Wiedergabe</translation>
 <translation id="6803622936009808957">Der Bildschirm konnte nicht gespiegelt werden, da die Auflösung nicht unterstützt wird. Stattdessen wurde der Modus für den erweiterten Desktop gestartet.</translation>
 <translation id="6820676911989879663">Zeit für eine Pause.</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Einstellungen</translation>
 <translation id="8433186206711564395">Netzwerkeinstellungen</translation>
 <translation id="8433977262951327081">Die Tastenkombination zum Aufrufen des Infofelds für die Eingabeoptionen in der Ablage hat sich geändert. Bitte drücken Sie <ph name="NEW_SHORTCUT" /> statt <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Arbeitsbereich <ph name="DESK_TITILE" /> aktiviert</translation>
 <translation id="8452135315243592079">Keine SIM-Karte vorhanden</translation>
 <translation id="8454013096329229812">WLAN ist aktiviert.</translation>
 <translation id="847056008324733326">Einstellungen für Displaymaßstab</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 46129be..a4d443b 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Συνδέθηκε σε κάποια συσκευή}other{Συνδέθηκε σε # συσκευές}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> ακόμη</translation>
 <translation id="3236488194889173876">Δεν υπάρχουν διαθέσιμα δίκτυα κινητής τηλεφωνίας</translation>
+<translation id="3249513730522716925">Η επιφάνεια εργασίας <ph name="WINDOW_TITLE" /> μετακινήθηκε από την επιφάνεια εργασίας <ph name="ACTIVE_DESK" /> στην επιφάνεια εργασίας <ph name="TARGET_DESK" />.</translation>
 <translation id="3255483164551725916">Τι μπορείς να κάνεις;</translation>
 <translation id="3294437725009624529">Επισκέπτης</translation>
 <translation id="3308453408813785101">Ο χρήστης <ph name="USER_EMAIL_ADDRESS" /> μπορεί να συνδεθεί αργότερα.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Αλλάξτε το πάλι σε "<ph name="FROM_LOCALE" />" (απαιτείται επανεκκίνηση)</translation>
 <translation id="3576141592585647168">Αλλαγή ζώνης ώρας</translation>
 <translation id="3595596368722241419">Μπαταρία πλήρης</translation>
+<translation id="3604801046548457007">Δημιουργήθηκε επιφάνεια εργασίας <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Συνδέθηκε η οθόνη Braille.</translation>
 <translation id="3621202678540785336">Είσοδος</translation>
 <translation id="3626281679859535460">Φωτεινότητα</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Αυτά είναι τα εργαλεία γραφίδας σας</translation>
 <translation id="4389184120735010762">Πατήσατε τη συντόμευση πληκτρολογίου για τον μεγεθυντικό φακό σε παράθυρο. Θέλετε να τον ενεργοποιήσετε;</translation>
 <translation id="4421231901400348175">Κοινόχρηστος έλεγχος της οθόνης σας με το χρήστη <ph name="HELPER_NAME" /> μέσω της απομακρυσμένης βοήθειας.</translation>
-<translation id="4430019312045809116">Ένταση</translation>
 <translation id="4450893287417543264">Να μην εμφανιστεί ξανά</translation>
 <translation id="4477350412780666475">Επόμενο κομμάτι</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Μεταφορά με πάτημα</translation>
 <translation id="5750765938512549687">Το Bluetooth είναι απενεργοποιημένο</translation>
 <translation id="5777841717266010279">Θέλετε να σταματήσετε να μοιράζεστε την οθόνη;</translation>
-<translation id="57838592816432529">Σίγαση</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Διακοπή <ph name="ROUTE_TITLE" /> σε <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Απενεργοποιημένη</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Ενεργοποίηση</translation>
 <translation id="6727969043791803658">Συνδεδεμένη, μπαταρία <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6751826523481687655">Η παρακολούθηση απόδοσης έχει ενεργοποιηθεί</translation>
+<translation id="6752912906630585008">Η επιφάνεια εργασίας <ph name="REMOVED_DESK" /> καταργήθηκε και συγχωνεύτηκε με την επιφάνεια εργασίας <ph name="RECEIVE_DESK" />.</translation>
 <translation id="6790428901817661496">Αναπαραγωγή</translation>
 <translation id="6803622936009808957">Δεν ήταν δυνατός ο αντικατοπτρισμός των οθονών καθώς δεν βρέθηκαν υποστηριζόμενες αναλύσεις. Έχει ενεργοποιηθεί εναλλακτικά η εκτεταμένη επιφάνεια εργασίας.</translation>
 <translation id="6820676911989879663">Κάντε ένα διάλειμμα!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Ρυθμίσεις</translation>
 <translation id="8433186206711564395">Ρυθμίσεις δικτύου</translation>
 <translation id="8433977262951327081">Η συντόμευση για να εμφανίσετε το συννεφάκι μενού επιλογών εισαγωγής άλλαξε. Χρησιμοποιήστε το <ph name="NEW_SHORTCUT" /> αντί για το <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Η επιφάνεια εργασίας <ph name="DESK_TITILE" /> ενεργοποιήθηκε</translation>
 <translation id="8452135315243592079">Κάρτα SIM που λείπει</translation>
 <translation id="8454013096329229812">Το Wi-Fi έχει ενεργοποιηθεί.</translation>
 <translation id="847056008324733326">Εμφάνιση ρυθμίσεων κλίμακας</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index 5e5a7c1..e54a8c5 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Connected to a device}other{Connected to # devices}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> more</translation>
 <translation id="3236488194889173876">No mobile network available</translation>
+<translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> moved from Desk <ph name="ACTIVE_DESK" /> to Desk <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">What can you do?</translation>
 <translation id="3294437725009624529">Guest</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> can still sign in later.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Change back to "<ph name="FROM_LOCALE" />" (requires restart)</translation>
 <translation id="3576141592585647168">Change timezone</translation>
 <translation id="3595596368722241419">Battery full</translation>
+<translation id="3604801046548457007">Desk <ph name="DESK_TITILE" /> created</translation>
 <translation id="3606978283550408104">Braille display connected.</translation>
 <translation id="3621202678540785336">Input</translation>
 <translation id="3626281679859535460">Brightness</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">These are your stylus tools</translation>
 <translation id="4389184120735010762">You pressed the keyboard shortcut for the docked magnifier. Do you want to turn it on?</translation>
 <translation id="4421231901400348175">Sharing control of your screen with <ph name="HELPER_NAME" /> via Remote Assistance.</translation>
-<translation id="4430019312045809116">volume</translation>
 <translation id="4450893287417543264">Don't show again</translation>
 <translation id="4477350412780666475">Next track</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Tap dragging</translation>
 <translation id="5750765938512549687">Bluetooth is off</translation>
 <translation id="5777841717266010279">Stop screen sharing?</translation>
-<translation id="57838592816432529">Mute</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Stop <ph name="ROUTE_TITLE" /> on <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Off</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Power</translation>
 <translation id="6727969043791803658">Connected, <ph name="BATTERY_PERCENTAGE" />% battery</translation>
 <translation id="6751826523481687655">Performance tracing is turned on</translation>
+<translation id="6752912906630585008">Desk <ph name="REMOVED_DESK" /> removed and merged with Desk <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Play</translation>
 <translation id="6803622936009808957">Could not mirror displays since no supported resolutions found. Entered extended desktop instead.</translation>
 <translation id="6820676911989879663">Take a break!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Settings</translation>
 <translation id="8433186206711564395">Network settings</translation>
 <translation id="8433977262951327081">The shortcut to show the input options menu bubble in the shelf has changed. Please use <ph name="NEW_SHORTCUT" /> instead of <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Desk <ph name="DESK_TITILE" /> activated</translation>
 <translation id="8452135315243592079">Missing SIM card</translation>
 <translation id="8454013096329229812">Wi-Fi is turned on.</translation>
 <translation id="847056008324733326">Display scale settings</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 99b9101..99ba8ce 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Conectado a un dispositivo}other{Conectado a # dispositivos}}</translation>
 <translation id="3226991577105957773"><ph name="COUNT" /> más</translation>
 <translation id="3236488194889173876">No hay redes móviles disponibles</translation>
+<translation id="3249513730522716925">La ventana <ph name="WINDOW_TITLE" /> se movió del escritorio <ph name="ACTIVE_DESK" /> al <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">¿Qué puedes hacer?</translation>
 <translation id="3294437725009624529">Invitado</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> podrá acceder más tarde.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Volver a "<ph name="FROM_LOCALE" />" (debes reiniciar).</translation>
 <translation id="3576141592585647168">Cambiar zona horaria</translation>
 <translation id="3595596368722241419">Batería completa</translation>
+<translation id="3604801046548457007">Se creó el escritorio <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Dispositivo braille conectado</translation>
 <translation id="3621202678540785336">Entrada</translation>
 <translation id="3626281679859535460">Brillo</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">Estas son las herramientas de la pluma stylus</translation>
 <translation id="4389184120735010762">Presionaste la combinación de teclas para activar la lupa con vista acoplada. ¿Quieres activarla?</translation>
 <translation id="4421231901400348175">Se está compartiendo el control de la pantalla con <ph name="HELPER_NAME" /> mediante la Asistencia remota.</translation>
-<translation id="4430019312045809116">Volumen</translation>
 <translation id="4450893287417543264">No volver a mostrar</translation>
 <translation id="4477350412780666475">Siguiente pista</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">Función tocar y arrastrar</translation>
 <translation id="5750765938512549687">Se activó la conexión Bluetooth</translation>
 <translation id="5777841717266010279">¿Dejar de compartir la pantalla?</translation>
-<translation id="57838592816432529">Silenciar</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Detener <ph name="ROUTE_TITLE" /> en <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">No</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Alimentación</translation>
 <translation id="6727969043791803658">Conectado (batería: <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="6751826523481687655">Se activó el registro del rendimiento</translation>
+<translation id="6752912906630585008">Se quitó el escritorio <ph name="REMOVED_DESK" /> y se combinó con el <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Reproducir</translation>
 <translation id="6803622936009808957">No se pudieron reflejar las pantallas porque no se encontraron resoluciones compatibles. En su lugar, se activó el escritorio extendido.</translation>
 <translation id="6820676911989879663">Toma un descanso</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8433186206711564395">Opciones de red</translation>
 <translation id="8433977262951327081">El acceso directo para mostrar el cuadro con el menú de opciones de entrada en la biblioteca cambió. Usa <ph name="NEW_SHORTCUT" /> en lugar de <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Se activó el escritorio <ph name="DESK_TITILE" /></translation>
 <translation id="8452135315243592079">Falta la tarjeta SIM</translation>
 <translation id="8454013096329229812">Wi-Fi activada</translation>
 <translation id="847056008324733326">Configuración de escala de visualización</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 3fbc459..8ce1896 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Conectado a 1 dispositivo}other{Conectado a # dispositivos}}</translation>
 <translation id="3226991577105957773">y <ph name="COUNT" /> más</translation>
 <translation id="3236488194889173876">No hay ninguna red móvil disponible</translation>
+<translation id="3249513730522716925">La ventana <ph name="WINDOW_TITLE" /> se ha movido del escritorio <ph name="ACTIVE_DESK" /> al escritorio <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">¿Qué puedes hacer?</translation>
 <translation id="3294437725009624529">Invitado</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> podrá iniciar sesión después de la eliminación.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Cambiar de nuevo por "<ph name="FROM_LOCALE" />" (requiere reiniciar)</translation>
 <translation id="3576141592585647168">Cambiar zona horaria</translation>
 <translation id="3595596368722241419">Batería al máximo</translation>
+<translation id="3604801046548457007">Se ha creado el escritorio <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">La pantalla braille está conectada.</translation>
 <translation id="3621202678540785336">Entrada</translation>
 <translation id="3626281679859535460">Brillo</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">Estas son las herramientas del lápiz óptico</translation>
 <translation id="4389184120735010762">Has pulsado la combinación de teclas que activa la lupa fijada. ¿Quieres activarla?</translation>
 <translation id="4421231901400348175">Compartiendo control de la pantalla con <ph name="HELPER_NAME" /> a través de Asistencia remota.</translation>
-<translation id="4430019312045809116">Volumen</translation>
 <translation id="4450893287417543264">No volver a mostrar</translation>
 <translation id="4477350412780666475">Pista siguiente</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">Tocar y arrastrar</translation>
 <translation id="5750765938512549687">El Bluetooth está desactivado</translation>
 <translation id="5777841717266010279">¿Dejar de compartir la pantalla?</translation>
-<translation id="57838592816432529">Silenciar</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Parar <ph name="ROUTE_TITLE" /> en <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">No</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Batería</translation>
 <translation id="6727969043791803658">Conectado, <ph name="BATTERY_PERCENTAGE" /> % de batería</translation>
 <translation id="6751826523481687655">El control del rendimiento está activado</translation>
+<translation id="6752912906630585008">Se ha quitado el escritorio <ph name="REMOVED_DESK" /> y se ha combinado con el escritorio <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Reproducir</translation>
 <translation id="6803622936009808957">No se han podido duplicar las pantallas porque no se han encontrado resoluciones compatibles. Se ha utilizado el modo de escritorio ampliado en su lugar.</translation>
 <translation id="6820676911989879663">Haz una pausa</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8433186206711564395">Configuración de red</translation>
 <translation id="8433977262951327081">La combinación de teclas para mostrar el cuadro del menú de opciones de entrada en la estantería ha cambiado. Utiliza <ph name="NEW_SHORTCUT" /> en lugar de <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Se ha activado el escritorio <ph name="DESK_TITILE" /></translation>
 <translation id="8452135315243592079">Falta la tarjeta SIM</translation>
 <translation id="8454013096329229812">La conexión Wi-Fi está activada.</translation>
 <translation id="847056008324733326">Configuración de escala de pantalla</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 152f3ad7..dd4e8ce 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Ühendatud ühe seadmega}other{Ühendatud # seadmega}}</translation>
 <translation id="3226991577105957773">ja veel <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Ühtegi mobiilsidevõrku pole saadaval</translation>
+<translation id="3249513730522716925">Aken <ph name="WINDOW_TITLE" /> teisaldati töölaualt <ph name="ACTIVE_DESK" /> töölauale <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Mida sa teha oskad?</translation>
 <translation id="3294437725009624529">Külaline</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> saab siiski hiljem sisse logida.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Muuda tagasi seadele <ph name="FROM_LOCALE" /> (nõuab taaskäivitust)</translation>
 <translation id="3576141592585647168">Ajavööndi muutmine</translation>
 <translation id="3595596368722241419">Aku on täis</translation>
+<translation id="3604801046548457007">Töölaud <ph name="DESK_TITILE" /> on loodud</translation>
 <translation id="3606978283550408104">Punktkirja ekraanikuva on ühendatud.</translation>
 <translation id="3621202678540785336">Sisend</translation>
 <translation id="3626281679859535460">Eredus</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">Need on teie elektronpliiatsi tööriistad</translation>
 <translation id="4389184120735010762">Vajutasite dokitud luubi otseteed. Kas soovite luubi sisse lülitada?</translation>
 <translation id="4421231901400348175">Ekraani juhtimise jagamine isikuga <ph name="HELPER_NAME" /> kaugabi kaudu.</translation>
-<translation id="4430019312045809116">Helitugevus</translation>
 <translation id="4450893287417543264">Ära kuva uuesti</translation>
 <translation id="4477350412780666475">Järgmine lugu</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">Puudutusega lohistamine</translation>
 <translation id="5750765938512549687">Bluetooth on välja lülitatud</translation>
 <translation id="5777841717266010279">Kas peatada ekraani jagamine?</translation>
-<translation id="57838592816432529">Vaigista</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Katkesta <ph name="ROUTE_TITLE" /> asukohas <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Väljas</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Toide</translation>
 <translation id="6727969043791803658">Ühendatud, <ph name="BATTERY_PERCENTAGE" />% akut</translation>
 <translation id="6751826523481687655">Toimivuse jälgimine on sisse lülitatud</translation>
+<translation id="6752912906630585008">Töölaud <ph name="REMOVED_DESK" /> eemaldati ja liideti töölauaga <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Esita</translation>
 <translation id="6803622936009808957">Ei saanud kuvasid peegeldada, kuna toetatud eraldusvõimeid ei leitud. Selle asemel siseneti laiendatud töölaua režiimi.</translation>
 <translation id="6820676911989879663">Tehke paus!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Seaded</translation>
 <translation id="8433186206711564395">Võrguseaded</translation>
 <translation id="8433977262951327081">Otsetee sisestusvalikute menüü mulli kuvamiseks riiulil on muutunud. Kasutage otsetee <ph name="OLD_SHORTCUT" /> asemel otseteed <ph name="NEW_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Töölaud <ph name="DESK_TITILE" /> aktiveeriti</translation>
 <translation id="8452135315243592079">SIM-kaart puudub</translation>
 <translation id="8454013096329229812">WiFi on sisse lülitatud.</translation>
 <translation id="847056008324733326">Ekraani skaala seaded</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index 5106917..fd7f99a 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{متصل به یک دستگاه.}one{متصل به # دستگاه}other{متصل به # دستگاه}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> مورد دیگر</translation>
 <translation id="3236488194889173876">هیچ شبکه تلفن همراهی دردسترس نیست</translation>
+<translation id="3249513730522716925">پنجره <ph name="WINDOW_TITLE" /> از میز <ph name="ACTIVE_DESK" /> به میز <ph name="TARGET_DESK" /> منتقل شد</translation>
 <translation id="3255483164551725916">‏What can you do?‎ (چه کاری می‌توانی انجام دهی؟)</translation>
 <translation id="3294437725009624529">مهمان</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> همچنان می‌تواند بعداً به سیستم وارد شود.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">به "<ph name="FROM_LOCALE" />" تغییر دهید (به راه‌اندازی دوباره نیاز دارد)</translation>
 <translation id="3576141592585647168">تغییر منطقه زمانی</translation>
 <translation id="3595596368722241419">باتری پر است</translation>
+<translation id="3604801046548457007">میز <ph name="DESK_TITILE" /> ایجاد شد</translation>
 <translation id="3606978283550408104">صفحه‌نمایش بریل متصل شد.</translation>
 <translation id="3621202678540785336">ورودی</translation>
 <translation id="3626281679859535460">روشنایی</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">این‌ها ابزارهای قلم شما هستند</translation>
 <translation id="4389184120735010762">میان‌بر صفحه‌کلید مربوط به ذره‌بین متصل را فشار دادید. می‌خواهید آن را روشن کنید؟</translation>
 <translation id="4421231901400348175">هم‌رسانی کنترل صفحه‌تان با <ph name="HELPER_NAME" /> از طریق راهنمایی ازراه‌دور.</translation>
-<translation id="4430019312045809116">میزان صدا</translation>
 <translation id="4450893287417543264">دیگر نشان داده نشود</translation>
 <translation id="4477350412780666475">آهنگ بعدی</translation>
 <translation id="4479639480957787382">اترنت</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">کشیدن با ضربه زدن</translation>
 <translation id="5750765938512549687">بلوتوث خاموش است</translation>
 <translation id="5777841717266010279">اشتراک‌گذاری صفحه نمایش متوقف شود؟</translation>
-<translation id="57838592816432529">بی‌صدا کردن</translation>
 <translation id="5820394555380036790">‏سیستم عامل Chromium </translation>
 <translation id="5837036133683224804">توقف <ph name="ROUTE_TITLE" /> به <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">خاموش</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">نیرو</translation>
 <translation id="6727969043791803658">متصل، <ph name="BATTERY_PERCENTAGE" />٪ باتری</translation>
 <translation id="6751826523481687655">ردیابی عملکرد روشن است</translation>
+<translation id="6752912906630585008">میز <ph name="REMOVED_DESK" /> برداشته شد و با میز <ph name="RECEIVE_DESK" /> ادغام شد</translation>
 <translation id="6790428901817661496">پخش</translation>
 <translation id="6803622936009808957">نمایش یک تصویر واحد در چند صفحه نمایش ممکن نیست زیرا وضوح تصویر پشتیبانی شده‌ای وجود ندارد. بجای آن حالت نمایش دسک‌تاپ چند بخشی استفاده می‌شود.</translation>
 <translation id="6820676911989879663">استراحت کنید!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">تنظیمات</translation>
 <translation id="8433186206711564395">تنظیمات شبکه</translation>
 <translation id="8433977262951327081">میان‌بر نمایش ابزارک اعلان گزینه‌های ورودی در قفسه تغییر کرده است. لطفاً به‌جای <ph name="OLD_SHORTCUT" /> از <ph name="NEW_SHORTCUT" /> استفاده کنید.</translation>
+<translation id="8444246603146515890">میز <ph name="DESK_TITILE" /> فعال شد</translation>
 <translation id="8452135315243592079">سیم‌کارت وجود ندارد</translation>
 <translation id="8454013096329229812">‏Wi-Fi روشن است.</translation>
 <translation id="847056008324733326">تنظیمات مقیاس نمایش</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 47bc4d9..61300dda 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Yhdistetty 1 laitteeseen}other{Yhdistetty # laitteeseen}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> muuta</translation>
 <translation id="3236488194889173876">Mobiiliverkkoja ei ole käytettävissä</translation>
+<translation id="3249513730522716925">Ikkuna <ph name="WINDOW_TITLE" /> siirretty työpöydältä <ph name="ACTIVE_DESK" /> työpöydälle <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Mitä osaat tehdä?</translation>
 <translation id="3294437725009624529">Vieras</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> voi silti kirjautua sisään myöhemmin.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Vaihda takaisin kieleksi <ph name="FROM_LOCALE" /> (vaatii uudelleenkäynnistyksen)</translation>
 <translation id="3576141592585647168">Muuta aikavyöhykettä</translation>
 <translation id="3595596368722241419">Akku täynnä</translation>
+<translation id="3604801046548457007">Työpöytä <ph name="DESK_TITILE" /> luotu</translation>
 <translation id="3606978283550408104">Pistekirjoitusnäyttö on yhdistetty.</translation>
 <translation id="3621202678540785336">Äänitulo:</translation>
 <translation id="3626281679859535460">Kirkkaus</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Tässä ovat näyttökynätyökalusi</translation>
 <translation id="4389184120735010762">Painoit kiinnitetyn suurennuksen pikanäppäintä. Haluatko ottaa sen käyttöön?</translation>
 <translation id="4421231901400348175">Näyttösi hallinta jaetaan käyttäjän <ph name="HELPER_NAME" /> kanssa Etätuen kautta.</translation>
-<translation id="4430019312045809116">Äänenvoimakkuus</translation>
 <translation id="4450893287417543264">Älä näytä uudelleen</translation>
 <translation id="4477350412780666475">Seuraava kappale</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Napauttamalla vetäminen</translation>
 <translation id="5750765938512549687">Bluetooth ei ole käytössä</translation>
 <translation id="5777841717266010279">Lopetetaanko näytön jakaminen?</translation>
-<translation id="57838592816432529">Mykistä</translation>
 <translation id="5820394555380036790">Chromium-käyttöjärjestelmä</translation>
 <translation id="5837036133683224804">Lopeta <ph name="ROUTE_TITLE" /> – <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Pois käytöstä</translation>
@@ -381,6 +381,7 @@
 <translation id="6723839937902243910">Virta</translation>
 <translation id="6727969043791803658">Yhdistetty, akun taso <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6751826523481687655">Tehokkuuden seuranta on käytössä</translation>
+<translation id="6752912906630585008">Työpöytä <ph name="REMOVED_DESK" /> poistettu ja yhdistetty työpöytään <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Toista</translation>
 <translation id="6803622936009808957">Näyttöjen peilaaminen ei onnistunut, sillä tuettua resoluutiota ei löytynyt. Sen sijaan valittiin työpöydän laajennus.</translation>
 <translation id="6820676911989879663">Pidä tauko</translation>
@@ -491,6 +492,7 @@
 <translation id="8428213095426709021">Asetukset</translation>
 <translation id="8433186206711564395">Verkkoasetukset</translation>
 <translation id="8433977262951327081">Hyllyn syöttöasetukset näyttävä valikkokupla on muuttunut. Käytä uutta pikanäppäintä <ph name="NEW_SHORTCUT" /> vanhan (<ph name="OLD_SHORTCUT" />) sijaan.</translation>
+<translation id="8444246603146515890">Työpöytä <ph name="DESK_TITILE" /> aktivoitu</translation>
 <translation id="8452135315243592079">SIM-kortti puuttuu.</translation>
 <translation id="8454013096329229812">Wi-Fi on käytössä.</translation>
 <translation id="847056008324733326">Näytön skaalauksen asetukset</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 29565487..9c3859d3 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -233,7 +233,6 @@
 <translation id="4379531060876907730">Ito ang iyong mga stylus tool</translation>
 <translation id="4389184120735010762">Napindot mo ang keyboard shortcut para sa naka-dock na magnifier. Gusto mo ba itong i-on?</translation>
 <translation id="4421231901400348175">Pagbabahagi ng kontrol sa iyong screen gamit ang <ph name="HELPER_NAME" /> sa pamamagitan ng Remote Assistance.</translation>
-<translation id="4430019312045809116">Volume</translation>
 <translation id="4450893287417543264">Huwag ipakitang muli</translation>
 <translation id="4477350412780666475">Susunod na Track</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +307,6 @@
 <translation id="5744083938413354016">Pag-tap upang mag-drag</translation>
 <translation id="5750765938512549687">Naka-off ang Bluetooth</translation>
 <translation id="5777841717266010279">Itigil ang screen sharing?</translation>
-<translation id="57838592816432529">I-mute</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Ihinto ang <ph name="ROUTE_TITLE" /> sa <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Naka-off</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 3434aed5..2f56282 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Connecté à un appareil}one{Connecté à # appareil}other{Connecté à # appareils}}</translation>
 <translation id="3226991577105957773">+ <ph name="COUNT" /> autres</translation>
 <translation id="3236488194889173876">Aucun réseau mobile disponible</translation>
+<translation id="3249513730522716925">La fenêtre <ph name="WINDOW_TITLE" /> a été déplacée du Bureau <ph name="ACTIVE_DESK" /> au Bureau <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Que sais-tu faire ?</translation>
 <translation id="3294437725009624529">Invité</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> pourra toujours se connecter plus tard.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Revenir à "<ph name="FROM_LOCALE" />" (redémarrage requis)</translation>
 <translation id="3576141592585647168">Modifier le fuseau horaire</translation>
 <translation id="3595596368722241419">Batterie pleine</translation>
+<translation id="3604801046548457007">Bureau <ph name="DESK_TITILE" /> créé</translation>
 <translation id="3606978283550408104">La plage braille est connectée.</translation>
 <translation id="3621202678540785336">Entrée</translation>
 <translation id="3626281679859535460">Luminosité</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Voici vos outils de stylet</translation>
 <translation id="4389184120735010762">Vous avez appuyé sur le raccourci clavier de la loupe ancrée. Voulez-vous l'activer ?</translation>
 <translation id="4421231901400348175">Partager le contrôle de votre écran avec <ph name="HELPER_NAME" /> via l'assistance à distance</translation>
-<translation id="4430019312045809116">Volume</translation>
 <translation id="4450893287417543264">Ne plus afficher</translation>
 <translation id="4477350412780666475">Titre suivant</translation>
 <translation id="4479639480957787382">Ethernet </translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Déplacement tactile</translation>
 <translation id="5750765938512549687">Bluetooth désactivé</translation>
 <translation id="5777841717266010279">Arrêter le partage d'écran ?</translation>
-<translation id="57838592816432529">Couper le son</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Arrêter <ph name="ROUTE_TITLE" /> vers <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Désactivé</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Alimentation</translation>
 <translation id="6727969043791803658">Connecté, batterie à <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6751826523481687655">Le suivi des performances est activé</translation>
+<translation id="6752912906630585008">Bureau <ph name="REMOVED_DESK" /> supprimé et fusionné avec le Bureau <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Lire</translation>
 <translation id="6803622936009808957">Impossible de dupliquer les écrans, car aucune résolution compatible n'a été détectée. Le bureau étendu a été activé à la place.</translation>
 <translation id="6820676911989879663">Faites une pause !</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Paramètres</translation>
 <translation id="8433186206711564395">Paramètres réseau</translation>
 <translation id="8433977262951327081">Le raccourci pour afficher l'info-bulle du menu des options de saisie dans l'étagère a changé. Veuillez utiliser <ph name="NEW_SHORTCUT" /> au lieu de <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Bureau <ph name="DESK_TITILE" /> activé</translation>
 <translation id="8452135315243592079">Carte SIM manquante</translation>
 <translation id="8454013096329229812">Le Wi-Fi est activé.</translation>
 <translation id="847056008324733326">Paramètres de l'échelle d'affichage</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 1ca995f4..32fd5c4 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{ઉપકરણ સાથે કનેક્ટ કર્યું}one{# ઉપકરણો સાથે કનેક્ટ કર્યું}other{# ઉપકરણો સાથે કનેક્ટ કર્યું}}</translation>
 <translation id="3226991577105957773">+ વધુ <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">કોઈ મોબાઇલ નેટવર્ક ઉપલબ્ધ નથી</translation>
+<translation id="3249513730522716925">વિડો <ph name="WINDOW_TITLE" />ને ડેસ્ક <ph name="ACTIVE_DESK" />માંથી ડેસ્ક <ph name="TARGET_DESK" />માં ખસેડી</translation>
 <translation id="3255483164551725916">તમે શું કરી શકો?</translation>
 <translation id="3294437725009624529">અતિથિ</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> હજીએ થોડા સમય પછી સાઇન ઇન કરી શકશે.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" પર પાછા જાઓ (ફરી શરૂ કરવું જરૂરી છે)</translation>
 <translation id="3576141592585647168">ટાઇમઝોનમાં ફેરફાર કરો</translation>
 <translation id="3595596368722241419">બૅટરી પૂર્ણ ચાર્જ</translation>
+<translation id="3604801046548457007">ડેસ્ક <ph name="DESK_TITILE" /> બનાવ્યું</translation>
 <translation id="3606978283550408104">બ્રેઇલ ડિસ્પ્લે કનેક્ટ થયું.</translation>
 <translation id="3621202678540785336">ઇનપુટ</translation>
 <translation id="3626281679859535460">તેજ</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">આ છે તમારા સ્ટાઇલસનાં સાધનો</translation>
 <translation id="4389184120735010762">તમે ડૉક કરેલ મૅગ્નિફાયર માટે કીબોર્ડ શૉર્ટકટ દબાવેલ છે. શું તમે તેને ચાલુ કરવા માગો છો?</translation>
 <translation id="4421231901400348175">દૂરસ્થ સહાય વડે <ph name="HELPER_NAME" /> સાથે તમારી સ્ક્રીનનું નિયંત્રણ શેર કરવું.</translation>
-<translation id="4430019312045809116">વૉલ્યૂમ</translation>
 <translation id="4450893287417543264">ફરી બતાવશો નહીં</translation>
 <translation id="4477350412780666475">આગલો ટ્રૅક</translation>
 <translation id="4479639480957787382">ઇથરનેટ</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">ખેંચવાને ટૅપ કરો</translation>
 <translation id="5750765938512549687">બ્લૂટૂથ બંધ છે</translation>
 <translation id="5777841717266010279">સ્ક્રીન શેરિંગ રોકીએ?</translation>
-<translation id="57838592816432529">અવાજ બંધ કરો</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> પર <ph name="ROUTE_TITLE" />ને રોકો</translation>
 <translation id="5860033963881614850">બંધ</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">પાવર</translation>
 <translation id="6727969043791803658">કનેક્ટ થયેલ, બૅટરી <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">કાર્યપ્રદર્શનની નોંધ રાખવાનું ચાલુ કરેલું છે</translation>
+<translation id="6752912906630585008">ડેસ્ક <ph name="REMOVED_DESK" /> કાઢી નાખ્યું અને ડેસ્ક <ph name="RECEIVE_DESK" /> સાથે મર્જ કર્યું</translation>
 <translation id="6790428901817661496">ચલાવો</translation>
 <translation id="6803622936009808957">કોઈ સમર્થિત રિઝોલ્યૂશન મળ્યું ન હોવાથી, પ્રદર્શનોને પ્રતિબિંબિત કરી શકાયા નથી. તેને બદલે વિસ્તૃત ડેસ્કટૉપ દાખલ કર્યું.</translation>
 <translation id="6820676911989879663">વિરામ લો!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">સેટિંગ્સ</translation>
 <translation id="8433186206711564395">નેટવર્ક સેટિંગ્સ</translation>
 <translation id="8433977262951327081">શેલ્ફમાં મેનૂ પરપોટો ઇનપુટ વિકલ્પો બતાવવાનો શૉર્ટકટ બદલાયો છે. કૃપા કરીને <ph name="OLD_SHORTCUT" />ને બદલે <ph name="NEW_SHORTCUT" />નો ઉપયોગ કરો.</translation>
+<translation id="8444246603146515890">ડેસ્ક <ph name="DESK_TITILE" /> સક્રિય કર્યું</translation>
 <translation id="8452135315243592079">SIM કાર્ડ ખૂટે છે</translation>
 <translation id="8454013096329229812">વાઇ-ફાઇ ચાલુ છે.</translation>
 <translation id="847056008324733326">પ્રદર્શન ધોરણનું સેટિંગ</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index b20fd76..31e8e4e 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{किसी डिवाइस से कनेक्ट है}one{# डिवाइस से कनेक्ट है}other{# डिवाइस से कनेक्ट है}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> और</translation>
 <translation id="3236488194889173876">कोई मोबाइल नेटवर्क उपलब्ध नहीं</translation>
+<translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> को डेस्क <ph name="ACTIVE_DESK" /> से डेस्क <ph name="TARGET_DESK" /> पर सेट कर दिया गया है</translation>
 <translation id="3255483164551725916">तुम क्या-क्या कर सकती हो?</translation>
 <translation id="3294437725009624529">अतिथि</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> अब भी बाद में साइन इन कर सकते हैं.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" में फिर से बदलें (फिर से आरंभ करने की आवश्यकता है)</translation>
 <translation id="3576141592585647168">समय क्षेत्र बदलें</translation>
 <translation id="3595596368722241419">बैटरी पूरी हो गई</translation>
+<translation id="3604801046548457007">डेस्क <ph name="DESK_TITILE" /> बनाया गया</translation>
 <translation id="3606978283550408104">ब्रेल डिसप्ले कनेक्ट हो गया.</translation>
 <translation id="3621202678540785336">इनपुट</translation>
 <translation id="3626281679859535460">स्क्रीन की रोशनी</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">ये आपके स्टाइलस टूल हैं</translation>
 <translation id="4389184120735010762">आपने 'सामग्री को बड़ा दिखाने वाली डॉक की गई सेवा' का कीबोर्ड शॉर्टकट दबाया है. क्या आप इसे चालू करना चाहते हैं?</translation>
 <translation id="4421231901400348175">आपकी स्‍क्रीन का नियंत्रण दूरस्‍थ सहायक के द्वारा <ph name="HELPER_NAME" /> से शेयर किया जा रहा है.</translation>
-<translation id="4430019312045809116">मात्रा</translation>
 <translation id="4450893287417543264">फिर से न दिखाएं</translation>
 <translation id="4477350412780666475">अगला ट्रैक</translation>
 <translation id="4479639480957787382">इथरनेट</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">टैप करके खींचना</translation>
 <translation id="5750765938512549687">ब्लूटूथ बंद है</translation>
 <translation id="5777841717266010279">स्‍क्रीन साझाकरण बंद करें?</translation>
-<translation id="57838592816432529">म्यूट करें</translation>
 <translation id="5820394555380036790">क्रोमियम OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> पर <ph name="ROUTE_TITLE" /> बंद करें</translation>
 <translation id="5860033963881614850">बंद</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">पावर</translation>
 <translation id="6727969043791803658">कनेक्ट किया गया, <ph name="BATTERY_PERCENTAGE" /> % बैटरी बची है</translation>
 <translation id="6751826523481687655">'परफ़ॉर्मेंस ट्रेसिंग' चालू कर दी गई है</translation>
+<translation id="6752912906630585008">डेस्क <ph name="REMOVED_DESK" /> को हटा दिया गया है और इसे डेस्क<ph name="RECEIVE_DESK" /> के साथ मिला दिया गया है</translation>
 <translation id="6790428901817661496">चलाएं</translation>
 <translation id="6803622936009808957">प्रदर्शनों को मिरर नहीं किया जा सका क्योंकि कोई समर्थित रिज़ॉल्यूशन नहीं मिला. इसके बजाय विस्तारित डेस्कटॉप में चला गया है.</translation>
 <translation id="6820676911989879663">आज के लिए इतना ही!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">सेटिंग</translation>
 <translation id="8433186206711564395">नेटवर्क सेटिंग</translation>
 <translation id="8433977262951327081">शेल्फ़ में इनपुट विकल्पों का मेन्यू बबल दिखाने वाला शॉर्टकट बदल गया है. कृपया <ph name="OLD_SHORTCUT" /> के बजाय <ph name="NEW_SHORTCUT" /> का इस्तेमाल करें.</translation>
+<translation id="8444246603146515890"><ph name="DESK_TITILE" /> डेस्क चालू है</translation>
 <translation id="8452135315243592079">अनुपलब्ध SIM कार्ड</translation>
 <translation id="8454013096329229812">वाई-फ़ाई  चालू है.</translation>
 <translation id="847056008324733326">डिसप्ले पैमाने की सेटिंग</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index ab4045d..4090961 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Povezano s jednim uređajem}one{Povezano s # uređajem}few{Povezano s # uređaja}other{Povezano s # uređaja}}</translation>
 <translation id="3226991577105957773">Još <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Mobilne mreže nisu dostupne</translation>
+<translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> premješten je s radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Što možeš učiniti?</translation>
 <translation id="3294437725009624529">Gost</translation>
 <translation id="3308453408813785101">Korisnik <ph name="USER_EMAIL_ADDRESS" /> može se prijaviti i kasnije.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Vratite na "<ph name="FROM_LOCALE" />" (zahtijeva ponovno pokretanje)</translation>
 <translation id="3576141592585647168">Promjena vremenske zone</translation>
 <translation id="3595596368722241419">Baterija je puna</translation>
+<translation id="3604801046548457007">Izrađena je radna površina <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Brajev je redak povezan.</translation>
 <translation id="3621202678540785336">Ulaz</translation>
 <translation id="3626281679859535460">Svjetlina</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Ovo su vaši alati za pisaljke</translation>
 <translation id="4389184120735010762">Pritisnuli ste tipkovni prečac za usidreno povećalo. Želite li ga uključiti?</translation>
 <translation id="4421231901400348175"><ph name="HELPER_NAME" /> i vi dijelite kontrolu nad zaslonom putem Daljinske pomoći.</translation>
-<translation id="4430019312045809116">Glasnoća</translation>
 <translation id="4450893287417543264">Ne prikazuj ponovo</translation>
 <translation id="4477350412780666475">Sljedeća pjesma</translation>
 <translation id="4479639480957787382">Eternet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Povlačenje dodirom</translation>
 <translation id="5750765938512549687">Bluetooth je isključen</translation>
 <translation id="5777841717266010279">Prekinuti dijeljenje zaslona?</translation>
-<translation id="57838592816432529">Isključi zvuk</translation>
 <translation id="5820394555380036790">OS Chromium</translation>
 <translation id="5837036133683224804">Zaustavite <ph name="ROUTE_TITLE" /> na uređaju <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Isključeno</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Napajanje</translation>
 <translation id="6727969043791803658">Povezano, baterija <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Uključeno je praćenje izvedbe</translation>
+<translation id="6752912906630585008">Radna površina <ph name="REMOVED_DESK" /> uklonjena je i spojena s radnom površinom <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Reproduciraj</translation>
 <translation id="6803622936009808957">Nije bilo moguće zrcaliti zaslone jer nije pronađena nijedna podržana razlučivost. Umjesto toga proširena je radna površina.</translation>
 <translation id="6820676911989879663">Odmorite se!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Postavke</translation>
 <translation id="8433186206711564395">Postavke mreže</translation>
 <translation id="8433977262951327081">Promijenio se prečac za prikazivanje oblačića izbornika s opcijama unosa na polici. Upotrijebite <ph name="NEW_SHORTCUT" /> umjesto <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Aktivirana je radna površina <ph name="DESK_TITILE" /></translation>
 <translation id="8452135315243592079">Nedostaje SIM kartica</translation>
 <translation id="8454013096329229812">Wi-Fi je uključen.</translation>
 <translation id="847056008324733326">Postavke skale prikaza</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index 15184d5..8004fbe 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Egy eszközhöz csatlakoztatva}other{# eszközhöz csatlakoztatva}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> további</translation>
 <translation id="3236488194889173876">Nem áll rendelkezésre mobilhálózat</translation>
+<translation id="3249513730522716925">A(z) „<ph name="WINDOW_TITLE" />” ablak át lett helyezve a(z) „<ph name="ACTIVE_DESK" />” asztalról a(z) „<ph name="TARGET_DESK" />” asztalra</translation>
 <translation id="3255483164551725916">Mit lehet csinálni?</translation>
 <translation id="3294437725009624529">Vendég</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> később be tud jelentkezni.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Visszatérés ehhez: "<ph name="FROM_LOCALE" />" (újraindítás szükséges)</translation>
 <translation id="3576141592585647168">Időzóna módosítása</translation>
 <translation id="3595596368722241419">Akkumulátor feltöltve</translation>
+<translation id="3604801046548457007">Létrehozta a(z) „<ph name="DESK_TITILE" />” asztalt</translation>
 <translation id="3606978283550408104">Braille-kijelző csatlakoztatva.</translation>
 <translation id="3621202678540785336">Bemenet</translation>
 <translation id="3626281679859535460">Fényerő</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">Ezek az érintőceruza-eszközök</translation>
 <translation id="4389184120735010762">Lenyomta a dokkolt nagyító billentyűparancsát. Bekapcsolja a funkciót?</translation>
 <translation id="4421231901400348175">A képernyő irányításának megosztása <ph name="HELPER_NAME" /> segítővel a Távsegítség szolgáltatás keretein belül.</translation>
-<translation id="4430019312045809116">Hangerő</translation>
 <translation id="4450893287417543264">Ne jelenjen meg többé</translation>
 <translation id="4477350412780666475">Következő szám</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">Érintéssel húzás</translation>
 <translation id="5750765938512549687">Kikapcsolt Bluetooth</translation>
 <translation id="5777841717266010279">Leállítja a képernyőmegosztást?</translation>
-<translation id="57838592816432529">Némítás</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">A(z) <ph name="ROUTE_TITLE" /> leállítása itt: <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Kikapcsolva</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Energiaellátás</translation>
 <translation id="6727969043791803658">Csatlakoztatva, <ph name="BATTERY_PERCENTAGE" />%-os töltöttség</translation>
 <translation id="6751826523481687655">A teljesítménykövetés be van kapcsolva</translation>
+<translation id="6752912906630585008">A(z) „<ph name="REMOVED_DESK" />” asztal el lett távolítva, és össze lett vonva a(z) „<ph name="RECEIVE_DESK" />” asztallal</translation>
 <translation id="6790428901817661496">Játék</translation>
 <translation id="6803622936009808957">A kijelzők tükrözése sikertelen, mivel nem található támogatott felbontás. Ehelyett kiterjesztett asztal módba váltott a rendszer.</translation>
 <translation id="6820676911989879663">Tartson egy kis szünetet!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Beállítások</translation>
 <translation id="8433186206711564395">Hálózati beállítások</translation>
 <translation id="8433977262951327081">Megváltozott a beviteli lehetőségek menüjének buborékját a polcon megjelenítő gyorsparancs. A(z) <ph name="OLD_SHORTCUT" /> helyett használja a(z) <ph name="NEW_SHORTCUT" /> billentyűkombinációt.</translation>
+<translation id="8444246603146515890">A(z) „<ph name="DESK_TITILE" />” asztal aktiválva</translation>
 <translation id="8452135315243592079">Hiányzó SIM-kártya</translation>
 <translation id="8454013096329229812">Wi-Fi bekapcsolva.</translation>
 <translation id="847056008324733326">A megjelenítési méret beállításai</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 74165f8a..7d7245f2 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Tersambung ke satu perangkat}other{Tersambung ke # perangkat}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> lagi</translation>
 <translation id="3236488194889173876">Jaringan seluler tidak tersedia</translation>
+<translation id="3249513730522716925">Jendela <ph name="WINDOW_TITLE" /> berpindah dari Halaman kerja <ph name="ACTIVE_DESK" /> ke Halaman kerja <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Apa yang bisa kamu lakukan?</translation>
 <translation id="3294437725009624529">Tamu</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> tetap dapat login di lain waktu.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Ubah kembali ke "<ph name="FROM_LOCALE" />" (harus dinyalakan ulang)</translation>
 <translation id="3576141592585647168">Ubah zona waktu</translation>
 <translation id="3595596368722241419">Baterai penuh</translation>
+<translation id="3604801046548457007">Halaman kerja <ph name="DESK_TITILE" /> dibuat</translation>
 <translation id="3606978283550408104">Layar Braille tersambung.</translation>
 <translation id="3621202678540785336">Masukan</translation>
 <translation id="3626281679859535460">Kecerahan</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Ini adalah fitur stilus</translation>
 <translation id="4389184120735010762">Anda menekan pintasan keyboard untuk kaca pembesar yang terpasang di dok. Ingin mengaktifkannya?</translation>
 <translation id="4421231901400348175">Berbagi kontrol layar dengan <ph name="HELPER_NAME" /> via Remote Assistance.</translation>
-<translation id="4430019312045809116">Volume</translation>
 <translation id="4450893287417543264">Jangan tampilkan lagi</translation>
 <translation id="4477350412780666475">Lagu Berikutnya</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Ketuk tarik</translation>
 <translation id="5750765938512549687">Bluetooth nonaktif</translation>
 <translation id="5777841717266010279">Berhenti membagikan layar?</translation>
-<translation id="57838592816432529">Bisukan</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Hentikan <ph name="ROUTE_TITLE" /> di <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Nonaktif</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Daya</translation>
 <translation id="6727969043791803658">Terhubung, baterai <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Pelacakan performa diaktifkan</translation>
+<translation id="6752912906630585008">Halaman kerja <ph name="REMOVED_DESK" /> dihapus dan digabung dengan Halaman kerja <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Putar</translation>
 <translation id="6803622936009808957">Tidak dapat menggandakan tampilan karena tidak ditemukan resolusi yang didukung. Memasuki desktop yang diperluas sebagai gantinya.</translation>
 <translation id="6820676911989879663">Istirahatlah sebentar</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Setelan</translation>
 <translation id="8433186206711564395">Setelan jaringan</translation>
 <translation id="8433977262951327081">Pintasan untuk menampilkan balon menu opsi masukan di rak telah diubah. Harap gunakan <ph name="NEW_SHORTCUT" />, bukan <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Halaman kerja <ph name="DESK_TITILE" /> diaktifkan</translation>
 <translation id="8452135315243592079">Kartu SIM tidak ada</translation>
 <translation id="8454013096329229812">Wi-Fi diaktifkan.</translation>
 <translation id="847056008324733326">Setelan skala layar</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index 0f7a7cb..84497221 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Connesso a un dispositivo}other{Connesso a # dispositivi}}</translation>
 <translation id="3226991577105957773">+ altre <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Nessuna rete mobile disponibile</translation>
+<translation id="3249513730522716925">La finestra <ph name="WINDOW_TITLE" /> è stata spostata dal desktop <ph name="ACTIVE_DESK" /> al desktop <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Cosa sai fare?</translation>
 <translation id="3294437725009624529">Ospite</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> può ancora accedere in seguito.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Torna a "<ph name="FROM_LOCALE" />" (è necessario riavviare)</translation>
 <translation id="3576141592585647168">Cambia fuso orario</translation>
 <translation id="3595596368722241419">Batteria carica</translation>
+<translation id="3604801046548457007">Desktop <ph name="DESK_TITILE" /> creato</translation>
 <translation id="3606978283550408104">Display Braille collegato.</translation>
 <translation id="3621202678540785336">Ingresso</translation>
 <translation id="3626281679859535460">Luminosità</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">Ecco gli strumenti per il tuo stilo</translation>
 <translation id="4389184120735010762">Hai premuto la scorciatoia da tastiera per la lente d'ingrandimento ancorata. Vuoi attivarla?</translation>
 <translation id="4421231901400348175">Condividi il controllo dello schermo con <ph name="HELPER_NAME" /> tramite Assistenza remota.</translation>
-<translation id="4430019312045809116">Volume</translation>
 <translation id="4450893287417543264">Non mostrare più</translation>
 <translation id="4477350412780666475">Traccia successiva</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">Trascinamento al tocco</translation>
 <translation id="5750765938512549687">Bluetooth non attivo</translation>
 <translation id="5777841717266010279">Interrompere la condivisione dello schermo?</translation>
-<translation id="57838592816432529">Disattiva audio</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Interrompi <ph name="ROUTE_TITLE" /> su <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Off</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Alimentazione</translation>
 <translation id="6727969043791803658">Dispositivo connesso. Livello batteria: <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">La traccia delle prestazioni è attiva</translation>
+<translation id="6752912906630585008">Desktop <ph name="REMOVED_DESK" /> rimosso e unito al desktop <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Play</translation>
 <translation id="6803622936009808957">Impossibile duplicare i display perché non sono state trovate risoluzioni supportate. È stato attivato il desktop esteso.</translation>
 <translation id="6820676911989879663">Fai una pausa!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Impostazioni</translation>
 <translation id="8433186206711564395">Impostazioni di rete</translation>
 <translation id="8433977262951327081">La scorciatoia per mostrare il fumetto del menu di opzioni di immissione nella shelf è cambiata. Utilizza <ph name="NEW_SHORTCUT" /> invece di <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Desktop <ph name="DESK_TITILE" /> attivato</translation>
 <translation id="8452135315243592079">Scheda SIM mancante</translation>
 <translation id="8454013096329229812">Wi-Fi attivo.</translation>
 <translation id="847056008324733326">Impostazioni scala di visualizzazione</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index b17cd14..1b41eed 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -233,7 +233,6 @@
 <translation id="4379531060876907730">אלה כלי הסטיילוס שלך</translation>
 <translation id="4389184120735010762">הקשת על מקש הקיצור של זכוכית מגדלת במצב עגינה. להפעיל אותה?</translation>
 <translation id="4421231901400348175">שיתוף השליטה במסך עם <ph name="HELPER_NAME" /> דרך סיוע מרחוק.</translation>
-<translation id="4430019312045809116">עוצמת קול</translation>
 <translation id="4450893287417543264">אין להציג שוב</translation>
 <translation id="4477350412780666475">הטראק הבא</translation>
 <translation id="4479639480957787382">אתרנט</translation>
@@ -308,7 +307,6 @@
 <translation id="5744083938413354016">הקשה וגרירה</translation>
 <translation id="5750765938512549687">‏Bluetooth כבוי</translation>
 <translation id="5777841717266010279">להפסיק את שיתוף המסך?</translation>
-<translation id="57838592816432529">השתקה</translation>
 <translation id="5820394555380036790">‏מערכת ההפעלה של Chromium</translation>
 <translation id="5837036133683224804">הפסקת <ph name="ROUTE_TITLE" /> במכשיר <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">כבוי</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 7d8984d..6905b72 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{1 台のデバイスと接続されています}other{# 台のデバイスと接続されています}}</translation>
 <translation id="3226991577105957773">他 <ph name="COUNT" /> 件</translation>
 <translation id="3236488194889173876">利用できるモバイル ネットワークがありません</translation>
+<translation id="3249513730522716925">ウィンドウ <ph name="WINDOW_TITLE" /> がデスク <ph name="ACTIVE_DESK" /> からデスク <ph name="TARGET_DESK" /> に移動されました</translation>
 <translation id="3255483164551725916">何ができる?</translation>
 <translation id="3294437725009624529">ゲスト</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> が後でログインすることは引き続き可能です。</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">「<ph name="FROM_LOCALE" />」に戻します(再起動が必要です)</translation>
 <translation id="3576141592585647168">タイムゾーンを変更</translation>
 <translation id="3595596368722241419">バッテリー残量: フル</translation>
+<translation id="3604801046548457007">デスク <ph name="DESK_TITILE" /> が作成されました</translation>
 <translation id="3606978283550408104">ブライユ点字ディスプレイが接続されています。</translation>
 <translation id="3621202678540785336">入力</translation>
 <translation id="3626281679859535460">輝度</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">タッチペン ツール</translation>
 <translation id="4389184120735010762">拡大鏡(ドッキング)のキーボード ショートカットを押しました。この機能をオンにしますか?</translation>
 <translation id="4421231901400348175">リモート サポート経由で <ph name="HELPER_NAME" /> と画面の制御を共有しています。</translation>
-<translation id="4430019312045809116">音量</translation>
 <translation id="4450893287417543264">次回から表示しない</translation>
 <translation id="4477350412780666475">次の曲</translation>
 <translation id="4479639480957787382">イーサネット</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">タップによるドラッグ</translation>
 <translation id="5750765938512549687">Bluetooth がオフです</translation>
 <translation id="5777841717266010279">画面の共有を解除しますか?</translation>
-<translation id="57838592816432529">ミュート</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> の「<ph name="ROUTE_TITLE" />」を停止します</translation>
 <translation id="5860033963881614850">オフ</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">電源</translation>
 <translation id="6727969043791803658">接続済み、<ph name="BATTERY_PERCENTAGE" />% のバッテリー残量</translation>
 <translation id="6751826523481687655">パフォーマンス追跡機能が有効になっています</translation>
+<translation id="6752912906630585008">デスク <ph name="REMOVED_DESK" /> が削除されデスク <ph name="RECEIVE_DESK" /> に統合されました</translation>
 <translation id="6790428901817661496">再生</translation>
 <translation id="6803622936009808957">サポートされている解像度が見つからなかったため、ディスプレイをミラーリングできませんでした。代わりに拡張デスクトップ モードに切り替えました。</translation>
 <translation id="6820676911989879663">休憩の時間です!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">設定</translation>
 <translation id="8433186206711564395">ネットワーク設定</translation>
 <translation id="8433977262951327081">シェルフに入力オプション メニューのふきだしを表示するためのショートカットが変わりました。今後は <ph name="OLD_SHORTCUT" /> ではなく <ph name="NEW_SHORTCUT" /> を使用してください。</translation>
+<translation id="8444246603146515890">デスク <ph name="DESK_TITILE" /> が有効になりました</translation>
 <translation id="8452135315243592079">SIM カードがありません</translation>
 <translation id="8454013096329229812">Wi-Fi が有効になりました。</translation>
 <translation id="847056008324733326">表示スケールの設定</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index f6b0bff..ef1c057 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{ಒಂದು ಸಾಧನಕ್ಕೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ}one{# ಸಾಧನಗಳಿಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ}other{# ಸಾಧನಗಳಿಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> ಹೆಚ್ಚು</translation>
 <translation id="3236488194889173876">ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್ ಲಭ್ಯವಿಲ್ಲ</translation>
+<translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> ವಿಂಡೋವನ್ನು <ph name="ACTIVE_DESK" /> ಡೆಸ್ಕ್‌ನಿಂದ<ph name="TARGET_DESK" /> ಡೆಸ್ಕ್‌ಗೆ ಸರಿಸಲಾಗಿದೆ</translation>
 <translation id="3255483164551725916">ನೀವೇನು ಮಾಡಬಲ್ಲಿರಿ?</translation>
 <translation id="3294437725009624529">ಅತಿಥಿ</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" />, ಆನಂತರ ಕೂಡಾ ಸೈನ್ ಇನ್ ಮಾಡಬಹುದು.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" ಗೆ ಮರುಬದಲಾಯಿಸಿ (ಮರುಪ್ರಾರಂಭಿಸುವ ಅಗತ್ಯವಿದೆ)</translation>
 <translation id="3576141592585647168">ಸಮಯವಲಯವನ್ನು ಬದಲಾಯಿಸಿ</translation>
 <translation id="3595596368722241419">ಬ್ಯಾಟರಿ ಭರ್ತಿಯಾಗಿದೆ</translation>
+<translation id="3604801046548457007"><ph name="DESK_TITILE" /> ಡೆಸ್ಕ್ ಅನ್ನು ರಚಿಸಲಾಗಿದೆ</translation>
 <translation id="3606978283550408104">ಬ್ರೇಲ್ ಪ್ರದರ್ಶನವನ್ನು ಸಂಪರ್ಕಗೊಳಿಸಲಾಗಿದೆ.</translation>
 <translation id="3621202678540785336">ಇನ್‌ಪುಟ್</translation>
 <translation id="3626281679859535460">ಪ್ರಕಾಶಮಾನ</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">ಇವುಗಳು ನಿಮ್ಮ ಸ್ಟೈಲಸ್ ಪರಿಕರಗಳಾಗಿವೆ</translation>
 <translation id="4389184120735010762">ನೀವು ಡಾಕ್ ಮಾಡಿದ ವರ್ಧಕದ ಕೀಬೋರ್ಡ್ ಶಾರ್ಟ್‌ಕಟ್ ಒತ್ತಿದ್ದೀರಿ. ನೀವು ಅದನ್ನು ಆನ್ ಮಾಡಲು ಬಯಸುವಿರಾ?</translation>
 <translation id="4421231901400348175">ರಿಮೋಟ್ ಸಹಾಯದ ಮೂಲಕ <ph name="HELPER_NAME" /> ಜೊತೆಗೆ ನಿಮ್ಮ ಪರದೆಯ ನಿಯಂತ್ರಣವನ್ನು ಹಂಚಲಾಗುತ್ತಿದೆ.</translation>
-<translation id="4430019312045809116">ವಾಲ್ಯೂಮ್</translation>
 <translation id="4450893287417543264">ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡಿ</translation>
 <translation id="4477350412780666475">ಮುಂದಿನ ಟ್ರ್ಯಾಕ್</translation>
 <translation id="4479639480957787382">ಈಥರ್ನೆಟ್</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">ಟ್ಯಾಪ್ ಎಳೆಯುವಿಕೆ</translation>
 <translation id="5750765938512549687">ಬ್ಲೂಟೂತ್ ಆಫ್ ಆಗಿದೆ</translation>
 <translation id="5777841717266010279">ಸ್ಕ್ರೀನ್ ಹಂಚಿಕೆ ನಿಲ್ಲಿಸುವುದೇ?</translation>
-<translation id="57838592816432529">ಮ್ಯೂಟ್</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> ನಲ್ಲಿ <ph name="ROUTE_TITLE" /> ನಿಲ್ಲಿಸಿ</translation>
 <translation id="5860033963881614850">ಆಫ್</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">ಪವರ್‌</translation>
 <translation id="6727969043791803658">ಸಂಪರ್ಕಗೊಂಡಿದೆ, <ph name="BATTERY_PERCENTAGE" />% ರಷ್ಟು ಬ್ಯಾಟರಿ ಲಭ್ಯವಿದೆ</translation>
 <translation id="6751826523481687655">ಕಾರ್ಯಕ್ಷಮತೆಯ ಟ್ರೇಸಿಂಗ್ ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ</translation>
+<translation id="6752912906630585008"><ph name="REMOVED_DESK" /> ಡೆಸ್ಕ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ ಮತ್ತು <ph name="RECEIVE_DESK" /> ಡೆಸ್ಕ್‌ನೊಂದಿಗೆ ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="6790428901817661496">ಪ್ಲೇ ಮಾಡು</translation>
 <translation id="6803622936009808957">ಯಾವುದೇ ಬೆಂಬಲಿತ ಪರಿಹಾರಗಳು ಕಂಡುಬರದ ಕಾರಣ ಪ್ರದರ್ಶನಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸಲಾಗಲಿಲ್ಲ. ಬದಲಿಗೆ ವಿಸ್ತರಿತ ಡೆಸ್ಕ್‌ಟಾಪ್ ಅನ್ನು ನಮೂದಿಸಲಾಗಿದೆ.</translation>
 <translation id="6820676911989879663">ವಿರಾಮ ತೆಗೆದುಕೊಳ್ಳಿ!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8433186206711564395">ನೆಟ್‌ವರ್ಕ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8433977262951327081">ಶೆಲ್ಫ್‌ನಲ್ಲಿ ಇನ್‌ಪುಟ್ ಆಯ್ಕೆಗಳ ಮೆನು ಬಬಲ್ ತೋರಿಸುವ ಶಾರ್ಟ್‌ಕಟ್ ಬದಲಾಗಿದೆ. <ph name="OLD_SHORTCUT" /> ಬದಲಿಗೆ <ph name="NEW_SHORTCUT" /> ಬಳಸಿ.</translation>
+<translation id="8444246603146515890"><ph name="DESK_TITILE" /> ಡೆಸ್ಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="8452135315243592079">ಕಾಣೆಯಾಗಿರುವ ಸಿಮ್ ಕಾರ್ಡ್</translation>
 <translation id="8454013096329229812">ವೈ-ಫೈ ಆನ್ ಮಾಡಲಾಗಿದೆ.</translation>
 <translation id="847056008324733326">ಪ್ರದರ್ಶನ ಮಾಪಕ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index 2699887..377145d8 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{기기 1개에 연결됨}other{기기 #개에 연결됨}}</translation>
 <translation id="3226991577105957773">외 <ph name="COUNT" />개</translation>
 <translation id="3236488194889173876">사용할 수 있는 모바일 네트워크 없음</translation>
+<translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> 창이 <ph name="ACTIVE_DESK" /> 데스크에서 <ph name="TARGET_DESK" /> 데스크로 이동했습니다.</translation>
 <translation id="3255483164551725916">무엇을 할 수 있어?</translation>
 <translation id="3294437725009624529">게스트</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" />님은 나중에도 로그인할 수 있습니다.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">'<ph name="FROM_LOCALE" />'(으)로 다시 변경(다시 시작해야 함)</translation>
 <translation id="3576141592585647168">시간대 변경</translation>
 <translation id="3595596368722241419">배터리 충전 완료</translation>
+<translation id="3604801046548457007"><ph name="DESK_TITILE" /> 데스크가 생성되었습니다.</translation>
 <translation id="3606978283550408104">점자 디스플레이가 연결되었습니다.</translation>
 <translation id="3621202678540785336">입력</translation>
 <translation id="3626281679859535460">밝기</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">스타일러스 도구입니다</translation>
 <translation id="4389184120735010762">고정 돋보기 단축키를 누르셨습니다. 사용 설정할까요?</translation>
 <translation id="4421231901400348175">원격 지원을 통해 <ph name="HELPER_NAME" />와(과) 화면 제어 공유</translation>
-<translation id="4430019312045809116">볼륨</translation>
 <translation id="4450893287417543264">다시 표시하지 않음</translation>
 <translation id="4477350412780666475">다음 트랙</translation>
 <translation id="4479639480957787382">이더넷</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">탭 드래그</translation>
 <translation id="5750765938512549687">블루투스가 사용 중지됨</translation>
 <translation id="5777841717266010279">화면 공유를 중단하시겠습니까?</translation>
-<translation id="57838592816432529">음소거</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" />에서 <ph name="ROUTE_TITLE" /> 중지</translation>
 <translation id="5860033963881614850">사용 안함</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">전원</translation>
 <translation id="6727969043791803658">연결됨, 배터리 <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">성능 추적이 사용 설정되어 있습니다.</translation>
+<translation id="6752912906630585008"><ph name="REMOVED_DESK" /> 데스크가 삭제되고 <ph name="RECEIVE_DESK" /> 데스크와 병합되었습니다.</translation>
 <translation id="6790428901817661496">재생</translation>
 <translation id="6803622936009808957">지원되는 해상도가 없으므로 디스플레이를 그대로 반영할 수 없습니다. 대신 확장 데스크톱을 시작했습니다.</translation>
 <translation id="6820676911989879663">잠시 쉬어 가세요.</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">설정</translation>
 <translation id="8433186206711564395">네트워크 설정</translation>
 <translation id="8433977262951327081">실행기에서 입력 옵션 메뉴 도움말 풍선을 표시하는 단축키가 변경되었습니다. <ph name="OLD_SHORTCUT" /> 대신 <ph name="NEW_SHORTCUT" />을(를) 사용하세요.</translation>
+<translation id="8444246603146515890"><ph name="DESK_TITILE" /> 데스크가 활성화되었습니다.</translation>
 <translation id="8452135315243592079">SIM 카드 없음</translation>
 <translation id="8454013096329229812">Wi-Fi가 켜져 있습니다.</translation>
 <translation id="847056008324733326">배율 설정 표시</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index 258e91a5..72734087 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Prisijungta prie įrenginio}one{Prisijungta prie # įrenginio}few{Prisijungta prie # įrenginių}many{Prisijungta prie # įrenginio}other{Prisijungta prie # įrenginių}}</translation>
 <translation id="3226991577105957773">Dar <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Nėra jokių pasiekiamų mobiliojo ryšio tinklų</translation>
+<translation id="3249513730522716925">Langas „<ph name="WINDOW_TITLE" />“ perkeltas iš darbalaukio „<ph name="ACTIVE_DESK" />“ į darbalaukį „<ph name="TARGET_DESK" />“</translation>
 <translation id="3255483164551725916">„What can you do?“ (Ką gali atlikti?)</translation>
 <translation id="3294437725009624529">Svečias</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> vis tiek galės vėliau prisijungti.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Pakeisti atgal į „<ph name="FROM_LOCALE" />“ (reikia paleisti iš naujo)</translation>
 <translation id="3576141592585647168">Laiko juostos keitimas</translation>
 <translation id="3595596368722241419">Akumuliatorius įkrautas</translation>
+<translation id="3604801046548457007">Sukurtas darbalaukis „<ph name="DESK_TITILE" />“</translation>
 <translation id="3606978283550408104">Brailio ekranas prijungtas.</translation>
 <translation id="3621202678540785336">Įvestis</translation>
 <translation id="3626281679859535460">Šviesumas</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Tai yra jūsų rašiklio įrankiai</translation>
 <translation id="4389184120735010762">Paspaudėte prie doko prijungto didintuvo spartųjį klavišą. Ar norite jį įjungti?</translation>
 <translation id="4421231901400348175"><ph name="HELPER_NAME" /> gali valdyti jūsų ekraną naudodamas (-a) Nuotolinę pagalbą.</translation>
-<translation id="4430019312045809116">Apimtis</translation>
 <translation id="4450893287417543264">Daugiau neberodyti</translation>
 <translation id="4477350412780666475">Kitas takelis</translation>
 <translation id="4479639480957787382">Eternetas</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Vilkimas palietus</translation>
 <translation id="5750765938512549687">„Bluetooth“ išjungtas</translation>
 <translation id="5777841717266010279">Nutraukti ekrano bendrinimą?</translation>
-<translation id="57838592816432529">Nutildyti</translation>
 <translation id="5820394555380036790">„Chromium“ OS</translation>
 <translation id="5837036133683224804">Sustabdyti „<ph name="ROUTE_TITLE" />“ („<ph name="RECEIVER_NAME" />“)</translation>
 <translation id="5860033963881614850">Išjungta</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Maitinimas</translation>
 <translation id="6727969043791803658">Prisijungta, akumuliatoriaus įkrovos lygis: <ph name="BATTERY_PERCENTAGE" /> proc.</translation>
 <translation id="6751826523481687655">Našumo stebėjimas įjungtas</translation>
+<translation id="6752912906630585008">Darbalaukis „<ph name="REMOVED_DESK" />“ pašalintas ir sujungtas su darbalaukiu „<ph name="RECEIVE_DESK" />“</translation>
 <translation id="6790428901817661496">Žaisti</translation>
 <translation id="6803622936009808957">Nepavyko dubliuoti vaizdų, nes nepavyko rasti palaikomų skyrų. Vietoje to įjungtas išplėstinio darbalaukio režimas.</translation>
 <translation id="6820676911989879663">Padarykite pertrauką!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Nustatymai</translation>
 <translation id="8433186206711564395">Tinklo nustatymai</translation>
 <translation id="8433977262951327081">Pakeistas įvesties parinkčių meniu debesėlio rodymo lentynoje spartusis klavišas. Naudokite <ph name="NEW_SHORTCUT" /> vietoje <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Darbalaukis „<ph name="DESK_TITILE" />“ suaktyvintas</translation>
 <translation id="8452135315243592079">Nėra SIM kortelės</translation>
 <translation id="8454013096329229812">„Wi-Fi“ ryšys įjungtas.</translation>
 <translation id="847056008324733326">Ekrano mastelio nustatymai</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 633957b6..bc36c02 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Savienots ar ierīci}zero{Savienots ar # ierīcēm}one{Savienots ar # ierīci}other{Savienots ar # ierīcēm}}</translation>
 <translation id="3226991577105957773">vēl <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Mobilais tīkls nav pieejams</translation>
+<translation id="3249513730522716925">Logs <ph name="WINDOW_TITLE" /> pārvietots no darbvirsmas <ph name="ACTIVE_DESK" /> uz darbvirsmu <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Iespējamās darbības</translation>
 <translation id="3294437725009624529">Viesis</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> joprojām varēs pierakstīties vēlāk.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Mainīt atpakaļ uz <ph name="FROM_LOCALE" /> (nepieciešama restartēšana)</translation>
 <translation id="3576141592585647168">Mainīt laika joslu</translation>
 <translation id="3595596368722241419">Akumulators pilns</translation>
+<translation id="3604801046548457007">Darbvirsma <ph name="DESK_TITILE" /> ir izveidota</translation>
 <translation id="3606978283550408104">Savienojums ar Braila displeju ir izveidots.</translation>
 <translation id="3621202678540785336">Ievade</translation>
 <translation id="3626281679859535460">Spilgtums</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Šie ir jūsu skārienekrāna pildspalvas rīki</translation>
 <translation id="4389184120735010762">Jūs nospiedāt dokotās lupas īsinājumtaustiņu. Vai vēlaties to ieslēgt?</translation>
 <translation id="4421231901400348175">Ekrāna pārvaldības koplietošana ar <ph name="HELPER_NAME" />, izmantojot attālo palīdzību.</translation>
-<translation id="4430019312045809116">Skaļums</translation>
 <translation id="4450893287417543264">Vairs nerādīt</translation>
 <translation id="4477350412780666475">Nākamais ieraksts</translation>
 <translation id="4479639480957787382">tīkls Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Vilkšana pieskaroties</translation>
 <translation id="5750765938512549687">Bluetooth ir izslēgts</translation>
 <translation id="5777841717266010279">Vai apturēt ekrāna koplietošanu?</translation>
-<translation id="57838592816432529">Izslēgt skaņu</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Pārtraukt “<ph name="ROUTE_TITLE" />” apraidi ierīcē “<ph name="RECEIVER_NAME" />”</translation>
 <translation id="5860033963881614850">Izsl.</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Strāvas padeve</translation>
 <translation id="6727969043791803658">Savienojums izveidots, akumulatora uzlādes līmenis: <ph name="BATTERY_PERCENTAGE" /></translation>
 <translation id="6751826523481687655">Veiktspējas izsekošana ir ieslēgta.</translation>
+<translation id="6752912906630585008">Darbvirsma <ph name="REMOVED_DESK" /> ir noņemta un apvienota ar darbvirsmu <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Atskaņot</translation>
 <translation id="6803622936009808957">Nevarēja spoguļot displejus, jo netika atrasta atbalstīta izšķirtspēja. Tā vietā tika aktivizēts paplašinātās darbvirsmas režīms.</translation>
 <translation id="6820676911989879663">Laiks pārtraukumam</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Iestatījumi</translation>
 <translation id="8433186206711564395">Tīkla iestatījumi</translation>
 <translation id="8433977262951327081">Tika mainīti īsinājumtaustiņi, ar kuriem plauktā var parādīt ievades opciju izvēlnes burbuli. Lūdzu, turpmāk izmantojiet <ph name="NEW_SHORTCUT" />, nevis <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Darbvirsma <ph name="DESK_TITILE" /> ir aktivizēta</translation>
 <translation id="8452135315243592079">Nav SIM kartes.</translation>
 <translation id="8454013096329229812">Wi-Fi tīkls ir ieslēgts.</translation>
 <translation id="847056008324733326">Displeja mēroga iestatījumi</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index 3f0b128cb..3c5b4a2 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{ഒരു ഉപകരണത്തിലേക്ക് കണക്റ്റ് ചെയ്‌തു}other{# ഉപകരണങ്ങളിലേക്ക് കണക്റ്റ് ചെയ്‌തു}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> കൂടുതൽ</translation>
 <translation id="3236488194889173876">മൊബൈൽ നെറ്റ്‌വർക്ക് ലഭ്യമല്ല</translation>
+<translation id="3249513730522716925">വിൻഡോ <ph name="WINDOW_TITLE" /> ഡെസ്‌ക് <ph name="ACTIVE_DESK" />-ൽ നിന്ന് ഡെസ്‌ക് <ph name="TARGET_DESK" />-ലേക്ക് നീക്കി</translation>
 <translation id="3255483164551725916">നിങ്ങൾക്ക് എന്ത് ചെയ്യാനാവും?</translation>
 <translation id="3294437725009624529">അതിഥി</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> എന്നതിന് പിന്നീട്, തുടർന്നും സൈൻ ഇൻ ചെയ്യാനാവും.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" ഭാഷയിലേയ്‌ക്ക് തിരികെ മാറ്റുക (പുനരാരംഭിക്കേണ്ടതുണ്ട്)</translation>
 <translation id="3576141592585647168">സമയമേഖല മാറ്റുക</translation>
 <translation id="3595596368722241419">ബാറ്ററി നിറഞ്ഞു</translation>
+<translation id="3604801046548457007">ഡെസ്‌ക് <ph name="DESK_TITILE" /> സൃഷ്‌ടിച്ചു</translation>
 <translation id="3606978283550408104">ബ്രെയ്‌ലി ഡിസ്‌പ്ലേ കണക്‌റ്റ് ചെയ്‌തു.</translation>
 <translation id="3621202678540785336">ഇൻപുട്ട്</translation>
 <translation id="3626281679859535460">മിഴിവ്</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">ഇവയാണ് നിങ്ങളുടെ സ്‌റ്റൈലസ് ടൂളുകൾ</translation>
 <translation id="4389184120735010762">നിങ്ങൾ ഡോക്ക് ചെയ്‌ത മാഗ്നിഫയറിനായി കീബോഡ് കുറുക്കുവഴി അമർത്തി. അത് ഓണാക്കണോ?</translation>
 <translation id="4421231901400348175"><ph name="HELPER_NAME" /> ഉപയോഗിച്ച് നിങ്ങളുടെ വിദൂര സഹായി മുഖേന സ്‌ക്രീനിന്റെ നിയന്ത്രണം പങ്കിടുക.</translation>
-<translation id="4430019312045809116">അളവ്</translation>
 <translation id="4450893287417543264">വീണ്ടും കാണിക്കരുത്</translation>
 <translation id="4477350412780666475">അടുത്ത ട്രാക്ക്</translation>
 <translation id="4479639480957787382">എതെര്‍‌നെറ്റ്</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">ടാപ്പുചെയ്‌ത് വലിച്ചിടൽ</translation>
 <translation id="5750765938512549687">Bluetooth ഓഫാണ്</translation>
 <translation id="5777841717266010279">സ്‌ക്രീൻ പങ്കിടൽ നിർത്തണോ?</translation>
-<translation id="57838592816432529">മ്യൂട്ട് ചെയ്യുക</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" />-ൽ <ph name="ROUTE_TITLE" /> നിർത്തുക</translation>
 <translation id="5860033963881614850">ഓഫാക്കുക</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">പവർ</translation>
 <translation id="6727969043791803658">കണക്റ്റ് ചെയ്‌തു, <ph name="BATTERY_PERCENTAGE" />% ബാറ്ററി</translation>
 <translation id="6751826523481687655">പ്രകടനം പിന്തുടരൽ ഓണാണ്</translation>
+<translation id="6752912906630585008">ഡെസ്‌ക് <ph name="REMOVED_DESK" /> നീക്കം ചെയ്‌ത്, ഡെസ്‌ക് <ph name="RECEIVE_DESK" />-മായി ലയിപ്പിച്ചു</translation>
 <translation id="6790428901817661496">പ്ലേചെയ്യുക</translation>
 <translation id="6803622936009808957">പിന്തുണയ്‌ക്കുന്ന മിഴിവുകൾ കണ്ടെത്താത്തതിനാൽ പ്രദർശനങ്ങൾ പ്രതിഫലിപ്പിക്കാനായില്ല. പകരം വിപുലീകൃത ഡെസ്‌ക്‌ടോപ്പ് നൽകി.</translation>
 <translation id="6820676911989879663">ഒരു ഇടവേള എടുക്കൂ!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">ക്രമീകരണങ്ങള്‍</translation>
 <translation id="8433186206711564395">നെറ്റ്‍വര്‍ക്ക് ക്രമീകരണങ്ങള്‍</translation>
 <translation id="8433977262951327081">ഷെൽഫിലെ ഇൻപുട്ട് ഓപ്ഷൻ മെനു ബബിൾ കാണുന്നതിനുള്ള കുറുക്കുവഴി മാറ്റി. <ph name="OLD_SHORTCUT" /> എന്നതിന് പകരം <ph name="NEW_SHORTCUT" /> ഉപയോഗിക്കുക.</translation>
+<translation id="8444246603146515890">ഡെസ്‌ക് <ph name="DESK_TITILE" /> സജീവമാക്കി</translation>
 <translation id="8452135315243592079">സിം കാർഡ് കാണുന്നില്ല</translation>
 <translation id="8454013096329229812">Wi-Fi ഓൺ ചെയ്‌തു.</translation>
 <translation id="847056008324733326">സ്‌കെയിൽ ക്രമീകരണം പ്രദർശിപ്പിക്കുക</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 05373d7d..0265011 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{डिव्हाइसशी कनेक्ट केले}other{# डिव्हाइसशी कनेक्ट केले}}</translation>
 <translation id="3226991577105957773">आणखी +<ph name="COUNT" /></translation>
 <translation id="3236488194889173876">कोणतेही मोबाइल नेटवर्क उपलब्ध नाही</translation>
+<translation id="3249513730522716925">विंडो <ph name="WINDOW_TITLE" /> डेस्क <ph name="ACTIVE_DESK" /> वरून डेस्क <ph name="TARGET_DESK" /> वर हलवली</translation>
 <translation id="3255483164551725916">तुला काय करता येते?</translation>
 <translation id="3294437725009624529">अतिथी</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> नंतरही साइन इन करू शकतो.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />" मध्ये परत बदला (रीस्टार्ट करणे आवश्यक)</translation>
 <translation id="3576141592585647168">टाइमझोन बदला</translation>
 <translation id="3595596368722241419">बॅटरी पूर्ण चार्ज</translation>
+<translation id="3604801046548457007">डेस्क <ph name="DESK_TITILE" /> तयार केले</translation>
 <translation id="3606978283550408104">ब्रेल डिस्प्ले कनेक्ट केला.</translation>
 <translation id="3621202678540785336">इनपुट</translation>
 <translation id="3626281679859535460">ब्राइटनेस</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">ही तुमची स्टायलस टूल आहेत</translation>
 <translation id="4389184120735010762">तुम्ही डॉक मॅग्निफायरसाठी कीबोर्ड शॉर्टकट दाबला आहे. तुम्हाला ते सुरू करायचे आहे का?</translation>
 <translation id="4421231901400348175">दूरस्त सहाय्याद्वारे <ph name="HELPER_NAME" /> सह आपल्या स्क्रीनचे नियंत्रण शेअर करत आहे.</translation>
-<translation id="4430019312045809116">व्हॉल्यूम</translation>
 <translation id="4450893287417543264">पुन्हा दाखवू नका</translation>
 <translation id="4477350412780666475">पुढील ट्रॅक</translation>
 <translation id="4479639480957787382">इथरनेट</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">टॅप ड्रॅगिंग</translation>
 <translation id="5750765938512549687">ब्लूटूथ बंद आहे</translation>
 <translation id="5777841717266010279">स्क्रीन सामायिकरण थांबवायचे?</translation>
-<translation id="57838592816432529">म्यूट करा</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> वर <ph name="ROUTE_TITLE" /> थांबवा</translation>
 <translation id="5860033963881614850">बंद</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">सामर्थ्य</translation>
 <translation id="6727969043791803658">कनेक्ट केले, <ph name="BATTERY_PERCENTAGE" />% बॅटरी</translation>
 <translation id="6751826523481687655">परफॉर्मंस ट्रेसिंग चालू आहे</translation>
+<translation id="6752912906630585008"><ph name="REMOVED_DESK" /> डेस्क काढून टाकले आणि डेस्क <ph name="RECEIVE_DESK" /> सोबत विलीन केले</translation>
 <translation id="6790428901817661496">प्ले करा</translation>
 <translation id="6803622936009808957">समर्थित रिजोल्यूशन न आढळल्यामुळे प्रदर्शने मिरर करू शकली नाहीत. त्याऐवजी विस्तारित डेस्कटॉप एंटर केला.</translation>
 <translation id="6820676911989879663">ब्रेक घ्या!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">सेटिंग्ज</translation>
 <translation id="8433186206711564395">नेटवर्क सेटिंग्ज</translation>
 <translation id="8433977262951327081">शेल्फमधील इनपुट पर्याय मेनू दर्शविण्यासाठीचा शॉर्टकट बदलला आहे. कृपया <ph name="OLD_SHORTCUT" /> ऐवजी <ph name="NEW_SHORTCUT" /> वापरा.</translation>
+<translation id="8444246603146515890">डेस्क <ph name="DESK_TITILE" /> अॅक्टिव्हेट केले</translation>
 <translation id="8452135315243592079">गहाळ सिम कार्ड</translation>
 <translation id="8454013096329229812">वाय-फाय सुरू आहे.</translation>
 <translation id="847056008324733326">स्केल सेटिंग्‍ज दाखवा</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index c2be9355..a2ffcb7 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Disambungkan ke peranti}other{Disambungkan ke # peranti}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> lagi</translation>
 <translation id="3236488194889173876">Tiada rangkaian mudah alih tersedia</translation>
+<translation id="3249513730522716925">Tetingkap <ph name="WINDOW_TITLE" /> dialihkan daripada Meja <ph name="ACTIVE_DESK" /> ke Meja <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Apakah yang boleh anda lakukan?</translation>
 <translation id="3294437725009624529">Tetamu</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> masih dapat log masuk nanti.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Tukar kembali kepada "<ph name="FROM_LOCALE" />" (perlu dimulakan semula)</translation>
 <translation id="3576141592585647168">Tukar zon waktu</translation>
 <translation id="3595596368722241419">Bateri penuh</translation>
+<translation id="3604801046548457007">Meja <ph name="DESK_TITILE" /> dihasilkan</translation>
 <translation id="3606978283550408104">Paparan Braille disambungkan.</translation>
 <translation id="3621202678540785336">Input</translation>
 <translation id="3626281679859535460">Kecerahan</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">Berikut ialah alatan stilus anda</translation>
 <translation id="4389184120735010762">Anda menekan pintasan papan kekunci untuk penggadang yang didok. Adakah anda ingin menghidupkannya?</translation>
 <translation id="4421231901400348175">Berkongsi kawalan skrin anda dengan <ph name="HELPER_NAME" /> melalui Bantuan Jauh.</translation>
-<translation id="4430019312045809116">Kelantangan</translation>
 <translation id="4450893287417543264">Jangan tunjukkan lagi</translation>
 <translation id="4477350412780666475">Lagu Seterusnya</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">Penyeretan ketik</translation>
 <translation id="5750765938512549687">Bluetooth dimatikan</translation>
 <translation id="5777841717266010279">Hentikan perkongsian skrin?</translation>
-<translation id="57838592816432529">Redam</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Hentikan <ph name="ROUTE_TITLE" /> pada <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Dimatikan</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Kuasa</translation>
 <translation id="6727969043791803658">Disambungkan, bateri <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Pengesanan prestasi dihidupkan</translation>
+<translation id="6752912906630585008">Meja <ph name="REMOVED_DESK" /> dialih keluar dan digabungkan dengan Meja <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Mainkan</translation>
 <translation id="6803622936009808957">Tidak dapat membalikkan paparan memandangkan tiada peleraian disokong ditemui. Sebaliknya, memasuki mod desktop yang dilanjutkan.</translation>
 <translation id="6820676911989879663">Berehatlah!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Tetapan</translation>
 <translation id="8433186206711564395">Tetapan rangkaian</translation>
 <translation id="8433977262951327081">Pintasan untuk menunjukkan gelembung menu pilihan input dalam rak telah berubah. Sila gunakan <ph name="NEW_SHORTCUT" /> dan bukannya <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Meja <ph name="DESK_TITILE" /> diaktifkan</translation>
 <translation id="8452135315243592079">Kad SIM tiada</translation>
 <translation id="8454013096329229812">Wi-Fi dihidupkan.</translation>
 <translation id="847056008324733326">Tetapan skala paparan</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index a9deb9a..bdd61d6 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Verbonden met een apparaat}other{Verbonden met # apparaten}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> andere meldingen</translation>
 <translation id="3236488194889173876">Geen mobiel netwerk beschikbaar</translation>
+<translation id="3249513730522716925">Het venster <ph name="WINDOW_TITLE" /> is verplaatst van bureau <ph name="ACTIVE_DESK" /> naar bureau <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Wat kun je doen?</translation>
 <translation id="3294437725009624529">Gast</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> kan later nog inloggen.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Teruggaan naar '<ph name="FROM_LOCALE" />' (opnieuw starten vereist)</translation>
 <translation id="3576141592585647168">Tijdzone wijzigen</translation>
 <translation id="3595596368722241419">Batterij is vol</translation>
+<translation id="3604801046548457007">Bureau <ph name="DESK_TITILE" /> gemaakt</translation>
 <translation id="3606978283550408104">Braillescherm gekoppeld.</translation>
 <translation id="3621202678540785336">Ingang</translation>
 <translation id="3626281679859535460">Helderheid</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Dit zijn je stylustools</translation>
 <translation id="4389184120735010762">Je hebt op de sneltoets voor het gedockte vergrootglas gedrukt. Wil je deze functie inschakelen?</translation>
 <translation id="4421231901400348175">De controle over je scherm wordt gedeeld met <ph name="HELPER_NAME" /> via externe ondersteuning.</translation>
-<translation id="4430019312045809116">Volume</translation>
 <translation id="4450893287417543264">Niet meer tonen</translation>
 <translation id="4477350412780666475">Volgend nummer</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Tikken en slepen</translation>
 <translation id="5750765938512549687">Bluetooth is uitgeschakeld</translation>
 <translation id="5777841717266010279">Stoppen met scherm delen?</translation>
-<translation id="57838592816432529">Dempen</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="ROUTE_TITLE" /> in <ph name="RECEIVER_NAME" /> stopzetten</translation>
 <translation id="5860033963881614850">Uit</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Voeding</translation>
 <translation id="6727969043791803658">Verbonden, batterij <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Bijhouden van prestaties is ingeschakeld</translation>
+<translation id="6752912906630585008">Bureau <ph name="REMOVED_DESK" /> verwijderd en samengevoegd met bureau <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Spelen</translation>
 <translation id="6803622936009808957">Kan schermen niet spiegelen, omdat er geen ondersteunde resoluties zijn gevonden. Het uitgebreide bureaublad is geactiveerd.</translation>
 <translation id="6820676911989879663">Neem een pauze</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Instellingen</translation>
 <translation id="8433186206711564395">Netwerkinstellingen</translation>
 <translation id="8433977262951327081">De sneltoets om de ballon van het menu met invoeropties op de plank weer te geven, is gewijzigd. Gebruik <ph name="NEW_SHORTCUT" /> in plaats van <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Bureau <ph name="DESK_TITILE" /> geactiveerd</translation>
 <translation id="8452135315243592079">Simkaart ontbreekt</translation>
 <translation id="8454013096329229812">Wifi is ingeschakeld.</translation>
 <translation id="847056008324733326">Instellingen voor weergaveschaal</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 8f10836..939862e 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Koblet til en enhet}other{Koblet til # enheter}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> til</translation>
 <translation id="3236488194889173876">Ingen mobilnettverk er tilgjengelige</translation>
+<translation id="3249513730522716925">Vinduet <ph name="WINDOW_TITLE" /> ble flyttet fra skrivebord <ph name="ACTIVE_DESK" /> til skrivebord <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Hva kan du gjøre?</translation>
 <translation id="3294437725009624529">Gjest</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> kan fortsatt logge på senere.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Endre tilbake til <ph name="FROM_LOCALE" /> (krever omstart)</translation>
 <translation id="3576141592585647168">Endre tidssonen</translation>
 <translation id="3595596368722241419">Batteriet er fullt</translation>
+<translation id="3604801046548457007">Opprettet skrivebord <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">En leselist er tilkoblet.</translation>
 <translation id="3621202678540785336">Inndata</translation>
 <translation id="3626281679859535460">Lysstyrke</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Dette er pekepennverktøyene dine</translation>
 <translation id="4389184120735010762">Du trykket på hurtigtasten for den dokkede lupen. Vil du slå den på?</translation>
 <translation id="4421231901400348175">Deler kontroll av skjermen med <ph name="HELPER_NAME" /> via fjernhjelp.</translation>
-<translation id="4430019312045809116">Volum</translation>
 <translation id="4450893287417543264">Ikke vis igjen</translation>
 <translation id="4477350412780666475">Neste spor</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Trykk-og-dra</translation>
 <translation id="5750765938512549687">Bluetooth er av</translation>
 <translation id="5777841717266010279">Vil du stoppe skjermdelingen?</translation>
-<translation id="57838592816432529">Kutt lyden</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Stopp <ph name="ROUTE_TITLE" /> på <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Av</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Strøm</translation>
 <translation id="6727969043791803658">Koblet til – <ph name="BATTERY_PERCENTAGE" /> % batteri</translation>
 <translation id="6751826523481687655">Ytelsessporing er slått på</translation>
+<translation id="6752912906630585008">Skrivebord <ph name="REMOVED_DESK" /> ble fjernet og slått sammen med skrivebord <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Spill av</translation>
 <translation id="6803622936009808957">Kunne ikke speile skjermene fordi ingen støttede oppløsninger ble funnet. Utvidet skrivebord ble brukt i stedet.</translation>
 <translation id="6820676911989879663">Ta en pause!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Innstillinger</translation>
 <translation id="8433186206711564395">Nettverksinnstillinger</translation>
 <translation id="8433977262951327081">Hurtigtasten for å vise boblen med menyen for valg av inndataalternativer på hyllen er endret. Bruk <ph name="NEW_SHORTCUT" /> i stedet for <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Skrivebord <ph name="DESK_TITILE" /> er aktivert</translation>
 <translation id="8452135315243592079">SIM-kort mangler</translation>
 <translation id="8454013096329229812">Wi-Fi er slått på.</translation>
 <translation id="847056008324733326">Innstillinger for visningsskala</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index 60f3e8a6..e304e34 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Połączono z urządzeniem}few{Połączono z # urządzeniami}many{Połączono z # urządzeniami}other{Połączono z # urządzenia}}</translation>
 <translation id="3226991577105957773">i jeszcze <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Brak dostępnych sieci komórkowych</translation>
+<translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> zostało przeniesione z pulpitu <ph name="ACTIVE_DESK" /> na pulpit <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Co potrafisz?</translation>
 <translation id="3294437725009624529">Gość</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> nadal może się później zalogować.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Zmień z powrotem na „<ph name="FROM_LOCALE" />” (wymaga ponownego uruchomienia)</translation>
 <translation id="3576141592585647168">Zmień strefę czasową</translation>
 <translation id="3595596368722241419">Bateria naładowana</translation>
+<translation id="3604801046548457007">Utworzono pulpit <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Podłączono monitor brajlowski.</translation>
 <translation id="3621202678540785336">Urządzenie wejściowe</translation>
 <translation id="3626281679859535460">Jasność</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">To są Twoje narzędzia rysika</translation>
 <translation id="4389184120735010762">Naciśnięto skrót klawiszowy lupy zadokowanej. Czy chcesz ją włączyć?</translation>
 <translation id="4421231901400348175">Udostępnianie sterowania ekranem użytkownikowi <ph name="HELPER_NAME" /> przy użyciu pomocy zdalnej.</translation>
-<translation id="4430019312045809116">Głośność</translation>
 <translation id="4450893287417543264">Nie pokazuj ponownie</translation>
 <translation id="4477350412780666475">Następny utwór</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Przeciąganie dotykiem</translation>
 <translation id="5750765938512549687">Bluetooth jest wyłączony</translation>
 <translation id="5777841717266010279">Zakończyć udostępnianie ekranu?</translation>
-<translation id="57838592816432529">Wycisz</translation>
 <translation id="5820394555380036790">System operacyjny Chromium</translation>
 <translation id="5837036133683224804">Zatrzymaj usługę <ph name="ROUTE_TITLE" /> na urządzeniu <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Wyłączone</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Zasilanie</translation>
 <translation id="6727969043791803658">Połączono, bateria: <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Śledzenie wydajności jest włączone</translation>
+<translation id="6752912906630585008">Pulpit <ph name="REMOVED_DESK" /> został usunięty i połączony z pulpitem <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Odtwórz</translation>
 <translation id="6803622936009808957">Nie można wyświetlić odbicia lustrzanego, ponieważ nie znaleziono obsługiwanych rozdzielczości. Zamiast tego został włączony pulpit rozszerzony.</translation>
 <translation id="6820676911989879663">Zrób sobie przerwę</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Ustawienia</translation>
 <translation id="8433186206711564395">Ustawienia sieci</translation>
 <translation id="8433977262951327081">Zmieniliśmy skrót, który pokazuje dymek menu opcji wejścia na półce. Zamiast <ph name="OLD_SHORTCUT" /> używaj teraz <ph name="NEW_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Aktywowano pulpit <ph name="DESK_TITILE" /></translation>
 <translation id="8452135315243592079">Brak karty SIM</translation>
 <translation id="8454013096329229812">Wi-Fi włączone.</translation>
 <translation id="847056008324733326">Ustawienia skali wyświetlania</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index b3c030e5..39f7d6d 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Conectado a um dispositivo}one{Conectado a # dispositivo}other{Conectado a # dispositivos}}</translation>
 <translation id="3226991577105957773">Mais <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Nenhuma rede móvel disponível</translation>
+<translation id="3249513730522716925">A janela <ph name="WINDOW_TITLE" /> foi movida da área de trabalho <ph name="ACTIVE_DESK" /> para a <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">O que você pode fazer?</translation>
 <translation id="3294437725009624529">Visitante</translation>
 <translation id="3308453408813785101">O usuário <ph name="USER_EMAIL_ADDRESS" /> ainda poderá fazer login mais tarde.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Voltar a "<ph name="FROM_LOCALE" />" (exige reinicialização)</translation>
 <translation id="3576141592585647168">Alterar fuso horário</translation>
 <translation id="3595596368722241419">Bateria carregada</translation>
+<translation id="3604801046548457007">Área de trabalho <ph name="DESK_TITILE" /> criada</translation>
 <translation id="3606978283550408104">Display em braille conectado.</translation>
 <translation id="3621202678540785336">Entrada</translation>
 <translation id="3626281679859535460">Brilho</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Estas são suas ferramentas da stylus</translation>
 <translation id="4389184120735010762">Você pressionou o atalho de teclado para a lupa ancorada. Gostaria de ativá-la?</translation>
 <translation id="4421231901400348175">Compartilhando o controle da sua tela com <ph name="HELPER_NAME" /> via Assistência remota.</translation>
-<translation id="4430019312045809116">Volume</translation>
 <translation id="4450893287417543264">Não mostrar novamente</translation>
 <translation id="4477350412780666475">Próxima faixa</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Arrastar com toque</translation>
 <translation id="5750765938512549687">Bluetooth desativado</translation>
 <translation id="5777841717266010279">Interromper compartilhamento de tela?</translation>
-<translation id="57838592816432529">Desativar som</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Parar <ph name="ROUTE_TITLE" /> para <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Desativado</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Energia</translation>
 <translation id="6727969043791803658">Conectado, <ph name="BATTERY_PERCENTAGE" />% de bateria</translation>
 <translation id="6751826523481687655">O acompanhamento de desempenho está ativado</translation>
+<translation id="6752912906630585008">Área de trabalho <ph name="REMOVED_DESK" /> removida e mesclada com a <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Reproduzir</translation>
 <translation id="6803622936009808957">Não foi possível espelhar os displays porque não foram encontradas resoluções suportadas. Em vez disso, foi ativada a área de trabalho estendida.</translation>
 <translation id="6820676911989879663">Faça uma pausa</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Configurações</translation>
 <translation id="8433186206711564395">Configurações de rede</translation>
 <translation id="8433977262951327081">O atalho para mostrar o balão de menu de opções de entrada na estante foi alterado. Use <ph name="NEW_SHORTCUT" /> em vez de <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Área de trabalho <ph name="DESK_TITILE" /> ativada</translation>
 <translation id="8452135315243592079">Chip ausente</translation>
 <translation id="8454013096329229812">O Wi-Fi está ligado.</translation>
 <translation id="847056008324733326">Exibir configurações de escala</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 5b8f114..6feedbc 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Ligado a um dispositivo}other{Ligado a # dispositivos}}</translation>
 <translation id="3226991577105957773">E mais <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Nenhuma rede móvel disponível</translation>
+<translation id="3249513730522716925">A janela <ph name="WINDOW_TITLE" /> foi movida do espaço de trabalho <ph name="ACTIVE_DESK" /> para o espaço de trabalho <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">O que podes fazer?</translation>
 <translation id="3294437725009624529">Convidado</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> pode iniciar sessão mais tarde.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Reverter alteração para <ph name="FROM_LOCALE" /> (requer reinicio)</translation>
 <translation id="3576141592585647168">Altere o fuso horário</translation>
 <translation id="3595596368722241419">Bateria carregada</translation>
+<translation id="3604801046548457007">Foi criado o espaço de trabalho <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Visualização em braille ligada.</translation>
 <translation id="3621202678540785336">Entrada</translation>
 <translation id="3626281679859535460">Brilho</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Estas são as suas ferramentas da caneta stylus</translation>
 <translation id="4389184120735010762">Premiu o atalho de teclado da lupa ancorada. Pretende ativá-la?</translation>
 <translation id="4421231901400348175">A partilhar o controlo do seu ecrã com <ph name="HELPER_NAME" /> através da Assistência remota.</translation>
-<translation id="4430019312045809116">Volume</translation>
 <translation id="4450893287417543264">Não mostrar de novo</translation>
 <translation id="4477350412780666475">Faixa seguinte</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Arrastamento através do toque</translation>
 <translation id="5750765938512549687">Bluetooth desativado</translation>
 <translation id="5777841717266010279">Parar a partilha do ecrã?</translation>
-<translation id="57838592816432529">Desativar som</translation>
 <translation id="5820394555380036790">SO Chromium</translation>
 <translation id="5837036133683224804">Parar o <ph name="ROUTE_TITLE" /> no recetor <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Desativado</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Alimentação</translation>
 <translation id="6727969043791803658">Ligado, <ph name="BATTERY_PERCENTAGE" />% de bateria</translation>
 <translation id="6751826523481687655">O rastreio do desempenho está ativado.</translation>
+<translation id="6752912906630585008">O espaço de trabalho <ph name="REMOVED_DESK" /> foi removido e unido ao espaço de trabalho <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Reproduzir</translation>
 <translation id="6803622936009808957">Não foi possível espelhar os ecrãs, porque não foram encontradas resoluções suportadas. Em vez disso, entrou no ambiente de trabalho expandido.</translation>
 <translation id="6820676911989879663">Faça uma pausa!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Definições</translation>
 <translation id="8433186206711564395">Definições de rede</translation>
 <translation id="8433977262951327081">O atalho para mostrar o balão do menu de opções de introdução na prateleira foi alterado. Utilize <ph name="NEW_SHORTCUT" /> em vez de <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Espaço de trabalho <ph name="DESK_TITILE" /> ativado</translation>
 <translation id="8452135315243592079">Cartão SIM em falta</translation>
 <translation id="8454013096329229812">A ligação Wi-Fi está ativada.</translation>
 <translation id="847056008324733326">Definições de escala do ecrã</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 56655f5..0ca9e57 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Conectat la un dispozitiv}few{Conectat la # dispozitive}other{Conectat la # de dispozitive}}</translation>
 <translation id="3226991577105957773">+ încă <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Nicio rețea mobilă disponibilă</translation>
+<translation id="3249513730522716925">Fereastra <ph name="WINDOW_TITLE" /> a fost mutată de pe desktopul <ph name="ACTIVE_DESK" /> pe desktopul <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Ce poți face?</translation>
 <translation id="3294437725009624529">Invitat</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> se poate conecta în continuare mai târziu.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Modifică înapoi la „<ph name="FROM_LOCALE" />” (este necesară repornirea)</translation>
 <translation id="3576141592585647168">Modifică fusul orar</translation>
 <translation id="3595596368722241419">Baterie încărcată</translation>
+<translation id="3604801046548457007">A fost creat desktopul <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Afișajul Braille este conectat.</translation>
 <translation id="3621202678540785336">Intrări</translation>
 <translation id="3626281679859535460">Luminozitate</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Acestea sunt instrumentele pentru creion</translation>
 <translation id="4389184120735010762">Ai accesat comanda rapidă de la tastatură pentru lupa andocată. Vrei să o activezi?</translation>
 <translation id="4421231901400348175">În prezent, <ph name="HELPER_NAME" /> îți poate controla ecranul prin Asistență la distanță.</translation>
-<translation id="4430019312045809116">Volum</translation>
 <translation id="4450893287417543264">Nu mai afișa</translation>
 <translation id="4477350412780666475">Melodia următoare</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Tragere prin atingere</translation>
 <translation id="5750765938512549687">Bluetooth este dezactivat</translation>
 <translation id="5777841717266010279">Oprești permiterea accesului la ecran?</translation>
-<translation id="57838592816432529">Dezactivează sunetul</translation>
 <translation id="5820394555380036790">Sistemul de operare Chromium</translation>
 <translation id="5837036133683224804">Întrerupe <ph name="ROUTE_TITLE" /> pe <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Dezactivat</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Alimentare</translation>
 <translation id="6727969043791803658">Conectat, nivelul bateriei: <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6751826523481687655">Urmărirea performanțelor este activată</translation>
+<translation id="6752912906630585008">Desktopul <ph name="REMOVED_DESK" /> a fost eliminat și îmbinat cu desktopul <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Redă</translation>
 <translation id="6803622936009808957">Afișajele nu au putut fi oglindite, deoarece nu au fost găsite rezoluții acceptate. Ați intrat, în schimb, în modul monitor extins.</translation>
 <translation id="6820676911989879663">Fă o pauză!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Setări</translation>
 <translation id="8433186206711564395">Setări de rețea</translation>
 <translation id="8433977262951327081">Comanda rapidă pentru afișarea în raft a balonului meniului cu opțiunile de introducere a textului a fost modificată. Folosește <ph name="NEW_SHORTCUT" /> în loc de <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Desktopul <ph name="DESK_TITILE" /> este activat</translation>
 <translation id="8452135315243592079">Lipsește cardul SIM</translation>
 <translation id="8454013096329229812">Conexiunea Wi-Fi este activată.</translation>
 <translation id="847056008324733326">Setările pentru scara afișajului</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 1404e1e..fec008e 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Подключено одно устройство}one{Подключено # устройство}few{Подключено # устройства}many{Подключено # устройств}other{Подключено # устройства}}</translation>
 <translation id="3226991577105957773">Ещё <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Нет доступных мобильных сетей</translation>
+<translation id="3249513730522716925">Окно "<ph name="WINDOW_TITLE" />" перемещено с рабочего стола "<ph name="ACTIVE_DESK" />" на рабочий стол "<ph name="TARGET_DESK" />".</translation>
 <translation id="3255483164551725916">Что ты умеешь?</translation>
 <translation id="3294437725009624529">Гость</translation>
 <translation id="3308453408813785101">Пользователь <ph name="USER_EMAIL_ADDRESS" /> сможет войти в аккаунт позже.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Вернуться к языку: "<ph name="FROM_LOCALE" />" (потребуется перезагрузка)</translation>
 <translation id="3576141592585647168">Изменение часового пояса</translation>
 <translation id="3595596368722241419">Аккумулятор заряжен</translation>
+<translation id="3604801046548457007">Создан рабочий стол "<ph name="DESK_TITILE" />".</translation>
 <translation id="3606978283550408104">Брайлевский дисплей подключен</translation>
 <translation id="3621202678540785336">Вход</translation>
 <translation id="3626281679859535460">Яркость</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Инструменты для работы со стилусом</translation>
 <translation id="4389184120735010762">Вы нажали сочетание клавиш для включения закрепленной лупы. Выполнить это действие?</translation>
 <translation id="4421231901400348175">Доступ к экрану для <ph name="HELPER_NAME" /> с помощью удаленного помощника</translation>
-<translation id="4430019312045809116">Объем</translation>
 <translation id="4450893287417543264">Больше не показывать</translation>
 <translation id="4477350412780666475">Следующий трек</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Перетаскивание нажатием</translation>
 <translation id="5750765938512549687">Bluetooth выключен</translation>
 <translation id="5777841717266010279">Закрыть доступ к экрану?</translation>
-<translation id="57838592816432529">Отключить звук</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Остановить трансляцию <ph name="ROUTE_TITLE" /> на устройство "<ph name="RECEIVER_NAME" />"</translation>
 <translation id="5860033963881614850">ВЫКЛ</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Питание</translation>
 <translation id="6727969043791803658">Подключено, батарея заряжена на <ph name="BATTERY_PERCENTAGE" /> %</translation>
 <translation id="6751826523481687655">Отслеживание эффективности включено.</translation>
+<translation id="6752912906630585008">Рабочий стол "<ph name="REMOVED_DESK" />" удален и объединен с рабочим столом "<ph name="RECEIVE_DESK" />".</translation>
 <translation id="6790428901817661496">Воспроизвести</translation>
 <translation id="6803622936009808957">Не удалось дублировать изображение экрана, т. к. указанное разрешение не поддерживается. Включен режим расширенного рабочего стола.</translation>
 <translation id="6820676911989879663">Пора отдохнуть!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8433186206711564395">Настройки сети</translation>
 <translation id="8433977262951327081">Быстрые клавиши для вызова всплывающего окна с параметрами ввода на панели запуска изменились. Используйте <ph name="NEW_SHORTCUT" /> вместо <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Рабочий стол "<ph name="DESK_TITILE" />" активирован.</translation>
 <translation id="8452135315243592079">SIM-карта не обнаружена</translation>
 <translation id="8454013096329229812">Wi-Fi включен</translation>
 <translation id="847056008324733326">Настройки масштаба экрана</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 06c4131..36342e4 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Pripojené k zariadeniu}few{Pripojené k # zariadeniam}many{Connected to # devices}other{Pripojené k # zariadeniam}}</translation>
 <translation id="3226991577105957773">a ďalšie (<ph name="COUNT" />)</translation>
 <translation id="3236488194889173876">Nie je k dispozícii žiadna mobilná sieť</translation>
+<translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> bolo presunuté z pracovného prostredia <ph name="ACTIVE_DESK" /> do pracovného prostredia <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Čo dokážeš?</translation>
 <translation id="3294437725009624529">Hosť</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> sa bude môcť stále prihlásiť neskôr.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Zmeniť späť na miestne nastavenie „<ph name="FROM_LOCALE" />“ (vyžaduje sa reštart)</translation>
 <translation id="3576141592585647168">Zmena časového pásma</translation>
 <translation id="3595596368722241419">Batéria je nabitá</translation>
+<translation id="3604801046548457007">Pracovné prostredie <ph name="DESK_TITILE" /> bolo vytvorené</translation>
 <translation id="3606978283550408104">Bola pripojená Braillova obrazovka.</translation>
 <translation id="3621202678540785336">Vstup</translation>
 <translation id="3626281679859535460">Jas</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Toto sú vaše nástroje pre dotykové pero</translation>
 <translation id="4389184120735010762">Stlačili ste klávesovú skratku ukotvenej lupy. Chcete ju zapnúť?</translation>
 <translation id="4421231901400348175">Ovládanie obrazovky sa prostredníctvom Vzdialenej pomoci zdieľa s používateľom <ph name="HELPER_NAME" />.</translation>
-<translation id="4430019312045809116">Hlasitosť</translation>
 <translation id="4450893287417543264">Nabudúce nezobrazovať</translation>
 <translation id="4477350412780666475">Ďalšia stopa</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Presunutie klepnutím</translation>
 <translation id="5750765938512549687">Rozhranie Bluetooth je vypnuté</translation>
 <translation id="5777841717266010279">Chcete ukončiť zdieľanie obrazovky?</translation>
-<translation id="57838592816432529">Vypnúť zvuk</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Zastaviť prenos obsahu <ph name="ROUTE_TITLE" /> do zariadenia <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Vypnuté</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Napájanie</translation>
 <translation id="6727969043791803658">Pripojené, <ph name="BATTERY_PERCENTAGE" /> % batérie</translation>
 <translation id="6751826523481687655">Trasovanie výkonnosti je zapnuté</translation>
+<translation id="6752912906630585008">Pracovné prostredie <ph name="REMOVED_DESK" /> bolo odstránené a zlúčené s pracovným prostredím <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Prehrať</translation>
 <translation id="6803622936009808957">Obraz na monitoroch sa nedá zrkadliť, pretože sa nenašli podporované rozlíšenia. Namiesto toho sa spustil režim rozšírenej pracovnej plochy.</translation>
 <translation id="6820676911989879663">Urobte si prestávku.</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Nastavenia</translation>
 <translation id="8433186206711564395">Nastavenia siete</translation>
 <translation id="8433977262951327081">Klávesová skratka na zobrazenie bubliny s možnosťami vstupu na poličke sa zmenila. Namiesto skratky <ph name="OLD_SHORTCUT" /> použite skratku <ph name="NEW_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Pracovné prostredie <ph name="DESK_TITILE" /> bolo aktivované</translation>
 <translation id="8452135315243592079">Chýba SIM karta</translation>
 <translation id="8454013096329229812">Pripojenie Wi‑Fi je zapnuté.</translation>
 <translation id="847056008324733326">Nastavenia hustoty zobrazenia</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 5f37e47..1697426 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Vzpostavljena je povezava z eno napravo}one{Vzpostavljena je povezava z # napravo}two{Vzpostavljena je povezava z # napravama}few{Vzpostavljena je povezava s # napravami}other{Vzpostavljena je povezava s # napravami}}</translation>
 <translation id="3226991577105957773">in še <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Mobilno omrežje ni na voljo</translation>
+<translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> je bilo premaknjeno iz namizja <ph name="ACTIVE_DESK" /> v namizje <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Kakšne možnosti so na voljo?</translation>
 <translation id="3294437725009624529">Gost</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> se še vedno lahko prijavi pozneje.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Spremeni nazaj v jezik »<ph name="FROM_LOCALE" />« (potreben vnovični zagon)</translation>
 <translation id="3576141592585647168">Spreminjanje časovnega pasu</translation>
 <translation id="3595596368722241419">Baterija je polna</translation>
+<translation id="3604801046548457007">Namizje <ph name="DESK_TITILE" /> je bilo ustvarjeno</translation>
 <translation id="3606978283550408104">Povezava z braillovo vrstico je vzpostavljena.</translation>
 <translation id="3621202678540785336">Vhod</translation>
 <translation id="3626281679859535460">Svetlost</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">To so vaša orodja pisala</translation>
 <translation id="4389184120735010762">Pritisnili ste bližnjično tipko za zasidrano lupo. Ali jo želite vklopiti?</translation>
 <translation id="4421231901400348175">Deljenje nadzora nad zaslonom z osebo <ph name="HELPER_NAME" /> prek pomoči na daljavo.</translation>
-<translation id="4430019312045809116">Glasnost</translation>
 <translation id="4450893287417543264">Tega ne prikaži več</translation>
 <translation id="4477350412780666475">Naslednja skladba</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Vlečenje z dotikom</translation>
 <translation id="5750765938512549687">Bluetooth je izklopljen</translation>
 <translation id="5777841717266010279">Želite ustaviti skupno rabo zaslona?</translation>
-<translation id="57838592816432529">Izklopi zvok</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Ustavi zavihek <ph name="ROUTE_TITLE" /> v sprejemniku <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Izklopljeno</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Napajanje</translation>
 <translation id="6727969043791803658">Povezano, <ph name="BATTERY_PERCENTAGE" /> % energije akumulatorja</translation>
 <translation id="6751826523481687655">Sledenje učinkovitosti delovanja je vklopljeno</translation>
+<translation id="6752912906630585008">Namizje <ph name="REMOVED_DESK" /> je bilo odstranjeno in združeno z namizjem <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Predvajanje</translation>
 <translation id="6803622936009808957">Zaslonov ni bilo mogoče zrcaliti, ker ni bilo najdene nobene podprte ločljivosti. Uporabljeno je razširjeno namizje.</translation>
 <translation id="6820676911989879663">Čas za odmor!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Nastavitve</translation>
 <translation id="8433186206711564395">Omrežne nastavitve</translation>
 <translation id="8433977262951327081">Bližnjica za prikaz oblačka menija z možnostmi vnosa na polici se je spremenila. Namesto <ph name="OLD_SHORTCUT" /> uporabite <ph name="NEW_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Namizje <ph name="DESK_TITILE" /> je bilo aktivirano</translation>
 <translation id="8452135315243592079">Ni kartice SIM</translation>
 <translation id="8454013096329229812">Wi-Fi je vklopljen.</translation>
 <translation id="847056008324733326">Nastavitve zaslonskega razmerja</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index b2cf06a..8b0192a 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Повезани сте са једним уређајем}one{Повезани сте са # уређајем}few{Повезани сте са # уређаја}other{Повезани сте са # уређаја}}</translation>
 <translation id="3226991577105957773">и још <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Није доступна ниједна мобилна мрежа</translation>
+<translation id="3249513730522716925">Прозор <ph name="WINDOW_TITLE" /> је премештен са радне површине <ph name="ACTIVE_DESK" /> на радну површину <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Шта можеш да радиш?</translation>
 <translation id="3294437725009624529">Гост</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> ће и даље моћи да се пријави касније.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Врати на „<ph name="FROM_LOCALE" />“ (потребно је поновно покретање)</translation>
 <translation id="3576141592585647168">Промените временску зону</translation>
 <translation id="3595596368722241419">Батерија је пуна</translation>
+<translation id="3604801046548457007">Радна површина <ph name="DESK_TITILE" /> је направљена</translation>
 <translation id="3606978283550408104">Повезан је екран са Брајевом азбуком.</translation>
 <translation id="3621202678540785336">Улаз</translation>
 <translation id="3626281679859535460">Осветљеност</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Ово су алатке за писаљку</translation>
 <translation id="4389184120735010762">Притиснули сте тастерску пречицу за монтирану лупу екрана. Желите ли да је укључите?</translation>
 <translation id="4421231901400348175">Делите контролу над екраном са особом <ph name="HELPER_NAME" /> преко Даљинске помоћи.</translation>
-<translation id="4430019312045809116">Јачина звука</translation>
 <translation id="4450893287417543264">Не приказуј поново</translation>
 <translation id="4477350412780666475">Следећа песма</translation>
 <translation id="4479639480957787382">Етернет</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Превлачење додиром</translation>
 <translation id="5750765938512549687">Bluetooth је искључен</translation>
 <translation id="5777841717266010279">Желите ли да прекинете дељење екрана?</translation>
-<translation id="57838592816432529">Искључи звук</translation>
 <translation id="5820394555380036790">Chromium ОС</translation>
 <translation id="5837036133683224804">Заустави <ph name="ROUTE_TITLE" /> на уређају <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Искључено</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Енергија</translation>
 <translation id="6727969043791803658">Повезано, ниво батерије је <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Праћење учинка је укључено</translation>
+<translation id="6752912906630585008">Радна површина <ph name="REMOVED_DESK" /> је уклоњена и спојена са радном површином <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Пусти</translation>
 <translation id="6803622936009808957">Није могуће пресликати екране зато што није пронађена ниједна подржана резолуција. Уместо тога, приказује се проширена радна површина.</translation>
 <translation id="6820676911989879663">Направите паузу!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Подешавања</translation>
 <translation id="8433186206711564395">Мрежна подешавања</translation>
 <translation id="8433977262951327081">Промењена је пречица за приказивање облачића за мени Опције уноса на полици. Користите <ph name="NEW_SHORTCUT" /> уместо <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Радна површина <ph name="DESK_TITILE" /> је активирана</translation>
 <translation id="8452135315243592079">SIM картица недостаје</translation>
 <translation id="8454013096329229812">Wi-Fi је укључен.</translation>
 <translation id="847056008324733326">Подешавања размере приказа</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index ea2f159..5d03992 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Ansluten till en enhet}other{Ansluten till # enheter}}</translation>
 <translation id="3226991577105957773">och <ph name="COUNT" /> till</translation>
 <translation id="3236488194889173876">Det finns inget tillgängligt mobilnätverk</translation>
+<translation id="3249513730522716925">Fönstret <ph name="WINDOW_TITLE" /> flyttades från skrivbordet <ph name="ACTIVE_DESK" /> till skrivbordet <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Vad kan du göra?</translation>
 <translation id="3294437725009624529">Gäst</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> kan ändå logga in igen senare.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Byt tillbaka till "<ph name="FROM_LOCALE" />" (kräver omstart)</translation>
 <translation id="3576141592585647168">Ändra tidszon</translation>
 <translation id="3595596368722241419">Batteriet är fulladdat</translation>
+<translation id="3604801046548457007">Skrivbordet <ph name="DESK_TITILE" /> har skapats</translation>
 <translation id="3606978283550408104">Punktskriftsskärm ansluten.</translation>
 <translation id="3621202678540785336">Ingång</translation>
 <translation id="3626281679859535460">Ljusstyrka</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Här är dina verktyg för e-penna</translation>
 <translation id="4389184120735010762">Du tryckte på kortkommandot för dockad skärmförstoring. Vill du aktivera funktionen?</translation>
 <translation id="4421231901400348175">Dela kontroll över skärmen med <ph name="HELPER_NAME" /> via Fjärrhjälp.</translation>
-<translation id="4430019312045809116">Volym</translation>
 <translation id="4450893287417543264">Visa inte igen</translation>
 <translation id="4477350412780666475">Nästa spår</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Tryck snabbt två gånger och dra</translation>
 <translation id="5750765938512549687">Bluetooth är inaktiverat</translation>
 <translation id="5777841717266010279">Vill du avbryta skärmdelningen?</translation>
-<translation id="57838592816432529">Stäng av ljudet</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Sluta casta <ph name="ROUTE_TITLE" /> till <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Av</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Batteri</translation>
 <translation id="6727969043791803658">Ansluten, <ph name="BATTERY_PERCENTAGE" /> % batterinivå</translation>
 <translation id="6751826523481687655">Prestandaspårning har aktiverats</translation>
+<translation id="6752912906630585008">Skrivbordet <ph name="REMOVED_DESK" /> har tagits bort och slagits samman med skrivbordet <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Spela</translation>
 <translation id="6803622936009808957">Det gick inte att spegla visningar eftersom inga upplösningar som stöds hittades. Utökat skrivbordsläge används i stället.</translation>
 <translation id="6820676911989879663">Ta en paus!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Inställningar</translation>
 <translation id="8433186206711564395">Nätverksinställningar</translation>
 <translation id="8433977262951327081">Kortkommandot för att visa menybubblan för inmatningsalternativ i hyllan har ändrats. Använd <ph name="NEW_SHORTCUT" /> i stället för <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Skrivbordet <ph name="DESK_TITILE" /> har aktiverats</translation>
 <translation id="8452135315243592079">SIM-kort saknas</translation>
 <translation id="8454013096329229812">Wi-Fi är aktiverat.</translation>
 <translation id="847056008324733326">Inställningar för skala på skärmen</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index 915ced1..4d934bc 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Imeunganishwa kwenye kifaa kimoja}other{Imeunganishwa kwenye vifaa #}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> zaidi</translation>
 <translation id="3236488194889173876">Mtandao wa simu haupatikani</translation>
+<translation id="3249513730522716925">Dirisha la <ph name="WINDOW_TITLE" /> limehamishwa kutoka Kiolesura cha <ph name="ACTIVE_DESK" /> hadi Kiolesura cha <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Unaweza kufanya nini?</translation>
 <translation id="3294437725009624529">Mgeni</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> bado anaweza kuingia katika akaunti baadaye.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Badilisha hadi "<ph name="FROM_LOCALE" />" (inahitaji uzime na uwashe)</translation>
 <translation id="3576141592585647168">Badilisha saa za eneo</translation>
 <translation id="3595596368722241419">Betri imejaa</translation>
+<translation id="3604801046548457007">Kiolesura cha <ph name="DESK_TITILE" /> kimeanzishwa</translation>
 <translation id="3606978283550408104">Onyesho la breli limeunganishwa.</translation>
 <translation id="3621202678540785336">Ingizo</translation>
 <translation id="3626281679859535460">Ung'aavu</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Hizi ni zana zako za stylus</translation>
 <translation id="4389184120735010762">Umebofya mikato ya kibodi ya kikuzaji kilichoambatishwa. Ungependa kukiwasha?</translation>
 <translation id="4421231901400348175">Kushiriki udhibiti wa skrini yako na <ph name="HELPER_NAME" /> kupitia Usaidizi wa Mbali.</translation>
-<translation id="4430019312045809116">Kiwango</translation>
 <translation id="4450893287417543264">Usionyeshe tena</translation>
 <translation id="4477350412780666475">Wimbo Unaofuata</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Uburutaji wa kugonga</translation>
 <translation id="5750765938512549687">Bluetooth imezimwa</translation>
 <translation id="5777841717266010279">Je,ungependa kuacha kushiriki skrini?</translation>
-<translation id="57838592816432529">Zima sauti</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">Komesha <ph name="ROUTE_TITLE" /> kwenye <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Kimezimwa</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Nishati</translation>
 <translation id="6727969043791803658">Imeunganishwa, kiasi cha chaji ni <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Kipengele cha ufuatiliaji wa utendaji kimewashwa</translation>
+<translation id="6752912906630585008">Kiolesura cha <ph name="REMOVED_DESK" /> kimeondolewa na kimeunganishwa na Kiolesura cha <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Cheza</translation>
 <translation id="6803622936009808957">Haikuweza kuakisi maonyesho kwa kuwa hakuna misongo inayoweza kutumiwa iliyopatikana. Badala yake imeingia eneo-kazi lililopanuliwa.</translation>
 <translation id="6820676911989879663">Pumzika kidogo!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Mipangilio</translation>
 <translation id="8433186206711564395">Mipangilio ya mtandao</translation>
 <translation id="8433977262951327081">Njia ya mkato ya kuonyesha kiputo cha menyu ya chaguo za kuingiza data katika rafu imebadilika. Tafadhali tumia <ph name="NEW_SHORTCUT" /> badala ya <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Kiolesura cha <ph name="DESK_TITILE" /> kimewashwa</translation>
 <translation id="8452135315243592079">Hakuna SIM kadi</translation>
 <translation id="8454013096329229812">Wi-Fi imewashwa.</translation>
 <translation id="847056008324733326">Onyesha mipangilio ya vipimo</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 4cc74f35..2e2cd4c 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -233,7 +233,6 @@
 <translation id="4379531060876907730">இவை உங்கள் ஸ்டைலஸ் கருவிகள்</translation>
 <translation id="4389184120735010762">டாக் செய்யப்பட்ட பெரிதாக்கியின் கீபோர்ட் ஷார்ட்கட்டை அழுத்தியுள்ளீர்கள். அதை இயக்க விரும்புகிறீர்களா?</translation>
 <translation id="4421231901400348175">தொலைநிலை உதவி மூலம் <ph name="HELPER_NAME" /> உடன் உங்கள் திரையின் கட்டுப்பாட்டைப் பகிர்கிறது.</translation>
-<translation id="4430019312045809116">அளவு</translation>
 <translation id="4450893287417543264">மீண்டும் காட்டாதே</translation>
 <translation id="4477350412780666475">அடுத்த டிராக்</translation>
 <translation id="4479639480957787382">ஈத்தர்நெட்</translation>
@@ -308,7 +307,6 @@
 <translation id="5744083938413354016">தட்டி நகர்த்துதல்</translation>
 <translation id="5750765938512549687">புளூடூத் முடக்கப்பட்டுள்ளது</translation>
 <translation id="5777841717266010279">திரைப் பகிர்வதை நிறுத்தவா?</translation>
-<translation id="57838592816432529">ஒலியடக்கு</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" />க்கு <ph name="ROUTE_TITLE" />ஐ அனுப்புவதை நிறுத்து</translation>
 <translation id="5860033963881614850">ஆஃப்</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 1ba68d4..d8eba10 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{పరికరానికి కనెక్ట్ చేయబడింది}other{# పరికరాలకు కనెక్ట్ చేయబడింది}}</translation>
 <translation id="3226991577105957773">+మరో <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">మొబైల్ నెట్‌వర్క్ ఏదీ అందుబాటులో లేదు</translation>
+<translation id="3249513730522716925">"<ph name="WINDOW_TITLE" />" విండో అన్నది "<ph name="ACTIVE_DESK" />" డెస్క్ నుండి "<ph name="TARGET_DESK" />" డెస్క్‌కు తరలించబడింది</translation>
 <translation id="3255483164551725916">నువ్వు ఏమి చేయగలవు?</translation>
 <translation id="3294437725009624529">అతిథి</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> ఇప్పటికీ తర్వాత సైన్ ఇన్ చేయవచ్చు.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">"<ph name="FROM_LOCALE" />"కు వెనుక‌కు మార్చండి (పునఃప్రారంభం అవసరం)</translation>
 <translation id="3576141592585647168">సమయ మండలిని మార్చండి</translation>
 <translation id="3595596368722241419">బ్యాటరీ నిండింది</translation>
+<translation id="3604801046548457007">"<ph name="DESK_TITILE" />" డెస్క్ సృష్టించబడింది</translation>
 <translation id="3606978283550408104">బ్రెయిలీ డిస్‌ప్లే కనెక్ట్ చేయబడింది.</translation>
 <translation id="3621202678540785336">ఇన్‌పుట్</translation>
 <translation id="3626281679859535460">ప్రకాశం</translation>
@@ -234,7 +236,6 @@
 <translation id="4379531060876907730">ఇవి మీ స్టైలస్ సాధనాలు</translation>
 <translation id="4389184120735010762">మీరు డాక్ చేసిన మాగ్నిఫైయర్‌ కోసం కీబోర్డ్ షార్ట్‌కట్‌ను నొక్కారు. మీరు దీన్ని ఆన్ చేయాలనుకుంటున్నారా?</translation>
 <translation id="4421231901400348175">రిమోట్ సహాయం విధానంలో మీ స్క్రీన్ నియంత్రణ <ph name="HELPER_NAME" />కి భాగస్వామ్యం చేయబడుతోంది.</translation>
-<translation id="4430019312045809116">వాల్యూమ్</translation>
 <translation id="4450893287417543264">మళ్లీ చూపవద్దు</translation>
 <translation id="4477350412780666475">తర్వాతి ట్రాక్</translation>
 <translation id="4479639480957787382">ఈథర్నెట్</translation>
@@ -309,7 +310,6 @@
 <translation id="5744083938413354016">నొక్కి లాగండి</translation>
 <translation id="5750765938512549687">బ్లూటూత్ ఆఫ్ చేయబడింది</translation>
 <translation id="5777841717266010279">స్క్రీన్ భాగస్వామ్యాన్ని ఆపివేయాలా?</translation>
-<translation id="57838592816432529">మ్యూట్ చేయి</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" />లో <ph name="ROUTE_TITLE" /> ఆపివేయి</translation>
 <translation id="5860033963881614850">ఆఫ్ అయ్యింది</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">పవర్</translation>
 <translation id="6727969043791803658">కనెక్ట్ చేయబడింది, <ph name="BATTERY_PERCENTAGE" />% బ్యాటరీ ఉంది</translation>
 <translation id="6751826523481687655">పనితీరు స్థితిగతి కనుగొనడం ఆన్‌లో ఉంది</translation>
+<translation id="6752912906630585008">"<ph name="REMOVED_DESK" />" డెస్క్ తీసివేసి, "<ph name="RECEIVE_DESK" />" డెస్క్‌తో విలీనం చేయబడింది</translation>
 <translation id="6790428901817661496">ప్లే చేయి</translation>
 <translation id="6803622936009808957">మద్దతు ఉన్న రిజల్యూషన్‌లు కనుగొనబడనందున ప్రదర్శనలను ప్రతిబింబించడం సాధ్యపడలేదు. దానికి బదులుగా విస్తారిత డెస్క్‌టాప్‌కు మారారు.</translation>
 <translation id="6820676911989879663">విరామం తీసుకోండి!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">సెట్టింగ్‌లు</translation>
 <translation id="8433186206711564395">నెట్‌వర్క్ సెట్టింగ్‌లు</translation>
 <translation id="8433977262951327081">అరలో ఇన్‌పుట్ ఎంపికల మెనూ బబుల్‌ను చూపడానికి ఉపయోగించే షార్ట్‌కట్ మార్చబడింది. దయచేసి <ph name="OLD_SHORTCUT" />కు బదులుగా <ph name="NEW_SHORTCUT" />ను ఉపయోగించండి.</translation>
+<translation id="8444246603146515890">డెస్క్ <ph name="DESK_TITILE" /> యాక్టివేట్ చేయబడింది</translation>
 <translation id="8452135315243592079">SIM కార్డ్ లేదు</translation>
 <translation id="8454013096329229812">Wi-Fi ఆన్ చేయబడింది.</translation>
 <translation id="847056008324733326">స్కేల్ సెట్టింగ్‌లను ప్రదర్శించండి</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index e2f692cb8..c68704a 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{เชื่อมต่ออุปกรณ์แล้ว 1 เครื่อง}other{เชื่อมต่ออุปกรณ์แล้ว # เครื่อง}}</translation>
 <translation id="3226991577105957773">และอีก <ph name="COUNT" /> รายการ</translation>
 <translation id="3236488194889173876">ไม่มีเครือข่ายมือถือพร้อมใช้งาน</translation>
+<translation id="3249513730522716925">ย้ายหน้าต่าง <ph name="WINDOW_TITLE" /> จากเดสก์ <ph name="ACTIVE_DESK" /> ไปยังเดสก์ <ph name="TARGET_DESK" /> แล้ว</translation>
 <translation id="3255483164551725916">เธอทำอะไรได้บ้าง</translation>
 <translation id="3294437725009624529">ผู้มาเยือน</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> ยังมีสิทธิ์ลงชื่อเข้าใช้ภายหลังได้</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">เปลี่ยนกลับเป็น "<ph name="FROM_LOCALE" />" (จำเป็นต้องรีสตาร์ต)</translation>
 <translation id="3576141592585647168">เปลี่ยนแปลงเขตเวลา</translation>
 <translation id="3595596368722241419">แบตเตอรี่เต็ม</translation>
+<translation id="3604801046548457007">สร้างเดสก์ <ph name="DESK_TITILE" /> แล้ว</translation>
 <translation id="3606978283550408104">เชื่อมต่ออุปกรณ์แสดงผลอักษรเบรลล์แล้ว</translation>
 <translation id="3621202678540785336">อินพุต</translation>
 <translation id="3626281679859535460">ความสว่าง</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">นี่คือเครื่องมือสไตลัส</translation>
 <translation id="4389184120735010762">คุณกดแป้นพิมพ์ลัดสำหรับแว่นขยายหน้าจอบางส่วน จะเปิดแว่นขยายไหม</translation>
 <translation id="4421231901400348175">กำลังแชร์การควบคุมหน้าจอกับ <ph name="HELPER_NAME" /> ผ่านความช่วยเหลือระยะไกล</translation>
-<translation id="4430019312045809116">ระดับเสียง</translation>
 <translation id="4450893287417543264">ไม่ต้องแสดงอีก</translation>
 <translation id="4477350412780666475">แทร็กถัดไป</translation>
 <translation id="4479639480957787382">อีเทอร์เน็ต</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">การแตะลาก</translation>
 <translation id="5750765938512549687">ปิดบลูทูธแล้ว</translation>
 <translation id="5777841717266010279">ต้องการหยุดแชร์หน้าจอไหม</translation>
-<translation id="57838592816432529">ปิดเสียง</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804">หยุด <ph name="ROUTE_TITLE" /> ใน<ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">ปิด</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">พลังงาน</translation>
 <translation id="6727969043791803658">เชื่อมต่อแล้ว แบตเตอรี่ <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">การติดตามประสิทธิภาพเปิดอยู่</translation>
+<translation id="6752912906630585008">นำเดสก์ <ph name="REMOVED_DESK" /> ออกและรวมเข้ากับเดสก์ <ph name="RECEIVE_DESK" /> แล้ว</translation>
 <translation id="6790428901817661496">เล่น</translation>
 <translation id="6803622936009808957">ไม่สามารถแสดงผลคู่ขนานได้เนื่องจากไม่พบความละเอียดที่สนับสนุน เข้าสู่เดสก์ท็อปแบบขยายแทน</translation>
 <translation id="6820676911989879663">พักสายตาหน่อย</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">การตั้งค่า</translation>
 <translation id="8433186206711564395">การตั้งค่าเครือข่าย</translation>
 <translation id="8433977262951327081">มีการเปลี่ยนแปลงทางลัดที่ใช้แสดงลูกโป่งเมนูตัวเลือกการป้อนข้อมูลในชั้นวาง โปรดใช้ <ph name="NEW_SHORTCUT" /> แทน <ph name="OLD_SHORTCUT" /></translation>
+<translation id="8444246603146515890">เปิดใช้งานเดสก์ <ph name="DESK_TITILE" /> แล้ว</translation>
 <translation id="8452135315243592079">ไม่มีซิมการ์ด</translation>
 <translation id="8454013096329229812">WiFi เปิดอยู่</translation>
 <translation id="847056008324733326">การตั้งค่าระดับการแสดงผล</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index b47db56..1de6878 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Bir cihaza bağlı}other{# cihaza bağlı}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> öğe daha</translation>
 <translation id="3236488194889173876">Kullanılabilir mobil ağ yok</translation>
+<translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> penceresi, <ph name="ACTIVE_DESK" /> numaralı Masadan <ph name="TARGET_DESK" /> numaralı Masaya taşındı</translation>
 <translation id="3255483164551725916">Neler yapabilirsin?</translation>
 <translation id="3294437725009624529">Misafir</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> daha sonra yine oturum açabilir.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Tekrar "<ph name="FROM_LOCALE" />" ayarına dön (yeniden başlatmak gerekir)</translation>
 <translation id="3576141592585647168">Saat dilimini değiştir</translation>
 <translation id="3595596368722241419">Pil tam dolu</translation>
+<translation id="3604801046548457007">Masa <ph name="DESK_TITILE" /> oluşturuldu</translation>
 <translation id="3606978283550408104">Braille ekranı bağlandı.</translation>
 <translation id="3621202678540785336">Giriş</translation>
 <translation id="3626281679859535460">Parlaklık</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Bunlar ekran kalemi araçlarınızdır</translation>
 <translation id="4389184120735010762">Yerleştirilmiş büyüteç klavye kısayoluna bastınız. Bu özelliği açmak istiyor musunuz?</translation>
 <translation id="4421231901400348175">Ekranınızın kontrolü, Uzaktan Yardım kullanılarak <ph name="HELPER_NAME" /> ile paylaşılıyor.</translation>
-<translation id="4430019312045809116">Ses</translation>
 <translation id="4450893287417543264">Bir daha gösterme</translation>
 <translation id="4477350412780666475">Sonraki Parça</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Dokunarak sürükleme</translation>
 <translation id="5750765938512549687">Bluetooth kapalı</translation>
 <translation id="5777841717266010279">Ekran paylaşma durdurulsun mu?</translation>
-<translation id="57838592816432529">Sesi kapat</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> adlı alıcıya <ph name="ROUTE_TITLE" /> yayınını durdur</translation>
 <translation id="5860033963881614850">Kapalı</translation>
@@ -380,6 +380,7 @@
 <translation id="6723839937902243910">Güç</translation>
 <translation id="6727969043791803658">Bağlandı, %<ph name="BATTERY_PERCENTAGE" /> pil</translation>
 <translation id="6751826523481687655">Performans izleme açık</translation>
+<translation id="6752912906630585008">Masa <ph name="REMOVED_DESK" /> kaldırılarak Masa <ph name="RECEIVE_DESK" /> ile birleştirildi</translation>
 <translation id="6790428901817661496">Oynat</translation>
 <translation id="6803622936009808957">Desteklenen bir çözünürlük bulunamadığı için ekranlar yansıtılamıyor. Bunun yerine genişletilmiş masaüstüne geçiliyor.</translation>
 <translation id="6820676911989879663">Mola verin!</translation>
@@ -490,6 +491,7 @@
 <translation id="8428213095426709021">Ayarlar</translation>
 <translation id="8433186206711564395">Ağ ayarları</translation>
 <translation id="8433977262951327081">Giriş seçenekleri menüsü balonunu rafta görüntüleme kısa yolu değişti. <ph name="OLD_SHORTCUT" /> yerine <ph name="NEW_SHORTCUT" /> kısayolunu kullanın.</translation>
+<translation id="8444246603146515890">Masa <ph name="DESK_TITILE" /> etkinleştirildi</translation>
 <translation id="8452135315243592079">SIM kart yok</translation>
 <translation id="8454013096329229812">Kablosuz açık.</translation>
 <translation id="847056008324733326">Ekran ölçeği ayarları</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 9069a482..58450bd 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Під’єднано до пристрою}one{Під’єднано до # пристрою}few{Під’єднано до # пристроїв}many{Під’єднано до # пристроїв}other{Під’єднано до # пристрою}}</translation>
 <translation id="3226991577105957773">Ще <ph name="COUNT" /></translation>
 <translation id="3236488194889173876">Немає мобільних мереж</translation>
+<translation id="3249513730522716925">Вікно "<ph name="WINDOW_TITLE" />" переміщено з робочого столу "<ph name="ACTIVE_DESK" />" на робочий стіл "<ph name="TARGET_DESK" />"</translation>
 <translation id="3255483164551725916">Що ти можеш?</translation>
 <translation id="3294437725009624529">Гість</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> усе одно зможе ввійти в обліковий запис.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Повернутися до мови "<ph name="FROM_LOCALE" />" (потрібно перезавантажитися)</translation>
 <translation id="3576141592585647168">Змінення часового поясу</translation>
 <translation id="3595596368722241419">Акумулятор заряджено</translation>
+<translation id="3604801046548457007">Робочий стіл "<ph name="DESK_TITILE" />" створено</translation>
 <translation id="3606978283550408104">Брайлівський дисплей під’єднано.</translation>
 <translation id="3621202678540785336">Вхід</translation>
 <translation id="3626281679859535460">Яскравість</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Це ваші інструменти стилуса</translation>
 <translation id="4389184120735010762">Ви натиснули комбінацію клавіш для закріпленої лупи. Увімкнути?</translation>
 <translation id="4421231901400348175">Спільний доступ до екрана для користувача <ph name="HELPER_NAME" /> через віддалену допомогу.</translation>
-<translation id="4430019312045809116">Гучність</translation>
 <translation id="4450893287417543264">Більше не показувати</translation>
 <translation id="4477350412780666475">Наступна композиція</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Перетягування дотиком</translation>
 <translation id="5750765938512549687">Bluetooth вимкнено</translation>
 <translation id="5777841717266010279">Скасувати спільний доступ до екрана?</translation>
-<translation id="57838592816432529">Вимкнути звук</translation>
 <translation id="5820394555380036790">ОС Chromium</translation>
 <translation id="5837036133683224804">Зупинити трансляцію <ph name="ROUTE_TITLE" /> на пристрій "<ph name="RECEIVER_NAME" />"</translation>
 <translation id="5860033963881614850">Вимк.</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Заряд</translation>
 <translation id="6727969043791803658">Під'єднано, акумулятор заряджено на <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">Відстеження ефективності ввімкнено</translation>
+<translation id="6752912906630585008">Робочий стіл "<ph name="REMOVED_DESK" />" видалено й об'єднано з робочим столом "<ph name="RECEIVE_DESK" />"</translation>
 <translation id="6790428901817661496">Відтворити</translation>
 <translation id="6803622936009808957">Не вдалося дублювати зображення екранів, оскільки не знайдено підтримувані значення роздільної здатності. Натомість запущено режим розширеного робочого столу.</translation>
 <translation id="6820676911989879663">Зробіть перерву!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Налаштування</translation>
 <translation id="8433186206711564395">Налаштування мережі</translation>
 <translation id="8433977262951327081">Комбінація клавіш для виклику спливаючої підказки з опціями введення змінилась. Тепер це <ph name="NEW_SHORTCUT" />, а не <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Робочий стіл "<ph name="DESK_TITILE" />" активовано</translation>
 <translation id="8452135315243592079">Немає SIM-карти</translation>
 <translation id="8454013096329229812">Wi-Fi увімкнено.</translation>
 <translation id="847056008324733326">Налаштування масштабу дисплея</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index ef6a0fa..17045c4a 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{Đã kết nối với một thiết bị}other{Đã kết nối với # thiết bị}}</translation>
 <translation id="3226991577105957773">+<ph name="COUNT" /> mục khác</translation>
 <translation id="3236488194889173876">Không có mạng di động nào</translation>
+<translation id="3249513730522716925">Đã di chuyển cửa sổ <ph name="WINDOW_TITLE" /> từ Không gian làm việc <ph name="ACTIVE_DESK" /> sang Không gian làm việc <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Bạn có thể làm gì?</translation>
 <translation id="3294437725009624529">Khách</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> vẫn có thể đăng nhập vào lúc khác.</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">Thay đổi lại thành "<ph name="FROM_LOCALE" />" (yêu cầu khởi động lại)</translation>
 <translation id="3576141592585647168">Thay đổi múi giờ</translation>
 <translation id="3595596368722241419">Pin đầy</translation>
+<translation id="3604801046548457007">Đã tạo Không gian làm việc <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">Đã kết nối màn hình Braille.</translation>
 <translation id="3621202678540785336">Thiết bị vào</translation>
 <translation id="3626281679859535460">Độ sáng</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">Đây là các công cụ bút dành cho bút cảm ứng</translation>
 <translation id="4389184120735010762">Bạn đã nhấn phím tắt của tính năng phóng to ở vị trí cố định. Bạn có muốn bật tính năng này không?</translation>
 <translation id="4421231901400348175">Chia sẻ quyền kiểm soát màn hình của bạn với <ph name="HELPER_NAME" /> qua Trợ giúp từ xa.</translation>
-<translation id="4430019312045809116">Âm lượng</translation>
 <translation id="4450893287417543264">Không hiển thị lại</translation>
 <translation id="4477350412780666475">Bản nhạc tiếp theo</translation>
 <translation id="4479639480957787382">Ethernet</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">Kéo nhấn</translation>
 <translation id="5750765938512549687">Bluetooth đang tắt</translation>
 <translation id="5777841717266010279">Bạn muốn dừng chia sẻ màn hình?</translation>
-<translation id="57838592816432529">Tắt tiếng</translation>
 <translation id="5820394555380036790">Hệ điều hành Chromium</translation>
 <translation id="5837036133683224804">Dừng <ph name="ROUTE_TITLE" /> trên <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Tắt</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">Nguồn</translation>
 <translation id="6727969043791803658">Đã kết nối, <ph name="BATTERY_PERCENTAGE" />% pin</translation>
 <translation id="6751826523481687655">Tính năng theo dõi hiệu suất đang bật</translation>
+<translation id="6752912906630585008">Đã xóa và hợp nhất Không gian làm việc <ph name="REMOVED_DESK" /> với Không gian làm việc <ph name="RECEIVE_DESK" /></translation>
 <translation id="6790428901817661496">Phát</translation>
 <translation id="6803622936009808957">Không thể phản chiếu màn hình do không tìm thấy độ phân giải được hỗ trợ. Thay vào đó, đã chuyển sang chế độ màn hình mở rộng.</translation>
 <translation id="6820676911989879663">Hãy nghỉ giải lao!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">Cài đặt</translation>
 <translation id="8433186206711564395">Cài đặt mạng</translation>
 <translation id="8433977262951327081">Phím tắt để hiển thị bong bóng menu tùy chọn nhập trong giá đã thay đổi. Vui lòng sử dụng <ph name="NEW_SHORTCUT" /> thay cho <ph name="OLD_SHORTCUT" />.</translation>
+<translation id="8444246603146515890">Đã kích hoạt Không gian làm việc <ph name="DESK_TITILE" /></translation>
 <translation id="8452135315243592079">Thiếu thẻ SIM</translation>
 <translation id="8454013096329229812">Wi-Fi đang bật.</translation>
 <translation id="847056008324733326">Cài đặt tỷ lệ hiển thị</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 22997d25..3234aa0f 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{已连接到 1 台设备}other{已连接到 # 台设备}}</translation>
 <translation id="3226991577105957773">+另外 <ph name="COUNT" /> 条</translation>
 <translation id="3236488194889173876">没有可用的移动网络</translation>
+<translation id="3249513730522716925">窗口“<ph name="WINDOW_TITLE" />”已由桌面 <ph name="ACTIVE_DESK" /> 移至桌面 <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">你能做些什么?</translation>
 <translation id="3294437725009624529">访客</translation>
 <translation id="3308453408813785101">日后“<ph name="USER_EMAIL_ADDRESS" />”仍能登录。</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">重新更改为“<ph name="FROM_LOCALE" />”(需要重启)</translation>
 <translation id="3576141592585647168">更改时区</translation>
 <translation id="3595596368722241419">电池已充满</translation>
+<translation id="3604801046548457007">已创建桌面“<ph name="DESK_TITILE" />”</translation>
 <translation id="3606978283550408104">已连接盲文显示屏。</translation>
 <translation id="3621202678540785336">输入</translation>
 <translation id="3626281679859535460">亮度</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">这些是您的触控笔工具</translation>
 <translation id="4389184120735010762">您按下了停靠放大镜的键盘快捷键。要开启这项功能吗?</translation>
 <translation id="4421231901400348175">正在通过远程协助与<ph name="HELPER_NAME" />共享您屏幕的控制权限。</translation>
-<translation id="4430019312045809116">音量</translation>
 <translation id="4450893287417543264">不再显示</translation>
 <translation id="4477350412780666475">下一曲</translation>
 <translation id="4479639480957787382">以太网</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">点按拖动</translation>
 <translation id="5750765938512549687">蓝牙已关闭</translation>
 <translation id="5777841717266010279">要停止屏幕共享吗?</translation>
-<translation id="57838592816432529">静音</translation>
 <translation id="5820394555380036790">Chromium 操作系统</translation>
 <translation id="5837036133683224804">停止将“<ph name="ROUTE_TITLE" />”投射至“<ph name="RECEIVER_NAME" />”</translation>
 <translation id="5860033963881614850">关闭</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">电源</translation>
 <translation id="6727969043791803658">已连接,剩余电量为 <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">已启用性能跟踪</translation>
+<translation id="6752912906630585008">桌面“<ph name="REMOVED_DESK" />”已移除并与桌面“<ph name="RECEIVE_DESK" />”合并</translation>
 <translation id="6790428901817661496">播放</translation>
 <translation id="6803622936009808957">找不到系统支持的分辨率,因此无法镜像显示屏。已改为进入扩展桌面。</translation>
 <translation id="6820676911989879663">休息一下!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">设置</translation>
 <translation id="8433186206711564395">网络设置</translation>
 <translation id="8433977262951327081">用于在任务栏中显示输入法选项菜单气泡的快捷键已更改。请使用<ph name="NEW_SHORTCUT" />(而不是 <ph name="OLD_SHORTCUT" />)。</translation>
+<translation id="8444246603146515890">桌面 <ph name="DESK_TITILE" /> 已激活</translation>
 <translation id="8452135315243592079">缺少 SIM 卡</translation>
 <translation id="8454013096329229812">Wi-Fi 已打开。</translation>
 <translation id="847056008324733326">显示比例设置</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 1523c9d..3223020d 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -157,6 +157,7 @@
 <translation id="3202010236269062730">{NUM_DEVICES,plural, =1{已連線至一部裝置}other{已連線至 # 部裝置}}</translation>
 <translation id="3226991577105957773">還有 <ph name="COUNT" /> 則</translation>
 <translation id="3236488194889173876">沒有可用的行動網路</translation>
+<translation id="3249513730522716925">「<ph name="WINDOW_TITLE" />」視窗已從桌面 <ph name="ACTIVE_DESK" /> 移動到桌面 <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">你會做些什麼?</translation>
 <translation id="3294437725009624529">訪客</translation>
 <translation id="3308453408813785101"><ph name="USER_EMAIL_ADDRESS" /> 日後仍可登入。</translation>
@@ -178,6 +179,7 @@
 <translation id="3573179567135747900">改回「<ph name="FROM_LOCALE" />」(需要重新啟動)</translation>
 <translation id="3576141592585647168">變更時區</translation>
 <translation id="3595596368722241419">電池已充滿</translation>
+<translation id="3604801046548457007">已建立桌面 <ph name="DESK_TITILE" /></translation>
 <translation id="3606978283550408104">已連接點字顯示器。</translation>
 <translation id="3621202678540785336">輸入</translation>
 <translation id="3626281679859535460">亮度</translation>
@@ -233,7 +235,6 @@
 <translation id="4379531060876907730">這些是可用的觸控筆工具</translation>
 <translation id="4389184120735010762">你按下了停駐放大鏡的鍵盤快速鍵。確定要啟用這項功能嗎?</translation>
 <translation id="4421231901400348175">透過遠端協助與<ph name="HELPER_NAME" />分享螢幕控制功能。</translation>
-<translation id="4430019312045809116">音量</translation>
 <translation id="4450893287417543264">不要再顯示</translation>
 <translation id="4477350412780666475">下一首曲目</translation>
 <translation id="4479639480957787382">乙太網路</translation>
@@ -308,7 +309,6 @@
 <translation id="5744083938413354016">輕觸拖曳</translation>
 <translation id="5750765938512549687">藍牙已關閉</translation>
 <translation id="5777841717266010279">停止共用螢幕?</translation>
-<translation id="57838592816432529">靜音</translation>
 <translation id="5820394555380036790">Chromium 作業系統</translation>
 <translation id="5837036133683224804">停止透過<ph name="RECEIVER_NAME" />投放「<ph name="ROUTE_TITLE" />」</translation>
 <translation id="5860033963881614850">關閉</translation>
@@ -379,6 +379,7 @@
 <translation id="6723839937902243910">電源</translation>
 <translation id="6727969043791803658">已連線,電量為 <ph name="BATTERY_PERCENTAGE" />%</translation>
 <translation id="6751826523481687655">效能追蹤已啟用</translation>
+<translation id="6752912906630585008">已移除桌面 <ph name="REMOVED_DESK" />,並與桌面 <ph name="RECEIVE_DESK" /> 合併</translation>
 <translation id="6790428901817661496">播放</translation>
 <translation id="6803622936009808957">找不到系統支援的解析度,因此無法顯示鏡像。已改為進入延伸桌面。</translation>
 <translation id="6820676911989879663">目前禁止使用裝置!</translation>
@@ -489,6 +490,7 @@
 <translation id="8428213095426709021">設定</translation>
 <translation id="8433186206711564395">網路設定</translation>
 <translation id="8433977262951327081">在檔案櫃中顯示輸入選項選單方塊的快速鍵已變更,請改用:<ph name="NEW_SHORTCUT" /> (停用 <ph name="OLD_SHORTCUT" />)。</translation>
+<translation id="8444246603146515890">已啟用桌面 <ph name="DESK_TITILE" /></translation>
 <translation id="8452135315243592079">找不到 SIM 卡</translation>
 <translation id="8454013096329229812">Wi-Fi 已開啟。</translation>
 <translation id="847056008324733326">顯示比例設定</translation>
diff --git a/ash/system/message_center/arc/BUILD.gn b/ash/system/message_center/arc/BUILD.gn
index 59ebaaf..8ecf076b 100644
--- a/ash/system/message_center/arc/BUILD.gn
+++ b/ash/system/message_center/arc/BUILD.gn
@@ -35,7 +35,7 @@
     "//components/account_id",
     "//components/arc:arc_metrics_constants",
     "//components/arc:connection_holder",
-    "//components/arc/common:notifications",
+    "//components/arc/mojom:notifications",
     "//components/exo",
     "//mojo/public/cpp/system",
     "//skia",
diff --git a/ash/system/message_center/arc/DEPS b/ash/system/message_center/arc/DEPS
index 4cf09c91..99a57580 100644
--- a/ash/system/message_center/arc/DEPS
+++ b/ash/system/message_center/arc/DEPS
@@ -1,6 +1,6 @@
 include_rules = [
   "+components/account_id",
-  "+components/arc/common/notifications.mojom.h",
+  "+components/arc/mojom/notifications.mojom.h",
   "+components/arc/metrics/arc_metrics_constants.h",
   "+components/arc/session/connection_holder.h",
   "+components/arc/session/connection_observer.h",
diff --git a/ash/system/message_center/arc/arc_notification_item.h b/ash/system/message_center/arc/arc_notification_item.h
index a95528d..ea7daae 100644
--- a/ash/system/message_center/arc/arc_notification_item.h
+++ b/ash/system/message_center/arc/arc_notification_item.h
@@ -6,7 +6,7 @@
 #define ASH_SYSTEM_MESSAGE_CENTER_ARC_ARC_NOTIFICATION_ITEM_H_
 
 #include "base/macros.h"
-#include "components/arc/common/notifications.mojom.h"
+#include "components/arc/mojom/notifications.mojom.h"
 #include "ui/gfx/image/image_skia.h"
 
 namespace ash {
diff --git a/ash/system/message_center/arc/arc_notification_manager.h b/ash/system/message_center/arc/arc_notification_manager.h
index 3d2d4ce..0fc4715 100644
--- a/ash/system/message_center/arc/arc_notification_manager.h
+++ b/ash/system/message_center/arc/arc_notification_manager.h
@@ -11,7 +11,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "components/account_id/account_id.h"
-#include "components/arc/common/notifications.mojom.h"
+#include "components/arc/mojom/notifications.mojom.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/arc/session/connection_observer.h"
 #include "ui/message_center/message_center.h"
diff --git a/ash/system/palette/palette_tool.cc b/ash/system/palette/palette_tool.cc
index 4d6bb2e..f49c48e 100644
--- a/ash/system/palette/palette_tool.cc
+++ b/ash/system/palette/palette_tool.cc
@@ -14,7 +14,7 @@
 #include "ash/system/palette/tools/laser_pointer_mode.h"
 #include "ash/system/palette/tools/magnifier_mode.h"
 #include "ash/system/palette/tools/metalayer_mode.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "ui/gfx/paint_vector_icon.h"
 
 namespace ash {
@@ -24,7 +24,7 @@
   tool_manager->AddTool(std::make_unique<CaptureRegionMode>(tool_manager));
   tool_manager->AddTool(std::make_unique<CaptureScreenAction>(tool_manager));
   tool_manager->AddTool(std::make_unique<CreateNoteAction>(tool_manager));
-  if (chromeos::switches::IsAssistantEnabled()) {
+  if (chromeos::features::IsAssistantEnabled()) {
     tool_manager->AddTool(std::make_unique<MetalayerMode>(tool_manager));
   }
   tool_manager->AddTool(std::make_unique<LaserPointerMode>(tool_manager));
diff --git a/ash/system/palette/palette_welcome_bubble.cc b/ash/system/palette/palette_welcome_bubble.cc
index 83cf026..e4b2431f 100644
--- a/ash/system/palette/palette_welcome_bubble.cc
+++ b/ash/system/palette/palette_welcome_bubble.cc
@@ -12,7 +12,7 @@
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/palette/palette_tray.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "ui/aura/window.h"
@@ -59,7 +59,7 @@
   void Init() override {
     SetLayoutManager(std::make_unique<views::FillLayout>());
     auto* label = new views::Label(l10n_util::GetStringUTF16(
-        chromeos::switches::IsAssistantEnabled()
+        chromeos::features::IsAssistantEnabled()
             ? IDS_ASH_STYLUS_WARM_WELCOME_BUBBLE_WITH_ASSISTANT_DESCRIPTION
             : IDS_ASH_STYLUS_WARM_WELCOME_BUBBLE_DESCRIPTION));
     label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
diff --git a/ash/wm/OWNERS b/ash/wm/OWNERS
index 26780820..bf7d7f3 100644
--- a/ash/wm/OWNERS
+++ b/ash/wm/OWNERS
@@ -1,3 +1,5 @@
 flackr@chromium.org
+mukai@chromium.org
+xdai@chromium.org
 
 # COMPONENT: UI>Shell>WindowManager
diff --git a/ash/wm/desks/desk_mini_view.cc b/ash/wm/desks/desk_mini_view.cc
index 15e5e893..57fccd4 100644
--- a/ash/wm/desks/desk_mini_view.cc
+++ b/ash/wm/desks/desk_mini_view.cc
@@ -183,15 +183,7 @@
   if (sender != close_desk_button_)
     return;
 
-  // Hide the close button so it can no longer be pressed.
-  close_desk_button_->SetVisible(false);
-
-  // This mini_view can no longer be pressed.
-  listener_ = nullptr;
-
-  auto* controller = DesksController::Get();
-  DCHECK(controller->CanRemoveDesks());
-  controller->RemoveDesk(desk_, DesksCreationRemovalSource::kButton);
+  OnCloseButtonPressed();
 }
 
 void DeskMiniView::OnContentChanged() {
@@ -228,10 +220,33 @@
   return bounds_in_screen;
 }
 
+void DeskMiniView::MaybeActivateHighlightedView() {
+  DesksController::Get()->ActivateDesk(desk(),
+                                       DesksSwitchSource::kMiniViewButton);
+}
+
+void DeskMiniView::MaybeCloseHighlightedView() {
+  OnCloseButtonPressed();
+}
+
 bool DeskMiniView::IsPointOnMiniView(const gfx::Point& screen_location) const {
   gfx::Point point_in_view = screen_location;
   ConvertPointFromScreen(this, &point_in_view);
   return HitTestPoint(point_in_view);
 }
 
+void DeskMiniView::OnCloseButtonPressed() {
+  auto* controller = DesksController::Get();
+  if (!controller->CanRemoveDesks())
+    return;
+
+  // Hide the close button so it can no longer be pressed.
+  close_desk_button_->SetVisible(false);
+
+  // This mini_view can no longer be pressed.
+  listener_ = nullptr;
+
+  controller->RemoveDesk(desk_, DesksCreationRemovalSource::kButton);
+}
+
 }  // namespace ash
diff --git a/ash/wm/desks/desk_mini_view.h b/ash/wm/desks/desk_mini_view.h
index d923d0e0..218bf33 100644
--- a/ash/wm/desks/desk_mini_view.h
+++ b/ash/wm/desks/desk_mini_view.h
@@ -78,10 +78,14 @@
   // OverviewHighlightController::OverviewHighlightableView:
   views::View* GetView() override;
   gfx::Rect GetHighlightBoundsInScreen() override;
+  void MaybeActivateHighlightedView() override;
+  void MaybeCloseHighlightedView() override;
 
   bool IsPointOnMiniView(const gfx::Point& screen_location) const;
 
  private:
+  void OnCloseButtonPressed();
+
   DesksBarView* const owner_bar_;
 
   // The root window on which this mini_view is created.
diff --git a/ash/wm/desks/desks_bar_view.cc b/ash/wm/desks/desks_bar_view.cc
index 8d709e4..8cedee5f 100644
--- a/ash/wm/desks/desks_bar_view.cc
+++ b/ash/wm/desks/desks_bar_view.cc
@@ -131,7 +131,7 @@
 
   AddChildView(background_view_);
   AddChildView(new_desk_button_);
-  UpdateNewDeskButtonState();
+
   DesksController::Get()->AddObserver(this);
 }
 
@@ -245,10 +245,7 @@
                                  const ui::Event& event) {
   auto* controller = DesksController::Get();
   if (sender == new_desk_button_) {
-    if (controller->CanCreateDesks()) {
-      controller->NewDesk(DesksCreationRemovalSource::kButton);
-      UpdateNewDeskButtonState();
-    }
+    new_desk_button_->OnButtonPressed();
     return;
   }
 
@@ -278,7 +275,7 @@
   // removed from the collection because it needs to know the index of the mini
   // view relative to other traversable views.
   auto* highlight_controller = GetHighlightController();
-  highlight_controller->OnViewDestroying(iter->get());
+  highlight_controller->OnViewDestroyingOrDisabling(iter->get());
 
   const int begin_x = GetFirstMiniViewXOffset();
   std::unique_ptr<DeskMiniView> removed_mini_view = std::move(*iter);
@@ -286,7 +283,7 @@
 
   Layout();
   UpdateMiniViewsLabels();
-  UpdateNewDeskButtonState();
+  new_desk_button_->UpdateButtonState();
 
   // Once the remaining mini views have their bounds updated, notify the
   // overview highlight controller so that it can update the focus highlight, if
@@ -321,10 +318,6 @@
 
 void DesksBarView::OnDeskSwitchAnimationFinished() {}
 
-void DesksBarView::UpdateNewDeskButtonState() {
-  new_desk_button_->SetEnabled(DesksController::Get()->CanCreateDesks());
-}
-
 void DesksBarView::UpdateNewMiniViews(bool animate) {
   const auto& desks = DesksController::Get()->desks();
   if (desks.size() < 2) {
diff --git a/ash/wm/desks/desks_bar_view.h b/ash/wm/desks/desks_bar_view.h
index 094536b1..5628301 100644
--- a/ash/wm/desks/desks_bar_view.h
+++ b/ash/wm/desks/desks_bar_view.h
@@ -89,10 +89,6 @@
   // animated to their final positions.
   void UpdateNewMiniViews(bool animate);
 
-  // Updates the enabled state of the new desk button when the ability to create
-  // new desk may have changed.
-  void UpdateNewDeskButtonState();
-
   // Returns the mini_view associated with |desk| or nullptr if no mini_view
   // has been created for it yet.
   DeskMiniView* FindMiniViewForDesk(const Desk* desk) const;
diff --git a/ash/wm/desks/new_desk_button.cc b/ash/wm/desks/new_desk_button.cc
index 5fe9a5d..4408ae7 100644
--- a/ash/wm/desks/new_desk_button.cc
+++ b/ash/wm/desks/new_desk_button.cc
@@ -7,7 +7,14 @@
 #include <utility>
 
 #include "ash/resources/vector_icons/vector_icons.h"
+#include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/wm/desks/desks_bar_view.h"
+#include "ash/wm/desks/desks_controller.h"
+#include "ash/wm/desks/desks_util.h"
+#include "ash/wm/overview/overview_controller.h"
+#include "ash/wm/overview/overview_highlight_controller.h"
+#include "ash/wm/overview/overview_session.h"
 #include "base/strings/utf_string_conversions.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/color_palette.h"
@@ -30,7 +37,18 @@
 
 constexpr float kInkDropHighlightVisibleOpacity = 0.3f;
 
-constexpr SkColor kHighlightBackgroundColor = SkColorSetARGB(60, 255, 255, 255);
+// The text and icon color when the new desk button is enabled/disabled. The
+// disabled color is 38% opacity of the enabled color.
+constexpr SkColor kTextAndIconColor = gfx::kGoogleGrey200;
+constexpr SkColor kDisabledTextAndIconColor =
+    SkColorSetA(kTextAndIconColor, 0x61);
+
+// The background color when the new desk button is enabled/disabled. The
+// disabled color is 38% opacity of the enabled color.
+// TODO(minch): Migrate to use ControlsLayerType::kInactiveControlBackground in
+// AshColorProvider.
+constexpr SkColor kBackgroundColor = SkColorSetA(SK_ColorWHITE, 0x1A);
+constexpr SkColor kDisabledBackgroundColor = SkColorSetA(SK_ColorWHITE, 0xA);
 
 }  // namespace
 
@@ -41,21 +59,43 @@
   layer()->SetFillsBoundsOpaquely(false);
   SetHorizontalAlignment(gfx::ALIGN_CENTER);
   SetImage(views::Button::STATE_NORMAL,
-           gfx::CreateVectorIcon(kDesksNewDeskButtonIcon, SK_ColorWHITE));
+           gfx::CreateVectorIcon(kDesksNewDeskButtonIcon, kTextAndIconColor));
   SetImage(views::Button::STATE_DISABLED,
-           gfx::CreateVectorIcon(kDesksNewDeskButtonIcon, SK_ColorGRAY));
-  SetTextColor(views::Button::STATE_NORMAL, SK_ColorWHITE);
-  SetTextColor(views::Button::STATE_HOVERED, SK_ColorWHITE);
-  SetTextColor(views::Button::STATE_PRESSED, SK_ColorWHITE);
-  SetTextColor(views::Button::STATE_DISABLED, SK_ColorGRAY);
+           gfx::CreateVectorIcon(kDesksNewDeskButtonIcon,
+                                 kDisabledTextAndIconColor));
+  SetEnabledTextColors(kTextAndIconColor);
+  SetTextColor(views::Button::STATE_DISABLED, kDisabledTextAndIconColor);
   SetImageLabelSpacing(kImageLabelSpacing);
   SetInkDropMode(InkDropMode::ON);
   set_has_ink_drop_action_on_click(true);
   set_ink_drop_visible_opacity(kInkDropVisibleOpacity);
   SetFocusPainter(nullptr);
-  SetBackground(
-      CreateBackgroundFromPainter(views::Painter::CreateSolidRoundRectPainter(
-          kHighlightBackgroundColor, kCornerRadius)));
+  UpdateButtonState();
+}
+
+void NewDeskButton::UpdateButtonState() {
+  const bool enabled = DesksController::Get()->CanCreateDesks();
+  if (GetEnabled() == enabled)
+    return;
+
+  // Notify the overview highlight if we are about to be disabled.
+  if (!enabled) {
+    OverviewSession* overview_session =
+        Shell::Get()->overview_controller()->overview_session();
+    DCHECK(overview_session);
+    overview_session->highlight_controller()->OnViewDestroyingOrDisabling(this);
+  }
+  SetEnabled(enabled);
+  SetBackground(views::CreateRoundedRectBackground(
+      enabled ? kBackgroundColor : kDisabledBackgroundColor, kCornerRadius));
+}
+
+void NewDeskButton::OnButtonPressed() {
+  auto* controller = DesksController::Get();
+  if (controller->CanCreateDesks()) {
+    controller->NewDesk(DesksCreationRemovalSource::kButton);
+    UpdateButtonState();
+  }
 }
 
 const char* NewDeskButton::GetClassName() const {
@@ -64,7 +104,7 @@
 
 std::unique_ptr<views::InkDrop> NewDeskButton::CreateInkDrop() {
   auto ink_drop = CreateDefaultFloodFillInkDropImpl();
-  ink_drop->SetShowHighlightOnHover(true);
+  ink_drop->SetShowHighlightOnHover(false);
   ink_drop->SetShowHighlightOnFocus(!views::PlatformStyle::kPreferFocusRings);
   return std::move(ink_drop);
 }
@@ -104,4 +144,13 @@
   return gfx::RoundedCornersF(kCornerRadius);
 }
 
+void NewDeskButton::MaybeActivateHighlightedView() {
+  if (!GetEnabled())
+    return;
+
+  OnButtonPressed();
+}
+
+void NewDeskButton::MaybeCloseHighlightedView() {}
+
 }  // namespace ash
diff --git a/ash/wm/desks/new_desk_button.h b/ash/wm/desks/new_desk_button.h
index f2ce4e8..0dcc383 100644
--- a/ash/wm/desks/new_desk_button.h
+++ b/ash/wm/desks/new_desk_button.h
@@ -20,9 +20,14 @@
     : public views::LabelButton,
       public OverviewHighlightController::OverviewHighlightableView {
  public:
-  NewDeskButton(views::ButtonListener* listener);
+  explicit NewDeskButton(views::ButtonListener* listener);
   ~NewDeskButton() override = default;
 
+  // Update the button's enable/disable state based on current desks state.
+  void UpdateButtonState();
+
+  void OnButtonPressed();
+
   // LabelButton:
   const char* GetClassName() const override;
   std::unique_ptr<views::InkDrop> CreateInkDrop() override;
@@ -37,6 +42,8 @@
   views::View* GetView() override;
   gfx::Rect GetHighlightBoundsInScreen() override;
   gfx::RoundedCornersF GetRoundedCornersRadii() const override;
+  void MaybeActivateHighlightedView() override;
+  void MaybeCloseHighlightedView() override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(NewDeskButton);
diff --git a/ash/wm/overview/OWNERS b/ash/wm/overview/OWNERS
index a4a1e6c..db501aa 100644
--- a/ash/wm/overview/OWNERS
+++ b/ash/wm/overview/OWNERS
@@ -1,4 +1,3 @@
 sammiequon@chromium.org
-xdai@chromium.org
 
 # COMPONENT: UI>Shell>OverviewMode
diff --git a/ash/wm/overview/caption_container_view.cc b/ash/wm/overview/caption_container_view.cc
index b5df8f8..c0e39e9 100644
--- a/ash/wm/overview/caption_container_view.cc
+++ b/ash/wm/overview/caption_container_view.cc
@@ -267,6 +267,16 @@
   return target_bounds;
 }
 
+void CaptionContainerView::MaybeActivateHighlightedView() {
+  if (event_delegate_)
+    event_delegate_->OnHighlightedViewActivated();
+}
+
+void CaptionContainerView::MaybeCloseHighlightedView() {
+  if (event_delegate_)
+    event_delegate_->OnHighlightedViewClosed();
+}
+
 void CaptionContainerView::Layout() {
   gfx::Rect bounds(GetLocalBounds());
   bounds.Inset(kMarginDp, kMarginDp);
diff --git a/ash/wm/overview/caption_container_view.h b/ash/wm/overview/caption_container_view.h
index 3b90001..89b7b8a 100644
--- a/ash/wm/overview/caption_container_view.h
+++ b/ash/wm/overview/caption_container_view.h
@@ -56,6 +56,8 @@
     virtual void HandleTapEvent() = 0;
     virtual void HandleGestureEndEvent() = 0;
     virtual bool ShouldIgnoreGestureEvents() = 0;
+    virtual void OnHighlightedViewActivated() = 0;
+    virtual void OnHighlightedViewClosed() = 0;
 
    protected:
     virtual ~EventDelegate() {}
@@ -101,6 +103,8 @@
   // OverviewHighlightController::OverviewHighlightableView:
   views::View* GetView() override;
   gfx::Rect GetHighlightBoundsInScreen() override;
+  void MaybeActivateHighlightedView() override;
+  void MaybeCloseHighlightedView() override;
 
   // TODO(sammiequon): Move these to a test api.
   views::View* header_view() { return header_view_; }
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc
index 556ecc0..37dd708f 100644
--- a/ash/wm/overview/overview_grid.cc
+++ b/ash/wm/overview/overview_grid.cc
@@ -67,6 +67,10 @@
 // Additional vertical inset reserved for windows in overview mode.
 constexpr float kOverviewVerticalInset = 0.1f;
 
+// Number of columns and rows for windows in tablet overview mode.
+constexpr int kTabletLayoutCol = 3;
+constexpr int kTabletLayoutRow = 2;
+
 // Histogram names for overview enter/exit smoothness in clamshell,
 // tablet mode and splitview.
 constexpr char kOverviewEnterClamshellHistogram[] =
@@ -542,7 +546,7 @@
   window_state_observer_.Remove(WindowState::Get(window));
 
   if (overview_session_) {
-    overview_session_->highlight_controller()->OnViewDestroying(
+    overview_session_->highlight_controller()->OnViewDestroyingOrDisabling(
         (*iter)->caption_container_view());
   }
 
@@ -765,7 +769,7 @@
   auto iter = GetOverviewItemIterContainingWindow(window);
   DCHECK(iter != window_list_.end());
   if (overview_session_) {
-    overview_session_->highlight_controller()->OnViewDestroying(
+    overview_session_->highlight_controller()->OnViewDestroyingOrDisabling(
         (*iter)->caption_container_view());
   }
 
@@ -1257,6 +1261,30 @@
   return false;
 }
 
+void OverviewGrid::PrepareScrollLimitMin() {
+  // Users are not allowed to scroll past the leftmost or rightmost bounds of
+  // the items on screen in the grid. |scroll_offset_min_| is the amount needed
+  // to fit the rightmost window into |total_bounds|. The max is zero which is
+  // default because windows are aligned to the left from the beginning.
+  gfx::Rect total_bounds = GetGridEffectiveBounds();
+  total_bounds.Inset(GetGridInsets(total_bounds));
+  float rightmost_window_right = 0;
+  for (const auto& window : window_list_) {
+    if (rightmost_window_right < window->target_bounds().right())
+      rightmost_window_right = window->target_bounds().right();
+  }
+  // |rightmost_window_right| may have been modified by an earlier scroll.
+  // |scroll_offset_| is added to adjust for that.
+  rightmost_window_right += scroll_offset_;
+  scroll_offset_min_ = total_bounds.right() - rightmost_window_right;
+}
+
+void OverviewGrid::UpdateScrollOffset(float delta) {
+  scroll_offset_ += delta;
+  scroll_offset_ = base::ClampToRange(scroll_offset_, scroll_offset_min_, 0.0f);
+  PositionWindows(false);
+}
+
 void OverviewGrid::MaybeInitDesksWidget() {
   if (!desks_util::ShouldDesksBarBeCreated() || desks_widget_)
     return;
@@ -1404,8 +1432,8 @@
   // animation.
   // Since the number of rows is limited, windows are laid out column-wise so
   // that the most recently used windows are displayed first.
-  const int width = total_bounds.width() / 3;
-  const int height = total_bounds.height() / 2;
+  const int width = total_bounds.width() / kTabletLayoutCol;
+  const int height = total_bounds.height() / kTabletLayoutRow;
   size_t window_position = 0u;
   std::vector<gfx::RectF> rects;
 
@@ -1414,12 +1442,14 @@
       rects.push_back(gfx::RectF());
       continue;
     }
-    const int x = width * (window_position / 2) + total_bounds.x();
+    const int x =
+        width * (window_position / 2) + total_bounds.x() + scroll_offset_;
     const int y = height * (window_position % 2) + total_bounds.y();
     const gfx::RectF bounds(x, y, width, height);
     rects.push_back(bounds);
     ++window_position;
   }
+
   return rects;
 }
 
diff --git a/ash/wm/overview/overview_grid.h b/ash/wm/overview/overview_grid.h
index c51b58d5..8195fd8f 100644
--- a/ash/wm/overview/overview_grid.h
+++ b/ash/wm/overview/overview_grid.h
@@ -265,6 +265,14 @@
   bool MaybeDropItemOnDeskMiniView(const gfx::Point& screen_location,
                                    OverviewItem* drag_item);
 
+  // Prepares the |scroll_offset_min_| as a limit for |scroll_offset| from
+  // scrolling or positioning windows too far offscreen.
+  void PrepareScrollLimitMin();
+
+  // |delta| is used for updating |scroll_offset_| with new scroll values so
+  // that windows in tablet overview mode get positioned accordingly.
+  void UpdateScrollOffset(float delta);
+
   // Returns true if the grid has no more windows.
   bool empty() const { return window_list_.empty(); }
 
@@ -415,6 +423,14 @@
   // when reposition windows in tablet overview mode.
   bool suspend_reposition_ = false;
 
+  // Used by |GetWindowRectsForTabletModeLayout| to shift the x position of the
+  // overview items.
+  float scroll_offset_ = 0;
+
+  // Value to clamp |scroll_offset| so scrolling stays limited to windows that
+  // are visible in tablet overview mode.
+  float scroll_offset_min_ = 0;
+
   DISALLOW_COPY_AND_ASSIGN(OverviewGrid);
 };
 
diff --git a/ash/wm/overview/overview_grid_pre_event_handler.cc b/ash/wm/overview/overview_grid_pre_event_handler.cc
index 024d139..a4da9e4 100644
--- a/ash/wm/overview/overview_grid_pre_event_handler.cc
+++ b/ash/wm/overview/overview_grid_pre_event_handler.cc
@@ -3,10 +3,11 @@
 // found in the LICENSE file.
 
 #include "ash/wm/overview/overview_grid_pre_event_handler.h"
-
 #include "ash/shell.h"
 #include "ash/wm/overview/overview_controller.h"
+#include "ash/wm/overview/overview_grid.h"
 #include "ash/wm/overview/overview_utils.h"
+#include "ash/wm/window_util.h"
 #include "ui/events/event.h"
 
 namespace ash {
@@ -21,13 +22,38 @@
 }
 
 void OverviewGridPreEventHandler::OnGestureEvent(ui::GestureEvent* event) {
-  if (event->type() == ui::ET_GESTURE_TAP)
-    HandleClickOrTap(event);
+  // TODO(sammiequon): Investigate why scrolling on the bottom of the grid exits
+  // overview.
+  switch (event->type()) {
+    case ui::ET_GESTURE_TAP:
+      HandleClickOrTap(event);
+      break;
+    case ui::ET_GESTURE_SCROLL_BEGIN: {
+      if (!ShouldUseTabletModeGridLayout())
+        return;
+      StartDrag(event->location());
+      event->SetHandled();
+      break;
+    }
+    case ui::ET_GESTURE_SCROLL_UPDATE: {
+      if (!ShouldUseTabletModeGridLayout())
+        return;
+      UpdateDrag(event->details().scroll_x());
+      event->SetHandled();
+      break;
+    }
+    case ui::ET_GESTURE_SCROLL_END: {
+      event->SetHandled();
+      break;
+    }
+    default:
+      break;
+  }
 }
 
 void OverviewGridPreEventHandler::HandleClickOrTap(ui::Event* event) {
   CHECK_EQ(ui::EP_PRETARGET, event->phase());
-  OverviewController* controller = Shell::Get()->overview_controller();
+  auto* controller = Shell::Get()->overview_controller();
   if (!controller->InOverviewSession())
     return;
   // Events that happen while app list is sliding out during overview should
@@ -37,4 +63,20 @@
   event->StopPropagation();
 }
 
+void OverviewGridPreEventHandler::StartDrag(const gfx::Point& location) {
+  // TODO(sammiequon): Investigate if this can be passed in the constructor.
+  auto* controller = Shell::Get()->overview_controller();
+  if (!controller->InOverviewSession())
+    return;
+  grid_ = controller->overview_session()->GetGridWithRootWindow(
+      window_util::GetRootWindowAt(location));
+  grid_->PrepareScrollLimitMin();
+}
+
+void OverviewGridPreEventHandler::UpdateDrag(float scroll) {
+  // Pass new scroll values to update the offset which will also update overview
+  // mode to position windows according to the scroll values.
+  grid_->UpdateScrollOffset(scroll);
+}
+
 }  // namespace ash
diff --git a/ash/wm/overview/overview_grid_pre_event_handler.h b/ash/wm/overview/overview_grid_pre_event_handler.h
index 3a7f19d..789abe5 100644
--- a/ash/wm/overview/overview_grid_pre_event_handler.h
+++ b/ash/wm/overview/overview_grid_pre_event_handler.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "ui/events/event_handler.h"
+#include "ui/gfx/geometry/point.h"
 
 namespace ui {
 class Event;
@@ -15,11 +16,13 @@
 }  // namespace ui
 
 namespace ash {
+class OverviewGrid;
 
 // This event handler receives events in the pre-target phase and takes care of
 // the following:
 //   - Disabling overview mode on touch release.
 //   - Disabling overview mode on mouse release.
+//   - Scrolling through tablet overview mode on scrolling.
 class OverviewGridPreEventHandler : public ui::EventHandler {
  public:
   OverviewGridPreEventHandler();
@@ -32,6 +35,13 @@
 
   void HandleClickOrTap(ui::Event* event);
 
+  void StartDrag(const gfx::Point& location);
+  void UpdateDrag(float scroll);
+
+  // Cached value of the OverviewGrid that handles a series of gesture scroll
+  // events.
+  OverviewGrid* grid_ = nullptr;
+
   DISALLOW_COPY_AND_ASSIGN(OverviewGridPreEventHandler);
 };
 
diff --git a/ash/wm/overview/overview_highlight_controller.cc b/ash/wm/overview/overview_highlight_controller.cc
index 30997a7..35605006 100644
--- a/ash/wm/overview/overview_highlight_controller.cc
+++ b/ash/wm/overview/overview_highlight_controller.cc
@@ -200,7 +200,7 @@
   UpdateFocusWidget(traversable_views[index], reverse);
 }
 
-void OverviewHighlightController::OnViewDestroying(
+void OverviewHighlightController::OnViewDestroyingOrDisabling(
     OverviewHighlightableView* view) {
   DCHECK(view);
   if (view != highlighted_view_)
@@ -232,6 +232,22 @@
   return highlight_widget_ && highlight_widget_->IsVisible();
 }
 
+bool OverviewHighlightController::MaybeActivateHighlightedView() {
+  if (!highlighted_view_)
+    return false;
+
+  highlighted_view_->MaybeActivateHighlightedView();
+  return true;
+}
+
+bool OverviewHighlightController::MaybeCloseHighlightedView() {
+  if (!highlighted_view_)
+    return false;
+
+  highlighted_view_->MaybeCloseHighlightedView();
+  return true;
+}
+
 OverviewItem* OverviewHighlightController::GetHighlightedItem() const {
   if (!highlighted_view_)
     return nullptr;
diff --git a/ash/wm/overview/overview_highlight_controller.h b/ash/wm/overview/overview_highlight_controller.h
index 1e02202..0e52203 100644
--- a/ash/wm/overview/overview_highlight_controller.h
+++ b/ash/wm/overview/overview_highlight_controller.h
@@ -28,9 +28,6 @@
 // Manages highlighting items while in overview. Creates a semi transparent
 // highlight when users try to traverse through overview items using arrow keys
 // or tab keys, or when users are tab dragging.
-// TODO(sammiequon): Add a new test class which tests highlighting desk items,
-// and move the existing OverviewSession highlight related tests to the new
-// class.
 class ASH_EXPORT OverviewHighlightController {
  public:
   // An interface that must be implemented by classes that want to be
@@ -47,6 +44,10 @@
     // |this|.
     virtual gfx::RoundedCornersF GetRoundedCornersRadii() const;
 
+    // Attempts to activate or close this view. Overriders may do nothing.
+    virtual void MaybeActivateHighlightedView() = 0;
+    virtual void MaybeCloseHighlightedView() = 0;
+
    protected:
     virtual ~OverviewHighlightableView() {}
   };
@@ -59,12 +60,17 @@
 
   // Called when a |view| that might be in the focus traversal rotation is about
   // to be deleted.
-  void OnViewDestroying(OverviewHighlightableView* view);
+  void OnViewDestroyingOrDisabling(OverviewHighlightableView* view);
 
   // Sets and gets the visibility of |highlight_widget_|.
   void SetFocusHighlightVisibility(bool visible);
   bool IsFocusHighlightVisible() const;
 
+  // Activates or closes the currently highlighted view (if any) if it supports
+  // the activation or closing operations respectively.
+  bool MaybeActivateHighlightedView();
+  bool MaybeCloseHighlightedView();
+
   // Tries to get the item that is currently highlighted. Returns null if there
   // is no highlight, or if the highlight is on a desk view.
   OverviewItem* GetHighlightedItem() const;
diff --git a/ash/wm/overview/overview_highlight_controller_unittest.cc b/ash/wm/overview/overview_highlight_controller_unittest.cc
index d1d325ed..bf8a2f89 100644
--- a/ash/wm/overview/overview_highlight_controller_unittest.cc
+++ b/ash/wm/overview/overview_highlight_controller_unittest.cc
@@ -122,7 +122,7 @@
 
 // Tests that when an item is removed while highlighted, the highlight
 // disappears, and when we tab again we pick up where we left off.
-TEST_F(OverviewHighlightControllerTest, ItemDeleted) {
+TEST_F(OverviewHighlightControllerTest, ItemClosed) {
   auto widget1 = CreateTestWidget();
   auto widget2 = CreateTestWidget();
   auto widget3 = CreateTestWidget();
@@ -316,7 +316,14 @@
   // AshTestBase:
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(features::kVirtualDesks);
+
     AshTestBase::SetUp();
+
+    // All tests in this suite require the desks bar to be visible in overview,
+    // which requires at least two desks.
+    auto* desk_controller = DesksController::Get();
+    desk_controller->NewDesk(DesksCreationRemovalSource::kButton);
+    ASSERT_EQ(2u, desk_controller->desks().size());
   }
 
   OverviewHighlightController::OverviewHighlightableView* GetHighlightedView() {
@@ -349,10 +356,6 @@
 // Tests that we can tab through the desk mini views, new desk button and
 // overview items in the correct order.
 TEST_F(DesksOverviewHighlightControllerTest, TabbingBasic) {
-  auto* desk_controller = DesksController::Get();
-  desk_controller->NewDesk(DesksCreationRemovalSource::kButton);
-  ASSERT_EQ(2u, desk_controller->desks().size());
-
   std::unique_ptr<aura::Window> window1(CreateTestWindow(gfx::Rect(200, 200)));
   std::unique_ptr<aura::Window> window2(CreateTestWindow(gfx::Rect(200, 200)));
 
@@ -386,10 +389,6 @@
 // Tests that we can reverse tab through the desk mini views, new desk button
 // and overview items in the correct order.
 TEST_F(DesksOverviewHighlightControllerTest, TabbingReverse) {
-  auto* desk_controller = DesksController::Get();
-  desk_controller->NewDesk(DesksCreationRemovalSource::kButton);
-  ASSERT_EQ(2u, desk_controller->desks().size());
-
   std::unique_ptr<aura::Window> window1(CreateTestWindow(gfx::Rect(200, 200)));
   std::unique_ptr<aura::Window> window2(CreateTestWindow(gfx::Rect(200, 200)));
 
@@ -426,11 +425,8 @@
 // Tests that tabbing with desk items and multiple displays works as expected.
 TEST_F(DesksOverviewHighlightControllerTest, TabbingMultiDisplay) {
   UpdateDisplay("600x400,600x400,600x400");
-  ASSERT_EQ(3u, Shell::GetAllRootWindows().size());
-
-  auto* desk_controller = DesksController::Get();
-  desk_controller->NewDesk(DesksCreationRemovalSource::kButton);
-  ASSERT_EQ(2u, desk_controller->desks().size());
+  std::vector<aura::Window*> roots = Shell::GetAllRootWindows();
+  ASSERT_EQ(3u, roots.size());
 
   // Create two windows on the first display, and one each on the second and
   // third displays.
@@ -440,14 +436,13 @@
       CreateTestWindow(gfx::Rect(600, 0, 200, 200)));
   std::unique_ptr<aura::Window> window4(
       CreateTestWindow(gfx::Rect(1200, 0, 200, 200)));
-  ASSERT_EQ(Shell::GetAllRootWindows()[0], window1->GetRootWindow());
-  ASSERT_EQ(Shell::GetAllRootWindows()[0], window2->GetRootWindow());
-  ASSERT_EQ(Shell::GetAllRootWindows()[1], window3->GetRootWindow());
-  ASSERT_EQ(Shell::GetAllRootWindows()[2], window4->GetRootWindow());
+  ASSERT_EQ(roots[0], window1->GetRootWindow());
+  ASSERT_EQ(roots[0], window2->GetRootWindow());
+  ASSERT_EQ(roots[1], window3->GetRootWindow());
+  ASSERT_EQ(roots[2], window4->GetRootWindow());
 
   ToggleOverview();
-  const auto* desk_bar_view1 =
-      GetDesksBarViewForRoot(Shell::GetAllRootWindows()[0]);
+  const auto* desk_bar_view1 = GetDesksBarViewForRoot(roots[0]);
   EXPECT_EQ(2u, desk_bar_view1->mini_views().size());
 
   // Tests that tabbing initially will go through the desk mini views, then
@@ -471,8 +466,7 @@
   // Tests that the next tab will bring us to the first mini view on the
   // second display.
   SendKey(ui::VKEY_TAB);
-  const auto* desk_bar_view2 =
-      GetDesksBarViewForRoot(Shell::GetAllRootWindows()[1]);
+  const auto* desk_bar_view2 = GetDesksBarViewForRoot(roots[1]);
   EXPECT_EQ(desk_bar_view2->mini_views()[0].get(), GetHighlightedView());
 
   // Tab through all items on the second display.
@@ -486,8 +480,7 @@
   // Tests that after tabbing through the items on the second display, the
   // next tab will bring us to the first mini view on the third display.
   SendKey(ui::VKEY_TAB);
-  const auto* desk_bar_view3 =
-      GetDesksBarViewForRoot(Shell::GetAllRootWindows()[2]);
+  const auto* desk_bar_view3 = GetDesksBarViewForRoot(roots[2]);
   EXPECT_EQ(desk_bar_view3->mini_views()[0].get(), GetHighlightedView());
 
   // Tab through all items on the third display.
@@ -512,10 +505,6 @@
   std::vector<aura::Window*> roots = Shell::GetAllRootWindows();
   ASSERT_EQ(3u, roots.size());
 
-  auto* desk_controller = DesksController::Get();
-  desk_controller->NewDesk(DesksCreationRemovalSource::kButton);
-  ASSERT_EQ(2u, desk_controller->desks().size());
-
   std::unique_ptr<aura::Window> window1(CreateTestWindow(gfx::Rect(200, 200)));
   std::unique_ptr<aura::Window> window2(
       CreateTestWindow(gfx::Rect(600, 0, 200, 200)));
@@ -558,10 +547,6 @@
 
 TEST_F(DesksOverviewHighlightControllerTest,
        TabbingMDisplayHighlightLocationAfterItemRemoval) {
-  auto* desk_controller = DesksController::Get();
-  desk_controller->NewDesk(DesksCreationRemovalSource::kButton);
-  ASSERT_EQ(2u, desk_controller->desks().size());
-
   std::unique_ptr<views::Widget> widget3(CreateTestWidget());
   std::unique_ptr<aura::Window> window2(CreateTestWindow(gfx::Rect(200, 200)));
   std::unique_ptr<views::Widget> widget1(CreateTestWidget());
@@ -593,4 +578,94 @@
   EXPECT_TRUE(CoveredByOverviewHighlight(item2->caption_container_view()));
 }
 
+TEST_F(DesksOverviewHighlightControllerTest,
+       ActivateCloseHighlightOnNewDeskButton) {
+  ToggleOverview();
+  const auto* desk_bar_view =
+      GetDesksBarViewForRoot(Shell::GetPrimaryRootWindow());
+  const auto* new_desk_button = desk_bar_view->new_desk_button();
+  const auto* desks_controller = DesksController::Get();
+
+  // Use the keyboard to navigate to the new desk button.
+  SendKey(ui::VKEY_TAB);
+  SendKey(ui::VKEY_TAB);
+  SendKey(ui::VKEY_TAB);
+  ASSERT_EQ(new_desk_button, GetHighlightedView());
+
+  SendKey(ui::VKEY_RETURN);
+  EXPECT_EQ(3u, desks_controller->desks().size());
+  EXPECT_TRUE(new_desk_button->GetEnabled());
+
+  // Tests that pressing the key command to close a highlighted item does
+  // nothing.
+  SendKey(ui::VKEY_W, ui::EF_CONTROL_DOWN);
+  EXPECT_EQ(3u, desks_controller->desks().size());
+
+  // Keep adding new desks until we reach the maximum allowed amount. Verify the
+  // amount of desks is indeed the maximum allowed and that the new desk button
+  // is disabled.
+  while (desks_controller->CanCreateDesks())
+    SendKey(ui::VKEY_RETURN);
+  EXPECT_FALSE(new_desk_button->GetEnabled());
+  EXPECT_EQ(desks_util::kMaxNumberOfDesks, desks_controller->desks().size());
+
+  // Tests that after the button is disabled, it is no longer highlighted.
+  EXPECT_FALSE(GetHighlightedView());
+}
+
+TEST_F(DesksOverviewHighlightControllerTest, ActivateHighlightOnMiniView) {
+  // We are initially on desk 1.
+  const auto* desks_controller = DesksController::Get();
+  auto& desks = desks_controller->desks();
+  ASSERT_EQ(desks_controller->active_desk(), desks[0].get());
+
+  ToggleOverview();
+  const auto* desk_bar_view =
+      GetDesksBarViewForRoot(Shell::GetPrimaryRootWindow());
+
+  // Use keyboard to navigate to the miniview associated with desk 2.
+  SendKey(ui::VKEY_TAB);
+  SendKey(ui::VKEY_TAB);
+  ASSERT_EQ(desk_bar_view->mini_views()[1].get(), GetHighlightedView());
+
+  // Tests that after hitting the return key on the highlighted mini view
+  // associated with desk 2, we switch to desk 2.
+  DeskSwitchAnimationWaiter waiter;
+  SendKey(ui::VKEY_RETURN);
+  waiter.Wait();
+  EXPECT_EQ(desks_controller->active_desk(), desks[1].get());
+}
+
+TEST_F(DesksOverviewHighlightControllerTest, CloseHighlightOnMiniView) {
+  const auto* desks_controller = DesksController::Get();
+  ASSERT_EQ(2u, desks_controller->desks().size());
+  auto* desk1 = desks_controller->desks()[0].get();
+  auto* desk2 = desks_controller->desks()[1].get();
+  ASSERT_EQ(desk1, desks_controller->active_desk());
+
+  ToggleOverview();
+  const auto* desk_bar_view =
+      GetDesksBarViewForRoot(Shell::GetPrimaryRootWindow());
+  auto* mini_view1 = desk_bar_view->mini_views()[0].get();
+  auto* mini_view2 = desk_bar_view->mini_views()[1].get();
+
+  // Use keyboard to navigate to the miniview associated with desk 2.
+  SendKey(ui::VKEY_TAB);
+  SendKey(ui::VKEY_TAB);
+  ASSERT_EQ(mini_view2, GetHighlightedView());
+
+  // Tests that after hitting ctrl-w on the highlighted miniview associated
+  // with desk 2, desk 2 is destroyed.
+  SendKey(ui::VKEY_W, ui::EF_CONTROL_DOWN);
+  EXPECT_EQ(1u, desks_controller->desks().size());
+  EXPECT_NE(desk2, desks_controller->desks()[0].get());
+
+  // Tests that hitting ctrl-w on the highlighted miniview if it is the last one
+  // does nothing.
+  while (mini_view1 != GetHighlightedView())
+    SendKey(ui::VKEY_TAB);
+  SendKey(ui::VKEY_W, ui::EF_CONTROL_DOWN);
+  EXPECT_EQ(1u, desks_controller->desks().size());
+}
+
 }  // namespace ash
diff --git a/ash/wm/overview/overview_item.cc b/ash/wm/overview/overview_item.cc
index e3aa4fe..6697e00 100644
--- a/ash/wm/overview/overview_item.cc
+++ b/ash/wm/overview/overview_item.cc
@@ -849,6 +849,14 @@
   return IsSlidingOutOverviewFromShelf();
 }
 
+void OverviewItem::OnHighlightedViewActivated() {
+  overview_session_->OnHighlightedItemActivated(this);
+}
+
+void OverviewItem::OnHighlightedViewClosed() {
+  overview_session_->OnHighlightedItemClosed(this);
+}
+
 void OverviewItem::ButtonPressed(views::Button* sender,
                                  const ui::Event& event) {
   DCHECK_EQ(sender, close_button_);
diff --git a/ash/wm/overview/overview_item.h b/ash/wm/overview/overview_item.h
index cb6c46f3..cfd352f 100644
--- a/ash/wm/overview/overview_item.h
+++ b/ash/wm/overview/overview_item.h
@@ -197,6 +197,8 @@
   void HandleTapEvent() override;
   void HandleGestureEndEvent() override;
   bool ShouldIgnoreGestureEvents() override;
+  void OnHighlightedViewActivated() override;
+  void OnHighlightedViewClosed() override;
 
   // views::ButtonListener:
   void ButtonPressed(views::Button* sender, const ui::Event& event) override;
diff --git a/ash/wm/overview/overview_session.cc b/ash/wm/overview/overview_session.cc
index 993d6e6d..507958f 100644
--- a/ash/wm/overview/overview_session.cc
+++ b/ash/wm/overview/overview_session.cc
@@ -738,6 +738,23 @@
   return true;
 }
 
+void OverviewSession::OnHighlightedItemActivated(OverviewItem* item) {
+  UMA_HISTOGRAM_COUNTS_100("Ash.WindowSelector.ArrowKeyPresses",
+                           num_key_presses_);
+  UMA_HISTOGRAM_CUSTOM_COUNTS("Ash.WindowSelector.KeyPressesOverItemsRatio",
+                              (num_key_presses_ * 100) / num_items_, 1, 300,
+                              30);
+  base::RecordAction(
+      base::UserMetricsAction("WindowSelector_OverviewEnterKey"));
+  SelectWindow(item);
+}
+
+void OverviewSession::OnHighlightedItemClosed(OverviewItem* item) {
+  base::RecordAction(
+      base::UserMetricsAction("WindowSelector_OverviewCloseKey"));
+  item->CloseWindow();
+}
+
 void OverviewSession::OnDisplayRemoved(const display::Display& display) {
   // TODO(flackr): Keep window selection active on remaining displays.
   EndOverview();
@@ -807,9 +824,9 @@
   // TODO(crbug.com/952315): Explore better ways to handle this splitview +
   // overview + applist case.
   Shell* shell = Shell::Get();
-  if (shell->app_list_controller() &&
-      shell->app_list_controller()->IsVisible() &&
-      Shell::Get()->split_view_controller()->InClamshellSplitViewMode()) {
+  if (!shell->tablet_mode_controller()->InTabletMode() &&
+      shell->app_list_controller() &&
+      shell->app_list_controller()->IsVisible()) {
     return;
   }
 
@@ -843,40 +860,16 @@
       Move(/*reverse=*/true);
       break;
     case ui::VKEY_W: {
-      // TODO(afakhry|sammiequon): Make ctrl W and enter shortcut work for desk
-      // items. ctrl W should activate the mini desk close button and do nothing
-      // for the new desk button. Enter should activate the desk mini view or
-      // new desk button.
-      if (!(event->flags() & ui::EF_CONTROL_DOWN) ||
-          !highlight_controller_->IsFocusHighlightVisible()) {
+      if (!(event->flags() & ui::EF_CONTROL_DOWN))
         return;
-      }
 
-      OverviewItem* item = highlight_controller_->GetHighlightedItem();
-      if (!item)
+      if (!highlight_controller_->MaybeCloseHighlightedView())
         return;
-      base::RecordAction(
-          base::UserMetricsAction("WindowSelector_OverviewCloseKey"));
-      item->CloseWindow();
       break;
     }
     case ui::VKEY_RETURN: {
-      // Ignore if no item is selected.
-      if (!highlight_controller_->IsFocusHighlightVisible())
+      if (!highlight_controller_->MaybeActivateHighlightedView())
         return;
-
-      OverviewItem* item = highlight_controller_->GetHighlightedItem();
-      if (!item)
-        return;
-
-      UMA_HISTOGRAM_COUNTS_100("Ash.WindowSelector.ArrowKeyPresses",
-                               num_key_presses_);
-      UMA_HISTOGRAM_CUSTOM_COUNTS("Ash.WindowSelector.KeyPressesOverItemsRatio",
-                                  (num_key_presses_ * 100) / num_items_, 1, 300,
-                                  30);
-      base::RecordAction(
-          base::UserMetricsAction("WindowSelector_OverviewEnterKey"));
-      SelectWindow(item);
       break;
     }
     default:
@@ -892,6 +885,14 @@
   EndOverview();
 }
 
+void OverviewSession::OnShelfAlignmentChanged(aura::Window* root_window) {
+  // When the shelf alignment changes while in overview, the display work area
+  // doesn't get updated anyways (see https://crbug.com/834400). In this case,
+  // even updating the grid bounds won't make any difference, so we simply exit
+  // overview.
+  EndOverview();
+}
+
 void OverviewSession::OnSplitViewStateChanged(SplitViewState previous_state,
                                               SplitViewState state) {
   // Do nothing if overview is being shutdown.
diff --git a/ash/wm/overview/overview_session.h b/ash/wm/overview/overview_session.h
index a2bfc6d..b21ec95 100644
--- a/ash/wm/overview/overview_session.h
+++ b/ash/wm/overview/overview_session.h
@@ -235,6 +235,10 @@
   // Returns true if all its window grids don't have any window item.
   bool IsEmpty() const;
 
+  // Handles requests to active or close the currently highlighted |item|.
+  void OnHighlightedItemActivated(OverviewItem* item);
+  void OnHighlightedItemClosed(OverviewItem* item);
+
   // display::DisplayObserver:
   void OnDisplayRemoved(const display::Display& display) override;
   void OnDisplayMetricsChanged(const display::Display& display,
@@ -246,6 +250,7 @@
 
   // ShelObserver:
   void OnShellDestroying() override;
+  void OnShelfAlignmentChanged(aura::Window* root_window) override;
 
   // ui::EventHandler:
   void OnKeyEvent(ui::KeyEvent* event) override;
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc
index ef382cac..a1b05cb4 100644
--- a/ash/wm/overview/overview_session_unittest.cc
+++ b/ash/wm/overview/overview_session_unittest.cc
@@ -2793,6 +2793,14 @@
   EXPECT_FALSE(InOverviewSession());
 }
 
+TEST_F(OverviewSessionTest, ShelfAlignmentChangeWhileInOverview) {
+  Shelf* shelf = GetPrimaryShelf();
+  shelf->SetAlignment(SHELF_ALIGNMENT_BOTTOM);
+  ToggleOverview();
+  shelf->SetAlignment(SHELF_ALIGNMENT_RIGHT);
+  EXPECT_FALSE(InOverviewSession());
+}
+
 class OverviewSessionNewLayoutTest : public OverviewSessionTest {
  public:
   OverviewSessionNewLayoutTest() = default;
diff --git a/base/fuchsia/service_directory_test_base.h b/base/fuchsia/service_directory_test_base.h
index 900b008..666d2b8 100644
--- a/base/fuchsia/service_directory_test_base.h
+++ b/base/fuchsia/service_directory_test_base.h
@@ -12,8 +12,8 @@
 #include "base/fuchsia/service_directory_client.h"
 #include "base/fuchsia/test_interface_impl.h"
 #include "base/fuchsia/testfidl/cpp/fidl.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
+#include "base/test/scoped_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
@@ -30,7 +30,9 @@
  protected:
   const RunLoop::ScopedRunTimeoutForTest run_timeout_;
 
-  MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
 
   std::unique_ptr<ServiceDirectory> service_directory_;
   TestInterfaceImpl test_service_;
diff --git a/base/fuchsia/service_provider_impl_unittest.cc b/base/fuchsia/service_provider_impl_unittest.cc
index 4a36b30..37872ad8 100644
--- a/base/fuchsia/service_provider_impl_unittest.cc
+++ b/base/fuchsia/service_provider_impl_unittest.cc
@@ -5,14 +5,15 @@
 #include "base/fuchsia/service_provider_impl.h"
 
 #include <lib/zx/channel.h>
+
 #include <utility>
 
 #include "base/fuchsia/scoped_service_binding.h"
 #include "base/fuchsia/service_directory.h"
 #include "base/fuchsia/test_interface_impl.h"
 #include "base/fuchsia/testfidl/cpp/fidl.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
+#include "base/test/scoped_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
@@ -49,7 +50,9 @@
   }
 
  protected:
-  MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   TestInterfaceImpl test_service_;
 
   DISALLOW_COPY_AND_ASSIGN(ServiceProviderImplTest);
diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc
index 265ad28..53787b1 100644
--- a/base/logging_unittest.cc
+++ b/base/logging_unittest.cc
@@ -11,11 +11,11 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/sanitizer_buildflags.h"
 #include "base/strings/string_piece.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/test/scoped_task_environment.h"
 #include "build/build_config.h"
 
 #include "testing/gmock/include/gmock/gmock.h"
@@ -93,7 +93,8 @@
 
 class LoggingTest : public testing::Test {
  private:
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   LogStateSaver log_state_saver_;
 };
 
diff --git a/base/task/task_traits.h b/base/task/task_traits.h
index cd3f601b..32be5e3 100644
--- a/base/task/task_traits.h
+++ b/base/task/task_traits.h
@@ -66,8 +66,6 @@
   HIGHEST = USER_BLOCKING
 };
 
-using TaskPriorityType = std::underlying_type<TaskPriority>::type;
-
 // Valid shutdown behaviors supported by the thread pool.
 enum class TaskShutdownBehavior : uint8_t {
   // Tasks posted with this mode which have not started executing before
diff --git a/base/task/thread_pool/task_tracker.cc b/base/task/thread_pool/task_tracker.cc
index 6b9282f..95a40ec2 100644
--- a/base/task/thread_pool/task_tracker.cc
+++ b/base/task/thread_pool/task_tracker.cc
@@ -308,7 +308,7 @@
       tracked_ref_factory_(this) {
   // Confirm that all |task_latency_histograms_| have been initialized above.
   for (TaskPriorityType i = 0; i < kNumTaskPriorities; ++i) {
-    for (TaskPriorityType j = 0; j < kNumBlockingModes; ++j) {
+    for (uint8_t j = 0; j < kNumBlockingModes; ++j) {
       DCHECK(task_latency_histograms_[i][j]);
     }
   }
diff --git a/base/task/thread_pool/task_tracker.h b/base/task/thread_pool/task_tracker.h
index 4a7f28b6..f44c6d0 100644
--- a/base/task/thread_pool/task_tracker.h
+++ b/base/task/thread_pool/task_tracker.h
@@ -285,9 +285,10 @@
   // blocking tasks. Intentionally leaked.
   // TODO(scheduler-dev): Consider using STATIC_HISTOGRAM_POINTER_GROUP for
   // these.
-  static constexpr auto kNumTaskPriorities =
+  using TaskPriorityType = std::underlying_type<TaskPriority>::type;
+  static constexpr TaskPriorityType kNumTaskPriorities =
       static_cast<TaskPriorityType>(TaskPriority::HIGHEST) + 1;
-  static constexpr TaskPriorityType kNumBlockingModes = 2;
+  static constexpr uint8_t kNumBlockingModes = 2;
   HistogramBase* const task_latency_histograms_[kNumTaskPriorities]
                                                [kNumBlockingModes];
   HistogramBase* const heartbeat_latency_histograms_[kNumTaskPriorities]
diff --git a/build/fuchsia/common_args.py b/build/fuchsia/common_args.py
index 8fda07e..a897a3072d 100644
--- a/build/fuchsia/common_args.py
+++ b/build/fuchsia/common_args.py
@@ -91,7 +91,7 @@
       logging.DEBUG if args.verbose else logging.WARN)
 
 
-def GetDeploymentTargetForArgs(args):
+def GetDeploymentTargetForArgs(args, require_kvm=False):
   """Constructs a deployment target object using parameters taken from
   command line arguments."""
 
@@ -103,9 +103,6 @@
     system_log_file = None
 
   if not args.device:
-    # KVM is required on x64 test bots.
-    require_kvm = args.test_launcher_bot_mode and args.target_cpu == "x64"
-
     return QemuTarget(output_dir=args.output_directory,
                       target_cpu=args.target_cpu,
                       cpu_cores=args.qemu_cpu_cores,
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 9b96906..47df890c 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-8906223823811531696
\ No newline at end of file
+8905968741717940064
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index ca51c387..99d528a 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-8906227347135980880
\ No newline at end of file
+8905967600665400288
\ No newline at end of file
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py
index 631b05b..ffef95c 100755
--- a/build/fuchsia/test_runner.py
+++ b/build/fuchsia/test_runner.py
@@ -104,7 +104,10 @@
   if args.child_args:
     child_args.extend(args.child_args)
 
-  with GetDeploymentTargetForArgs(args) as target:
+  # KVM is required on x64 test bots.
+  require_kvm = args.test_launcher_bot_mode and args.target_cpu == 'x64'
+
+  with GetDeploymentTargetForArgs(args, require_kvm=require_kvm) as target:
     target.Start()
 
     if args.test_launcher_filter_file:
diff --git a/chrome/VERSION b/chrome/VERSION
index 67f2da8c..dc65ebe 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=78
 MINOR=0
-BUILD=3873
+BUILD=3875
 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index e5868d0..b3145e8 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -285,9 +285,9 @@
     "//chrome/android/webapk/libs/common:splash_java",
     "//chrome/android/webapk/libs/runtime_library:webapk_service_aidl_java",
     "//chrome/browser/android/thin_webview:factory_java",
+    "//chrome/browser/ui/android/widget:java",
     "//chrome/lib/image_fetcher/public/android:java",
     "//chrome/lib/lifecycle/public/android:java",
-    "//chrome/lib/ui/widget/public/android:java",
     "//chrome/lib/util/public/android:java",
     "//components/autofill/android:autofill_java",
     "//components/autofill_assistant/browser:proto_java",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java
index 330d373e..5dfc796 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java
@@ -19,6 +19,8 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.verify;
 
+import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition;
+
 import android.support.annotation.IdRes;
 import android.support.test.filters.MediumTest;
 
@@ -99,8 +101,7 @@
         AutofillAssistantPreferencesUtil.setInitialPreferences(!expectAccept);
 
         AssistantOnboardingCoordinator coordinator = createCoordinator(mTab);
-
-        ThreadUtils.runOnUiThreadBlocking(() -> coordinator.show(mCallback));
+        showOnboardingAndWait(coordinator, mCallback);
 
         assertTrue(ThreadUtils.runOnUiThreadBlocking(coordinator::isInProgress));
         onView(is(mActivity.getScrim())).check(matches(isDisplayed()));
@@ -116,8 +117,7 @@
     @MediumTest
     public void testOnboardingWithNoTabs() throws Exception {
         AssistantOnboardingCoordinator coordinator = createCoordinator(/* tab= */ null);
-
-        ThreadUtils.runOnUiThreadBlocking(() -> coordinator.show(mCallback));
+        showOnboardingAndWait(coordinator, mCallback);
 
         onView(withId(R.id.button_init_ok)).perform(click());
 
@@ -131,9 +131,8 @@
 
         List<AssistantOverlayCoordinator> capturedOverlays =
                 Collections.synchronizedList(new ArrayList<>());
-        ThreadUtils.runOnUiThreadBlocking(() -> coordinator.show((accepted) -> {
-            capturedOverlays.add(coordinator.transferControls());
-        }));
+        showOnboardingAndWait(coordinator,
+                (accepted) -> { capturedOverlays.add(coordinator.transferControls()); });
 
         onView(withId(R.id.button_init_ok)).perform(click());
         assertFalse(ThreadUtils.runOnUiThreadBlocking(coordinator::isInProgress));
@@ -150,4 +149,11 @@
         assertThat(mBottomSheetController.getBottomSheet().getCurrentSheetContent(),
                 instanceOf(AssistantBottomSheetContent.class));
     }
+
+    /** Trigger onboarding and wait until it is fully displayed. */
+    private void showOnboardingAndWait(AssistantOnboardingCoordinator coordinator,
+            Callback<Boolean> callback) throws Exception {
+        ThreadUtils.runOnUiThreadBlocking(() -> coordinator.show(callback));
+        waitUntilViewMatchesCondition(withId(R.id.button_init_ok), isDisplayed());
+    }
 }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
index f7d59f13..785e6ad 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java
@@ -6,6 +6,7 @@
 
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 
 import static org.hamcrest.Matchers.contains;
@@ -15,6 +16,8 @@
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
+import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition;
+
 import android.os.Bundle;
 import android.support.test.filters.MediumTest;
 import android.text.TextUtils;
@@ -158,6 +161,8 @@
         WaitingCallback<Boolean> onboardingCallback =
                 performActionAsync("onboarding", Bundle.EMPTY);
 
+        waitUntilViewMatchesCondition(withId(R.id.button_init_ok), isDisplayed());
+
         assertFalse(onboardingCallback.hasResult());
         onView(withId(R.id.button_init_ok)).perform(click());
         assertEquals(Boolean.TRUE, onboardingCallback.waitForResult("accept onboarding"));
diff --git a/chrome/android/features/keyboard_accessory/BUILD.gn b/chrome/android/features/keyboard_accessory/BUILD.gn
index d149db1..176dee8 100644
--- a/chrome/android/features/keyboard_accessory/BUILD.gn
+++ b/chrome/android/features/keyboard_accessory/BUILD.gn
@@ -86,6 +86,7 @@
     "junit/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingControllerTest.java",
     "junit/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryControllerTest.java",
     "junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetControllerTest.java",
+    "junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetControllerTest.java",
     "junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetControllerTest.java",
     "junit/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutControllerTest.java",
   ]
diff --git a/chrome/android/features/keyboard_accessory/internal/BUILD.gn b/chrome/android/features/keyboard_accessory/internal/BUILD.gn
index 9f44c1d..fb0689f 100644
--- a/chrome/android/features/keyboard_accessory/internal/BUILD.gn
+++ b/chrome/android/features/keyboard_accessory/internal/BUILD.gn
@@ -63,7 +63,6 @@
     "java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetViewBinder.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessoryInfoView.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetCoordinator.java",
-    "java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetMediator.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewBinder.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryInfoView.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetCoordinator.java",
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabCoordinator.java
index ed902ed1..10e31c5c 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabCoordinator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabCoordinator.java
@@ -4,13 +4,17 @@
 
 package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
 
+import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.support.annotation.CallSuper;
+import android.support.annotation.DrawableRes;
 import android.support.annotation.LayoutRes;
 import android.support.annotation.Nullable;
+import android.support.v7.content.res.AppCompatResources;
 import android.support.v7.widget.RecyclerView;
 import android.view.ViewGroup;
 
+import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
 import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData;
 import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.AccessorySheetData;
@@ -25,6 +29,30 @@
     private final RecyclerView.OnScrollListener mScrollListener;
 
     /**
+     * Provides the icon used for a sheet. Simplifies mocking in controller tests.
+     */
+    @VisibleForTesting
+    static public class IconProvider {
+        private static Drawable sTestIcon;
+
+        /**
+         * Loads the icon used for this class. Used to mock icons in unit tests.
+         * @param context The context containing the icon resources.
+         * @param resource The icon resources.
+         * @return The icon as {@link Drawable}.
+         */
+        static Drawable getIcon(Context context, @DrawableRes int resource) {
+            if (sTestIcon != null) return sTestIcon;
+            return AppCompatResources.getDrawable(context, resource);
+        }
+
+        @VisibleForTesting
+        public static void setIconForTesting(Drawable icon) {
+            sTestIcon = icon;
+        }
+    }
+
+    /**
      * Creates a keyboard accessory sheet tab coordinator.
      * @param title A {@link String} permanently displayed in the bar above the keyboard.
      * @param icon The icon that represents this sheet in the keyboard accessory tab switcher.
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMediator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMediator.java
index 29bbc58..3a2e238 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMediator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMediator.java
@@ -7,7 +7,9 @@
 import android.support.annotation.CallSuper;
 
 import org.chromium.chrome.browser.ChromeFeatureList;
+import org.chromium.chrome.browser.keyboard_accessory.AccessoryAction;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
+import org.chromium.chrome.browser.keyboard_accessory.ManualFillingMetricsRecorder;
 import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.AccessorySheetData;
 import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.FooterCommand;
 import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.UserInfo;
@@ -29,22 +31,30 @@
     private final AccessorySheetTabModel mModel;
     private final @AccessoryTabType int mTabType;
     private final @Type int mUserInfoType;
+    private final @AccessoryAction int mManageActionToRecord;
 
     @Override
     public void onItemAvailable(int typeId, AccessorySheetData accessorySheetData) {
         mModel.set(splitIntoDataPieces(accessorySheetData));
     }
 
-    AccessorySheetTabMediator(
-            AccessorySheetTabModel model, @AccessoryTabType int tabType, @Type int userInfoType) {
+    AccessorySheetTabMediator(AccessorySheetTabModel model, @AccessoryTabType int tabType,
+            @Type int userInfoType, @AccessoryAction int manageActionToRecord) {
         mModel = model;
         mTabType = tabType;
         mUserInfoType = userInfoType;
+        mManageActionToRecord = manageActionToRecord;
     }
 
     @CallSuper
     void onTabShown() {
         AccessorySheetTabMetricsRecorder.recordSheetSuggestions(mTabType, mModel);
+
+        // This is a compromise: we log an impression, even if the user didn't scroll down far
+        // enough to see it. If we moved it into the view layer (i.e. when the actual button is
+        // created and shown), we could record multiple impressions of the user scrolls up and
+        // down repeatedly.
+        ManualFillingMetricsRecorder.recordActionImpression(mManageActionToRecord);
     }
 
     private AccessorySheetDataPiece[] splitIntoDataPieces(AccessorySheetData accessorySheetData) {
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMetricsRecorder.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMetricsRecorder.java
index 5b6bdcc..0c5170b 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMetricsRecorder.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AccessorySheetTabMetricsRecorder.java
@@ -5,6 +5,8 @@
 package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
 
 import static org.chromium.chrome.browser.keyboard_accessory.ManualFillingMetricsRecorder.getHistogramForType;
+import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type.ADDRESS_INFO;
+import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type.CREDIT_CARD_INFO;
 import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type.PASSWORD_INFO;
 import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.getType;
 
@@ -33,12 +35,11 @@
      */
     static void recordSheetSuggestions(@AccessoryTabType int tabType,
             ListModel<AccessorySheetTabModel.AccessorySheetDataPiece> suggestionList) {
-        // TODO(crbug.com/926372): Add metrics capabilities for credit cards.
-        if (tabType == AccessoryTabType.CREDIT_CARDS) return;
-
         int interactiveSuggestions = 0;
         for (int i = 0; i < suggestionList.size(); ++i) {
-            if (getType(suggestionList.get(i)) == PASSWORD_INFO) {
+            if (getType(suggestionList.get(i)) == PASSWORD_INFO
+                    || getType(suggestionList.get(i)) == ADDRESS_INFO
+                    || getType(suggestionList.get(i)) == CREDIT_CARD_INFO) {
                 UserInfo info = (UserInfo) suggestionList.get(i).getDataPiece();
                 for (UserInfoField field : info.getFields()) {
                     if (field.isSelectable()) ++interactiveSuggestions;
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetCoordinator.java
index 9a55659..402ce369 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetCoordinator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetCoordinator.java
@@ -6,14 +6,12 @@
 
 import android.content.Context;
 import android.support.annotation.Nullable;
-import android.support.v7.content.res.AppCompatResources;
 import android.support.v7.widget.RecyclerView;
 import android.view.ViewGroup;
 
 import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryAction;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
-import org.chromium.chrome.browser.keyboard_accessory.ManualFillingMetricsRecorder;
 import org.chromium.chrome.browser.keyboard_accessory.R;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type;
@@ -26,31 +24,8 @@
  */
 public class AddressAccessorySheetCoordinator extends AccessorySheetTabCoordinator {
     private final AccessorySheetTabModel mModel = new AccessorySheetTabModel();
-    private final AddressAccessorySheetMediator mMediator =
-            new AddressAccessorySheetMediator(mModel);
-
-    /**
-     * This class contains all logic for the address accessory sheet component. Changes to its
-     * internal
-     * {@link PropertyModel} are observed by a {@link PropertyModelChangeProcessor} and affect the
-     * address accessory sheet tab view.
-     */
-    private static class AddressAccessorySheetMediator extends AccessorySheetTabMediator {
-        AddressAccessorySheetMediator(AccessorySheetTabModel model) {
-            super(model, AccessoryTabType.ADDRESSES, Type.ADDRESS_INFO);
-        }
-
-        @Override
-        void onTabShown() {
-            super.onTabShown();
-
-            // This is a compromise: we log an impression, even if the user didn't scroll down far
-            // enough to see it. If we moved it into the view layer (i.e. when the actual button is
-            // created and shown), we could record multiple impressions of the user scrolls up and
-            // down repeatedly.
-            ManualFillingMetricsRecorder.recordActionImpression(AccessoryAction.MANAGE_ADDRESSES);
-        }
-    }
+    private final AccessorySheetTabMediator mMediator = new AccessorySheetTabMediator(mModel,
+            AccessoryTabType.ADDRESSES, Type.ADDRESS_INFO, AccessoryAction.MANAGE_ADDRESSES);
 
     /**
      * Creates the address tab.
@@ -60,7 +35,7 @@
     public AddressAccessorySheetCoordinator(
             Context context, @Nullable RecyclerView.OnScrollListener scrollListener) {
         super(context.getString(R.string.address_accessory_sheet_title),
-                AppCompatResources.getDrawable(context, R.drawable.permission_location),
+                IconProvider.getIcon(context, R.drawable.permission_location),
                 context.getString(R.string.address_accessory_sheet_toggle),
                 context.getString(R.string.address_accessory_sheet_opened),
                 R.layout.address_accessory_sheet, AccessoryTabType.ADDRESSES, scrollListener);
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetCoordinator.java
index 82a7f162..83ed5c5 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetCoordinator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetCoordinator.java
@@ -6,10 +6,11 @@
 
 import android.content.Context;
 import android.support.annotation.Nullable;
-import android.support.v7.content.res.AppCompatResources;
 import android.support.v7.widget.RecyclerView;
 import android.view.ViewGroup;
 
+import org.chromium.base.VisibleForTesting;
+import org.chromium.chrome.browser.keyboard_accessory.AccessoryAction;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
 import org.chromium.chrome.browser.keyboard_accessory.R;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type;
@@ -20,9 +21,9 @@
  */
 public class CreditCardAccessorySheetCoordinator extends AccessorySheetTabCoordinator {
     private AccessorySheetTabModel mModel = new AccessorySheetTabModel();
-    // TODO(crbug.com/926365): Consider creating a mediator for CCs (e.g. to record footer metrics).
-    private final AccessorySheetTabMediator mMediator = new AccessorySheetTabMediator(
-            mModel, AccessoryTabType.CREDIT_CARDS, Type.CREDIT_CARD_INFO);
+    private final AccessorySheetTabMediator mMediator =
+            new AccessorySheetTabMediator(mModel, AccessoryTabType.CREDIT_CARDS,
+                    Type.CREDIT_CARD_INFO, AccessoryAction.MANAGE_CREDIT_CARDS);
 
     /**
      * Creates the credit cards tab.
@@ -32,7 +33,7 @@
     public CreditCardAccessorySheetCoordinator(
             Context context, @Nullable RecyclerView.OnScrollListener scrollListener) {
         super(context.getString(R.string.autofill_payment_methods),
-                AppCompatResources.getDrawable(context, R.drawable.infobar_autofill_cc),
+                IconProvider.getIcon(context, R.drawable.infobar_autofill_cc),
                 context.getString(R.string.credit_card_accessory_sheet_toggle),
                 context.getString(R.string.credit_card_accessory_sheet_opened),
                 R.layout.credit_card_accessory_sheet, AccessoryTabType.CREDIT_CARDS,
@@ -49,4 +50,9 @@
         super.onTabCreated(view);
         CreditCardAccessorySheetViewBinder.initializeView((RecyclerView) view, mModel);
     }
+
+    @VisibleForTesting
+    AccessorySheetTabModel getSheetDataPiecesForTesting() {
+        return mModel;
+    }
 }
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetMediator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetMediator.java
deleted file mode 100644
index c525ba04..0000000
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetMediator.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
-
-import org.chromium.chrome.browser.ChromeFeatureList;
-import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
-import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.AccessorySheetData;
-import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.FooterCommand;
-import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.UserInfo;
-import org.chromium.chrome.browser.keyboard_accessory.data.Provider;
-import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece;
-import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type;
-
-import java.util.ArrayList;
-import java.util.List;
-
-class CreditCardAccessorySheetMediator implements Provider.Observer<AccessorySheetData> {
-    private final AccessorySheetTabModel mModel;
-
-    @Override
-    public void onItemAvailable(int typeId, AccessorySheetData accessorySheetData) {
-        List<AccessorySheetDataPiece> items = new ArrayList<>();
-
-        if (accessorySheetData != null) {
-            if (shouldShowTitle(accessorySheetData.getUserInfoList())) {
-                items.add(new AccessorySheetDataPiece(accessorySheetData.getTitle(), Type.TITLE));
-            }
-            for (UserInfo info : accessorySheetData.getUserInfoList()) {
-                items.add(new AccessorySheetDataPiece(info, Type.CREDIT_CARD_INFO));
-            }
-            for (FooterCommand command : accessorySheetData.getFooterCommands()) {
-                items.add(new AccessorySheetDataPiece(command, Type.FOOTER_COMMAND));
-            }
-        }
-
-        mModel.set(items.toArray(new AccessorySheetDataPiece[0]));
-    }
-
-    CreditCardAccessorySheetMediator(AccessorySheetTabModel model) {
-        mModel = model;
-    }
-
-    void onTabShown() {
-        AccessorySheetTabMetricsRecorder.recordSheetSuggestions(
-                AccessoryTabType.CREDIT_CARDS, mModel);
-    }
-
-    private boolean shouldShowTitle(List<UserInfo> userInfoList) {
-        return !ChromeFeatureList.isEnabled(ChromeFeatureList.AUTOFILL_KEYBOARD_ACCESSORY)
-                || userInfoList.isEmpty();
-    }
-}
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetCoordinator.java
index 4e006396..4f062e1 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetCoordinator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetCoordinator.java
@@ -5,9 +5,7 @@
 package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
 
 import android.content.Context;
-import android.graphics.drawable.Drawable;
 import android.support.annotation.Nullable;
-import android.support.v7.content.res.AppCompatResources;
 import android.support.v7.widget.RecyclerView;
 import android.view.ViewGroup;
 
@@ -15,7 +13,6 @@
 import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryAction;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
-import org.chromium.chrome.browser.keyboard_accessory.ManualFillingMetricsRecorder;
 import org.chromium.chrome.browser.keyboard_accessory.R;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type;
@@ -29,60 +26,8 @@
  */
 public class PasswordAccessorySheetCoordinator extends AccessorySheetTabCoordinator {
     private final AccessorySheetTabModel mModel = new AccessorySheetTabModel();
-    private final PasswordAccessorySheetMediator mMediator;
-
-    /**
-     * This class contains all logic for the password accessory sheet component. Changes to its
-     * internal
-     * {@link PropertyModel} are observed by a {@link PropertyModelChangeProcessor} and affect the
-     * password accessory sheet tab view.
-     */
-    private static class PasswordAccessorySheetMediator extends AccessorySheetTabMediator {
-        PasswordAccessorySheetMediator(AccessorySheetTabModel model) {
-            super(model, AccessoryTabType.PASSWORDS, Type.PASSWORD_INFO);
-        }
-
-        @Override
-        void onTabShown() {
-            super.onTabShown();
-
-            // This is a compromise: we log an impression, even if the user didn't scroll down far
-            // enough to see it. If we moved it into the view layer (i.e. when the actual button is
-            // created and shown), we could record multiple impressions of the user scrolls up and
-            // down repeatedly.
-            ManualFillingMetricsRecorder.recordActionImpression(AccessoryAction.MANAGE_PASSWORDS);
-        }
-    }
-
-    /**
-     * Provides the icon used in this sheet. Simplifies mocking in controller tests.
-     */
-    @VisibleForTesting
-    public static class IconProvider {
-        private final static IconProvider sInstance = new IconProvider();
-        private Drawable mIcon;
-        private IconProvider() {}
-
-        public static IconProvider getInstance() {
-            return sInstance;
-        }
-
-        /**
-         * Loads and remembers the icon used for this class. Used to mock icons in unit tests.
-         * @param context The context containing the icon resources.
-         * @return The icon as {@link Drawable}.
-         */
-        public Drawable getIcon(Context context) {
-            if (mIcon != null) return mIcon;
-            mIcon = AppCompatResources.getDrawable(context, R.drawable.ic_vpn_key_grey);
-            return mIcon;
-        }
-
-        @VisibleForTesting
-        public void setIconForTesting(Drawable icon) {
-            mIcon = icon;
-        }
-    }
+    private final AccessorySheetTabMediator mMediator = new AccessorySheetTabMediator(mModel,
+            AccessoryTabType.PASSWORDS, Type.PASSWORD_INFO, AccessoryAction.MANAGE_PASSWORDS);
 
     /**
      * Creates the passwords tab.
@@ -92,11 +37,10 @@
     public PasswordAccessorySheetCoordinator(
             Context context, @Nullable RecyclerView.OnScrollListener scrollListener) {
         super(context.getString(R.string.prefs_saved_passwords_title),
-                IconProvider.getInstance().getIcon(context),
+                IconProvider.getIcon(context, R.drawable.ic_vpn_key_grey),
                 context.getString(R.string.password_accessory_sheet_toggle),
                 context.getString(R.string.password_accessory_sheet_opened),
                 R.layout.password_accessory_sheet, AccessoryTabType.PASSWORDS, scrollListener);
-        mMediator = new PasswordAccessorySheetMediator(mModel);
     }
 
     @Override
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/TouchToFillSheetCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/TouchToFillSheetCoordinator.java
index 3121ca0..82db003 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/TouchToFillSheetCoordinator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/TouchToFillSheetCoordinator.java
@@ -9,6 +9,7 @@
 import android.support.v7.content.res.AppCompatResources;
 import android.support.v7.widget.RecyclerView;
 
+import org.chromium.chrome.browser.keyboard_accessory.AccessoryAction;
 import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
 import org.chromium.chrome.browser.keyboard_accessory.R;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type;
@@ -20,8 +21,9 @@
  */
 public class TouchToFillSheetCoordinator extends AccessorySheetTabCoordinator {
     private AccessorySheetTabModel mModel = new AccessorySheetTabModel();
-    private final AccessorySheetTabMediator mMediator = new AccessorySheetTabMediator(
-            mModel, AccessoryTabType.TOUCH_TO_FILL, Type.TOUCH_TO_FILL_INFO);
+    private final AccessorySheetTabMediator mMediator =
+            new AccessorySheetTabMediator(mModel, AccessoryTabType.TOUCH_TO_FILL,
+                    Type.TOUCH_TO_FILL_INFO, AccessoryAction.MANAGE_PASSWORDS);
 
     /**
      * Creates the touch to fill tab.
diff --git a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingControllerTest.java b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingControllerTest.java
index f3f9fa4..9950b18 100644
--- a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingControllerTest.java
+++ b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingControllerTest.java
@@ -71,7 +71,7 @@
 import org.chromium.chrome.browser.keyboard_accessory.data.PropertyProvider;
 import org.chromium.chrome.browser.keyboard_accessory.data.UserInfoField;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_component.AccessorySheetCoordinator;
-import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.PasswordAccessorySheetCoordinator;
+import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabCoordinator;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.Tab.TabHidingType;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
@@ -105,8 +105,6 @@
     @Mock
     private TabModelSelector mMockTabModelSelector;
     @Mock
-    private Drawable mMockIcon;
-    @Mock
     private android.content.res.Resources mMockResources;
     @Mock
     private ChromeKeyboardVisibilityDelegate mMockKeyboard;
@@ -309,7 +307,7 @@
         Configuration config = new Configuration();
         config.hardKeyboardHidden = HARDKEYBOARDHIDDEN_UNDEFINED;
         when(mMockResources.getConfiguration()).thenReturn(config);
-        PasswordAccessorySheetCoordinator.IconProvider.getInstance().setIconForTesting(mMockIcon);
+        AccessorySheetTabCoordinator.IconProvider.setIconForTesting(mock(Drawable.class));
         mController.initialize(mMockWindow, mMockKeyboardAccessory, mMockAccessorySheet);
     }
 
diff --git a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetControllerTest.java b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetControllerTest.java
index 15778db91..3a09725 100644
--- a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetControllerTest.java
+++ b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/AddressAccessorySheetControllerTest.java
@@ -9,6 +9,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
@@ -19,6 +20,7 @@
 import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type.TITLE;
 import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.getType;
 
+import android.graphics.drawable.Drawable;
 import android.support.v7.widget.RecyclerView;
 
 import org.junit.Before;
@@ -71,6 +73,7 @@
         ShadowRecordHistogram.reset();
         MockitoAnnotations.initMocks(this);
         mocker.mock(RecordHistogramJni.TEST_HOOKS, mMockRecordHistogramNatives);
+        AccessorySheetTabCoordinator.IconProvider.setIconForTesting(mock(Drawable.class));
         setAutofillFeature(true);
         mCoordinator = new AddressAccessorySheetCoordinator(RuntimeEnvironment.application, null);
         assertNotNull(mCoordinator);
@@ -169,7 +172,7 @@
     }
 
     @Test
-    public void testRecordsSuggestionsImpressionsWhenShown() {
+    public void testRecordsNoSuggestionsImpressionsWithoutInteractiveElements() {
         final PropertyProvider<AccessorySheetData> testProvider = new PropertyProvider<>();
         mCoordinator.registerDataProvider(testProvider);
         assertThat(RecordHistogram.getHistogramTotalCountForTesting(
@@ -188,6 +191,33 @@
         assertThat(getSuggestionsImpressions(AccessoryTabType.ALL, 0), is(1));
     }
 
+    @Test
+    public void testRecordsSelectableSuggestionsImpressionsWhenShown() {
+        final PropertyProvider<AccessorySheetData> testProvider = new PropertyProvider<>();
+        mCoordinator.registerDataProvider(testProvider);
+        assertThat(RecordHistogram.getHistogramTotalCountForTesting(
+                           UMA_KEYBOARD_ACCESSORY_SHEET_SUGGESTIONS),
+                is(0));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ADDRESSES, 1), is(0));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ALL, 1), is(0));
+
+        // Add only two interactive items - the third one should not be recorded.
+        AccessorySheetData accessorySheetData =
+                new AccessorySheetData(AccessoryTabType.ADDRESSES, "Addresses");
+        accessorySheetData.getUserInfoList().add(new UserInfo("", null));
+        accessorySheetData.getUserInfoList().get(0).addField(
+                new UserInfoField("Todd Tester", "Todd Tester", "0", false, result -> {}));
+        accessorySheetData.getUserInfoList().get(0).addField(
+                new UserInfoField("Main Street", "Main Street", "1", false, result -> {}));
+        accessorySheetData.getUserInfoList().get(0).addField(
+                new UserInfoField("Unselectable", "Unselectable", "-1", false, null));
+        testProvider.notifyObservers(accessorySheetData);
+        mCoordinator.onTabShown();
+
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ADDRESSES, 2), is(1));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ALL, 2), is(1));
+    }
+
     private int getSuggestionsImpressions(@AccessoryTabType int type, int sample) {
         return RecordHistogram.getHistogramValueCountForTesting(
                 getHistogramForType(UMA_KEYBOARD_ACCESSORY_SHEET_SUGGESTIONS, type), sample);
diff --git a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetControllerTest.java b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetControllerTest.java
new file mode 100644
index 0000000..7e0427f
--- /dev/null
+++ b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetControllerTest.java
@@ -0,0 +1,232 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import static org.chromium.chrome.browser.keyboard_accessory.ManualFillingMetricsRecorder.getHistogramForType;
+import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabMetricsRecorder.UMA_KEYBOARD_ACCESSORY_SHEET_SUGGESTIONS;
+import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type.CREDIT_CARD_INFO;
+import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type.TITLE;
+import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.getType;
+
+import android.graphics.drawable.Drawable;
+import android.support.v7.widget.RecyclerView;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.base.metrics.RecordHistogramJni;
+import org.chromium.base.metrics.test.ShadowRecordHistogram;
+import org.chromium.base.task.test.CustomShadowAsyncTask;
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.base.test.util.JniMocker;
+import org.chromium.chrome.browser.ChromeFeatureList;
+import org.chromium.chrome.browser.keyboard_accessory.AccessoryTabType;
+import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData;
+import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.AccessorySheetData;
+import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.UserInfo;
+import org.chromium.chrome.browser.keyboard_accessory.data.PropertyProvider;
+import org.chromium.chrome.browser.keyboard_accessory.data.UserInfoField;
+import org.chromium.ui.modelutil.ListObservable;
+
+import java.util.HashMap;
+
+/**
+ * Controller tests for the credit card accessory sheet.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE,
+        shadows = {CustomShadowAsyncTask.class, ShadowRecordHistogram.class})
+public class CreditCardAccessorySheetControllerTest {
+    @Rule
+    public JniMocker mocker = new JniMocker();
+    @Mock
+    private RecyclerView mMockView;
+    @Mock
+    private ListObservable.ListObserver<Void> mMockItemListObserver;
+    @Mock
+    private RecordHistogram.Natives mMockRecordHistogramNatives;
+
+    private CreditCardAccessorySheetCoordinator mCoordinator;
+    private AccessorySheetTabModel mSheetDataPieces;
+
+    @Before
+    public void setUp() {
+        ShadowRecordHistogram.reset();
+        MockitoAnnotations.initMocks(this);
+        mocker.mock(RecordHistogramJni.TEST_HOOKS, mMockRecordHistogramNatives);
+        AccessorySheetTabCoordinator.IconProvider.setIconForTesting(mock(Drawable.class));
+        setAutofillFeature(true);
+        mCoordinator =
+                new CreditCardAccessorySheetCoordinator(RuntimeEnvironment.application, null);
+        assertNotNull(mCoordinator);
+        mSheetDataPieces = mCoordinator.getSheetDataPiecesForTesting();
+    }
+
+    @Test
+    public void testCreatesValidTab() {
+        KeyboardAccessoryData.Tab tab = mCoordinator.getTab();
+        assertNotNull(tab);
+        assertNotNull(tab.getIcon());
+        assertNotNull(tab.getListener());
+    }
+
+    @Test
+    public void testSetsViewAdapterOnTabCreation() {
+        when(mMockView.getParent()).thenReturn(mMockView);
+        KeyboardAccessoryData.Tab tab = mCoordinator.getTab();
+        assertNotNull(tab);
+        assertNotNull(tab.getListener());
+        tab.getListener().onTabCreated(mMockView);
+        verify(mMockView).setAdapter(any());
+    }
+
+    @Test
+    public void testModelNotifiesAboutTabDataChangedByProvider() {
+        final PropertyProvider<AccessorySheetData> testProvider = new PropertyProvider<>();
+
+        mSheetDataPieces.addObserver(mMockItemListObserver);
+        mCoordinator.registerDataProvider(testProvider);
+
+        // If the coordinator receives a set of initial items, the model should report an insertion.
+        testProvider.notifyObservers(
+                new AccessorySheetData(AccessoryTabType.CREDIT_CARDS, "Payments"));
+        verify(mMockItemListObserver).onItemRangeInserted(mSheetDataPieces, 0, 1);
+        assertThat(mSheetDataPieces.size(), is(1));
+
+        // If the coordinator receives a new set of items, the model should report a change.
+        testProvider.notifyObservers(
+                new AccessorySheetData(AccessoryTabType.CREDIT_CARDS, "Other Payments"));
+        verify(mMockItemListObserver).onItemRangeChanged(mSheetDataPieces, 0, 1, null);
+        assertThat(mSheetDataPieces.size(), is(1));
+
+        // If the coordinator receives an empty set of items, the model should report a deletion.
+        testProvider.notifyObservers(null);
+        verify(mMockItemListObserver).onItemRangeRemoved(mSheetDataPieces, 0, 1);
+        assertThat(mSheetDataPieces.size(), is(0));
+
+        // There should be no notification if no item are reported repeatedly.
+        testProvider.notifyObservers(null);
+        verifyNoMoreInteractions(mMockItemListObserver);
+    }
+
+    @Test
+    public void testSplitsTabDataToList() {
+        final PropertyProvider<AccessorySheetData> testProvider = new PropertyProvider<>();
+        final AccessorySheetData testData =
+                new AccessorySheetData(AccessoryTabType.CREDIT_CARDS, "Payments");
+        testData.getUserInfoList().add(new UserInfo("", null));
+        testData.getUserInfoList().get(0).addField(
+                new UserInfoField("Todd", "Todd", "", false, field -> {}));
+        testData.getUserInfoList().get(0).addField(
+                new UserInfoField("**** 9219", "**** 9219", "", true, field -> {}));
+
+        mCoordinator.registerDataProvider(testProvider);
+        testProvider.notifyObservers(testData);
+
+        assertThat(mSheetDataPieces.size(), is(1));
+        assertThat(getType(mSheetDataPieces.get(0)), is(CREDIT_CARD_INFO));
+        assertThat(mSheetDataPieces.get(0).getDataPiece(), is(testData.getUserInfoList().get(0)));
+    }
+
+    @Test
+    public void testUsesTitleElementForEmptyState() {
+        final PropertyProvider<AccessorySheetData> testProvider = new PropertyProvider<>();
+        final AccessorySheetData testData =
+                new AccessorySheetData(AccessoryTabType.CREDIT_CARDS, "Payments");
+        mCoordinator.registerDataProvider(testProvider);
+
+        testProvider.notifyObservers(testData);
+
+        assertThat(mSheetDataPieces.size(), is(1));
+        assertThat(getType(mSheetDataPieces.get(0)), is(TITLE));
+        assertThat(mSheetDataPieces.get(0).getDataPiece(), is(equalTo("Payments")));
+
+        // As soon UserInfo is available, discard the title.
+        testData.getUserInfoList().add(new UserInfo("", null));
+        testData.getUserInfoList().get(0).addField(
+                new UserInfoField("Todd", "Todd", "", false, field -> {}));
+        testData.getUserInfoList().get(0).addField(
+                new UserInfoField("**** 9219", "**** 9219", "", true, field -> {}));
+        testProvider.notifyObservers(testData);
+
+        assertThat(mSheetDataPieces.size(), is(1));
+        assertThat(getType(mSheetDataPieces.get(0)), is(CREDIT_CARD_INFO));
+    }
+
+    @Test
+    public void testRecordsNoSuggestionsImpressionsWithoutInteractiveElements() {
+        final PropertyProvider<AccessorySheetData> testProvider = new PropertyProvider<>();
+        mCoordinator.registerDataProvider(testProvider);
+        assertThat(RecordHistogram.getHistogramTotalCountForTesting(
+                           UMA_KEYBOARD_ACCESSORY_SHEET_SUGGESTIONS),
+                is(0));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.CREDIT_CARDS, 0), is(0));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ALL, 0), is(0));
+
+        // If the tab is shown without interactive item, log "0" samples.
+        AccessorySheetData accessorySheetData =
+                new AccessorySheetData(AccessoryTabType.CREDIT_CARDS, "Payments");
+        testProvider.notifyObservers(accessorySheetData);
+        mCoordinator.onTabShown();
+
+        assertThat(getSuggestionsImpressions(AccessoryTabType.CREDIT_CARDS, 0), is(1));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ALL, 0), is(1));
+    }
+
+    @Test
+    public void testRecordsSelectableSuggestionsImpressionsWhenShown() {
+        final PropertyProvider<AccessorySheetData> testProvider = new PropertyProvider<>();
+        mCoordinator.registerDataProvider(testProvider);
+        assertThat(RecordHistogram.getHistogramTotalCountForTesting(
+                           UMA_KEYBOARD_ACCESSORY_SHEET_SUGGESTIONS),
+                is(0));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.CREDIT_CARDS, 1), is(0));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ALL, 1), is(0));
+
+        // Add only two interactive items - the third one should not be recorded.
+        AccessorySheetData accessorySheetData =
+                new AccessorySheetData(AccessoryTabType.CREDIT_CARDS, "Payments");
+        accessorySheetData.getUserInfoList().add(new UserInfo("", null));
+        accessorySheetData.getUserInfoList().get(0).addField(
+                new UserInfoField("Todd Tester", "Todd Tester", "0", false, result -> {}));
+        accessorySheetData.getUserInfoList().get(0).addField(
+                new UserInfoField("**** 9219", "Card for Todd Tester", "1", false, result -> {}));
+        accessorySheetData.getUserInfoList().get(0).addField(
+                new UserInfoField("Unselectable", "Unselectable", "-1", false, null));
+        testProvider.notifyObservers(accessorySheetData);
+        mCoordinator.onTabShown();
+
+        assertThat(getSuggestionsImpressions(AccessoryTabType.CREDIT_CARDS, 2), is(1));
+        assertThat(getSuggestionsImpressions(AccessoryTabType.ALL, 2), is(1));
+    }
+
+    private int getSuggestionsImpressions(@AccessoryTabType int type, int sample) {
+        return RecordHistogram.getHistogramValueCountForTesting(
+                getHistogramForType(UMA_KEYBOARD_ACCESSORY_SHEET_SUGGESTIONS, type), sample);
+    }
+
+    private void setAutofillFeature(boolean enabled) {
+        HashMap<String, Boolean> features = new HashMap<>();
+        features.put(ChromeFeatureList.AUTOFILL_KEYBOARD_ACCESSORY, enabled);
+        ChromeFeatureList.setTestFeatures(features);
+    }
+}
diff --git a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetControllerTest.java b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetControllerTest.java
index 9494ca8..f2d01868 100644
--- a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetControllerTest.java
+++ b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetControllerTest.java
@@ -9,6 +9,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
@@ -21,6 +22,7 @@
 import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.Type.TITLE;
 import static org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece.getType;
 
+import android.graphics.drawable.Drawable;
 import android.support.v7.widget.RecyclerView;
 
 import org.junit.Before;
@@ -75,6 +77,7 @@
         ShadowRecordHistogram.reset();
         MockitoAnnotations.initMocks(this);
         mocker.mock(RecordHistogramJni.TEST_HOOKS, mMockRecordHistogramNatives);
+        AccessorySheetTabCoordinator.IconProvider.setIconForTesting(mock(Drawable.class));
         mCoordinator = new PasswordAccessorySheetCoordinator(RuntimeEnvironment.application, null);
         assertNotNull(mCoordinator);
         mSheetDataPieces = mCoordinator.getSheetDataPiecesForTesting();
diff --git a/chrome/android/features/start_surface/internal/dummy/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java b/chrome/android/features/start_surface/internal/dummy/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java
index 6fd2e66..9a99a5c 100644
--- a/chrome/android/features/start_surface/internal/dummy/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java
+++ b/chrome/android/features/start_surface/internal/dummy/java/src/org/chromium/chrome/features/start_surface/ExploreSurfaceCoordinator.java
@@ -7,10 +7,29 @@
 import android.view.ViewGroup;
 
 import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.feed.FeedSurfaceCoordinator;
 import org.chromium.ui.modelutil.PropertyModel;
 
 /** The dummy coordinator when feed is not enabled ('src/components/feed/features.gni'). */
 class ExploreSurfaceCoordinator {
-    ExploreSurfaceCoordinator(ChromeActivity activity, ViewGroup parentView,
-            int bottomControlsHeight, PropertyModel containerPropertyModel) {}
+    ExploreSurfaceCoordinator(
+            ChromeActivity activity, ViewGroup parentView, PropertyModel containerPropertyModel) {}
+
+    /**
+     * Gets the {@link FeedSurfaceCreator}.
+     * @return the {@link FeedSurfaceCreator}.
+     */
+    FeedSurfaceCreator getFeedSurfaceCreator() {
+        return null;
+    }
+
+    /** Interface to create {@link FeedSurfaceCoordinator} */
+    interface FeedSurfaceCreator {
+        /**
+         * Creates the {@link FeedSurfaceCoordinator} for the specified mode.
+         * @param isIncognito Whether it is in incognito mode.
+         * @return The {@link FeedSurfaceCoordinator}.
+         */
+        FeedSurfaceCoordinator createFeedSurfaceCoordinator(boolean isIncognito);
+    }
 }
\ No newline at end of file
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java
index 349da11..7abaef6 100644
--- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java
+++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLayout.java
@@ -110,7 +110,7 @@
         // The Tab-to-GTS animation is done, and it's time to renew the thumbnail without causing
         // janky frames.
         // When animation is off, the thumbnail is already updated when showing the GTS.
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)) {
+        if (FeatureUtilities.isTabToGtsAnimationEnabled()) {
             Tab currentTab = mTabModelSelector.getCurrentTab();
             if (currentTab != null) mTabContentManager.cacheTabThumbnail(currentTab);
         }
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java
index 71c4d7c9..11588d9 100644
--- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java
+++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutPerfTest.java
@@ -35,6 +35,7 @@
 import org.chromium.chrome.browser.compositor.layouts.Layout;
 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tabmodel.TabSelectionType;
 import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.tab_ui.R;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -42,6 +43,7 @@
 import org.chromium.chrome.test.util.ChromeTabUtils;
 import org.chromium.chrome.test.util.MenuUtils;
 import org.chromium.chrome.test.util.browser.Features;
+import org.chromium.content_public.browser.test.util.Criteria;
 import org.chromium.content_public.browser.test.util.CriteriaHelper;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.content_public.browser.test.util.WebContentsUtils;
@@ -201,12 +203,44 @@
                                       .getTabModelSelector()
                                       .getCurrentModel()
                                       .getTabAt(i);
+
+            boolean fixPendingReadbacks = mActivityTestRule.getActivity()
+                                                  .getTabContentManager()
+                                                  .getPendingReadbacksForTesting()
+                    != 0;
+
+            // When there are pending readbacks due to detached Tabs, try to fix it by switching
+            // back to that tab.
+            if (fixPendingReadbacks) {
+                int lastIndex = i;
+                // clang-format off
+                TestThreadUtils.runOnUiThreadBlocking(() ->
+                        mActivityTestRule.getActivity().getCurrentTabModel().setIndex(
+                                lastIndex, TabSelectionType.FROM_USER)
+                );
+                // clang-format on
+            }
             checkThumbnailsExist(previousTab);
+            if (fixPendingReadbacks) {
+                int currentIndex = i + 1;
+                // clang-format off
+                TestThreadUtils.runOnUiThreadBlocking(() ->
+                        mActivityTestRule.getActivity().getCurrentTabModel().setIndex(
+                                currentIndex, TabSelectionType.FROM_USER)
+                );
+                // clang-format on
+            }
         }
         ChromeTabUtils.waitForTabPageLoaded(mActivityTestRule.getActivity().getActivityTab(), null,
                 null, WAIT_TIMEOUT_SECONDS * 10);
         assertEquals(
                 numTabs, mActivityTestRule.getActivity().getTabModelSelector().getTotalTabCount());
+
+        // clang-format off
+        CriteriaHelper.pollUiThread(Criteria.equals(0, () ->
+            mActivityTestRule.getActivity().getTabContentManager().getPendingReadbacksForTesting()
+        ));
+        // clang-format on
     }
 
     private void reportTabToGridPerf(String fromUrl, String description)
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
index 55e2cb2a..8af542c 100644
--- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
+++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceLayoutTest.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.features.start_surface;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
 
 import static org.chromium.base.test.util.CallbackHelper.WAIT_TIMEOUT_SECONDS;
@@ -192,11 +193,21 @@
 
     /**
      * Make Chrome have {@code numTabs} or Tabs with {@code url} loaded.
+     * @see #prepareTabs(int, String, boolean)
+     */
+    private void prepareTabs(int numTabs, @Nullable String url) throws InterruptedException {
+        prepareTabs(numTabs, url, true);
+    }
+
+    /**
+     * Make Chrome have {@code numTabs} or Tabs with {@code url} loaded.
      * @param numTabs The number of tabs we expect after finishing
      * @param url The URL to load. Skip loading when null, but the thumbnail for the NTP might not
      *            be saved.
+     * @param waitForLoading Whether wait for URL loading.
      */
-    private void prepareTabs(int numTabs, @Nullable String url) throws InterruptedException {
+    private void prepareTabs(int numTabs, @Nullable String url, boolean waitForLoading)
+            throws InterruptedException {
         assertTrue(numTabs >= 1);
         assertEquals(1, mActivityTestRule.getActivity().getTabModelSelector().getTotalTabCount());
 
@@ -205,6 +216,7 @@
             MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(),
                     mActivityTestRule.getActivity(), org.chromium.chrome.R.id.new_tab_menu_id);
             if (url != null) mActivityTestRule.loadUrl(url);
+            if (!waitForLoading) continue;
 
             Tab previousTab = mActivityTestRule.getActivity()
                                       .getTabModelSelector()
@@ -243,11 +255,15 @@
         assertEquals(
                 numTabs, mActivityTestRule.getActivity().getTabModelSelector().getTotalTabCount());
 
-        // clang-format off
-        CriteriaHelper.pollUiThread(Criteria.equals(0, () ->
-            mActivityTestRule.getActivity().getTabContentManager().getPendingReadbacksForTesting()
-        ));
-        // clang-format on
+        if (waitForLoading) {
+            // clang-format off
+            CriteriaHelper.pollUiThread(Criteria.equals(0, () ->
+                mActivityTestRule.getActivity()
+                        .getTabContentManager()
+                        .getPendingReadbacksForTesting()
+            ));
+            // clang-format on
+        }
     }
 
     private void testTabToGrid(String fromUrl) throws InterruptedException {
@@ -294,6 +310,39 @@
 
     @Test
     @MediumTest
+    @DisabledTest(message = "crbug.com/986047. This works on emulators but not on real devices.")
+    public void testGridToTabToCurrentLiveDetached() throws Exception {
+        for (int i = 0; i < 10; i++) {
+            // Quickly create some tabs, navigate to web pages, and don't wait for thumbnail
+            // capturing.
+            prepareTabs(2, mUrl, false);
+            // Hopefully we are in a state where some pending readbacks are stuck because their tab
+            // is not attached to the view.
+            if (mActivityTestRule.getActivity()
+                            .getTabContentManager()
+                            .getPendingReadbacksForTesting()
+                    > 0)
+                break;
+
+            // Restart Chrome.
+            // Although we're destroying the activity, the Application will still live on since its
+            // in the same process as this test.
+            TestThreadUtils.runOnUiThreadBlocking(
+                    () -> mActivityTestRule.getActivity().getTabModelSelector().closeAllTabs());
+            ApplicationTestUtils.finishActivity(mActivityTestRule.getActivity());
+            mActivityTestRule.startMainActivityOnBlankPage();
+            Assert.assertEquals(1, mActivityTestRule.tabsCount(false));
+        }
+        assertNotEquals(0,
+                mActivityTestRule.getActivity()
+                        .getTabContentManager()
+                        .getPendingReadbacksForTesting());
+        // The last tab should still get thumbnail even though readbacks for other tabs are stuck.
+        testGridToTab(false, false);
+    }
+
+    @Test
+    @MediumTest
     @Features.EnableFeatures(ChromeFeatureList.TAB_TO_GTS_ANIMATION + "<Study")
     @DisabledTest(message = "crbug.com/981409")
     public void testGridToTabToCurrentLiveWithAnimation() throws InterruptedException {
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java
index cf97591..ae08498 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java
@@ -157,6 +157,14 @@
     @Override
     @NonNull
     public Rect getThumbnailLocationOfCurrentTab(boolean forceUpdate) {
+        if (mTabGridDialogCoordinator != null && mTabGridDialogCoordinator.isVisible()) {
+            assert forceUpdate;
+            Rect thumbnail = mTabGridDialogCoordinator.getGlobalLocationOfCurrentThumbnail();
+            // Adjust to the relative coordinate.
+            Rect root = mTabGridCoordinator.getRecyclerViewLocation();
+            thumbnail.offset(-root.left, -root.top);
+            return thumbnail;
+        }
         if (forceUpdate) mTabGridCoordinator.updateThumbnailLocation();
         return mTabGridCoordinator.getThumbnailLocationOfCurrentTab();
     }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java
index 83b78b6..81e6255 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java
@@ -495,6 +495,7 @@
         mOnTabSelectingListener = listener;
     }
 
+    // GridCardOnClickListenerProvider implementation.
     @Override
     @Nullable
     public TabListMediator.TabActionListener openTabGridDialog(Tab tab) {
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java
index ab38258..a57c3c4 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogCoordinator.java
@@ -5,6 +5,8 @@
 package org.chromium.chrome.browser.tasks.tab_management;
 
 import android.content.Context;
+import android.graphics.Rect;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 import org.chromium.chrome.browser.compositor.CompositorViewHolder;
@@ -74,6 +76,19 @@
         }
     }
 
+    boolean isVisible() {
+        return mMediator.isVisible();
+    }
+
+    @NonNull
+    Rect getGlobalLocationOfCurrentThumbnail() {
+        mTabListCoordinator.updateThumbnailLocation();
+        Rect thumbnail = mTabListCoordinator.getThumbnailLocationOfCurrentTab();
+        Rect recyclerViewLocation = mTabListCoordinator.getRecyclerViewLocation();
+        thumbnail.offset(recyclerViewLocation.left, recyclerViewLocation.top);
+        return thumbnail;
+    }
+
     TabGridDialogMediator.ResetHandler getResetHandler() {
         return this;
     }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
index f39899c..8c8eac51 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java
@@ -20,6 +20,7 @@
 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
 import org.chromium.chrome.browser.tabmodel.TabSelectionType;
 import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter;
+import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.browser.util.UrlConstants;
 import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.content_public.browser.LoadUrlParams;
@@ -159,11 +160,13 @@
             updateDialog();
             mModel.set(TabGridSheetProperties.IS_DIALOG_VISIBLE, true);
         } else {
-            int index = filter.indexOf(
-                    TabModelUtils.getTabById(mTabModelSelector.getCurrentModel(), mCurrentTabId));
-            if (mAnimationOriginProvider != null && index != TabModel.INVALID_TAB_INDEX) {
-                Rect rect = mAnimationOriginProvider.getAnimationOriginRect(index);
-                mModel.set(TabGridSheetProperties.ANIMATION_SOURCE_RECT, rect);
+            if (!FeatureUtilities.isTabToGtsAnimationEnabled()) {
+                int index = filter.indexOf(TabModelUtils.getTabById(
+                        mTabModelSelector.getCurrentModel(), mCurrentTabId));
+                if (mAnimationOriginProvider != null && index != TabModel.INVALID_TAB_INDEX) {
+                    Rect rect = mAnimationOriginProvider.getAnimationOriginRect(index);
+                    mModel.set(TabGridSheetProperties.ANIMATION_SOURCE_RECT, rect);
+                }
             }
             mModel.set(TabGridSheetProperties.IS_DIALOG_VISIBLE, false);
         }
@@ -179,10 +182,12 @@
         }
     }
 
+    boolean isVisible() {
+        return mModel.get(TabGridSheetProperties.IS_DIALOG_VISIBLE);
+    }
+
     private void updateGridTabSwitcher() {
-        if (!mModel.get(TabGridSheetProperties.IS_DIALOG_VISIBLE)
-                || mGridTabSwitcherResetHandler == null)
-            return;
+        if (!isVisible() || mGridTabSwitcherResetHandler == null) return;
         mGridTabSwitcherResetHandler.resetWithTabList(
                 mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(), false);
     }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParent.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParent.java
index f8754df..3f66cc0 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParent.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParent.java
@@ -26,6 +26,7 @@
 
 import org.chromium.base.ContextUtils;
 import org.chromium.base.VisibleForTesting;
+import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.tab_ui.R;
 import org.chromium.ui.interpolators.BakedBezierInterpolator;
@@ -40,6 +41,7 @@
  */
 public class TabGridDialogParent {
     private static final int DIALOG_ANIMATION_DURATION = 300;
+    private static final int DIALOG_QUICK_FADEOUT_DURATION = 50;
     @IntDef({UngroupBarStatus.SHOW, UngroupBarStatus.HIDE, UngroupBarStatus.HOVERED})
     @Retention(RetentionPolicy.SOURCE)
     public @interface UngroupBarStatus {
@@ -128,7 +130,9 @@
 
         mBasicFadeOut = ObjectAnimator.ofFloat(mDialogContainerView, View.ALPHA, 1f, 0f);
         mBasicFadeOut.setInterpolator(BakedBezierInterpolator.FADE_OUT_CURVE);
-        mBasicFadeOut.setDuration(DIALOG_ANIMATION_DURATION);
+        mBasicFadeOut.setDuration(FeatureUtilities.isTabToGtsAnimationEnabled()
+                        ? DIALOG_QUICK_FADEOUT_DURATION
+                        : DIALOG_ANIMATION_DURATION);
 
         mShowDialogAnimationListener = new AnimatorListenerAdapter() {
             @Override
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
index ef24b573..2bb21e4c 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
@@ -189,10 +189,7 @@
             touchHelper.attachToRecyclerView(mRecyclerView);
             mMediator.registerOrientationListener(
                     (GridLayoutManager) mRecyclerView.getLayoutManager());
-        }
 
-        if (actionOnRelatedTabs) {
-            // Only do this for Grid Tab Switcher.
             // TODO(crbug.com/964406): unregister the listener when we don't need it.
             mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
                     this::updateThumbnailLocation);
@@ -205,10 +202,22 @@
         return mThumbnailLocationOfCurrentTab;
     }
 
-    void updateThumbnailLocation() {
+    @NonNull
+    Rect getRecyclerViewLocation() {
+        Rect recyclerViewRect = new Rect();
+        mRecyclerView.getGlobalVisibleRect(recyclerViewRect);
+        return recyclerViewRect;
+    }
+
+    /**
+     * Update the location of the selected thumbnail.
+     * @return Whether a valid {@link Rect} is obtained.
+     */
+    boolean updateThumbnailLocation() {
         Rect rect = mRecyclerView.getRectOfCurrentThumbnail(mMediator.indexOfSelected());
-        if (rect == null) return;
+        if (rect == null) return false;
         mThumbnailLocationOfCurrentTab.set(rect);
+        return true;
     }
 
     /**
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
index ff80cf2..af39e359 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -58,8 +58,6 @@
  * TODO(yusufo): Move some of the logic here to a parent component to make the above true.
  */
 class TabListMediator {
-    private static final int INVALID_INDEX = -1;
-
     private boolean mVisible;
     private boolean mShownIPH;
 
@@ -216,21 +214,18 @@
     private boolean mActionsOnAllRelatedTabs;
     private ComponentCallbacks mComponentCallbacks;
     private TabGridItemTouchHelperCallback mTabGridItemTouchHelperCallback;
-    private int mNextTabIndex = INVALID_INDEX;
+    private int mNextTabId = Tab.INVALID_TAB_ID;
 
     private final TabActionListener mTabSelectedListener = new TabActionListener() {
         @Override
         public void run(int tabId) {
-            Tab currentTab = mTabModelSelector.getCurrentTab();
-
-            mNextTabIndex = TabModelUtils.getTabIndexById(
-                    mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(),
-                    tabId);
-
-            Tab newlySelectedTab =
-                    TabModelUtils.getTabById(mTabModelSelector.getCurrentModel(), tabId);
+            mNextTabId = tabId;
 
             if (!mActionsOnAllRelatedTabs) {
+                Tab currentTab = mTabModelSelector.getCurrentTab();
+                Tab newlySelectedTab =
+                        TabModelUtils.getTabById(mTabModelSelector.getCurrentModel(), tabId);
+
                 // We filtered the tab switching related metric for components that takes actions on
                 // all related tabs (e.g. GTS) because that component can switch to different
                 // TabModel before switching tabs, while this class only contains information for
@@ -372,7 +367,7 @@
         mTabModelObserver = new EmptyTabModelObserver() {
             @Override
             public void didSelectTab(Tab tab, int type, int lastId) {
-                mNextTabIndex = INVALID_INDEX;
+                mNextTabId = Tab.INVALID_TAB_ID;
                 if (tab.getId() == lastId) return;
                 int oldIndex = mModel.indexFromId(lastId);
                 if (oldIndex != TabModel.INVALID_TAB_INDEX) {
@@ -640,21 +635,27 @@
                 .getRelatedTabList(id);
     }
 
-    private void onTabAdded(Tab tab, boolean onlyShowRelatedTabs) {
+    private int getIndexOfTab(Tab tab, boolean onlyShowRelatedTabs) {
         int index;
         if (onlyShowRelatedTabs) {
-            if (mModel.size() == 0) return;
+            if (mModel.size() == 0) return TabList.INVALID_TAB_INDEX;
             List<Tab> related = getRelatedTabsForId(mModel.get(0).get(TabProperties.TAB_ID));
             index = related.indexOf(tab);
-            if (index == -1) return;
+            if (index == -1) return TabList.INVALID_TAB_INDEX;
         } else {
             index = TabModelUtils.getTabIndexById(
                     mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter(),
                     tab.getId());
             // TODO(wychen): the title (tab count in the group) is wrong when it's not the last
             //  tab added in the group.
-            if (index == TabList.INVALID_TAB_INDEX) return;
         }
+        return index;
+    }
+
+    private void onTabAdded(Tab tab, boolean onlyShowRelatedTabs) {
+        int index = getIndexOfTab(tab, onlyShowRelatedTabs);
+        if (index == TabList.INVALID_TAB_INDEX) return;
+
         addTabInfoToModel(tab, index, mTabModelSelector.getCurrentTab() == tab);
     }
 
@@ -915,7 +916,12 @@
     }
 
     int indexOfSelected() {
-        if (mNextTabIndex != INVALID_INDEX) return mNextTabIndex;
+        if (mNextTabId != Tab.INVALID_TAB_ID) {
+            return getIndexOfTab(
+                    TabModelUtils.getTabById(mTabModelSelector.getCurrentModel(), mNextTabId),
+                    !mActionsOnAllRelatedTabs);
+        }
+
         return mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter().index();
     }
 
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParentTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParentTest.java
index 6c6a695f..eba2acb 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParentTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParentTest.java
@@ -18,6 +18,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.tab_ui.R;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
@@ -43,6 +44,7 @@
     @Override
     public void setUpTest() throws Exception {
         super.setUpTest();
+        FeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(true);
 
         mDummyParent = new FrameLayout(getActivity());
         mTabGridDialogParent = new TabGridDialogParent(getActivity(), mDummyParent);
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java
index 6b15153..64e1f79 100644
--- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java
+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java
@@ -45,6 +45,7 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
 import org.chromium.chrome.browser.tabmodel.TabSelectionType;
 import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter;
+import org.chromium.chrome.browser.util.FeatureUtilities;
 import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.content_public.browser.LoadUrlParams;
@@ -351,7 +352,26 @@
     }
 
     @Test
-    public void hideDialog() {
+    public void hideDialog_Animation() {
+        FeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(true);
+
+        // Mock that the dialog is showing and animation source Rect is null.
+        mModel.set(TabGridSheetProperties.IS_DIALOG_VISIBLE, true);
+        mModel.set(TabGridSheetProperties.ANIMATION_SOURCE_RECT, null);
+
+        mMediator.onReset(null);
+
+        assertThat(mModel.get(TabGridSheetProperties.IS_DIALOG_VISIBLE), equalTo(false));
+        // Animation source Rect should be updated with specific Rect.
+        assertThat(mModel.get(TabGridSheetProperties.ANIMATION_SOURCE_RECT), equalTo(null));
+
+        FeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(null);
+    }
+
+    @Test
+    public void hideDialog_NoAnimation() {
+        FeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(false);
+
         // Mock that the dialog is showing and animation source Rect is null.
         mModel.set(TabGridSheetProperties.IS_DIALOG_VISIBLE, true);
         mModel.set(TabGridSheetProperties.ANIMATION_SOURCE_RECT, null);
@@ -361,6 +381,8 @@
         assertThat(mModel.get(TabGridSheetProperties.IS_DIALOG_VISIBLE), equalTo(false));
         // Animation source Rect should be updated with specific Rect.
         assertThat(mModel.get(TabGridSheetProperties.ANIMATION_SOURCE_RECT), equalTo(mRect));
+
+        FeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(null);
     }
 
     @Test
diff --git a/chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
new file mode 100644
index 0000000..7e8b4dc
--- /dev/null
+++ b/chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -0,0 +1,12 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.feed;
+
+/**
+ * Provides a surface that displays an interest feed rendered list of content suggestions.
+ */
+public class FeedSurfaceCoordinator {
+    public void destroy() {}
+}
diff --git a/chrome/android/feed/feed_java_sources.gni b/chrome/android/feed/feed_java_sources.gni
index 3d985d4d..182d4a1 100644
--- a/chrome/android/feed/feed_java_sources.gni
+++ b/chrome/android/feed/feed_java_sources.gni
@@ -74,6 +74,7 @@
     "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedAppLifecycle.java",
     "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java",
     "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedProcessScopeFactory.java",
+    "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java",
     "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/TestNetworkClient.java",
   ]
   feed_srcjar_deps = []
diff --git a/chrome/android/java/DEPS b/chrome/android/java/DEPS
index 3cdce56..37e9110 100644
--- a/chrome/android/java/DEPS
+++ b/chrome/android/java/DEPS
@@ -1,10 +1,10 @@
 include_rules = [
   "-chrome/android/features/keyboard_accessory/internal",
 
+  "+chrome/browser/ui/android/widget",
   "+chrome/lib/lifecycle/public",
   "+chrome/lib/image_fetcher/public",
   "+chrome/lib/util/public",
-  "+chrome/lib/ui/widget/public",
   "+components/embedder_support/android",
   "+components/autofill/android/java/src/org/chromium/components/autofill",
   "+components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler",
diff --git a/chrome/android/java/res/layout/selectable_list_layout.xml b/chrome/android/java/res/layout/selectable_list_layout.xml
index 92c9508f..42472b29 100644
--- a/chrome/android/java/res/layout/selectable_list_layout.xml
+++ b/chrome/android/java/res/layout/selectable_list_layout.xml
@@ -65,7 +65,7 @@
             android:layout_gravity="center" />
     </org.chromium.chrome.browser.gesturenav.HistoryNavigationLayout>
 
-    <org.chromium.chrome.lib.browser.widget.FadingShadowView
+    <org.chromium.chrome.browser.ui.widget.FadingShadowView
         android:id="@+id/shadow"
         android:layout_width="match_parent"
         android:layout_height="@dimen/action_bar_shadow_height"
diff --git a/chrome/android/java/res_download/layout/download_home_toolbar.xml b/chrome/android/java/res_download/layout/download_home_toolbar.xml
index 0a87793..2b6a684 100644
--- a/chrome/android/java/res_download/layout/download_home_toolbar.xml
+++ b/chrome/android/java/res_download/layout/download_home_toolbar.xml
@@ -30,7 +30,7 @@
 
     </org.chromium.chrome.browser.download.home.toolbar.DownloadHomeToolbar>
 
-    <org.chromium.chrome.lib.browser.widget.FadingShadowView
+    <org.chromium.chrome.browser.ui.widget.FadingShadowView
         android:id="@+id/shadow"
         android:layout_width="match_parent"
         android:layout_height="@dimen/action_bar_shadow_height"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java
index 3698da5..833c898 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java
@@ -42,12 +42,13 @@
     @Location
     private int mLocation;
 
-    @IntDef({Location.TOP, Location.MIDDLE, Location.BOTTOM})
+    @IntDef({Location.TOP, Location.MIDDLE, Location.BOTTOM, Location.SOLO})
     @Retention(RetentionPolicy.SOURCE)
     public @interface Location {
         int TOP = 0;
         int MIDDLE = 1;
         int BOTTOM = 2;
+        int SOLO = 3;
     }
 
     /**
@@ -153,11 +154,14 @@
                         new Item(getContext(), R.string.bookmark_item_delete, true)));
         if (mReorderBookmarksEnabled
                 && mDelegate.getCurrentState() == BookmarkUIState.STATE_FOLDER) {
-            if (mLocation != Location.TOP) {
-                menuItems.add(new Item(getContext(), R.string.menu_item_move_up, true));
-            }
-            if (mLocation != Location.BOTTOM) {
-                menuItems.add(new Item(getContext(), R.string.menu_item_move_down, true));
+            // Only add move up / move down buttons if there is more than 1 item
+            if (mLocation != Location.SOLO) {
+                if (mLocation != Location.TOP) {
+                    menuItems.add(new Item(getContext(), R.string.menu_item_move_up, true));
+                }
+                if (mLocation != Location.BOTTOM) {
+                    menuItems.add(new Item(getContext(), R.string.menu_item_move_down, true));
+                }
             }
         }
         return menuItems.toArray(new Item[menuItems.size()]);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
index aeb001e..2fc5d65 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReorderBookmarkItemsAdapter.java
@@ -485,7 +485,9 @@
     }
 
     private @Location int getLocationFromPosition(int position) {
-        if (position == getBookmarkItemStartIndex()) {
+        if (position == getBookmarkItemStartIndex() && position == getBookmarkItemEndIndex()) {
+            return Location.SOLO;
+        } else if (position == getBookmarkItemStartIndex()) {
             return Location.TOP;
         } else if (position == getBookmarkItemEndIndex()) {
             return Location.BOTTOM;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java
index 272d3bd..7e88948 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java
@@ -194,7 +194,7 @@
         Origin origin = new Origin(url);
 
         // Trusted Web Activities only work with https so we can shortcut here.
-        if (!origin.uri().getScheme().equals(UrlConstants.HTTPS_SCHEME)) return null;
+        if (!UrlConstants.HTTPS_SCHEME.equals(origin.uri().getScheme())) return null;
 
         Set<String> verifiedPackages = TrustedWebActivityServiceConnectionManager
                 .getVerifiedPackages(appContext, origin.toString());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/toolbar/ToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/toolbar/ToolbarCoordinator.java
index 6b652006..22861b5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/toolbar/ToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/toolbar/ToolbarCoordinator.java
@@ -15,12 +15,12 @@
 import org.chromium.chrome.browser.download.home.list.ListItem;
 import org.chromium.chrome.browser.download.home.metrics.UmaUtils;
 import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.ui.widget.FadingShadow;
+import org.chromium.chrome.browser.ui.widget.FadingShadowView;
 import org.chromium.chrome.browser.widget.selection.SelectableListToolbar;
 import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
 import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver;
 import org.chromium.chrome.download.R;
-import org.chromium.chrome.lib.browser.widget.FadingShadow;
-import org.chromium.chrome.lib.browser.widget.FadingShadowView;
 
 import java.util.List;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java
index db2de23..6f03bdc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/TabbedActionDelegate.java
@@ -7,6 +7,7 @@
 import android.os.Handler;
 
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabAssociatedApp;
 
 /**
  * Implementation of {@link NavigationHandler#ActionDelegate} that works with
@@ -40,6 +41,8 @@
 
     @Override
     public boolean willBackExitApp() {
-        return !mTab.canGoBack() && !mTab.getActivity().backShouldCloseTab(mTab);
+        return !mTab.canGoBack()
+                && (!mTab.getActivity().backShouldCloseTab(mTab)
+                        || TabAssociatedApp.isOpenedFromExternalApp(mTab));
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/language/LanguageAskPrompt.java b/chrome/android/java/src/org/chromium/chrome/browser/language/LanguageAskPrompt.java
index e28a11b..f0486c74 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/language/LanguageAskPrompt.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/language/LanguageAskPrompt.java
@@ -37,6 +37,7 @@
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.TreeSet;
 
 /**
  * Implements a modal dialog that prompts the user about the languages they can read. Displayed
@@ -264,7 +265,7 @@
      * mLanguagesUpdate, and by extension which languages were checked by the user in the prompt.
      */
     private void saveLanguages() {
-        HashSet<String> languagesToAdd = new HashSet<String>(mLanguagesUpdate);
+        TreeSet<String> languagesToAdd = new TreeSet<String>(mLanguagesUpdate);
         languagesToAdd.removeAll(mInitialLanguages);
 
         for (String language : languagesToAdd) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/native_page/OWNERS
index ce4d924..ebf4d1e9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/OWNERS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/OWNERS
@@ -1,4 +1,4 @@
 twellington@chromium.org
 mdjones@chromium.org
 
-#COMPONENT: UI>Browser>Mobile
+# COMPONENT: UI>Browser>Mobile
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
index fde28cc..378c86a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -1000,8 +1000,6 @@
                 mShouldShowSearchEngineLogo, mIsSearchEngineGoogle, mSearchEngineUrl);
         mToolbarDataProvider.updateSearchEngineStatusIcon(
                 mShouldShowSearchEngineLogo, mIsSearchEngineGoogle, mSearchEngineUrl);
-
-        mStatusViewCoordinator.setShowIconsWhenUrlFocused(shouldShowSearchEngineLogo);
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
index 97af4dd6..d8619ae1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
@@ -65,6 +65,7 @@
         if (mShouldShowSearchEngineLogo) {
             mFirstVisibleFocusedView = findViewById(R.id.location_bar_status);
         }
+        mStatusViewCoordinator.setShowIconsWhenUrlFocused(shouldShowSearchEngineLogo);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SearchEngineLogoUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SearchEngineLogoUtils.java
index d9f20ab..3b16d93 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SearchEngineLogoUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SearchEngineLogoUtils.java
@@ -6,6 +6,7 @@
 
 import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.support.annotation.Nullable;
 
 import org.chromium.base.Callback;
 import org.chromium.chrome.R;
@@ -20,6 +21,7 @@
  * Collection of shared code for displaying search engine logos.
  */
 public class SearchEngineLogoUtils {
+    private static final String DUMMY_URL_QUERY = "replace_me";
     private static FaviconHelper sFaviconHelper;
 
     // Cache these values so they don't need to be recalculated.
@@ -43,11 +45,17 @@
     }
 
     /**
-     * @return The search URL of the current DSE.
+     * @return The search URL of the current DSE or null if one cannot be found.
      */
+    @Nullable
     public static String getSearchLogoUrl() {
-        return UrlUtilities.stripPath(
-                TemplateUrlServiceFactory.get().getDefaultSearchEngineTemplateUrl().getURL());
+        String logoUrlWithPath =
+                TemplateUrlServiceFactory.get().getUrlForSearchQuery(DUMMY_URL_QUERY);
+        if (logoUrlWithPath == null || !UrlUtilities.isHttpOrHttps(logoUrlWithPath)) {
+            return logoUrlWithPath;
+        }
+
+        return UrlUtilities.stripPath(logoUrlWithPath);
     }
 
     /**
@@ -63,12 +71,23 @@
         return sSearchEngineLogoTargetSizePixels;
     }
 
+    /**
+     * Get the search engine logo favicon. This can return a null bitmap under certain
+     * circumstances, such as: no logo url found, network/cache error, etc.
+     *
+     * @param profile The current profile.
+     * @param resources Provides access to Android resources.
+     * @param callback How the bitmap will be returned to the caller.
+     */
     public static void getSearchEngineLogoFavicon(
             Profile profile, Resources resources, Callback<Bitmap> callback) {
         if (sFaviconHelper == null) sFaviconHelper = new FaviconHelper();
 
-        boolean willReturn = sFaviconHelper.getLocalFaviconImageForURL(profile, getSearchLogoUrl(),
-                getSearchEngineLogoSizePixels(resources), (image, iconUrl) -> {
+        String logoUrl = getSearchLogoUrl();
+        if (logoUrl == null) callback.onResult(null);
+
+        boolean willReturn = sFaviconHelper.getLocalFaviconImageForURL(
+                profile, logoUrl, getSearchEngineLogoSizePixels(resources), (image, iconUrl) -> {
                     if (image == null) {
                         callback.onResult(image);
                         return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
index f90a462a..7a9a970 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
@@ -296,6 +296,7 @@
 
         mIsSearchEngineGoogle = isSearchEngineGoogle;
         mShouldShowSearchEngineLogo = shouldShowSearchEngineLogo;
+        updateLocationBarIcon();
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
index 65b49ad..7ef3970 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/ChromeGcmListenerService.java
@@ -28,7 +28,9 @@
 import org.chromium.components.background_task_scheduler.TaskInfo;
 import org.chromium.components.gcm_driver.GCMDriver;
 import org.chromium.components.gcm_driver.GCMMessage;
+import org.chromium.components.gcm_driver.InstanceIDFlags;
 import org.chromium.components.gcm_driver.LazySubscriptionsManager;
+import org.chromium.components.gcm_driver.SubscriptionFlagManager;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 
 /**
@@ -36,7 +38,6 @@
  */
 public class ChromeGcmListenerService extends GcmListenerService {
     private static final String TAG = "ChromeGcmListener";
-    private static final String SHARING_APP_ID = "com.google.chrome.sharing.fcm";
 
     @Override
     public void onCreate() {
@@ -98,13 +99,16 @@
      */
     private static boolean maybeBypassScheduler(GCMMessage message) {
         // Android only puts us on a whitelist for high priority messages.
-        if (message.getOriginalPriority() != GCMMessage.Priority.HIGH
-                || !SHARING_APP_ID.equals(message.getAppId())) {
+        if (message.getOriginalPriority() != GCMMessage.Priority.HIGH) {
             return false;
         }
 
-        // Receiving a high priority push message should put us in a whitelist to start
-        // background services.
+        final String subscriptionId = SubscriptionFlagManager.buildSubscriptionUniqueId(
+                message.getAppId(), message.getSenderId());
+        if (!SubscriptionFlagManager.hasFlags(subscriptionId, InstanceIDFlags.BYPASS_SCHEDULER)) {
+            return false;
+        }
+
         try {
             Context context = ContextUtils.getApplicationContext();
             Intent intent = new Intent(context, GCMBackgroundService.class);
@@ -121,57 +125,75 @@
     }
 
     /**
+     * Returns if the |message| is sent from a lazy subscription and we persist it to be delivered
+     * the next time Chrome is launched into foreground.
+     */
+    private static boolean maybePersistLazyMessage(GCMMessage message) {
+        if (ApplicationStatus.hasVisibleActivities()) {
+            return false;
+        }
+
+        final String subscriptionId = LazySubscriptionsManager.buildSubscriptionUniqueId(
+                message.getAppId(), message.getSenderId());
+        long time = SystemClock.elapsedRealtime();
+
+        boolean isSubscriptionLazy = LazySubscriptionsManager.isSubscriptionLazy(subscriptionId);
+        boolean isHighPriority = message.getOriginalPriority() == GCMMessage.Priority.HIGH;
+        // TODO(crbug.com/945402): Add metrics for the new high priority message logic.
+        boolean shouldPersistMessage = isSubscriptionLazy && !isHighPriority;
+        if (shouldPersistMessage) {
+            LazySubscriptionsManager.persistMessage(subscriptionId, message);
+        }
+
+        // Use {@link CachedMetrics} so this gets reported when native is
+        // loaded instead of calling native right away.
+        new CachedMetrics.TimesHistogramSample("PushMessaging.TimeToCheckIfSubscriptionLazy")
+                .record(SystemClock.elapsedRealtime() - time);
+
+        return shouldPersistMessage;
+    }
+
+    /**
+     * Schedules a background task via Job Scheduler to deliver the |message|. Delivery might get
+     * delayed by Android if the device is currently in doze mode.
+     */
+    private static void scheduleBackgroundTask(GCMMessage message) {
+        // TODO(peter): Add UMA for measuring latency introduced by the BackgroundTaskScheduler.
+        TaskInfo backgroundTask = TaskInfo.createOneOffTask(TaskIds.GCM_BACKGROUND_TASK_JOB_ID,
+                                                  GCMBackgroundTask.class, 0 /* immediately */)
+                                          .setExtras(message.toBundle())
+                                          .build();
+        BackgroundTaskSchedulerFactory.getScheduler().schedule(
+                ContextUtils.getApplicationContext(), backgroundTask);
+    }
+
+    /**
      * If Chrome is backgrounded, messages coming from lazy subscriptions are
      * persisted on disk and replayed next time Chrome is forgrounded. If Chrome is forgrounded or
      * if the message isn't coming from a lazy subscription, this method either schedules |message|
      * to be dispatched through the Job Scheduler, which we use on Android N and beyond, or
-     * immediately dispatches the message on other versions of Android. Must be called on the UI
-     * thread both for the BackgroundTaskScheduler and for dispatching the |message| to the
-     * GCMDriver.
+     * immediately dispatches the message on other versions of Android. Some subscriptions bypass
+     * the Job Scheduler and use Context#startService instead if the |message| has a high priority.
+     * Must be called on the UI thread both for the BackgroundTaskScheduler and for dispatching the
+     * |message| to the GCMDriver.
      */
     static void scheduleOrDispatchMessageToDriver(GCMMessage message) {
         ThreadUtils.assertOnUiThread();
-        final String subscriptionId = LazySubscriptionsManager.buildSubscriptionUniqueId(
-                message.getAppId(), message.getSenderId());
-        if (!ApplicationStatus.hasVisibleActivities()) {
-            boolean isSubscriptionLazy = false;
-            long time = SystemClock.elapsedRealtime();
-            // TODO(crbug.com/945402): Add metrics for the new high priority message logic.
-            if (LazySubscriptionsManager.isSubscriptionLazy(subscriptionId)
-                    && message.getOriginalPriority() != GCMMessage.Priority.HIGH) {
-                isSubscriptionLazy = true;
-                LazySubscriptionsManager.persistMessage(subscriptionId, message);
-            }
 
-            // Use {@link CachedMetrics} so this gets reported when native is
-            // loaded instead of calling native right away.
-            new CachedMetrics.TimesHistogramSample("PushMessaging.TimeToCheckIfSubscriptionLazy")
-                    .record(SystemClock.elapsedRealtime() - time);
-
-            if (isSubscriptionLazy) {
-                return;
-            }
+        // Check if we should only persist the message for now.
+        if (maybePersistLazyMessage(message)) {
+            return;
         }
 
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-            if (maybeBypassScheduler(message)) {
-                // We've bypassed the scheduler, so nothing to do here.
-                return;
-            }
-
-            Bundle extras = message.toBundle();
-
-            // TODO(peter): Add UMA for measuring latency introduced by the BackgroundTaskScheduler.
-            TaskInfo backgroundTask = TaskInfo.createOneOffTask(TaskIds.GCM_BACKGROUND_TASK_JOB_ID,
-                                                      GCMBackgroundTask.class, 0 /* immediately */)
-                                              .setExtras(extras)
-                                              .build();
-
-            BackgroundTaskSchedulerFactory.getScheduler().schedule(
-                    ContextUtils.getApplicationContext(), backgroundTask);
-
-        } else {
+        // Dispatch message immediately on pre N versions of Android.
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
             dispatchMessageToDriver(ContextUtils.getApplicationContext(), message);
+            return;
+        }
+
+        // Check if we should bypass the scheduler for high priority messages.
+        if (!maybeBypassScheduler(message)) {
+            scheduleBackgroundTask(message);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index 795a841..5e9be11 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -1307,6 +1307,12 @@
             }
         };
         templateUrlService.addObserver(mTemplateUrlObserver);
+
+        // Force an update once to populate initial data.
+        mLocationBar.updateSearchEngineStatusIcon(
+                SearchEngineLogoUtils.shouldShowSearchEngineLogo(),
+                TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle(),
+                SearchEngineLogoUtils.getSearchLogoUrl());
     }
 
     private void onNativeLibraryReady() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
index ead280c4..5d3baeb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -84,6 +84,7 @@
     private static Boolean sShouldPrioritizeBootstrapTasks;
     private static Boolean sIsGridTabSwitcherEnabled;
     private static Boolean sIsTabGroupsAndroidEnabled;
+    private static Boolean sIsTabToGtsAnimationEnabled;
     private static Boolean sFeedEnabled;
     private static Boolean sServiceManagerForBackgroundPrefetch;
     private static Boolean sIsNetworkServiceEnabled;
@@ -644,9 +645,22 @@
     }
 
     /**
+     * Toggles whether the Tab-to-GTS animation is enabled for testing. Should be reset back to
+     * null after the test has finished.
+     */
+    @VisibleForTesting
+    public static void setIsTabToGtsAnimationEnabledForTesting(@Nullable Boolean enabled) {
+        sIsTabToGtsAnimationEnabled = enabled;
+    }
+
+    /**
      * @return Whether the Tab-to-Grid (and Grid-to-Tab) transition animation is enabled.
      */
     public static boolean isTabToGtsAnimationEnabled() {
+        if (sIsTabToGtsAnimationEnabled != null) {
+            Log.d(TAG, "IsTabToGtsAnimationEnabled forced to " + sIsTabToGtsAnimationEnabled);
+            return sIsTabToGtsAnimationEnabled;
+        }
         Log.d(TAG, "GTS.MinSdkVersion = " + GridTabSwitcherUtil.getMinSdkVersion());
         Log.d(TAG, "GTS.MinMemoryMB = " + GridTabSwitcherUtil.getMinMemoryMB());
         return ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_TO_GTS_ANIMATION)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
index e6450521..3a81446 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
@@ -27,14 +27,14 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate;
 import org.chromium.chrome.browser.gesturenav.HistoryNavigationLayout;
+import org.chromium.chrome.browser.ui.widget.FadingShadow;
+import org.chromium.chrome.browser.ui.widget.FadingShadowView;
 import org.chromium.chrome.browser.widget.LoadingView;
 import org.chromium.chrome.browser.widget.displaystyle.DisplayStyleObserver;
 import org.chromium.chrome.browser.widget.displaystyle.HorizontalDisplayStyle;
 import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
 import org.chromium.chrome.browser.widget.displaystyle.UiConfig.DisplayStyle;
 import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver;
-import org.chromium.chrome.lib.browser.widget.FadingShadow;
-import org.chromium.chrome.lib.browser.widget.FadingShadowView;
 
 import java.util.List;
 
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
index c6ffc60..49f327d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">የይለፍ ቃል ሰርዝ</translation>
 <translation id="1516229014686355813">ለመፈለግ መታ ያድርጉ የተመረጠውን ቃልን እና አሁን ያለውን ገጽ እንደ አውድ አድርጎ ወደ Google ፍለጋ ይልካቸዋል። በ<ph name="BEGIN_LINK" />ቅንብሮች<ph name="END_LINK" /> ውስጥ ሊያጠፉት ይችላሉ።</translation>
 <translation id="1521774566618522728">ገባሪ ዛሬ</translation>
+<translation id="1544826120773021464">የGoogle መለያዎን ለማቀናበር የ«መለያን አቀናብር» አዝራሩን መታ ያድርጉት</translation>
 <translation id="1549000191223877751">ወደ ሌላ መስኮት ውሰድ</translation>
 <translation id="1553358976309200471">Chromeን አዘምን</translation>
 <translation id="1569387923882100876">የተገናኘ መሣሪያ</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">ይህን በሚመች ሁኔታ ማንበብ እስኪችሉ ድረስ ተንሸራታቹን ይጎትቱት። በአንድ አንቀጽ ላይ ሁለቴ መታ ካደረጉ በኋላ ጽሑፍ ቢያንስ የዚህ ያህል ትልቀት ሊኖረው ይገባል።</translation>
 <translation id="2323763861024343754">የጣቢያ ማከማቻ</translation>
 <translation id="2328985652426384049">መግባት አልተቻለም</translation>
+<translation id="2334057574886324800">የጽሑፍ መልዕክት ደርሷል</translation>
 <translation id="2349710944427398404">መለያዎች፣ ዕልባቶች እና የተቀመጡ ቅንብሮችን ጨምሮ Chrome የተጠቀመው ጠቅላላ ውሂብ</translation>
 <translation id="2353636109065292463">የበይነመረብ ግንኙነትዎን ይፈትሹ</translation>
 <translation id="2359808026110333948">ቀጥል</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">ገጹን አድስ</translation>
 <translation id="2709516037105925701">ራስ-ሙላ</translation>
 <translation id="271033894570825754">አዲስ</translation>
+<translation id="2717722538473713889">ኢሜይል አድራሻዎች</translation>
 <translation id="2728754400939377704">በጣቢያ ደርድር</translation>
 <translation id="2744248271121720757">አንድ ቃል በቅጽበት ለመፈለግ ወይም ተዛማጅ እርምጃዎችን ለመመልከት አንድ ቃል መታ ያድርጉ</translation>
 <translation id="2760989362628427051">የእርስዎ መሣሪያ በጨለማ ገጽታ ላይ ሲሆን ወይም ባትሪ ቆጣሪ ሲበራ የጨለማ ገጽታን አብራ</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">ጫን  </translation>
 <translation id="3810838688059735925">ቪዲዮ</translation>
 <translation id="3810973564298564668">አቀናብር</translation>
+<translation id="381841723434055211">ስልክ ቁጥሮች</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> የሚወርዱ ተሰርዘዋል</translation>
 <translation id="3822502789641063741">የጣቢያ ማከማቻ ይጽዳ?</translation>
 <translation id="385051799172605136">ተመለስ</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> ትርን ይክፈቱ፣ ትሮችን ለመቀየር መታ ያድርጉ}one{<ph name="OPEN_TABS_MANY" /> ትሮችን ይክፈቱ፣ ትሮችን ለመቀየር መታ ያድርጉ}other{<ph name="OPEN_TABS_MANY" /> ትሮችን ይክፈቱ፣ ትሮችን ለመቀየር መታ ያድርጉ}}</translation>
 <translation id="5391532827096253100">ወደዚህ ጣቢያ ያልዎት ግንኙነት ደህንነቱ የተጠበቀ አይደለም። የጣቢያ መረጃ</translation>
 <translation id="5400569084694353794">ይህን መተግበሪያ በመጠቀምዎ በChrome <ph name="BEGIN_LINK1" />አገልግሎት ውል<ph name="END_LINK1" /> እና <ph name="BEGIN_LINK2" />የግላዊነት ማስታወቂያ<ph name="END_LINK2" /> ተስማምተዋል።</translation>
+<translation id="5403592356182871684">ስሞች</translation>
 <translation id="5403644198645076998">የተወሰኑ ጣቢያዎችን ብቻ ፍቀድ</translation>
 <translation id="5414836363063783498">በማረጋገጥ ላይ…</translation>
 <translation id="5423934151118863508">በጣም በብዛት የተጎበኙ ገጾችዎ እዚህ ይመጣሉ</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">የፋይሉ ስም በጣም ረጅም ነው</translation>
 <translation id="5689516760719285838">አካባቢ</translation>
 <translation id="569536719314091526">ከተጨማሪ አማራጮች አዝራርሩ ይህን ገጽ ወደ ማንኛውም ቋንቋ ያስተርጉሙ</translation>
+<translation id="5719150327511160085">የጽሑፍ መልዕክትን በመጠበቅ ላይ</translation>
 <translation id="572328651809341494">የቅርብ ጊዜ ትሮች</translation>
 <translation id="5726692708398506830">በገጹ ላይ ያለውን ሁሉንም ነገር ይበልጥ አተልቅ</translation>
 <translation id="5748802427693696783">ወደ መደበኛ ትሮች ቀይር</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 ቀን ይቀራል</translation>
 <translation id="8200772114523450471">ከቆመበት ቀጥል</translation>
 <translation id="8209050860603202033">ምስል ክፈት</translation>
+<translation id="8218622182176210845">መለያዎን ያቀናብሩ</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> ጊባ ወርዷል</translation>
 <translation id="8224471946457685718">በWi-Fi ላይ ለእርስዎ ጽሑፎችን ያውርዱ</translation>
 <translation id="8232956427053453090">ውሂብን አቆይ</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
index 5ae3b9b63..0bb7c519 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">حذف كلمة المرور</translation>
 <translation id="1516229014686355813">‏تعمل ميزة "البحث بالنقر" على إرسال الكلمة المُحدَّدة والصفحة الحالية كسياق إلى بحث Google. يمكنك إيقافها في <ph name="BEGIN_LINK" />الإعدادات<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">نشط اليوم</translation>
+<translation id="1544826120773021464">‏لإدارة إعدادات حسابك على Google، يُرجى النقر على الزر "إدارة الحساب".</translation>
 <translation id="1549000191223877751">الانتقال إلى نافذة أخرى</translation>
 <translation id="1553358976309200471">‏تحديث Chrome‏</translation>
 <translation id="1569387923882100876">جهاز متصل</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">اسحب شريط التمرير إلى أن تتمكّن من قراءة هذا النص بسهولة. يجب أن يظهر النص بهذا الحجم على الأقل بعد النقر مرّتين على أي فقرة.</translation>
 <translation id="2323763861024343754">مساحة تخزين الموقع</translation>
 <translation id="2328985652426384049">تعذر تسجيل الدخول</translation>
+<translation id="2334057574886324800">تم استلام رسالة نصية.</translation>
 <translation id="2349710944427398404">‏إجمالي البيانات المُستخدَمة من قِبل Chrome، بما في ذلك الحسابات والإشارات المرجعية والإعدادات المحفوظة</translation>
 <translation id="2353636109065292463">التحقُّق من اتصال الإنترنت</translation>
 <translation id="2359808026110333948">متابعة</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">تحديث الصفحة</translation>
 <translation id="2709516037105925701">الملء التلقائي</translation>
 <translation id="271033894570825754">جديدة</translation>
+<translation id="2717722538473713889">عنوان البريد الإلكتروني</translation>
 <translation id="2728754400939377704">الترتيب حسب الموقع</translation>
 <translation id="2744248271121720757">النقر على الكلمة للبحث عنها فورًا أو الاطلاع على الإجراءات ذات الصلة</translation>
 <translation id="2760989362628427051">تفعيل المظهر الداكن عند تفعيل المظهر الداكن للجهاز أو ميزة "توفير شحن البطارية"</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">تثبيت</translation>
 <translation id="3810838688059735925">الفيديوهات</translation>
 <translation id="3810973564298564668">إدارة محرّكات البحث</translation>
+<translation id="381841723434055211">أرقام الهواتف</translation>
 <translation id="3819178904835489326">تم إلغاء <ph name="NUMBER_OF_DOWNLOADS" /> من التنزيلات</translation>
 <translation id="3822502789641063741">هل تريد محو مساحة تخزين المواقع؟</translation>
 <translation id="385051799172605136">الرجوع إلى الوراء</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> علامة تبويب مفتوحة، يُرجى النقر لتبديل علامات التبويب}zero{<ph name="OPEN_TABS_MANY" /> علامات تبويب مفتوحة، يُرجى النقر لتبديل علامات التبويب}two{علامتا تبويب مفتوحتان<ph name="OPEN_TABS_MANY" />، يُرجى النقر لتبديل علامات التبويب}few{<ph name="OPEN_TABS_MANY" /> علامات تبويب مفتوحة، يُرجى النقر لتبديل علامات التبويب}many{<ph name="OPEN_TABS_MANY" /> علامة تبويب مفتوحة، يُرجى النقر لتبديل علامات التبويب}other{<ph name="OPEN_TABS_MANY" /> علامة تبويب مفتوحة، يُرجى النقر لتبديل علامات التبويب}}</translation>
 <translation id="5391532827096253100">إن اتصالك بهذا الموقع الإلكتروني غير آمن. معلومات موقع الويب</translation>
 <translation id="5400569084694353794">باستخدام هذا التطبيق، أنت توافق على <ph name="BEGIN_LINK1" />بنود الخدمة<ph name="END_LINK1" /> و<ph name="BEGIN_LINK2" />إشعار الخصوصية<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">الأسماء</translation>
 <translation id="5403644198645076998">السماح بمواقع ويب معيّنة فقط</translation>
 <translation id="5414836363063783498">جارٍ التحقق...</translation>
 <translation id="5423934151118863508">ستظهر صفحاتك الأكثر زيارة هنا</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">اسم الملف طويل جدًا</translation>
 <translation id="5689516760719285838">الموقع الجغرافي</translation>
 <translation id="569536719314091526">ترجمة هذه الصفحة إلى أي لغة من خلال الزر "مزيد من الخيارات"</translation>
+<translation id="5719150327511160085">في انتظار رسالة نصية</translation>
 <translation id="572328651809341494">علامات التبويب الأخيرة</translation>
 <translation id="5726692708398506830">تكبير كل محتويات الصفحة</translation>
 <translation id="5748802427693696783">تم التبديل إلى علامات التبويب القياسية</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">يتبقى يوم واحد</translation>
 <translation id="8200772114523450471">استئناف</translation>
 <translation id="8209050860603202033">فتح الصورة</translation>
+<translation id="8218622182176210845">إدارة حسابك</translation>
 <translation id="8220488350232498290">تم تنزيل <ph name="GIGABYTES" /> غيغابايت</translation>
 <translation id="8224471946457685718">‏تنزيل مقالات لك عند الاتصال بشبكة Wi-Fi</translation>
 <translation id="8232956427053453090">حفظ البيانات</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
index 3775d415..76254e8 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Изтриване на паролата</translation>
 <translation id="1516229014686355813">При търсене с докосване избраната дума и текущата страница се изпращат като контекст до Google Търсене. Можете да изключите функцията от <ph name="BEGIN_LINK" />Настройки<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Активно днес</translation>
+<translation id="1544826120773021464">За да управлявате профила си в Google, докоснете бутона „Управление на профила“</translation>
 <translation id="1549000191223877751">Преместв. в другия прозорец</translation>
 <translation id="1553358976309200471">Актуализиране на Chrome</translation>
 <translation id="1569387923882100876">Свързано устройство</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Преместете плъзгача, докато можете да четете удобно това. Текстът трябва да изглежда поне толкова голям след двукратно докосване на абзац.</translation>
 <translation id="2323763861024343754">Данни от сайтове</translation>
 <translation id="2328985652426384049">Влизането в профила не е възможно</translation>
+<translation id="2334057574886324800">Получено бе SMS съобщение</translation>
 <translation id="2349710944427398404">Общо място в хранилището, което се използва от Chrome, включително за профили, отметки и запазени настройки</translation>
 <translation id="2353636109065292463">Връзката с интернет се проверява</translation>
 <translation id="2359808026110333948">Напред</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Опресняване на страницата</translation>
 <translation id="2709516037105925701">Автоматично попълване</translation>
 <translation id="271033894570825754">Създаване</translation>
+<translation id="2717722538473713889">Имейл адреси</translation>
 <translation id="2728754400939377704">Сортиране по сайт</translation>
 <translation id="2744248271121720757">Докоснете дума, за да извършите незабавно търсене, или вижте свързаните действия</translation>
 <translation id="2760989362628427051">Включване на тъмната тема, когато тъмната тема на устройството или режимът за запазване на батерията в него са включени</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Инсталиране</translation>
 <translation id="3810838688059735925">Видео</translation>
 <translation id="3810973564298564668">Управление</translation>
+<translation id="381841723434055211">Телефонни номера</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> изтегляния бяха изтрити</translation>
 <translation id="3822502789641063741">Изчистване на данните?</translation>
 <translation id="385051799172605136">Назад</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> отворен раздел. Докоснете за превключване между разделите}other{<ph name="OPEN_TABS_MANY" /> отворени раздела. Докоснете за превключване между тях}}</translation>
 <translation id="5391532827096253100">Връзката ви с този сайт не е защитена. Информация за сайта</translation>
 <translation id="5400569084694353794">С използването на това приложение приемате <ph name="BEGIN_LINK1" />Общите условия<ph name="END_LINK1" /> и <ph name="BEGIN_LINK2" />Съобщението за поверителност<ph name="END_LINK2" /> на Chrome.</translation>
+<translation id="5403592356182871684">Имена</translation>
 <translation id="5403644198645076998">Разрешаване само на конкретни сайтове</translation>
 <translation id="5414836363063783498">Потвърждава се…</translation>
 <translation id="5423934151118863508">Най-посещаваните от вас страници ще се показват тук</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Името на файла е твърде дълго</translation>
 <translation id="5689516760719285838">Местоположение</translation>
 <translation id="569536719314091526">Страницата може да бъде преведена на който и да е език чрез бутона за още опции</translation>
+<translation id="5719150327511160085">Изчаква се SMS съобщение</translation>
 <translation id="572328651809341494">Скорошни раздели</translation>
 <translation id="5726692708398506830">Уголемяване на всички елементи на страницата</translation>
 <translation id="5748802427693696783">Превключихте към стандартните раздели</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Остава 1 ден</translation>
 <translation id="8200772114523450471">Възобновяване</translation>
 <translation id="8209050860603202033">Отваряне на изображението</translation>
+<translation id="8218622182176210845">Управление на профила ви</translation>
 <translation id="8220488350232498290">Изтеглени файлове: <ph name="GIGABYTES" /> ГБ</translation>
 <translation id="8224471946457685718">Изтегляне на статиите за вас през Wi-Fi</translation>
 <translation id="8232956427053453090">Запазване на данните</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
index fb52d714..dfa8b2dd 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">পাসওয়ার্ড মুছুন</translation>
 <translation id="1516229014686355813">'সার্চ করতে ট্যাপ করুন' বৈশিষ্ট্যটি Google সার্চের রেফারেন্স হিসেবে বেছে নেওয়া শব্দ এবং বর্তমান পৃষ্ঠাটি পাঠায়। আপনি <ph name="BEGIN_LINK" />সেটিংস<ph name="END_LINK" /> থেকে এটি বন্ধ করতে পারেন।</translation>
 <translation id="1521774566618522728">আজ ব্যবহার করা হয়েছে</translation>
+<translation id="1544826120773021464">আপনার Google অ্যাকাউন্ট ম্যানেজ করতে, "অ্যাকাউন্ট ম্যানেজ করুন" বোতামে ট্যাপ করুন</translation>
 <translation id="1549000191223877751">অন্য উইন্ডোতে সরান</translation>
 <translation id="1553358976309200471">Chrome আপডেট করুন</translation>
 <translation id="1569387923882100876">সংযুক্ত ডিভাইস</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">আপনি এটি স্বচ্ছন্দে পড়তে না পারা পর্যন্ত স্লাইডারটি টেনে আনুন৷ কোনো অনুচ্ছেদে দুবার-আলতো চাপার পরে পাঠ্যটিকে দেখতে অন্ততপক্ষে এইরকম বড় লাগা উচিত৷</translation>
 <translation id="2323763861024343754">সাইটের স্টোরেজ</translation>
 <translation id="2328985652426384049">সাইন ইন করতে পারছেন না</translation>
+<translation id="2334057574886324800">টেক্সট মেসেজ এসেছে</translation>
 <translation id="2349710944427398404">অ্যাকাউন্ট, ​​বুকমার্ক এবং স্টোর করা সেটিংসসহ Chrome-এর ব্যবহার করা মোট ডেটা</translation>
 <translation id="2353636109065292463">আপনার ইন্টারনেট কানেকশন ঠিক আছে কিনা সেটি দেখা হচ্ছে</translation>
 <translation id="2359808026110333948">চালিয়ে যান</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">পৃষ্ঠা রিফ্রেশ করুন</translation>
 <translation id="2709516037105925701">স্বয়ংপূরণ</translation>
 <translation id="271033894570825754">নতুন</translation>
+<translation id="2717722538473713889">ইমেল আইডি</translation>
 <translation id="2728754400939377704">সাইট অনুযায়ী সাজান</translation>
 <translation id="2744248271121720757">ঝটপট সার্চ এবং সম্পর্কিত অ্যাকশন দেখতে একটি শব্দ ট্যাপ করুন</translation>
 <translation id="2760989362628427051">আপনার ডিভাইসে গাঢ় থিম বা ব্যাটারি সেভার চালু থাকলে, গাঢ় থিম চালু করুন</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">ইনস্টল করুন</translation>
 <translation id="3810838688059735925">ভিডিও</translation>
 <translation id="3810973564298564668">পরিচালনা</translation>
+<translation id="381841723434055211">ফোন নম্বর</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" />টি ডাউনলোড মোছা হয়েছে</translation>
 <translation id="3822502789641063741">সাইটের সঞ্চয়স্থান সাফ করবেন?</translation>
 <translation id="385051799172605136">ফিরুন</translation>
@@ -586,6 +590,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" />টি খোলা ট্যাব, এক ট্যাব থেকে অন্য ট্যাবে যেতে ট্যাপ করুন}one{<ph name="OPEN_TABS_MANY" />টি খোলা ট্যাব, এক ট্যাব থেকে অন্য ট্যাবে যেতে ট্যাপ করুন}other{<ph name="OPEN_TABS_MANY" />টি খোলা ট্যাব, এক ট্যাব থেকে অন্য ট্যাবে যেতে ট্যাপ করুন}}</translation>
 <translation id="5391532827096253100">এই সাইটে আপনার কানেকশন নিরাপদ নয়। সাইটের তথ্য</translation>
 <translation id="5400569084694353794">এই অ্যাপ্লিকেশানটি ব্যবহার করার মাধ্যমে আপনি Chrome এর <ph name="BEGIN_LINK1" />পরিষেবার শর্তাবলি<ph name="END_LINK1" /> এবং <ph name="BEGIN_LINK2" />গোপনীয়তা বিজ্ঞপ্তিতে<ph name="END_LINK2" /> সম্মত হচ্ছেন৷</translation>
+<translation id="5403592356182871684">নাম</translation>
 <translation id="5403644198645076998">শুধুমাত্র নির্দিষ্ট কিছু সাইটকে অনুমতি দিন</translation>
 <translation id="5414836363063783498">যাচাই করা হচ্ছে...</translation>
 <translation id="5423934151118863508">আপনার সর্বাধিক দেখা পৃষ্ঠাগুলি এখানে দেখা যাবে</translation>
@@ -640,6 +645,7 @@
 <translation id="5686790454216892815">ফাইলের নামটি খুব বড়</translation>
 <translation id="5689516760719285838">লোকেশন</translation>
 <translation id="569536719314091526">আরও বিকল্প বোতাম থেকে এই পৃষ্ঠাটিকে যেকোনও ভাষায় অনুবাদ করুন</translation>
+<translation id="5719150327511160085">টেক্সট মেসেজের জন্য অপেক্ষা করা হচ্ছে</translation>
 <translation id="572328651809341494">সাম্প্রতিক ট্যাবগুলি</translation>
 <translation id="5726692708398506830">পৃষ্ঠাতে থাকা সবকিছুকে বড় করুন</translation>
 <translation id="5748802427693696783">স্ট্যান্ডার্ড ট্যাবে পাল্টানো হয়েছে</translation>
@@ -983,6 +989,7 @@
 <translation id="8190358571722158785">১ দিন বাকি আছে</translation>
 <translation id="8200772114523450471">আবার চালু করা</translation>
 <translation id="8209050860603202033">ইমেজ খুলুন</translation>
+<translation id="8218622182176210845">আপনার অ্যাকাউন্ট ম্যানেজ করুন</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> জিবি ডাউনলোড হয়েছে</translation>
 <translation id="8224471946457685718">ওয়াই-ফাই ব্যবহার করে আপনার জন্য নিবন্ধ ডাউনলোড করুন</translation>
 <translation id="8232956427053453090">ডেটা রাখুন</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
index 6df939c..4dbf381 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Suprimeix la contrasenya</translation>
 <translation id="1516229014686355813">La funció Toca per cercar envia la paraula seleccionada i la pàgina actual com a context a la Cerca de Google. La pots desactivar a <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Actiu avui</translation>
+<translation id="1544826120773021464">Per gestionar el Compte de Google, toca el botó Gestiona el compte</translation>
 <translation id="1549000191223877751">Mou a l'altra finestra</translation>
 <translation id="1553358976309200471">Actualitza Chrome</translation>
 <translation id="1569387923882100876">Dispositiu connectat</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Arrossega el control lliscant fins que puguis llegir aquest text còmodament. El text ha de ser almenys així de gran després de tocar dos cops un paràgraf.</translation>
 <translation id="2323763861024343754">Emmagatzematge del lloc web</translation>
 <translation id="2328985652426384049">No es pot iniciar la sessió</translation>
+<translation id="2334057574886324800">S'ha rebut un missatge de text</translation>
 <translation id="2349710944427398404">Dades totals utilitzades per Chrome, com ara comptes, adreces d'interès i opcions de configuració desades</translation>
 <translation id="2353636109065292463">S'està comprovant la connexió a Internet</translation>
 <translation id="2359808026110333948">Continua</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Actualitza la pàgina</translation>
 <translation id="2709516037105925701">Emplenament automàtic</translation>
 <translation id="271033894570825754">Nou</translation>
+<translation id="2717722538473713889">Adreces electròniques</translation>
 <translation id="2728754400939377704">Ordena per lloc web</translation>
 <translation id="2744248271121720757">Toca una paraula per fer una cerca a l'instant o per veure accions relacionades</translation>
 <translation id="2760989362628427051">Activa el tema fosc quan aquest mode de visualització o l'estalvi de bateria del dispositiu estiguin activats</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instal·la</translation>
 <translation id="3810838688059735925">Vídeo</translation>
 <translation id="3810973564298564668">Gestiona</translation>
+<translation id="381841723434055211">Números de telèfon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> baixades suprimides</translation>
 <translation id="3822502789641063741">Esborrem emmagatz. lloc web?</translation>
 <translation id="385051799172605136">Enrere</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> pestanya oberta; toca per canviar de pestanya}other{<ph name="OPEN_TABS_MANY" /> pestanyes obertes; toca per canviar de pestanya}}</translation>
 <translation id="5391532827096253100">La connexió amb aquest lloc web no és segura. Informació del lloc web</translation>
 <translation id="5400569084694353794">En fer servir aquesta aplicació, acceptes les <ph name="BEGIN_LINK1" />condicions del servei<ph name="END_LINK1" /> i l'<ph name="BEGIN_LINK2" />avís de privadesa<ph name="END_LINK2" /> de Chrome.</translation>
+<translation id="5403592356182871684">Noms</translation>
 <translation id="5403644198645076998">Permet només certs llocs</translation>
 <translation id="5414836363063783498">S'està verificant...</translation>
 <translation id="5423934151118863508">Les pàgines més visitades es mostraran aquí</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">El nom del fitxer és massa llarg</translation>
 <translation id="5689516760719285838">Ubicació</translation>
 <translation id="569536719314091526">Tradueix aquesta pàgina a qualsevol idioma des del botó Més opcions</translation>
+<translation id="5719150327511160085">S'està esperant un missatge de text</translation>
 <translation id="572328651809341494">Pestanyes recents</translation>
 <translation id="5726692708398506830">Augmenta la mida de tots els elements de la pàgina</translation>
 <translation id="5748802427693696783">S'ha canviat a les pestanyes estàndard</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Queda 1 dia</translation>
 <translation id="8200772114523450471">Reprèn</translation>
 <translation id="8209050860603202033">Obre la imatge</translation>
+<translation id="8218622182176210845">Gestiona el compte</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB en baixades</translation>
 <translation id="8224471946457685718">Baixa articles que et poden interessar quan tinguis connexió a la Wi-Fi</translation>
 <translation id="8232956427053453090">Conserva les dades</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
index bd0c90c..c9a4304 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Vymazat heslo</translation>
 <translation id="1516229014686355813">Vyhledání klepnutím odešle vybrané slovo a aktuální stránku jako kontext do Vyhledávání Google. Tuto funkci můžete vypnout v <ph name="BEGIN_LINK" />Nastavení<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktivní dnes</translation>
+<translation id="1544826120773021464">Chcete-li spravovat svůj účet Google, klepněte na tlačítko Spravovat účet</translation>
 <translation id="1549000191223877751">Přejít do jiného okna</translation>
 <translation id="1553358976309200471">Aktualizovat Chrome</translation>
 <translation id="1569387923882100876">Připojené zařízení</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Přetahujte posuvník tak dlouho, dokud nebudete moci pohodlně přečíst tento text. Po dvojitém klepnutí na odstavec by měl být text alespoň takto velký.</translation>
 <translation id="2323763861024343754">Úložiště webů</translation>
 <translation id="2328985652426384049">Přihlášení se nezdařilo</translation>
+<translation id="2334057574886324800">Byla přijata textová zpráva</translation>
 <translation id="2349710944427398404">Celkové množství dat využívané prohlížečem Chrome, včetně účtů, záložek a uložených nastavení</translation>
 <translation id="2353636109065292463">Kontrola připojení k internetu</translation>
 <translation id="2359808026110333948">Pokračovat</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Obnovit stránku</translation>
 <translation id="2709516037105925701">Automatické vyplňování</translation>
 <translation id="271033894570825754">Nové</translation>
+<translation id="2717722538473713889">E‑mailové adresy</translation>
 <translation id="2728754400939377704">Seřadit podle webu</translation>
 <translation id="2744248271121720757">Klepnutím na slovo můžete okamžitě vyhledávat nebo zobrazit související akce</translation>
 <translation id="2760989362628427051">Zapnout tmavý motiv, když je na zařízení zapnutý tmavý motiv nebo spořič baterie</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instalovat</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Spravovat</translation>
+<translation id="381841723434055211">Telefonní čísla</translation>
 <translation id="3819178904835489326">Počet smazaných stažených souborů: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Vymazat úložiště webů?</translation>
 <translation id="385051799172605136">Zpět</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{Je otevřená <ph name="OPEN_TABS_ONE" /> karta, můžete mezi nimi přepínat klepnutím}few{Je otevřených <ph name="OPEN_TABS_MANY" /> karet, můžete mezi nimi přepínat klepnutím}many{Je otevřených <ph name="OPEN_TABS_MANY" /> karty, můžete mezi nimi přepínat klepnutím}other{Je otevřených <ph name="OPEN_TABS_MANY" /> karet, můžete mezi nimi přepínat klepnutím}}</translation>
 <translation id="5391532827096253100">Spojení s tímto webem není zabezpečené. Informace o webu</translation>
 <translation id="5400569084694353794">Používáním této aplikace vyjadřujete souhlas se <ph name="BEGIN_LINK1" />smluvními podmínkami<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />zásadami ochrany soukromí<ph name="END_LINK2" /> prohlížeče Chrome.</translation>
+<translation id="5403592356182871684">Názvy</translation>
 <translation id="5403644198645076998">Povolit pouze určité weby</translation>
 <translation id="5414836363063783498">Ověřování…</translation>
 <translation id="5423934151118863508">Zde se zobrazí vaše nejnavštěvovanější stránky.</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Název souboru je příliš dlouhý</translation>
 <translation id="5689516760719285838">Poloha</translation>
 <translation id="569536719314091526">Pomocí tlačítka Další možnosti můžete tuto stránku přeložit do libovolného jazyka.</translation>
+<translation id="5719150327511160085">Čeká se na textovou zprávu</translation>
 <translation id="572328651809341494">Nedávno použité karty</translation>
 <translation id="5726692708398506830">Zvětšit veškerý obsah stránky</translation>
 <translation id="5748802427693696783">Přepnuto na standardní karty</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Zbývá: 1 d</translation>
 <translation id="8200772114523450471">Pokračovat</translation>
 <translation id="8209050860603202033">Otevřít obrázek</translation>
+<translation id="8218622182176210845">Správa účtu</translation>
 <translation id="8220488350232498290">Staženo: <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">Stahovat články pro vás přes Wi-Fi</translation>
 <translation id="8232956427053453090">Zachovat data</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
index a92a1ad9..72d090c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Slet adgangskoden</translation>
 <translation id="1516229014686355813">Funktionen "Tryk for at søge" sender det markerede ord og den aktuelle side som kontekst til Google Søgning. Du kan deaktivere funktionen i <ph name="BEGIN_LINK" />Indstillinger<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktiv i dag</translation>
+<translation id="1544826120773021464">Tryk på knappen "Administrer konto" for at administrere din Google-konto</translation>
 <translation id="1549000191223877751">Flyt til et andet vindue</translation>
 <translation id="1553358976309200471">Opdater Chrome</translation>
 <translation id="1569387923882100876">Tilsluttet enhed</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Træk i skyderen, indtil du kan nemt læse dette. Teksten som minimum have denne størrelse, når du har trykket to gange på et afsnit.</translation>
 <translation id="2323763861024343754">Websitelagerplads</translation>
 <translation id="2328985652426384049">Det er ikke muligt at logge ind</translation>
+<translation id="2334057574886324800">En sms blev modtaget</translation>
 <translation id="2349710944427398404">Samlet mængde data, som Chrome anvender, herunder konti, bogmærker og gemte indstillinger</translation>
 <translation id="2353636109065292463">Tjekker din internetforbindelse</translation>
 <translation id="2359808026110333948">Fortsæt</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Opdater siden</translation>
 <translation id="2709516037105925701">AutoFyld</translation>
 <translation id="271033894570825754">Nyt</translation>
+<translation id="2717722538473713889">Mailadresser</translation>
 <translation id="2728754400939377704">Sortér efter website</translation>
 <translation id="2744248271121720757">Tryk på et ord for at søge øjeblikkeligt eller se relaterede handlinger</translation>
 <translation id="2760989362628427051">Aktivér mørkt tema, når enhedens mørke tema eller batterisparefunktion er aktiveret</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installer</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Valgmuligheder</translation>
+<translation id="381841723434055211">Telefonnumre</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads blev slettet</translation>
 <translation id="3822502789641063741">Vil du rydde websitelagerpladsen?</translation>
 <translation id="385051799172605136">Tilbage</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> åben fane – tryk for at skifte fane}one{<ph name="OPEN_TABS_MANY" /> åben fane – tryk for at skifte fane}other{<ph name="OPEN_TABS_MANY" /> åbne faner – tryk for at skifte fane}}</translation>
 <translation id="5391532827096253100">Din forbindelse til dette website er ikke sikker. Websiteoplysninger</translation>
 <translation id="5400569084694353794">Ved at bruge denne app accepterer du Chromes <ph name="BEGIN_LINK1" />servicevilkår<ph name="END_LINK1" /> og <ph name="BEGIN_LINK2" />erklæring om privatliv<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Navne</translation>
 <translation id="5403644198645076998">Tillad kun bestemte websites</translation>
 <translation id="5414836363063783498">Bekræfter...</translation>
 <translation id="5423934151118863508">Dine mest besøgte sider vises her</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Filnavnet er for langt</translation>
 <translation id="5689516760719285838">Placering</translation>
 <translation id="569536719314091526">Oversæt denne side til et hvilket som helst sprog via knappen Flere valgmuligheder</translation>
+<translation id="5719150327511160085">Venter på sms</translation>
 <translation id="572328651809341494">Seneste faner</translation>
 <translation id="5726692708398506830">Gør alting på siden større</translation>
 <translation id="5748802427693696783">Skiftet til standardfaner</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 dag tilbage</translation>
 <translation id="8200772114523450471">Genoptag</translation>
 <translation id="8209050860603202033">Åbn billede</translation>
+<translation id="8218622182176210845">Administrer din konto</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB er downloadet</translation>
 <translation id="8224471946457685718">Download artikler til dig via Wi-Fi</translation>
 <translation id="8232956427053453090">Behold data</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
index 923ed73..b990a82 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Passwort löschen</translation>
 <translation id="1516229014686355813">Mit "Zum Suchen tippen" werden das ausgewählte Wort und die aktuelle Seite als Kontext an die Google-Suche gesendet. Sie können die Funktion in den <ph name="BEGIN_LINK" />Einstellungen<ph name="END_LINK" /> deaktivieren.</translation>
 <translation id="1521774566618522728">Heute aktiv</translation>
+<translation id="1544826120773021464">Wenn Sie Ihr Google-Konto verwalten möchten, tippen Sie auf die Schaltfläche "Konto verwalten"</translation>
 <translation id="1549000191223877751">Zu anderem Fenster wechseln</translation>
 <translation id="1553358976309200471">Chrome aktualisieren</translation>
 <translation id="1569387923882100876">Verbundenes Gerät</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Ziehen Sie den Schieberegler, bis Sie diesen Text problemlos lesen können. Nach dem Doppeltippen auf einen Abschnitt sollte der Text mindestens so groß sein.</translation>
 <translation id="2323763861024343754">Websitespeicher</translation>
 <translation id="2328985652426384049">Anmeldung nicht möglich</translation>
+<translation id="2334057574886324800">SMS erhalten</translation>
 <translation id="2349710944427398404">Gesamtdaten, die von Chrome verwendet werden, wie Konten, Lesezeichen und gespeicherte Einstellungen</translation>
 <translation id="2353636109065292463">Internetverbindung überprüfen</translation>
 <translation id="2359808026110333948">Weiter</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Seite aktualisieren</translation>
 <translation id="2709516037105925701">AutoFill</translation>
 <translation id="271033894570825754">Neu</translation>
+<translation id="2717722538473713889">E-Mail-Adressen</translation>
 <translation id="2728754400939377704">Nach Website sortieren</translation>
 <translation id="2744248271121720757">Tippen Sie auf ein Wort, um eine Sofortsuche zu starten oder weitere Aktionen anzuzeigen</translation>
 <translation id="2760989362628427051">Dunkles Design verwenden, wenn der Energiesparmodus des Geräts aktiviert ist</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installieren</translation>
 <translation id="3810838688059735925">Videos</translation>
 <translation id="3810973564298564668">Verwalten</translation>
+<translation id="381841723434055211">Telefonnummern</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> Downloads gelöscht</translation>
 <translation id="3822502789641063741">Websitespeicher löschen?</translation>
 <translation id="385051799172605136">Zurück</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> geöffneter Tab, zum Wechseln der Tabs tippen}other{<ph name="OPEN_TABS_MANY" /> geöffnete Tabs, zum Wechseln der Tabs tippen}}</translation>
 <translation id="5391532827096253100">Die Verbindung zu dieser Website ist nicht sicher. Websiteinformationen</translation>
 <translation id="5400569084694353794">Durch die Verwendung dieser App stimmen Sie den <ph name="BEGIN_LINK1" />Nutzungsbedingungen<ph name="END_LINK1" /> und <ph name="BEGIN_LINK2" />Datenschutzhinweisen<ph name="END_LINK2" /> von Chrome zu.</translation>
+<translation id="5403592356182871684">Namen</translation>
 <translation id="5403644198645076998">Nur bestimmte Websites zulassen</translation>
 <translation id="5414836363063783498">Überprüfung...</translation>
 <translation id="5423934151118863508">Hier werden Ihre am meisten aufgerufenen Seiten angezeigt.</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Dateiname zu lang</translation>
 <translation id="5689516760719285838">Ort</translation>
 <translation id="569536719314091526">Über die Schaltfläche "Weitere Optionen" können Sie sich diese Seite in eine beliebige Sprache übersetzen lassen</translation>
+<translation id="5719150327511160085">Warten auf SMS</translation>
 <translation id="572328651809341494">Zuletzt geöffnete Tabs</translation>
 <translation id="5726692708398506830">Gesamten Seiteninhalt vergrößern</translation>
 <translation id="5748802427693696783">Zu Standard-Tabs gewechselt</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 Tag übrig</translation>
 <translation id="8200772114523450471">Fortsetzen</translation>
 <translation id="8209050860603202033">Bild öffnen</translation>
+<translation id="8218622182176210845">Konto verwalten</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB heruntergeladen</translation>
 <translation id="8224471946457685718">"Artikel für mich" bei bestehender WLAN-Verbindung herunterladen</translation>
 <translation id="8232956427053453090">Daten aufbewahren</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
index abbaf11..1cb06bb 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Διαγραφή κωδικού πρόσβασης</translation>
 <translation id="1516229014686355813">Η λειτουργία "Πατήστε για αναζήτηση" αποστέλλει την επιλεγμένη λέξη και την τρέχουσα σελίδα ως περιβάλλον στην Αναζήτηση Google. Μπορείτε να την απενεργοποιήσετε στις <ph name="BEGIN_LINK" />Ρυθμίσεις<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Ενεργή σήμερα</translation>
+<translation id="1544826120773021464">Για να διαχειριστείτε τον Λογαριασμό σας Google, πατήστε το κουμπί Διαχείριση λογαριασμού.</translation>
 <translation id="1549000191223877751">Μεταβείτε σε άλλο παράθυρο</translation>
 <translation id="1553358976309200471">Ενημερώστε το Chrome</translation>
 <translation id="1569387923882100876">Συνδεδεμένη συσκευή</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Σύρετε το ρυθμιστικό έως ότου να διαβάσετε αυτό το μήνυμα άνετα. Το κείμενο θα πρέπει να είναι τουλάχιστον τόσο μεγάλο αφού πατήσετε δύο φορές σε μια παράγραφο.</translation>
 <translation id="2323763861024343754">Αποθηκ. χώρος ιστοσελίδας</translation>
 <translation id="2328985652426384049">Δεν είναι δυνατή η σύνδεση</translation>
+<translation id="2334057574886324800">Ελήφθη μήνυμα κειμένου</translation>
 <translation id="2349710944427398404">Σύνολο δεδομένων που χρησιμοποιούνται από το Chrome, συμπεριλαμβανομένων των λογαριασμών, των σελιδοδεικτών και των αποθηκευμένων ρυθμίσεων</translation>
 <translation id="2353636109065292463">Έλεγχος της σύνδεσής σας στο διαδίκτυο</translation>
 <translation id="2359808026110333948">Συνέχεια</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Ανανέωση σελίδας</translation>
 <translation id="2709516037105925701">Αυτόματη συμπλήρωση</translation>
 <translation id="271033894570825754">Νέο</translation>
+<translation id="2717722538473713889">Διευθύνσεις ηλεκτρονικού ταχυδρομείου</translation>
 <translation id="2728754400939377704">Ταξινόμηση κατά ιστότοπο</translation>
 <translation id="2744248271121720757">Πατήστε μια λέξη για άμεση αναζήτηση ή για να δείτε τις σχετικές ενέργειες</translation>
 <translation id="2760989362628427051">Να ενεργοποιείται το σκούρο θέμα όταν το σκούρο θέμα ή η Εξοικονόμηση μπαταρίας της συσκευής σας έχουν ενεργοποιηθεί.</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Εγκατάσταση</translation>
 <translation id="3810838688059735925">Βίντεο</translation>
 <translation id="3810973564298564668">Διαχείριση</translation>
+<translation id="381841723434055211">Αριθμοί τηλεφώνου</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> λήψεις διαγράφηκαν</translation>
 <translation id="3822502789641063741">Διαγ.αποθ.χώρου ιστότ.;</translation>
 <translation id="385051799172605136">Πίσω</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> ανοιχτή καρτέλα, πατήστε για εναλλαγή καρτελών}other{<ph name="OPEN_TABS_MANY" /> ανοιχτές καρτέλες, πατήστε για εναλλαγή καρτελών}}</translation>
 <translation id="5391532827096253100">Η σύνδεσή σας σε αυτόν τον ιστότοπο δεν είναι ασφαλής. Πληροφορίες ιστοτόπου</translation>
 <translation id="5400569084694353794">Χρησιμοποιώντας αυτήν την εφαρμογή, αποδέχεστε τους <ph name="BEGIN_LINK1" />Όρους Παροχής Υπηρεσιών<ph name="END_LINK1" /> και τη <ph name="BEGIN_LINK2" />Σημείωση Απορρήτου<ph name="END_LINK2" /> του Chrome.</translation>
+<translation id="5403592356182871684">Ονόματα</translation>
 <translation id="5403644198645076998">Να επιτρέπονται μόνο συγκεκριμένοι ιστότοποι</translation>
 <translation id="5414836363063783498">Γίνεται επαλήθευση…</translation>
 <translation id="5423934151118863508">Οι πιο δημοφιλείς σελίδες σας θα εμφανίζονται εδώ</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Το όνομα του αρχείου είναι πολύ μεγάλο</translation>
 <translation id="5689516760719285838">Τοποθεσία</translation>
 <translation id="569536719314091526">Μεταφράστε αυτήν τη σελίδα σε οποιαδήποτε γλώσσα από το κουμπί "Περισσότερες επιλογές"</translation>
+<translation id="5719150327511160085">Αναμονή για μήνυμα κειμένου</translation>
 <translation id="572328651809341494">Πρόσφατες καρτέλες</translation>
 <translation id="5726692708398506830">Μεγέθυνση όλων των στοιχείων της σελίδας</translation>
 <translation id="5748802427693696783">Έγινε εναλλαγή σε τυπικές καρτέλες</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Απομένει 1 ημέρα</translation>
 <translation id="8200772114523450471">Συνέχιση</translation>
 <translation id="8209050860603202033">Άνοιγμα εικόνας</translation>
+<translation id="8218622182176210845">Διαχείριση του λογαριασμού σας</translation>
 <translation id="8220488350232498290">Έγινε λήψη <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">Λήψη άρθρων για εσάς στο Wi-Fi</translation>
 <translation id="8232956427053453090">Διατήρηση δεδομένων</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
index 696c279..a7460cd 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Delete password</translation>
 <translation id="1516229014686355813">Tap to Search sends the selected word and the current page as context to Google Search. You can turn it off in <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Active today</translation>
+<translation id="1544826120773021464">To manage your Google Account, tap the 'Manage account' button</translation>
 <translation id="1549000191223877751">Move to other window</translation>
 <translation id="1553358976309200471">Update Chrome</translation>
 <translation id="1569387923882100876">Connected device</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Drag the slider until you can read this comfortably. Text should look at least this big after double-tapping on a paragraph.</translation>
 <translation id="2323763861024343754">Site storage</translation>
 <translation id="2328985652426384049">Can’t sign in</translation>
+<translation id="2334057574886324800">Text message received</translation>
 <translation id="2349710944427398404">Total data used by Chrome, including accounts, bookmarks and saved settings</translation>
 <translation id="2353636109065292463">Checking your Internet connection</translation>
 <translation id="2359808026110333948">Continue</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Refresh page</translation>
 <translation id="2709516037105925701">Auto-fill</translation>
 <translation id="271033894570825754">New</translation>
+<translation id="2717722538473713889">Email addresses</translation>
 <translation id="2728754400939377704">Sort by site</translation>
 <translation id="2744248271121720757">Tap a word to search instantly or see related actions</translation>
 <translation id="2760989362628427051">Turn on dark theme when your device's dark theme or Battery Saver is on</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Install</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Manage</translation>
+<translation id="381841723434055211">Phone numbers</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads deleted</translation>
 <translation id="3822502789641063741">Clear site storage?</translation>
 <translation id="385051799172605136">Back</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> open tab, tap to switch tabs}other{<ph name="OPEN_TABS_MANY" /> open tabs, tap to switch tabs}}</translation>
 <translation id="5391532827096253100">Your connection to this site is not secure. Site information</translation>
 <translation id="5400569084694353794">By using this application, you agree to Chrome’s <ph name="BEGIN_LINK1" />Terms of Service<ph name="END_LINK1" /> and <ph name="BEGIN_LINK2" />Privacy Notice<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Names</translation>
 <translation id="5403644198645076998">Only allow certain sites</translation>
 <translation id="5414836363063783498">Verifying…</translation>
 <translation id="5423934151118863508">Your most visited pages will appear here</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">File name too long</translation>
 <translation id="5689516760719285838">Location</translation>
 <translation id="569536719314091526">Translate this page to any language from the More options button</translation>
+<translation id="5719150327511160085">Waiting for text message</translation>
 <translation id="572328651809341494">Recent tabs</translation>
 <translation id="5726692708398506830">Make everything on the page bigger</translation>
 <translation id="5748802427693696783">Switched to standard tabs</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 day left</translation>
 <translation id="8200772114523450471">Resume</translation>
 <translation id="8209050860603202033">Open image</translation>
+<translation id="8218622182176210845">Manage your account</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB downloaded</translation>
 <translation id="8224471946457685718">Download articles for you on Wi-Fi</translation>
 <translation id="8232956427053453090">Keep data</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
index 60b406c..c2e212d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Borrar contraseña</translation>
 <translation id="1516229014686355813">La función "Presionar para buscar" envía la palabra seleccionada y la página actual como contexto a la Búsqueda de Google. Para desactivarla, accede a <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Activo hoy</translation>
+<translation id="1544826120773021464">Para administrar tu Cuenta de Google, presiona el botón "Administrar cuenta"</translation>
 <translation id="1549000191223877751">Mover a otra ventana</translation>
 <translation id="1553358976309200471">Actualizar Chrome</translation>
 <translation id="1569387923882100876">Dispositivo conectado</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Arrastra el control deslizante hasta que puedas leer esto cómodamente. El texto debería verse, al menos, de este tamaño al tocar dos veces un párrafo.</translation>
 <translation id="2323763861024343754">Almacenamiento del sitio</translation>
 <translation id="2328985652426384049">No puedes acceder</translation>
+<translation id="2334057574886324800">Se recibió el mensaje de texto</translation>
 <translation id="2349710944427398404">Cantidad total de datos que usa Chrome, lo que incluye las cuentas, favoritos y opciones de configuración guardadas</translation>
 <translation id="2353636109065292463">Revisando tu conexión a Internet</translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Actualizar página</translation>
 <translation id="2709516037105925701">Autocompletar</translation>
 <translation id="271033894570825754">Nuevo</translation>
+<translation id="2717722538473713889">Direcciones de correo electrónico</translation>
 <translation id="2728754400939377704">Ordenar por sitio</translation>
 <translation id="2744248271121720757">Presiona una palabra para realizar una búsqueda instantánea o ver acciones relacionadas</translation>
 <translation id="2760989362628427051">Activa el tema oscuro cuando esté activado el Ahorro de batería o el tema oscuro de tu dispositivo</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instalar</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Administrar</translation>
+<translation id="381841723434055211">Números de teléfono</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descargas borradas</translation>
 <translation id="3822502789641063741">¿Borrar el almacenamiento de sitios?</translation>
 <translation id="385051799172605136">Atrás</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> pestaña abierta; presiona para cambiar de pestaña}other{<ph name="OPEN_TABS_MANY" /> pestañas abiertas; presiona para cambiar de pestaña}}</translation>
 <translation id="5391532827096253100">La conexión con este sitio no es segura. Consulta la información del sitio.</translation>
 <translation id="5400569084694353794">Si usas esta aplicación, aceptas las <ph name="BEGIN_LINK1" />Condiciones del Servicio<ph name="END_LINK1" /> y el <ph name="BEGIN_LINK2" />Aviso de Privacidad<ph name="END_LINK2" /> de Chrome.</translation>
+<translation id="5403592356182871684">Nombres</translation>
 <translation id="5403644198645076998">Permitir solo algunos sitios</translation>
 <translation id="5414836363063783498">Verificando…</translation>
 <translation id="5423934151118863508">Aquí aparecerán las páginas que visites con más frecuencia</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">El nombre del archivo es demasiado largo</translation>
 <translation id="5689516760719285838">Ubicación</translation>
 <translation id="569536719314091526">Traduce esta página a cualquier idioma desde el botón Más opciones</translation>
+<translation id="5719150327511160085">Esperando el mensaje de texto</translation>
 <translation id="572328651809341494">Pestañas recientes</translation>
 <translation id="5726692708398506830">Agrandar todos los elementos de la página</translation>
 <translation id="5748802427693696783">Se seleccionaron las pestañas estándar</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 día restante</translation>
 <translation id="8200772114523450471">Reanudar</translation>
 <translation id="8209050860603202033">Abrir imagen</translation>
+<translation id="8218622182176210845">Administra tu cuenta</translation>
 <translation id="8220488350232498290">Contenido descargado: <ph name="GIGABYTES" /> gigabytes</translation>
 <translation id="8224471946457685718">Descargar artículos para ti mediante Wi-Fi</translation>
 <translation id="8232956427053453090">Conservar los datos</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
index 242c4495..68945ec 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Eliminar contraseña</translation>
 <translation id="1516229014686355813">La función Tocar para buscar envía la palabra seleccionada y la página actual como contexto a la Búsqueda de Google. Puedes desactivarla en <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Activo hoy</translation>
+<translation id="1544826120773021464">Para gestionar tu cuenta de Google, toca el botón Gestionar cuenta</translation>
 <translation id="1549000191223877751">Mover a otra ventana</translation>
 <translation id="1553358976309200471">Actualizar Chrome</translation>
 <translation id="1569387923882100876">Dispositivo conectado</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Arrastra el control deslizante hasta que puedas leer cómodamente. El texto debe tener al menos este tamaño después de tocar un párrafo dos veces.</translation>
 <translation id="2323763861024343754">Almacenamiento del sitio web</translation>
 <translation id="2328985652426384049">No se puede iniciar sesión</translation>
+<translation id="2334057574886324800">Mensaje de texto recibido</translation>
 <translation id="2349710944427398404">Datos totales utilizados por Chrome, incluidos los marcadores, las cuentas y la configuración guardada</translation>
 <translation id="2353636109065292463">Comprobar tu conexión a Internet</translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Actualizar página</translation>
 <translation id="2709516037105925701">Autocompletar</translation>
 <translation id="271033894570825754">Nuevo</translation>
+<translation id="2717722538473713889">Direcciones de correo electrónico</translation>
 <translation id="2728754400939377704">Ordenar por sitio web</translation>
 <translation id="2744248271121720757">Toca una palabra para buscarla de forma instantánea o ver acciones relacionadas</translation>
 <translation id="2760989362628427051">Habilita el tema oscuro cuando esté activado el tema oscuro del dispositivo o el dispositivo esté en modo de ahorro de batería</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instalar</translation>
 <translation id="3810838688059735925">Vídeo</translation>
 <translation id="3810973564298564668">Gestionar</translation>
+<translation id="381841723434055211">Números de teléfono</translation>
 <translation id="3819178904835489326">Descargas eliminadas: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">¿Borrar almacenamiento web?</translation>
 <translation id="385051799172605136">Atrás</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> pestaña abierta, toca para cambiar de una a otra}other{<ph name="OPEN_TABS_MANY" /> pestañas abiertas, toca para cambiar de una a otra}}</translation>
 <translation id="5391532827096253100">Tu conexión a este sitio web no es segura. Información del sitio web</translation>
 <translation id="5400569084694353794">Al utilizar esta aplicación, aceptas las <ph name="BEGIN_LINK1" />condiciones del servicio<ph name="END_LINK1" /> y el <ph name="BEGIN_LINK2" />aviso de privacidad<ph name="END_LINK2" /> de Chrome.</translation>
+<translation id="5403592356182871684">Nombres</translation>
 <translation id="5403644198645076998">Permitir solo determinados sitios web</translation>
 <translation id="5414836363063783498">Verificando…</translation>
 <translation id="5423934151118863508">Aquí aparecerán las páginas a las que accedes con más frecuencia</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">El nombre del archivo es demasiado largo</translation>
 <translation id="5689516760719285838">Ubicación</translation>
 <translation id="569536719314091526">Traduce esta página a cualquier idioma con el botón Más opciones</translation>
+<translation id="5719150327511160085">Esperando el mensaje de texto</translation>
 <translation id="572328651809341494">Pestañas recientes</translation>
 <translation id="5726692708398506830">Amplía todo el contenido de la página</translation>
 <translation id="5748802427693696783">Se ha cambiado a las pestañas estándares</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Queda 1 día</translation>
 <translation id="8200772114523450471">Reanudar</translation>
 <translation id="8209050860603202033">Abrir imagen</translation>
+<translation id="8218622182176210845">Gestionar la cuenta</translation>
 <translation id="8220488350232498290">GB descargados: <ph name="GIGABYTES" /></translation>
 <translation id="8224471946457685718">Descargar artículos recomendados para ti con Wi‑Fi</translation>
 <translation id="8232956427053453090">Conservar datos</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
index ef232ba7..cc723ce 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Kustuta parool</translation>
 <translation id="1516229014686355813">Puudutamine otsimiseks saadab valitud sõna ja praeguse lehe kontekstina Google'i otsingusse. Selle saab välja lülitada jaotises <ph name="BEGIN_LINK" />Seaded<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktiivne täna</translation>
+<translation id="1544826120773021464">Oma Google'i konto haldamiseks puudutage nuppu „Konto haldamine”</translation>
 <translation id="1549000191223877751">Teisalda teise aknasse</translation>
 <translation id="1553358976309200471">Värskenda Chrome'i</translation>
 <translation id="1569387923882100876">Ühendatud seade</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Lohistage liugurit, kuni saate seda mugavalt lugeda. Lõigu topeltkoputamisel peab tekst olema vähemalt nii suur.</translation>
 <translation id="2323763861024343754">Saidi salvestusruum</translation>
 <translation id="2328985652426384049">Ei saa sisse logida</translation>
+<translation id="2334057574886324800">Tekstsõnum saadi kätte</translation>
 <translation id="2349710944427398404">Chrome'i kasutatav andmemaht kokku, sh kontod, järjehoidjad ja salvestatud seaded</translation>
 <translation id="2353636109065292463">Interneti-ühenduse kontrollimine</translation>
 <translation id="2359808026110333948">Jätka</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Lehe värskendamine</translation>
 <translation id="2709516037105925701">Automaatne täitmine</translation>
 <translation id="271033894570825754">Uus</translation>
+<translation id="2717722538473713889">E-posti aadressid</translation>
 <translation id="2728754400939377704">Sordi saidi alusel</translation>
 <translation id="2744248271121720757">Puudutage sõna, et kohe otsida või seotud toiminguid näha</translation>
 <translation id="2760989362628427051">Aktiveeri tume teema, kui tume teema või akusäästja on seadmes sisse lülitatud</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installi</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Halda</translation>
+<translation id="381841723434055211">Telefoninumbrid</translation>
 <translation id="3819178904835489326">Tuvastati <ph name="NUMBER_OF_DOWNLOADS" /> allalaadimist</translation>
 <translation id="3822502789641063741">Kas tühj. saidi salvestusruum?</translation>
 <translation id="385051799172605136">Tagasi</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> avatud vaheleht, puudutage vahelehtede vahetamiseks}other{<ph name="OPEN_TABS_MANY" /> avatud vahelehte, puudutage vahelehtede vahetamiseks}}</translation>
 <translation id="5391532827096253100">Teie ühendus selle saidiga ei ole turvaline. Saidi teave</translation>
 <translation id="5400569084694353794">Seda rakendust kasutades nõustute Chrome'i <ph name="BEGIN_LINK1" />teenusetingimuste<ph name="END_LINK1" /> ja <ph name="BEGIN_LINK2" />privaatsusteatisega<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Nimed</translation>
 <translation id="5403644198645076998">Luba ainult kindlad saidid</translation>
 <translation id="5414836363063783498">Kinnitamine ...</translation>
 <translation id="5423934151118863508">Teie enim külastatud lehed ilmuvad siin</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Faili nimi on liiga pikk</translation>
 <translation id="5689516760719285838">Asukoht</translation>
 <translation id="569536719314091526">Tõlkige leht mis tahes keelde nupuga Rohkem valikuid</translation>
+<translation id="5719150327511160085">Tekstsõnumi ootel</translation>
 <translation id="572328651809341494">Hiljutised vahelehed</translation>
 <translation id="5726692708398506830">Lehel kuvatud sisu suurendamine</translation>
 <translation id="5748802427693696783">Tavapärased vahelehed on aktiveeritud</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Jäänud on 1 päev</translation>
 <translation id="8200772114523450471">Taasta</translation>
 <translation id="8209050860603202033">Ava kujutis</translation>
+<translation id="8218622182176210845">Konto haldamine</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB on alla laaditud</translation>
 <translation id="8224471946457685718">Teile soovitatud artiklite allalaadimine WiFi-ühendusega</translation>
 <translation id="8232956427053453090">Säilita andmed</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
index 16d0511..0d9f1ae 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">حذف گذرواژه</translation>
 <translation id="1516229014686355813">‏«ضربه برای جستجو» کلمه انتخاب‌شده و صفحه کنونی را به‌عنوان متن جستجو به «جستجوی Google» ارسال می‌کند. می‌توانید این ویژگی را در <ph name="BEGIN_LINK" />تنظیمات<ph name="END_LINK" /> خاموش کنید.</translation>
 <translation id="1521774566618522728">امروز فعال بود</translation>
+<translation id="1544826120773021464">‏برای مدیریت تنظیمات حساب Google، روی دکمه «مدیریت حساب» ضربه بزنید</translation>
 <translation id="1549000191223877751">انتقال به پنجره دیگر</translation>
 <translation id="1553358976309200471">‏به‌روزرسانی Chrome</translation>
 <translation id="1569387923882100876">دستگاه متصل</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">لغزنده را بکشید تا زمانی که بتوانید این متن را به راحتی بخوانید. بعد از دو ضربه متوالی روی یک پاراگراف، اندازه نوشتار حداقل باید به این بزرگی باشد.</translation>
 <translation id="2323763861024343754">فضای ذخیره‌سازی سایت</translation>
 <translation id="2328985652426384049">ورود به سیستم امکان‌پذیر نیست</translation>
+<translation id="2334057574886324800">پیامک دریافت شد</translation>
 <translation id="2349710944427398404">‏کل داده‌های استفاده‌شده توسط Chrome، شامل حساب‌ها، نشانک‌ها و تنظیمات ذخیره‌شده</translation>
 <translation id="2353636109065292463">بررسی اتصال اینترنت</translation>
 <translation id="2359808026110333948">ادامه</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">بازخوانی صفحه</translation>
 <translation id="2709516037105925701">تکمیل خودکار</translation>
 <translation id="271033894570825754">جدید</translation>
+<translation id="2717722538473713889">آدرس‌های ایمیل</translation>
 <translation id="2728754400939377704">مرتب‌سازی براساس سایت</translation>
 <translation id="2744248271121720757">برای جستجوی فوری، روی کلمه‌ای ضربه بزنید یا اقدام‌های مرتبط را ببینید</translation>
 <translation id="2760989362628427051">روشن شدن طرح زمینه تیره وقتی طرح زمینه تیره دستگاه یا «بهینه‌سازی باتری» روشن است</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">نصب</translation>
 <translation id="3810838688059735925">فیلم</translation>
 <translation id="3810973564298564668">مدیریت</translation>
+<translation id="381841723434055211">شماره‌های تلفن</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> بارگیری حذف شد</translation>
 <translation id="3822502789641063741">فضای ذخیره سایت پاک شود؟</translation>
 <translation id="385051799172605136">بازگشت</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> برگه باز، برای جستجوی برگه ضربه بزنید}one{<ph name="OPEN_TABS_MANY" /> برگه باز، برای جستجوی برگه ضربه بزنید}other{<ph name="OPEN_TABS_MANY" /> برگه باز، برای جستجوی برگه ضربه بزنید}}</translation>
 <translation id="5391532827096253100">اتصال شما به این سایت امن نیست. اطلاعات سایت</translation>
 <translation id="5400569084694353794">‏استفاده از این برنامه به معنای اعلام موافقت شما با <ph name="BEGIN_LINK1" />شرایط خدمات<ph name="END_LINK1" /> و <ph name="BEGIN_LINK2" />اعلامیه حریم خصوصی<ph name="END_LINK2" /> Chrome است.</translation>
+<translation id="5403592356182871684">نام‌ها</translation>
 <translation id="5403644198645076998">فقط بعضی از سایت‌ها مجاز هستند</translation>
 <translation id="5414836363063783498">در حال تأیید...</translation>
 <translation id="5423934151118863508">صفحاتی که بیشترین بازدید را از آنها داشته‌اید در اینجا نمایان می‌شوند</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">نام فایل خیلی طولانی است</translation>
 <translation id="5689516760719285838">مکان</translation>
 <translation id="569536719314091526">با استفاده از دکمه «گزینه‌های بیشتر»، این صفحه را به زبان‌های دیگر ترجمه کنید</translation>
+<translation id="5719150327511160085">منتظر پیامک</translation>
 <translation id="572328651809341494">برگه‌های اخیر</translation>
 <translation id="5726692708398506830">بزرگ‌تر کردن همه‌چیز در صفحه</translation>
 <translation id="5748802427693696783">به برگه‌های استاندارد تغییر یافت</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">۱ روز باقی‌مانده است</translation>
 <translation id="8200772114523450471">ازسرگیری</translation>
 <translation id="8209050860603202033">باز کردن تصویر</translation>
+<translation id="8218622182176210845">مدیریت حساب</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> گیگابایت بارگیری شد</translation>
 <translation id="8224471946457685718">‏بارگیری مقالات برای شما با Wi-Fi</translation>
 <translation id="8232956427053453090">نگه‌داشتن داده</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
index fdbbc7d..b54137f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Poista salasana</translation>
 <translation id="1516229014686355813">Napauttamalla hakeminen lähettää valitun sanan ja nykyisen sivun Google Haulle hakukontekstina. Voit poistaa ominaisuuden käytöstä <ph name="BEGIN_LINK" />asetuksissa<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktiivinen tänään</translation>
+<translation id="1544826120773021464">Voit ylläpitää Google-tiliäsi napauttamalla Ylläpidä tiliä ‑painiketta</translation>
 <translation id="1549000191223877751">Siirrä toiseen ikkunaan</translation>
 <translation id="1553358976309200471">Päivitä Chrome</translation>
 <translation id="1569387923882100876">Yhdistetty laite</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Vedä liukusäädintä, kunnes voit lukea tämän mukavasti. Tekstin tulisi olla vähintään näin suurta kaksoisnapautettuasi kappaletta.</translation>
 <translation id="2323763861024343754">Sivustotietoja tallennettu</translation>
 <translation id="2328985652426384049">Kirjautuminen epäonnistui</translation>
+<translation id="2334057574886324800">Tekstiviesti vastaanotettu</translation>
 <translation id="2349710944427398404">Chromen käyttämän tallennustilan kokonaismäärä, mukaan lukien tilit, kirjanmerkit ja tallennetut asetukset.</translation>
 <translation id="2353636109065292463">Internetyhteyttäsi tarkistetaan</translation>
 <translation id="2359808026110333948">Jatka</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Päivitä sivu</translation>
 <translation id="2709516037105925701">Automaattinen täyttö</translation>
 <translation id="271033894570825754">Uusi</translation>
+<translation id="2717722538473713889">Sähköpostiosoitteet</translation>
 <translation id="2728754400939377704">Lajittele sivuston mukaan</translation>
 <translation id="2744248271121720757">Napauta sanaa etsiäksesi välittömästi tai nähdäksesi asiaan liittyviä toimia.</translation>
 <translation id="2760989362628427051">Ota tumma teema käyttöön, kun laitteen tumma teema tai virransäästö on käytössä</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Asenna</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Hallinnoi</translation>
+<translation id="381841723434055211">Puhelinnumerot</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> latausta poistettiin.</translation>
 <translation id="3822502789641063741">Poistetaanko tiedot?</translation>
 <translation id="385051799172605136">Edellinen</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> avoin välilehti, vaihda välilehteä napauttamalla}other{<ph name="OPEN_TABS_MANY" /> avointa välilehteä, vaihda välilehteä napauttamalla}}</translation>
 <translation id="5391532827096253100">Sivustolle muodostamasi yhteys ei ole turvallinen. Sivuston tiedot</translation>
 <translation id="5400569084694353794">Käyttämällä sovellusta hyväksyt Chromen <ph name="BEGIN_LINK1" />käyttöehdot<ph name="END_LINK1" /> ja <ph name="BEGIN_LINK2" />tietosuojailmoituksen<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Nimet</translation>
 <translation id="5403644198645076998">Salli vain tietyt sivustot</translation>
 <translation id="5414836363063783498">Vahvistetaan…</translation>
 <translation id="5423934151118863508">Käydyimmät sivusi näkyvät täällä</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Tiedoston nimi on liian pitkä</translation>
 <translation id="5689516760719285838">Sijainti</translation>
 <translation id="569536719314091526">Käännä sivu mille tahansa kielelle Lisävalinnat-painikkeella</translation>
+<translation id="5719150327511160085">Odotetaan tekstiviestiä</translation>
 <translation id="572328651809341494">Hiljattain suljetut välilehdet</translation>
 <translation id="5726692708398506830">Suurenna sivun kaikki sisältö</translation>
 <translation id="5748802427693696783">Vaihdettiin näkyviin tavalliset välilehdet.</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 päivä jäljellä</translation>
 <translation id="8200772114523450471">Jatka</translation>
 <translation id="8209050860603202033">Avaa kuva</translation>
+<translation id="8218622182176210845">Ylläpidä tiliäsi</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> Gt ladattu</translation>
 <translation id="8224471946457685718">Lataa sinulle valittuja artikkeleita Wi-Fin kautta</translation>
 <translation id="8232956427053453090">Säilytä data</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
index 4db1936..3892262a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -620,7 +620,7 @@
 <translation id="5578795271662203820">Hanapin sa <ph name="SEARCH_ENGINE" /> ang larawan</translation>
 <translation id="5580090775658607195">Naigrupo ang <ph name="TAB_COUNT" /> tab</translation>
 <translation id="5581519193887989363">Mapipili mo kung ano ang isi-sync anumang oras sa <ph name="BEGIN_LINK1" />mga setting<ph name="END_LINK1" />.</translation>
-<translation id="5586306159936941448">I-drag ang tab sa isa pang tab para pagsamahin ang mga ito</translation>
+<translation id="5586306159936941448">Mag-drag ng tab sa isa pang tab para pagpangkatin ang mga ito</translation>
 <translation id="5595485650161345191">Mag-edit ng address</translation>
 <translation id="5596627076506792578">Higit pang opsyon</translation>
 <translation id="5599455543593328020">Incognito mode</translation>
@@ -651,7 +651,7 @@
 <translation id="5809361687334836369">{HOURS,plural, =1{# oras ang nakalipas}one{# oras ang nakalipas}other{# na oras ang nakalipas}}</translation>
 <translation id="5810288467834065221">Copyright <ph name="YEAR" /> Google LLC. Nakalaan ang lahat ng karapatan.</translation>
 <translation id="5817918615728894473">Ipares</translation>
-<translation id="58326064309361797">I-drag ang mga tab para pagsamahin ang mga ito</translation>
+<translation id="58326064309361797">I-drag ang mga tab para pagpangkatin ang mga ito</translation>
 <translation id="583281660410589416">Hindi-alam</translation>
 <translation id="5833984609253377421">Ibahagi ang link</translation>
 <translation id="5836192821815272682">Dina-download ang Update sa Chrome…</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
index ea1fbdeb..d2d5c910 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Supprimer le mot de passe</translation>
 <translation id="1516229014686355813">La fonctionnalité "Appuyer pour rechercher" transmet le mot sélectionné et la page actuelle en tant que contexte à la recherche Google. Vous pouvez la désactiver dans les <ph name="BEGIN_LINK" />paramètres<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Actif aujourd'hui</translation>
+<translation id="1544826120773021464">Pour gérer votre compte Google, appuyez sur le bouton "Gérer le compte"</translation>
 <translation id="1549000191223877751">Déplacer vers autre fenêtre</translation>
 <translation id="1553358976309200471">Mettre à jour Chrome</translation>
 <translation id="1569387923882100876">Appareil connecté</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Faites glisser le curseur pour lire le texte aisément. Sa taille doit être similaire à celle-ci lorsque vous appuyez deux fois sur un paragraphe.</translation>
 <translation id="2323763861024343754">Données de site stockées</translation>
 <translation id="2328985652426384049">Impossible de se connecter</translation>
+<translation id="2334057574886324800">SMS reçu</translation>
 <translation id="2349710944427398404">Espace de stockage utilisé pour l'ensemble des données Chrome, y compris les comptes, favoris et paramètres enregistrés</translation>
 <translation id="2353636109065292463">Vérifier votre connexion Internet</translation>
 <translation id="2359808026110333948">Continuer</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Actualiser la page</translation>
 <translation id="2709516037105925701">Saisie automatique</translation>
 <translation id="271033894570825754">Nouveau</translation>
+<translation id="2717722538473713889">Adresses e-mail</translation>
 <translation id="2728754400939377704">Trier par site</translation>
 <translation id="2744248271121720757">Appuyez sur un mot pour lancer une recherche instantanée ou afficher les actions associées</translation>
 <translation id="2760989362628427051">Activer le thème sombre lorsque le thème sombre ou l'économiseur de batterie de votre appareil est activé</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installer</translation>
 <translation id="3810838688059735925">Vidéo</translation>
 <translation id="3810973564298564668">Gérer</translation>
+<translation id="381841723434055211">Numéros de téléphone</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> téléchargements supprimés</translation>
 <translation id="3822502789641063741">Suppr. données de site ?</translation>
 <translation id="385051799172605136">Retour</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> onglet ouvert, appuyez pour changer d'onglet}one{<ph name="OPEN_TABS_MANY" /> onglet ouvert, appuyez pour changer d'onglet}other{<ph name="OPEN_TABS_MANY" /> onglets ouverts, appuyez pour changer d'onglet}}</translation>
 <translation id="5391532827096253100">Votre connexion à ce site n'est pas sécurisée. Informations sur le site</translation>
 <translation id="5400569084694353794">En utilisant cette application, vous acceptez les <ph name="BEGIN_LINK1" />Conditions d'utilisation<ph name="END_LINK1" /> et l'<ph name="BEGIN_LINK2" />Avis de confidentialité<ph name="END_LINK2" /> de Chrome.</translation>
+<translation id="5403592356182871684">Noms</translation>
 <translation id="5403644198645076998">N'autoriser que certains sites</translation>
 <translation id="5414836363063783498">Validation en cours…</translation>
 <translation id="5423934151118863508">Les pages les plus consultées s'affichent ici.</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Nom de fichier trop long</translation>
 <translation id="5689516760719285838">Position</translation>
 <translation id="569536719314091526">Traduire cette page dans n'importe quelle langue à partir du bouton "Plus d'options"</translation>
+<translation id="5719150327511160085">En attente d'un SMS…</translation>
 <translation id="572328651809341494">Onglets récents</translation>
 <translation id="5726692708398506830">Agrandir tous les éléments de la page</translation>
 <translation id="5748802427693696783">Onglets standards sélectionnés</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 jour restant</translation>
 <translation id="8200772114523450471">Reprendre</translation>
 <translation id="8209050860603202033">Ouvrir l'image</translation>
+<translation id="8218622182176210845">Gérer votre compte</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> Go téléchargé(s)</translation>
 <translation id="8224471946457685718">Télécharger des articles pour vous via le Wi-Fi</translation>
 <translation id="8232956427053453090">Conserver les données</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
index e9b2915..9c0fe8e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">પાસવર્ડ ડિલીટ કરો</translation>
 <translation id="1516229014686355813">શોધવા માટે ટૅપ કરો પસંદ કરાયેલ શબ્દ અને હાલના પેજને સંદર્ભ તરીકે Google શોધને મોકલે છે. તમે તેને <ph name="BEGIN_LINK" />સેટિંગ<ph name="END_LINK" />માં બંધ કરી શકો છો.</translation>
 <translation id="1521774566618522728">આજે સક્રિય છે</translation>
+<translation id="1544826120773021464">તમારું Google એકાઉન્ટ મેનેજ કરવા માટે, "એકાઉન્ટ મેનેજ કરો" બટન પર ટૅપ કરો</translation>
 <translation id="1549000191223877751">અન્ય વિંડો પર ખસેડો</translation>
 <translation id="1553358976309200471">Chrome અપડેટ કરો</translation>
 <translation id="1569387923882100876">કનેક્ટ કરેલ ઉપકરણ</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">જ્યાં સુધી તમે આ અનુકૂળ રીતે વાંચી ન શકો ત્યાં સુધી સ્લાઇડર ખેંચો. ફકરા પર ડબલ-ટેપિંગ પછી ટેક્સ્ટ ઓછામાં ઓછી આટલી મોટી દેખાવી જોઈએ.</translation>
 <translation id="2323763861024343754">સાઇટ સ્ટોરેજ</translation>
 <translation id="2328985652426384049">સાઇન ઇન કરી શકાતું નથી</translation>
+<translation id="2334057574886324800">ટેક્સ્ટ સંદેશ પ્રાપ્ત થયો</translation>
 <translation id="2349710944427398404">Chrome દ્વારા ઉપયોગમાં લેવાયેલ કુલ સ્ટોરેજ, એકાઉન્ટ્સ, બુકમાર્ક્સ અને સાચવેલ સેટિંગ્સ સહિત</translation>
 <translation id="2353636109065292463">તમારું ઇન્ટરનેટ કનેક્શન તપાસી રહ્યાં છીએ</translation>
 <translation id="2359808026110333948">આગળ વધો</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">પેજ રિફ્રેશ કરો</translation>
 <translation id="2709516037105925701">સ્વતઃભરો</translation>
 <translation id="271033894570825754">નવું</translation>
+<translation id="2717722538473713889">ઇમેઇલ ઍડ્રેસ</translation>
 <translation id="2728754400939377704">સાઇટ અનુસાર સૉર્ટ કરો</translation>
 <translation id="2744248271121720757">ઝટપટ શોધ કરવા માટે શબ્દ પર ટૅપ કરો અથવા સંબંધિત ક્રિયાઓ જુઓ</translation>
 <translation id="2760989362628427051">જ્યારે તમારા ડિવાઇસની ઘેરી થીમ અથવા બૅટરી સેવર ચાલુ હોય ત્યારે ઘેરી થીમ ચાલુ કરો</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">ઇન્સ્ટોલ કરો</translation>
 <translation id="3810838688059735925">વીડિયો</translation>
 <translation id="3810973564298564668">મેનેજ કરો</translation>
+<translation id="381841723434055211">ફોન નંબર</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ડાઉનલોડ કાઢી નાખ્યાં</translation>
 <translation id="3822502789641063741">સાઇટ સ્ટોરેજ સાફ કરીએ?</translation>
 <translation id="385051799172605136">પાછળ</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> ખુલ્લી ટૅબ, ટૅબને સ્વિચ કરવા માટે ટૅપ કરો}one{<ph name="OPEN_TABS_MANY" /> ખુલ્લી ટૅબ, ટૅબને સ્વિચ કરવા માટે ટૅપ કરો}other{<ph name="OPEN_TABS_MANY" /> ખુલ્લી ટૅબ, ટૅબને સ્વિચ કરવા માટે ટૅપ કરો}}</translation>
 <translation id="5391532827096253100">આ સાઇટ સાથેનું તમારું કનેક્શન સુરક્ષિત નથી. સાઇટની માહિતી</translation>
 <translation id="5400569084694353794">આ એપ્લિકેશનનો ઉપયોગ કરીને, તમે Chrome ની <ph name="BEGIN_LINK1" />સેવાની શરતો<ph name="END_LINK1" /> અને <ph name="BEGIN_LINK2" />ગોપનીયતા સૂચના<ph name="END_LINK2" /> સાથે સંમત છો.</translation>
+<translation id="5403592356182871684">નામ</translation>
 <translation id="5403644198645076998">ફક્ત અમુક સાઇટની મંજૂરી આપો</translation>
 <translation id="5414836363063783498">ચકાસી રહ્યું છે...</translation>
 <translation id="5423934151118863508">તમારા સૌથી વધુ મુલાકાત લીધેલા પૃષ્ઠો અહીં દેખાશે</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">ફાઇલનું નામ ખૂબ લાંબું છે</translation>
 <translation id="5689516760719285838">સ્થાન</translation>
 <translation id="569536719314091526">વધુ વિકલ્પો બટનમાંથી આ પેજનો અનુવાદ કોઈપણ ભાષામાં કરો</translation>
+<translation id="5719150327511160085">આગલા ટેક્સ્ટ સંદેશની રાહ જોઈ રહ્યું છે</translation>
 <translation id="572328651809341494">તાજેતરના ટેબ્સ</translation>
 <translation id="5726692708398506830">પૃષ્ઠ પરની તમામ સામગ્રીને મોટી કરો</translation>
 <translation id="5748802427693696783">માનક ટૅબ્સ પર સ્વિચ કરેલ છે</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 દિવસ બાકી</translation>
 <translation id="8200772114523450471">રિઝ્યુમે</translation>
 <translation id="8209050860603202033">છબી ખોલો</translation>
+<translation id="8218622182176210845">તમારું એકાઉન્ટ મેનેજ કરો</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB ડાઉનલોડ કરેલ</translation>
 <translation id="8224471946457685718">વાઇ-ફાઇ પર તમારા માટે લેખ ડાઉનલોડ કરો</translation>
 <translation id="8232956427053453090">ડેટા રાખો</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
index 9cec2b9..150592ab 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">पासवर्ड मिटाएं</translation>
 <translation id="1516229014686355813">'खोजने के लिए टैप करें' सुविधा चुने हुए शब्‍द और मौजूदा पेज को संदर्भ के रूप में 'Google सर्च' पर भेजती है. आप इसे <ph name="BEGIN_LINK" />सेटिंग<ph name="END_LINK" /> में जाकर बंद कर सकते हैं.</translation>
 <translation id="1521774566618522728">आज सक्रिय है</translation>
+<translation id="1544826120773021464">अपना खाता प्रबंधित करने के लिए, "खाता प्रबंधित करें" बटन पर टैप करें</translation>
 <translation id="1549000191223877751">अन्य विंडो में ले जाएं</translation>
 <translation id="1553358976309200471">Chrome अपडेट करें</translation>
 <translation id="1569387923882100876">कनेक्ट किया गया डिवाइस</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">इस टेक्स्ट को आसानी से पढ़ने लायक बनाने के लिए, स्‍लाइडर को आगे की ओर खींचें. पैराग्राफ़ पर डबल-टैप करने के बाद, टेक्स्ट को इतना बड़ा दिखाई देना चाहिए.</translation>
 <translation id="2323763861024343754">साइट मेमोरी</translation>
 <translation id="2328985652426384049">साइन इन नहीं कर सकते</translation>
+<translation id="2334057574886324800">मैसेज मिल गया</translation>
 <translation id="2349710944427398404">Chrome द्वारा उपयोग किया गया कुल डेटा, जिसमें खाते, बुकमार्क और सहेजी गईं सेटिंग शामिल हैं</translation>
 <translation id="2353636109065292463">आपके इंटरनेट कनेक्शन की जाँच की जा रही है</translation>
 <translation id="2359808026110333948">जारी रखें</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">पेज रीफ्रेश करें</translation>
 <translation id="2709516037105925701">ऑटोमैटिक भरना</translation>
 <translation id="271033894570825754">नया</translation>
+<translation id="2717722538473713889">ईमेल पते</translation>
 <translation id="2728754400939377704">साइट के हिसाब से क्रम में लगाएं</translation>
 <translation id="2744248271121720757">इंस्टैंट सर्च या मिलती-जुलती कार्रवाई देखने के लिए किसी शब्द पर टैप करें</translation>
 <translation id="2760989362628427051">अपने डिवाइस की गहरे रंग वाली थीम या 'बैटरी सेवर' चालू होने पर गहरे रंग वाली थीम चालू करें</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">इंस्‍टॉल करें</translation>
 <translation id="3810838688059735925">वीडियो</translation>
 <translation id="3810973564298564668">प्रबंधित करें</translation>
+<translation id="381841723434055211">फ़ोन नंबर</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोड हटाए गए</translation>
 <translation id="3822502789641063741">क्या आप साइट मेमोरी खाली करना चाहते हैं?</translation>
 <translation id="385051799172605136">वापस</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> टैब खुला है, एक टैब से दूसरे टैब पर जाने के लिए टैप करें}one{<ph name="OPEN_TABS_MANY" /> टैब खुले हैं, एक टैब से दूसरे टैब पर जाने के लिए टैप करें}other{<ph name="OPEN_TABS_MANY" /> टैब खुले हैं, एक टैब से दूसरे टैब पर जाने के लिए टैप करें}}</translation>
 <translation id="5391532827096253100">इस साइट से आपका कनेक्शन सुरक्षित नहीं है. साइट की जानकारी</translation>
 <translation id="5400569084694353794">इस ऐप्‍लिकेशन का इस्तेमाल करके, आप Chrome की <ph name="BEGIN_LINK1" />सेवा की शर्तों<ph name="END_LINK1" /> और <ph name="BEGIN_LINK2" />निजता सूचना<ph name="END_LINK2" /> से सहमत होते हैं.</translation>
+<translation id="5403592356182871684">नाम</translation>
 <translation id="5403644198645076998">सिर्फ़ कुछ निश्चित साइटों को ही अनुमति दें</translation>
 <translation id="5414836363063783498">सत्यापन हो रहा है...</translation>
 <translation id="5423934151118863508">  सबसे ज़्यादा देखे गए पेज यहां दिखाई देंगे</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">फ़ाइल का नाम बहुत लंबा है</translation>
 <translation id="5689516760719285838">स्थान</translation>
 <translation id="569536719314091526">'ज़्यादा विकल्प' बटन से इस पेज का अनुवाद किसी भी भाषा में करें</translation>
+<translation id="5719150327511160085">मैसेज मिलने का इंतज़ार किया जा रहा है</translation>
 <translation id="572328651809341494">हाल ही के टैब</translation>
 <translation id="5726692708398506830">पेज पर सब कुछ बड़ा करें</translation>
 <translation id="5748802427693696783">मानक टैब पर स्विच कर दिया गया</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 दिन शेष</translation>
 <translation id="8200772114523450471">फिर से शुरू करें</translation>
 <translation id="8209050860603202033">इमेज खोलें</translation>
+<translation id="8218622182176210845">अपना खाता प्रबंधित करें</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> जीबी डाउनलोड किया गया</translation>
 <translation id="8224471946457685718">वाई-फ़ाई चालू हाेने पर अपने लिए लेख डाउनलोड करें</translation>
 <translation id="8232956427053453090">डेटा रखें</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
index 7be8949..91972f8b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Izbriši zaporku</translation>
 <translation id="1516229014686355813">Značajka Dodirnite za pretraživanje Google pretraživanju šalje odabranu riječ i trenutačnu stranicu kao kontekst. Možete je isključiti u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktivan danas</translation>
+<translation id="1544826120773021464">Da biste upravljali svojim Google računom, dodirnite gumb "Upravljanje računom"</translation>
 <translation id="1549000191223877751">Premjesti u drugi prozor</translation>
 <translation id="1553358976309200471">Ažuriraj Chrome</translation>
 <translation id="1569387923882100876">Povezani uređaj</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Pomičite klizač dok ne budete mogli čitati ovaj tekst bez poteškoća. Tekst bi trebao biti barem ovoliko velik nakon što dvaput dodirnete odlomak.</translation>
 <translation id="2323763861024343754">Pohrana web-lokacije</translation>
 <translation id="2328985652426384049">Prijava nije moguća</translation>
+<translation id="2334057574886324800">Primljena je tekstna poruka</translation>
 <translation id="2349710944427398404">Ukupna količina podataka koju Chrome upotrebljava, uključujući račune, oznake i spremljene postavke.</translation>
 <translation id="2353636109065292463">Provjera vaše internetske veze</translation>
 <translation id="2359808026110333948">Nastavi</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Osvježavanje stranice</translation>
 <translation id="2709516037105925701">Automatsko popunjavanje</translation>
 <translation id="271033894570825754">Novo</translation>
+<translation id="2717722538473713889">E-adrese</translation>
 <translation id="2728754400939377704">Poredaj po web-lokaciji</translation>
 <translation id="2744248271121720757">Dodirnite riječ da biste je odmah pretražili ili vidjeli povezane radnje</translation>
 <translation id="2760989362628427051">Uključite tamnu temu kada je na uređaju uključena tamna tema ili Štednja baterije</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instaliraj</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Upravljaj</translation>
+<translation id="381841723434055211">Telefonski brojevi</translation>
 <translation id="3819178904835489326">Izbrisano preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Izbrisati pohranu?</translation>
 <translation id="385051799172605136">Natrag</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> otvorena kartica, dodirnite da biste prešli na drugu karticu}one{<ph name="OPEN_TABS_MANY" /> otvorena kartica, dodirnite da biste prešli na drugu karticu}few{<ph name="OPEN_TABS_MANY" /> otvorene kartice, dodirnite da biste prešli na drugu karticu}other{<ph name="OPEN_TABS_MANY" /> otvorenih kartica, dodirnite da biste prešli na drugu karticu}}</translation>
 <translation id="5391532827096253100">Veza s web-lokacijom nije sigurna. Informacije o web-lokaciji</translation>
 <translation id="5400569084694353794">Upotrebom te aplikacije prihvaćate Chromeove <ph name="BEGIN_LINK1" />Uvjete pružanja usluge<ph name="END_LINK1" /> i <ph name="BEGIN_LINK2" />Obavijest o privatnosti<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Nazivi</translation>
 <translation id="5403644198645076998">Dopusti samo određene web-lokacije</translation>
 <translation id="5414836363063783498">Potvrđivanje…</translation>
 <translation id="5423934151118863508">Najposjećenije stranice prikazivat će se ovdje</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Datoteka ima predugačak naziv</translation>
 <translation id="5689516760719285838">Lokacija</translation>
 <translation id="569536719314091526">Prevedite ovu stranicu na bilo koji jezik pomoću gumba Više opcija</translation>
+<translation id="5719150327511160085">Čekanje na tekstnu poruku</translation>
 <translation id="572328651809341494">Nedavne kartice</translation>
 <translation id="5726692708398506830">Povećavanje svega na stranici</translation>
 <translation id="5748802427693696783">Prešli ste na standardne kartice</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Još 1 dan</translation>
 <translation id="8200772114523450471">Nastavi</translation>
 <translation id="8209050860603202033">Otvori sliku</translation>
+<translation id="8218622182176210845">Upravljanje računom</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB preuzimanja</translation>
 <translation id="8224471946457685718">Preuzimaj članke putem Wi-Fija</translation>
 <translation id="8232956427053453090">Zadrži podatke</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
index 30a9e623..d9338b25 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Jelszó törlése</translation>
 <translation id="1516229014686355813">A Keresés koppintással funkció elküldi a kiválasztott szót és az aktuális oldalt kontextusként a Google Keresés számára. A funkciót a <ph name="BEGIN_LINK" />Beállításokban<ph name="END_LINK" /> lehet kikapcsolni.</translation>
 <translation id="1521774566618522728">Ma volt aktív</translation>
+<translation id="1544826120773021464">Google-fiókjának kezeléséhez koppintson a „Fiók kezelése” gombra</translation>
 <translation id="1549000191223877751">Áthelyezés másik ablakba</translation>
 <translation id="1553358976309200471">A Chrome böngésző frissítése</translation>
 <translation id="1569387923882100876">Csatlakoztatott eszköz</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Húzza a csúszkát, amíg kényelmesen nem tudja olvasni a szöveget. A szövegnek legalább ekkorának kell lennie, miután duplán koppint egy bekezdésre.</translation>
 <translation id="2323763861024343754">Webhely tárhelye</translation>
 <translation id="2328985652426384049">Nem sikerült a bejelentkezés</translation>
+<translation id="2334057574886324800">Megkapta az SMS-t</translation>
 <translation id="2349710944427398404">A Chrome által használt teljes adatmennyiség, beleértve a fiókokat, könyvjelzőket és mentett beállításokat is</translation>
 <translation id="2353636109065292463">Az internetkapcsolat ellenőrzése</translation>
 <translation id="2359808026110333948">Tovább</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Oldal frissítése</translation>
 <translation id="2709516037105925701">Automatikus kitöltés</translation>
 <translation id="271033894570825754">Új</translation>
+<translation id="2717722538473713889">E-mail-címek</translation>
 <translation id="2728754400939377704">Rendezés webhely szerint</translation>
 <translation id="2744248271121720757">Az azonnali kereséshez koppintson a kívánt szóra, vagy tekintse meg a kapcsolódó műveleteket</translation>
 <translation id="2760989362628427051">Sötét téma bekapcsolása, amikor az eszköz sötét témája vagy Akkumulátorkímélő módja be van kapcsolva</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Telepítés</translation>
 <translation id="3810838688059735925">Videó</translation>
 <translation id="3810973564298564668">Szerkesztés</translation>
+<translation id="381841723434055211">Telefonszámok</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> letöltés törölve</translation>
 <translation id="3822502789641063741">Törli a webhely tárhelyét?</translation>
 <translation id="385051799172605136">Vissza</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> megnyitott lap. A lapok között koppintással válthat.}other{<ph name="OPEN_TABS_MANY" /> megnyitott lap. A lapok között koppintással válthat.}}</translation>
 <translation id="5391532827096253100">Kapcsolata a webhellyel nem biztonságos. Webhelyadatok</translation>
 <translation id="5400569084694353794">Az alkalmazás használatával Ön elfogadja a Chrome <ph name="BEGIN_LINK1" />Általános Szerződési Feltételeit<ph name="END_LINK1" /> és az <ph name="BEGIN_LINK2" />Adatvédelmi közleményt<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Nevek</translation>
 <translation id="5403644198645076998">Csak bizonyos webhelyek engedélyezése</translation>
 <translation id="5414836363063783498">Ellenőrzés...</translation>
 <translation id="5423934151118863508">A leggyakrabban látogatott oldalak fognak itt megjelenni</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">A fájl neve túl hosszú</translation>
 <translation id="5689516760719285838">Tartózkodási hely</translation>
 <translation id="569536719314091526">Bármely nyelvre lefordíthatja ezt az oldalt a További lehetőségek gomb segítségével</translation>
+<translation id="5719150327511160085">Várakozás az SMS-re…</translation>
 <translation id="572328651809341494">Nemrég megnyitott lapok</translation>
 <translation id="5726692708398506830">Minden nagyítása az oldalon</translation>
 <translation id="5748802427693696783">Szabványos lapokra váltva</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 nap van hátra</translation>
 <translation id="8200772114523450471">Folytatás</translation>
 <translation id="8209050860603202033">Kép megnyitása</translation>
+<translation id="8218622182176210845">Fiók kezelése</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB letöltve</translation>
 <translation id="8224471946457685718">Cikkek letöltése Wi-Fi-kapcsolaton keresztül</translation>
 <translation id="8232956427053453090">Adatok megőrzése</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
index 5df6b2d0..128d4b0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Hapus sandi</translation>
 <translation id="1516229014686355813">Fitur Ketuk untuk Menelusuri mengirimkan kata yang dipilih dan halaman yang dibuka sebagai konteks ke Google Penelusuran. Anda dapat menonaktifkannya di <ph name="BEGIN_LINK" />Setelan<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktif hari ini</translation>
+<translation id="1544826120773021464">Untuk mengelola akun Google Anda, ketuk tombol "Kelola akun"</translation>
 <translation id="1549000191223877751">Beralih ke jendela lain</translation>
 <translation id="1553358976309200471">Perbarui browser Chrome</translation>
 <translation id="1569387923882100876">Perangkat yang Terhubung</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Geser ukuran teks sampai Anda dapat membacanya dengan nyaman. Teks akan terlihat setidaknya sebesar ini setelah Anda mengetuk sebuah paragraf dua kali.</translation>
 <translation id="2323763861024343754">Penyimpanan situs</translation>
 <translation id="2328985652426384049">Tidak dapat login</translation>
+<translation id="2334057574886324800">SMS diterima</translation>
 <translation id="2349710944427398404">Total data yang digunakan oleh Chrome, termasuk akun, bookmark, dan setelan yang tersimpan</translation>
 <translation id="2353636109065292463">Memeriksa sambungan internet Anda</translation>
 <translation id="2359808026110333948">Lanjutkan</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Segarkan halaman</translation>
 <translation id="2709516037105925701">Isi-Otomatis</translation>
 <translation id="271033894570825754">Baru</translation>
+<translation id="2717722538473713889">Alamat email</translation>
 <translation id="2728754400939377704">Urutkan menurut situs</translation>
 <translation id="2744248271121720757">Ketuk sebuah kata untuk menelusuri secara instan atau melihat tindakan terkait</translation>
 <translation id="2760989362628427051">Mengaktifkan tema gelap ketika tema gelap perangkat atau Penghemat Baterai aktif</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instal</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Kelola</translation>
+<translation id="381841723434055211">Nomor telepon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> download dihapus</translation>
 <translation id="3822502789641063741">Kosongkan penyimpanan situs?</translation>
 <translation id="385051799172605136">Mundur</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> tab terbuka, ketuk untuk beralih tab}other{<ph name="OPEN_TABS_MANY" /> tab terbuka, ketuk untuk beralih tab}}</translation>
 <translation id="5391532827096253100">Sambungan ke situs ini tidak aman. Informasi situs</translation>
 <translation id="5400569084694353794">Dengan menggunakan aplikasi ini, Anda menyetujui <ph name="BEGIN_LINK1" />Persyaratan Layanan<ph name="END_LINK1" /> dan <ph name="BEGIN_LINK2" />Pemberitahuan Privasi<ph name="END_LINK2" /> Chrome.</translation>
+<translation id="5403592356182871684">Nama</translation>
 <translation id="5403644198645076998">Hanya izinkan situs tertentu</translation>
 <translation id="5414836363063783498">Memverifikasi...</translation>
 <translation id="5423934151118863508">Halaman yang paling sering dikunjungi akan muncul di sini</translation>
@@ -620,7 +625,7 @@
 <translation id="5578795271662203820">Telusuri <ph name="SEARCH_ENGINE" /> untuk gambar ini</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> tab dikelompokkan</translation>
 <translation id="5581519193887989363">Anda dapat memilih konten apa yang akan disinkronkan di <ph name="BEGIN_LINK1" />setelan<ph name="END_LINK1" /> kapan saja.</translation>
-<translation id="5586306159936941448">Seret tab ke tab lain untuk mengelompokkannya</translation>
+<translation id="5586306159936941448">Tarik tab ke tab lain untuk mengelompokkannya</translation>
 <translation id="5595485650161345191">Edit alamat</translation>
 <translation id="5596627076506792578">Opsi lainnya</translation>
 <translation id="5599455543593328020">Mode samaran</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Nama file terlalu panjang</translation>
 <translation id="5689516760719285838">Lokasi</translation>
 <translation id="569536719314091526">Terjemahkan halaman ini ke bahasa apa pun dari tombol Opsi lainnya</translation>
+<translation id="5719150327511160085">Menunggu SMS</translation>
 <translation id="572328651809341494">Tab baru-baru ini</translation>
 <translation id="5726692708398506830">Memperbesar semua yang ada di halaman</translation>
 <translation id="5748802427693696783">Beralih ke tab standar</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 hari lagi</translation>
 <translation id="8200772114523450471">Lanjutkan</translation>
 <translation id="8209050860603202033">Buka gambar</translation>
+<translation id="8218622182176210845">Kelola akun Anda</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB didownload</translation>
 <translation id="8224471946457685718">Download artikel untuk Anda pada jaringan Wi-Fi</translation>
 <translation id="8232956427053453090">Pertahankan data</translation>
@@ -1114,7 +1121,7 @@
 <translation id="945632385593298557">Akses mikrofon Anda</translation>
 <translation id="951339005376969845">Hapus data yang sudah ada. Anda dapat mengambilnya dengan beralih ke <ph name="FROM_ACCOUNT" />.</translation>
 <translation id="95817756606698420">Chrome dapat menggunakan <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> sebagai mesin telusur di Tiongkok. Anda dapat mengubahnya di <ph name="BEGIN_LINK" />Setelan<ph name="END_LINK" />.</translation>
-<translation id="959682366969460160">Jadilah lebih teratur</translation>
+<translation id="959682366969460160">Atur dengan mudah</translation>
 <translation id="965817943346481315">Blokir jika situs menampilkan iklan yang mengganggu atau menyesatkan (direkomendasikan)</translation>
 <translation id="968900484120156207">Halaman yang Anda kunjungi akan muncul di sini</translation>
 <translation id="970715775301869095"><ph name="MINUTES" /> menit lagi</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
index 0ed6d9f3..e7d23c1e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Elimina la password</translation>
 <translation id="1516229014686355813">La funzione Tocca per cercare invia la parola selezionata e la pagina corrente come contesto alla Ricerca Google. Puoi disattivare la funzione nelle <ph name="BEGIN_LINK" />Impostazioni<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Attivo oggi</translation>
+<translation id="1544826120773021464">Per gestire il tuo Account Google, tocca il pulsante "Gestisci account"</translation>
 <translation id="1549000191223877751">Passa a un'altra finestra</translation>
 <translation id="1553358976309200471">Aggiorna Chrome</translation>
 <translation id="1569387923882100876">Dispositivo collegato</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Trascina il cursore finché leggi il testo senza problemi. Il testo dovrebbe avere queste dimensioni minime quando tocchi due volte un paragrafo.</translation>
 <translation id="2323763861024343754">Memoria utilizzata dai siti</translation>
 <translation id="2328985652426384049">Impossibile eseguire l'accesso</translation>
+<translation id="2334057574886324800">SMS ricevuto</translation>
 <translation id="2349710944427398404">Dati totali utilizzati da Chrome, tra cui account, preferiti e impostazioni salvate</translation>
 <translation id="2353636109065292463">Controllo della connessione a Internet</translation>
 <translation id="2359808026110333948">Continua</translation>
@@ -237,9 +239,10 @@
 <translation id="2707726405694321444">Aggiorna la pagina</translation>
 <translation id="2709516037105925701">Compilazione automatica</translation>
 <translation id="271033894570825754">Nuovo</translation>
+<translation id="2717722538473713889">Indirizzi email</translation>
 <translation id="2728754400939377704">Ordina per sito</translation>
 <translation id="2744248271121720757">Tocca una parola per eseguire una ricerca immediata o visualizzare le azioni correlate</translation>
-<translation id="2760989362628427051">Attiva il tema scuro quando sul dispositivo è attivo il tema scuro o il Risparmio energetico</translation>
+<translation id="2760989362628427051">Attiva il tema scuro quando sul dispositivo è attivo il tema scuro o il risparmio energetico</translation>
 <translation id="2762000892062317888">in questo istante</translation>
 <translation id="2777555524387840389"><ph name="SECONDS" /> sec rimanenti</translation>
 <translation id="2779651927720337254">non riuscito</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installa</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Gestisci</translation>
+<translation id="381841723434055211">Numeri di telefono</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> download eliminati</translation>
 <translation id="3822502789641063741">Cancellare i dati dei siti?</translation>
 <translation id="385051799172605136">Indietro</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> scheda aperta, tocca per cambiare scheda}other{<ph name="OPEN_TABS_MANY" /> schede aperte, tocca per cambiare scheda}}</translation>
 <translation id="5391532827096253100">La tua connessione al sito non è sicura. Informazioni sul sito</translation>
 <translation id="5400569084694353794">Se utilizzi questa applicazione, accetti i <ph name="BEGIN_LINK1" />Termini di servizio<ph name="END_LINK1" /> e l'<ph name="BEGIN_LINK2" />Informativa sulla privacy<ph name="END_LINK2" /> di Chrome.</translation>
+<translation id="5403592356182871684">Nomi</translation>
 <translation id="5403644198645076998">Consenti solo siti specifici</translation>
 <translation id="5414836363063783498">Verifica…</translation>
 <translation id="5423934151118863508">Le pagine che visiti più spesso verranno visualizzate qui</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Nome file troppo lungo</translation>
 <translation id="5689516760719285838">Posizione</translation>
 <translation id="569536719314091526">Traduci questa pagina in una lingua qualsiasi usando il pulsante Altre opzioni</translation>
+<translation id="5719150327511160085">In attesa dell'SMS</translation>
 <translation id="572328651809341494">Schede recenti</translation>
 <translation id="5726692708398506830">Ingrandisci i contenuti della pagina</translation>
 <translation id="5748802427693696783">Schede standard attivate</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 giorno rimanente</translation>
 <translation id="8200772114523450471">Riprendi</translation>
 <translation id="8209050860603202033">Apri immagine</translation>
+<translation id="8218622182176210845">Gestisci il tuo account</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB per i download</translation>
 <translation id="8224471946457685718">Scarica articoli per te tramite Wi-Fi</translation>
 <translation id="8232956427053453090">Conserva i dati</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
index f485c79..7e650023 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">パスワードを削除</translation>
 <translation id="1516229014686355813">「タップして検索」では選択した単語と現在のページがコンテキストとして Google 検索に送信されます。これは [<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />] で無効にすることができます。</translation>
 <translation id="1521774566618522728">最終同期: 今日</translation>
+<translation id="1544826120773021464">Googleアカウントを管理するには、[アカウントを管理] をタップします。</translation>
 <translation id="1549000191223877751">他のウィンドウに移動</translation>
 <translation id="1553358976309200471">Chrome を更新</translation>
 <translation id="1569387923882100876">接続しているデバイス</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">読みやすくなるまでスライダをドラッグしてください。段落をダブルタップするとテキストがこれより大きくなります。</translation>
 <translation id="2323763861024343754">サイトのストレージ</translation>
 <translation id="2328985652426384049">ログインできません</translation>
+<translation id="2334057574886324800">テキスト メッセージを受信しました</translation>
 <translation id="2349710944427398404">Chrome が使用するデータ全体(アカウント、ブックマーク、保存済みの設定など)</translation>
 <translation id="2353636109065292463">インターネット接続を確認しています</translation>
 <translation id="2359808026110333948">続行</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">ページを更新</translation>
 <translation id="2709516037105925701">自動入力</translation>
 <translation id="271033894570825754">新しいファイル</translation>
+<translation id="2717722538473713889">メールアドレス</translation>
 <translation id="2728754400939377704">サイトで並べ替え</translation>
 <translation id="2744248271121720757">単語をタップすると、検索をすばやく実行したり、関連する操作メニューを確認したりできます</translation>
 <translation id="2760989362628427051">デバイスのダークテーマまたはバッテリー セーバーがオンのときにダークテーマをオンにする</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">インストール</translation>
 <translation id="3810838688059735925">動画</translation>
 <translation id="3810973564298564668">管理</translation>
+<translation id="381841723434055211">電話番号</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> 件のダウンロードを削除しました</translation>
 <translation id="3822502789641063741">サイトのストレージ データを削除しますか?</translation>
 <translation id="385051799172605136">戻る</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> 個のタブが開いています。タブを切り替えるにはタップします}other{<ph name="OPEN_TABS_MANY" /> 個のタブが開いています。タブを切り替えるにはタップします}}</translation>
 <translation id="5391532827096253100">このサイトへの接続は保護されていません。サイト情報</translation>
 <translation id="5400569084694353794">このアプリケーションを使用すると、Chrome の<ph name="BEGIN_LINK1" />利用規約<ph name="END_LINK1" />と<ph name="BEGIN_LINK2" />プライバシーに関するお知らせ<ph name="END_LINK2" />に同意したことになります。</translation>
+<translation id="5403592356182871684">名前</translation>
 <translation id="5403644198645076998">特定のサイトのみを許可</translation>
 <translation id="5414836363063783498">確認しています…</translation>
 <translation id="5423934151118863508">最もアクセスの多かったページがここに表示されます</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">ファイル名が長すぎます</translation>
 <translation id="5689516760719285838">位置情報</translation>
 <translation id="569536719314091526">[その他のオプション] から、このページを任意の言語に翻訳できます</translation>
+<translation id="5719150327511160085">テキスト メッセージを待機しています</translation>
 <translation id="572328651809341494">最近使ったタブ</translation>
 <translation id="5726692708398506830">ページ上のすべての要素を拡大する</translation>
 <translation id="5748802427693696783">標準のタブに切り替えました</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">残り 1 日</translation>
 <translation id="8200772114523450471">再開</translation>
 <translation id="8209050860603202033">画像を開く</translation>
+<translation id="8218622182176210845">アカウントを管理</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB をダウンロードで使用中</translation>
 <translation id="8224471946457685718">Wi-Fi 接続時に記事をダウンロード</translation>
 <translation id="8232956427053453090">データを保持</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
index 1366c0b..033eaae 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">ಪಾಸ್‌ವರ್ಡ್ ಅಳಿಸಿ</translation>
 <translation id="1516229014686355813">"ಹುಡುಕಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ" ಮೂಲಕ ಆಯ್ಕೆಮಾಡಿದ ಪದ ಮತ್ತು ಪ್ರಸ್ತುತ ಪುಟವನ್ನು ಸಂದರ್ಭಕ್ಕೆ ತಕ್ಕಂತೆ Google ಹುಡುಕಾಟಕ್ಕೆ ಕಳುಹಿಸುತ್ತದೆ. ನೀವು ಇದನ್ನು <ph name="BEGIN_LINK" />ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK" /> ಆಫ್ ಮಾಡಬಹುದು.</translation>
 <translation id="1521774566618522728">ಇಂದು ಸಕ್ರಿಯ</translation>
+<translation id="1544826120773021464">ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಲು, "ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ" ಬಟನ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="1549000191223877751">ಇತರ ವಿಂಡೋಗೆ ಸರಿಸಿ</translation>
 <translation id="1553358976309200471">Chrome ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ</translation>
 <translation id="1569387923882100876">ಸಂಪರ್ಕಿಸಲಾದ ಸಾಧನ</translation>
@@ -186,6 +187,7 @@
 <translation id="2321958826496381788">ನೀವು ಇದನ್ನು ಆರಾಮವಾಗಿ ಓದಲು ಸಾಧ್ಯವಾಗುವವರೆಗೆ ಸ್ಲೈಡರ್ ಎಳೆಯಿರಿ. ಪ್ಯಾರಾಗ್ರಾಫ್‌ನಲ್ಲಿ ಡಬಲ್ ಟ್ಯಾಪಿಂಗ್ ಮಾಡಿದ ನಂತರ ಪಠ್ಯವು ಕನಿಷ್ಠ ಇಷ್ಟು ದೊಡ್ಡದಾಗಿ ಕಾಣಿಸಬೇಕು.</translation>
 <translation id="2323763861024343754">ಸೈಟ್ ಸಂಗ್ರಹಣೆ</translation>
 <translation id="2328985652426384049">ಸೈನ್ ಇನ್ ಆಗಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
+<translation id="2334057574886324800">ಪಠ್ಯ ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸಲಾಗಿದೆ</translation>
 <translation id="2349710944427398404">ಖಾತೆಗಳು, ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ಮತ್ತು ಉಳಿಸಿದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ Chrome ಬಳಸಿದ ಒಟ್ಟು ಡೇಟಾ</translation>
 <translation id="2353636109065292463">ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="2359808026110333948">ಮುಂದುವರೆಸಿ</translation>
@@ -238,6 +240,7 @@
 <translation id="2707726405694321444">ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation>
 <translation id="2709516037105925701">ಸ್ವಯಂತುಂಬುವಿಕೆ</translation>
 <translation id="271033894570825754">ಹೊಸತು</translation>
+<translation id="2717722538473713889">ಇಮೇಲ್ ವಿಳಾಸಗಳು</translation>
 <translation id="2728754400939377704">ಸೈಟ್ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ</translation>
 <translation id="2744248271121720757">ತತ್‌ಕ್ಷಣ ಹುಡುಕಲು ಅಥವಾ ಸಂಬಂಧಿತ ಕ್ರಿಯೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಪದವನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="2760989362628427051">ನಿಮ್ಮ ಸಾಧನದ ಡಾರ್ಕ್ ಥೀಮ್ ಅಥವಾ ಬ್ಯಾಟರಿ ಸೇವರ್ ಆನ್ ಆಗಿರುವಾಗ, ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು ಆನ್ ಮಾಡಿ</translation>
@@ -369,6 +372,7 @@
 <translation id="3789841737615482174">ಸ್ಥಾಪಿಸು</translation>
 <translation id="3810838688059735925">ವೀಡಿಯೊ</translation>
 <translation id="3810973564298564668">ನಿರ್ವಹಿಸು</translation>
+<translation id="381841723434055211">ಫೋನ್ ಸಂಖ್ಯೆಗಳು</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation>
 <translation id="3822502789641063741">ಸೈಟ್ ಸಂಗ್ರಹಣೆ ತೆರವುಗೊಳಿಸುವುದೇ?</translation>
 <translation id="385051799172605136">ಹಿಂದೆ</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> ಟ್ಯಾಬ್ ತೆರೆದಿದೆ, ಟ್ಯಾಬ್‌ಗಳನ್ನು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ}one{<ph name="OPEN_TABS_MANY" /> ಟ್ಯಾಬ್‌ಗಳು ತೆರೆದಿವೆ, ಟ್ಯಾಬ್‌ಗಳನ್ನು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ}other{<ph name="OPEN_TABS_MANY" /> ಟ್ಯಾಬ್‌ಗಳು ತೆರೆದಿವೆ, ಟ್ಯಾಬ್‌ಗಳನ್ನು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ}}</translation>
 <translation id="5391532827096253100">ಈ ಸೈಟ್‌ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕವು ಸುರಕ್ಷಿತವಾಗಿಲ್ಲ. ಸೈಟ್ ಮಾಹಿತಿ</translation>
 <translation id="5400569084694353794">ಈ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸುವ ಮೂಲಕ, ನೀವು Chrome ನ <ph name="BEGIN_LINK1" />ಸೇವಾ ನಿಯಮಗಳು<ph name="END_LINK1" /> ಮತ್ತು <ph name="BEGIN_LINK2" />ಗೌಪ್ಯತೆ ಪ್ರಕಟಣೆ<ph name="END_LINK2" />ಗೆ ಸಮ್ಮತಿಸುತ್ತೀರಿ.</translation>
+<translation id="5403592356182871684">ಹೆಸರುಗಳು</translation>
 <translation id="5403644198645076998">ಕೆಲವು ಸೈಟ್‌ಗಳಿಗೆ ಮಾತ್ರ ಅನುಮತಿಸಿ</translation>
 <translation id="5414836363063783498">ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="5423934151118863508">ನಿವು ಹೆಚ್ಚು ಭೇಟಿ ನೀಡುವ ಪುಟಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">ಫೈಲ್‌ನ ಹೆಸರು ತುಂಬಾ ಉದ್ದವಾಗಿದೆ</translation>
 <translation id="5689516760719285838">ಸ್ಥಳ</translation>
 <translation id="569536719314091526">ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು ಬಟನ್ ಮೂಲಕ ಈ ಪುಟವನ್ನು ಯಾವ ಭಾಷೆಗಾದರೂ ಅನುವಾದಿಸಿ</translation>
+<translation id="5719150327511160085">ಪಠ್ಯ ಸಂದೇಶವನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="572328651809341494">ಇತ್ತೀಚಿನ ಟ್ಯಾಬ್‌ಗಳು</translation>
 <translation id="5726692708398506830">ಪುಟದಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದನ್ನೂ ದೊಡ್ಡದಾಗಿಸಿ</translation>
 <translation id="5748802427693696783">ಪ್ರಮಾಣಿತ ಟ್ಯಾಬ್‌ಗಳಿಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ</translation>
@@ -651,7 +657,7 @@
 <translation id="5809361687334836369">{HOURS,plural, =1{# ಗಂಟೆಯ ಹಿಂದೆ}one{# ಗಂಟೆಗಳ ಹಿಂದೆ}other{# ಗಂಟೆಗಳ ಹಿಂದೆ}}</translation>
 <translation id="5810288467834065221">ಕೃತಿಸ್ವಾಮ್ಯ <ph name="YEAR" /> Google LLC. ಎಲ್ಲ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ.</translation>
 <translation id="5817918615728894473">ಜೋಡಿಸು</translation>
-<translation id="58326064309361797">ಅವುಗಳನ್ನು ಗುಂಪು ಮಾಡಲು ಟ್ಯಾಬ್‌ಗಳನ್ನು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ</translation>
+<translation id="58326064309361797">ಟ್ಯಾಬ್‍‍ಗಳನ್ನು ಗುಂಪು ಮಾಡಲು ಅವುಗಳನ್ನು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ</translation>
 <translation id="583281660410589416">ಅಪರಿಚಿತ</translation>
 <translation id="5833984609253377421">ಲಿಂಕ್ ಹಂಚಿಕೊಳ್ಳಿ</translation>
 <translation id="5836192821815272682">Chrome ಅಪ್‌ಡೇಟ್ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…</translation>
@@ -982,6 +988,7 @@
 <translation id="8190358571722158785">1 ದಿನ ಉಳಿದಿದೆ</translation>
 <translation id="8200772114523450471">ಪುನರಾರಂಭಿಸು</translation>
 <translation id="8209050860603202033">ಚಿತ್ರವನ್ನು ತೆರೆಯಿರಿ</translation>
+<translation id="8218622182176210845">ನಿಮ್ಮ ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="8224471946457685718">ವೈ-ಫೈಯಲ್ಲಿ ನಿಮಗಾಗಿ ಲೇಖನಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="8232956427053453090">ಡೇಟಾವನ್ನುಇರಿಸಿಕೊಳ್ಳಿ</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
index 4c91bc8..2eb0724 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">비밀번호 삭제</translation>
 <translation id="1516229014686355813">탭하여 검색을 사용하면 선택한 단어와 현재 페이지가 Google 검색에 전송되어 맥락으로 사용됩니다. <ph name="BEGIN_LINK" />설정<ph name="END_LINK" />에서 이 기능을 사용 중지할 수 있습니다.</translation>
 <translation id="1521774566618522728">오늘 사용</translation>
+<translation id="1544826120773021464">Google 계정을 관리하려면 '계정 관리' 버튼을 탭하세요.</translation>
 <translation id="1549000191223877751">다른 창으로 이동</translation>
 <translation id="1553358976309200471">Chrome 업데이트</translation>
 <translation id="1569387923882100876">연결된 기기</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">편하게 읽을 수 있을 때까지 슬라이더를 드래그하세요. 단락을 두 번 탭하면 텍스트가 이 이상의 크기로 표시됩니다.</translation>
 <translation id="2323763861024343754">사이트 저장공간</translation>
 <translation id="2328985652426384049">로그인할 수 없음</translation>
+<translation id="2334057574886324800">SMS를 수신했습니다.</translation>
 <translation id="2349710944427398404">계정, 북마크, 저장된 설정 등 Chrome에서 사용한 전체 데이터</translation>
 <translation id="2353636109065292463">인터넷 연결 상태를 확인하세요.</translation>
 <translation id="2359808026110333948">계속</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">페이지 새로고침</translation>
 <translation id="2709516037105925701">자동 완성</translation>
 <translation id="271033894570825754">새 파일</translation>
+<translation id="2717722538473713889">이메일 주소</translation>
 <translation id="2728754400939377704">사이트별 정렬</translation>
 <translation id="2744248271121720757">단어를 탭하여 즉시 검색하거나 관련 작업을 확인하세요</translation>
 <translation id="2760989362628427051">기기의 어두운 테마 또는 절전 모드가 켜지면 어두운 테마를 사용 설정합니다.</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">설치</translation>
 <translation id="3810838688059735925">동영상</translation>
 <translation id="3810973564298564668">관리</translation>
+<translation id="381841723434055211">전화번호</translation>
 <translation id="3819178904835489326">다운로드 <ph name="NUMBER_OF_DOWNLOADS" />개 삭제됨</translation>
 <translation id="3822502789641063741">사이트 저장공간을 삭제하시겠습니까?</translation>
 <translation id="385051799172605136">뒤로</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{열려 있는 탭 <ph name="OPEN_TABS_ONE" />개, 탭 간에 전환하려면 탭하세요.}other{열려 있는 탭 <ph name="OPEN_TABS_MANY" />개, 탭 간에 전환하려면 탭하세요.}}</translation>
 <translation id="5391532827096253100">이 사이트와의 연결은 안전하지 않습니다. 사이트 정보</translation>
 <translation id="5400569084694353794">이 애플리케이션을 사용하면 Chrome의 <ph name="BEGIN_LINK1" />서비스 약관<ph name="END_LINK1" />과 <ph name="BEGIN_LINK2" />개인정보처리방침<ph name="END_LINK2" />에 동의하게 됩니다.</translation>
+<translation id="5403592356182871684">이름</translation>
 <translation id="5403644198645076998">특정 사이트만 허용</translation>
 <translation id="5414836363063783498">확인 중...</translation>
 <translation id="5423934151118863508">자주 방문한 페이지가 여기에 표시됩니다.</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">파일 이름이 너무 깁니다.</translation>
 <translation id="5689516760719285838">위치</translation>
 <translation id="569536719314091526">옵션 더보기 버튼을 눌러 이 페이지를 원하는 언어로 번역하세요</translation>
+<translation id="5719150327511160085">SMS를 기다리는 중</translation>
 <translation id="572328651809341494">최근 탭</translation>
 <translation id="5726692708398506830">페이지의 모든 항목 확대</translation>
 <translation id="5748802427693696783">일반 탭으로 전환됨</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1일 남음</translation>
 <translation id="8200772114523450471">다시 시작</translation>
 <translation id="8209050860603202033">이미지 열기</translation>
+<translation id="8218622182176210845">계정 관리</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" />GB가 다운로드됨</translation>
 <translation id="8224471946457685718">Wi-Fi로 추천 기사 다운로드</translation>
 <translation id="8232956427053453090">데이터 보관</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
index 5f3af4f..471e54b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Ištrinti slaptažodį</translation>
 <translation id="1516229014686355813">Naudojant Paiešką palietus siunčiamas žodis ir jo kontekstas „Google“ paieškai. Šią funkciją galite išjungti skiltyje <ph name="BEGIN_LINK" />„Nustatymai“<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktyvus šiandien</translation>
+<translation id="1544826120773021464">Jei norite tvarkyti „Google“ paskyrą, palieskite mygtuką „Tvarkyti“</translation>
 <translation id="1549000191223877751">Perkelti į kitą langą</translation>
 <translation id="1553358976309200471">Atnaujinkite „Chrome“</translation>
 <translation id="1569387923882100876">Prijungtas įrenginys</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Vilkite šliaužiklį, kol bus patogu skaityti šį tekstą. Du kartus palietus pastraipą, tekstas turėtų būti mažiausiai tokio dydžio.</translation>
 <translation id="2323763861024343754">Svetainės saugykla</translation>
 <translation id="2328985652426384049">Nepavyksta prisijungti</translation>
+<translation id="2334057574886324800">Gautas teksto pranešimas</translation>
 <translation id="2349710944427398404">Bendras „Chrome“ naudojamų duomenų kiekis, įskaitant paskyras, žymes ir išsaugotus nustatymus</translation>
 <translation id="2353636109065292463">Tikrinamas interneto ryšys</translation>
 <translation id="2359808026110333948">Tęskite</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Atnaujinti puslapį</translation>
 <translation id="2709516037105925701">Automatinis pildymas</translation>
 <translation id="271033894570825754">Naujiena</translation>
+<translation id="2717722538473713889">El. pašto adresai</translation>
 <translation id="2728754400939377704">Rūšiuoti pagal svetainę</translation>
 <translation id="2744248271121720757">Palieskite žodį ir ieškokite akimirksniu arba peržiūrėkite susijusius veiksmus</translation>
 <translation id="2760989362628427051">Įjungti tamsiąją temą, kai įjungta įrenginio tamsioji tema arba akumuliatoriaus tausojimo priemonė</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Įdiegti</translation>
 <translation id="3810838688059735925">Vaizdo</translation>
 <translation id="3810973564298564668">Valdyti</translation>
+<translation id="381841723434055211">Telefono numeriai</translation>
 <translation id="3819178904835489326">Ištrinta atsisiuntimų: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Išvalyti svet. saugyklą?</translation>
 <translation id="385051799172605136">Atgal</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> atidarytas skirtukas; palieskite, kad perjungtumėte skirtukus}one{<ph name="OPEN_TABS_MANY" /> atidarytas skirtukas; palieskite, kad perjungtumėte skirtukus}few{<ph name="OPEN_TABS_MANY" /> atidaryti skirtukai; palieskite, kad perjungtumėte skirtukus}many{<ph name="OPEN_TABS_MANY" /> atidaryto skirtuko; palieskite, kad perjungtumėte skirtukus}other{<ph name="OPEN_TABS_MANY" /> atidarytų skirtukų; palieskite, kad perjungtumėte skirtukus}}</translation>
 <translation id="5391532827096253100">Ryšys su šia svetaine nėra saugus. Svetainės informacija</translation>
 <translation id="5400569084694353794">Naudodami šią programą sutinkate su „Chrome“ <ph name="BEGIN_LINK1" />paslaugų teikimo sąlygomis<ph name="END_LINK1" /> ir <ph name="BEGIN_LINK2" />privatumo pranešimo<ph name="END_LINK2" /> sąlygomis.</translation>
+<translation id="5403592356182871684">Pavadinimai</translation>
 <translation id="5403644198645076998">Leisti tik konkrečias svetaines</translation>
 <translation id="5414836363063783498">Patvirtinama…</translation>
 <translation id="5423934151118863508">Puslapiai, kuriuose lankomasi dažniausiai, bus rodomi čia</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Failo pavadinimas per ilgas</translation>
 <translation id="5689516760719285838">Vieta</translation>
 <translation id="569536719314091526">Išverskite šį puslapį į bet kokią kalbą spustelėję mygtuką „Daugiau parinkčių“</translation>
+<translation id="5719150327511160085">Laukiama teksto pranešimo</translation>
 <translation id="572328651809341494">Naujausi skirtukai</translation>
 <translation id="5726692708398506830">Padidinti visą puslapio turinį</translation>
 <translation id="5748802427693696783">Perjungta į įprastus skirtukus</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Liko 1 d.</translation>
 <translation id="8200772114523450471">Atnaujinti</translation>
 <translation id="8209050860603202033">Atidaryti vaizdą</translation>
+<translation id="8218622182176210845">Paskyros tvarkymas</translation>
 <translation id="8220488350232498290">Atsisiųsta <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">Atsisiųsti jums skirtus straipsnius naudojant „Wi-Fi“</translation>
 <translation id="8232956427053453090">Palikti duomenis</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
index 9328de5..ce5dbd1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Dzēst paroli</translation>
 <translation id="1516229014686355813">Izmantojot funkciju “Pieskarties, lai meklētu”, atlasītais vārds tiek nosūtīts pakalpojumam Google meklēšana, pievienojot pašreiz skatīto lapu kā kontekstu. Varat to izslēgt lapā <ph name="BEGIN_LINK" />Iestatījumi<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktīvs šodien</translation>
+<translation id="1544826120773021464">Lai pārvaldītu savu Google kontu, pieskarieties pogai “Konta pārvaldība”</translation>
 <translation id="1549000191223877751">Pārvietot uz citu logu</translation>
 <translation id="1553358976309200471">Atjaunināt Chrome</translation>
 <translation id="1569387923882100876">Pievienota ierīce</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Velciet slīdni, kamēr varat ērti lasīt. Pēc dubultskāriena rindkopai tekstam ir jābūt vismaz šādā lielumā.</translation>
 <translation id="2323763861024343754">Vietnes krātuve</translation>
 <translation id="2328985652426384049">Nevar pierakstīties</translation>
+<translation id="2334057574886324800">Īsziņa ir saņemta</translation>
 <translation id="2349710944427398404">Kopējais pārlūkā Chrome izmantoto datu apjoms, ieskaitot kontus, grāmatzīmes un saglabātos iestatījumus</translation>
 <translation id="2353636109065292463">Notiek interneta savienojuma pārbaude</translation>
 <translation id="2359808026110333948">Turpināt</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Atsvaidzināt lapu</translation>
 <translation id="2709516037105925701">Automātiskā aizpilde</translation>
 <translation id="271033894570825754">Jauns</translation>
+<translation id="2717722538473713889">E-pasta adreses</translation>
 <translation id="2728754400939377704">Kārtot pēc vietnes</translation>
 <translation id="2744248271121720757">Pieskarieties vārdam, lai meklētu tūlīt vai skatītu saistītas darbības.</translation>
 <translation id="2760989362628427051">Ieslēgt tumšo motīvu, kad ierīcē ir ieslēgts tumšais motīvs vai akumulatora jaudas taupīšanas režīms</translation>
@@ -260,7 +263,7 @@
 <translation id="2888126860611144412">Par Chrome</translation>
 <translation id="2891154217021530873">Pārtraukt lapas ielādi</translation>
 <translation id="2893180576842394309">Google var izmantot jūsu vēsturi, lai personalizētu Meklēšanu un citus Google pakalpojumus.</translation>
-<translation id="2898264748040935573">Rediģējiet saglabāto paroli</translation>
+<translation id="2898264748040935573">Rediģēt saglabāto paroli</translation>
 <translation id="2900528713135656174">Izveidot pasākumu</translation>
 <translation id="2902702728133930130">Pārlūka Chrome palaišanas laikā radās neparedzēta kļūda.</translation>
 <translation id="290376772003165898">Vai lapa nav šajā valodā: <ph name="LANGUAGE" />?</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instalēt</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Pārvaldīt</translation>
+<translation id="381841723434055211">Tālruņa numuri</translation>
 <translation id="3819178904835489326">Izdzēsti <ph name="NUMBER_OF_DOWNLOADS" /> lejupielādētie vienumi</translation>
 <translation id="3822502789641063741">Vai notīrīt vietnes krātuvi?</translation>
 <translation id="385051799172605136">Atpakaļ</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> atvērta cilne. Pieskarieties, lai pārslēgtu cilnes.}zero{<ph name="OPEN_TABS_MANY" /> atvērtu ciļņu. Pieskarieties, lai pārslēgtu cilnes.}one{<ph name="OPEN_TABS_MANY" /> atvērta cilne. Pieskarieties, lai pārslēgtu cilnes.}other{<ph name="OPEN_TABS_MANY" /> atvērtas cilnes. Pieskarieties, lai pārslēgtu cilnes.}}</translation>
 <translation id="5391532827096253100">Savienojums ar šo vietni nav drošs. Vietnes informācija</translation>
 <translation id="5400569084694353794">Izmantojot šo lietojumprogrammu, jūs piekrītat Chrome <ph name="BEGIN_LINK1" />pakalpojumu sniegšanas noteikumiem<ph name="END_LINK1" /> un <ph name="BEGIN_LINK2" />konfidencialitātes paziņojumam<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Nosaukumi</translation>
 <translation id="5403644198645076998">Atļaut apmeklēt tikai konkrētas vietnes</translation>
 <translation id="5414836363063783498">Notiek verifikācija...</translation>
 <translation id="5423934151118863508">Šeit tiks parādītas jūsu visvairāk apmeklētās lapas.</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Faila nosaukums ir pārāk garš</translation>
 <translation id="5689516760719285838">Atrašanās vieta</translation>
 <translation id="569536719314091526">Tulkojiet šīs lapas saturu jebkurā valodā, izmantojot pogu Vairāk opciju.</translation>
+<translation id="5719150327511160085">Tiek gaidīta īsziņa</translation>
 <translation id="572328651809341494">Nesen atvērtas cilnes</translation>
 <translation id="5726692708398506830">Palielināt visu lapas saturu</translation>
 <translation id="5748802427693696783">Notika pārslēgšanās uz standarta cilnēm</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Atlikusi 1 diena</translation>
 <translation id="8200772114523450471">Kopsavilkums</translation>
 <translation id="8209050860603202033">Atvērt attēlu</translation>
+<translation id="8218622182176210845">Konta pārvaldība</translation>
 <translation id="8220488350232498290">Lejupielādes: <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">Rakstu lejupielāde tikai pa Wi-Fi</translation>
 <translation id="8232956427053453090">Paturēt datus</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
index 46d238e..86e1bc5a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">പാസ്‌വേഡ് ഇല്ലാതാക്കുക</translation>
 <translation id="1516229014686355813">Google തിരയലിന് സന്ദർഭം വ്യക്തമാക്കാൻ തിരഞ്ഞെടുത്ത വാക്കും നിലവിലെ പേജും, 'തിരയാൻ സ്‌പർശിക്കുക' അയയ്‌ക്കും. <ph name="BEGIN_LINK" />ക്രമീകരണത്തിൽ<ph name="END_LINK" /> നിന്ന് നിങ്ങൾക്കിത് ഓഫാക്കാം.</translation>
 <translation id="1521774566618522728">ഇന്ന് സജീവമായിരുന്നു</translation>
+<translation id="1544826120773021464">നിങ്ങളുടെ Google അക്കൗണ്ട് മാനേജ് ചെയ്യാൻ, "അക്കൗണ്ട് മാനേജ് ചെയ്യുക" ബട്ടണിൽ ടാപ്പ് ചെയ്യുക</translation>
 <translation id="1549000191223877751">മറ്റൊരു വിൻഡോയിലേക്ക് നീക്കുക</translation>
 <translation id="1553358976309200471">Chrome അപ്‌ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="1569387923882100876">കണക്റ്റ് ചെയ്‌തിരിക്കുന്ന ഉപകരണം</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">നിങ്ങൾക്ക് ഇത് സൗകര്യപ്രദമായി വായിക്കാൻ കഴിയുന്നതുവരെ സ്ലൈഡർ വലിക്കുക. ഒരു ഖണ്ഡികയിൽ ഇരട്ട-ടാപ്പുചെയ്‌തതിനുശേഷം ടെക്‌സ്റ്റിന് ഈ വലുപ്പമെങ്കിലും ഉണ്ടായിരിക്കണം.</translation>
 <translation id="2323763861024343754">സൈറ്റ് സ്‌റ്റോറേജ്</translation>
 <translation id="2328985652426384049">സൈൻ ഇൻ ചെയ്യാനാകില്ല</translation>
+<translation id="2334057574886324800">ടെക്‌സ്‌റ്റ് മെസേജ് ലഭിച്ചു</translation>
 <translation id="2349710944427398404">അക്കൗണ്ടുകളും ബുക്ക്‌മാർക്കുകളും സംരക്ഷിച്ച ക്രമീകരണവും ഉൾപ്പെടെ Chrome ഉപയോഗിക്കുന്ന മൊത്തം വിവരങ്ങൾ</translation>
 <translation id="2353636109065292463">നിങ്ങളുടെ ഇന്‍റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുന്നു</translation>
 <translation id="2359808026110333948">തുടരുക</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">പേജ് പുതുക്കുക</translation>
 <translation id="2709516037105925701">ഓട്ടോഫില്‍</translation>
 <translation id="271033894570825754">പുതിയത്</translation>
+<translation id="2717722538473713889">ഇമെയിൽ വിലാസങ്ങൾ</translation>
 <translation id="2728754400939377704">സൈറ്റ് അനുസരിച്ച് അടുക്കുക</translation>
 <translation id="2744248271121720757">പെട്ടെന്ന് തിരയാനോ ബന്ധപ്പെട്ട പ്രവർത്തനങ്ങൾ കാണാനോ ഒരു വാക്കിൽ ടാപ്പ് ചെയ്യുക</translation>
 <translation id="2760989362628427051">നിങ്ങളുടെ ഉപകരണത്തിന്റെ ഇരുണ്ട തീമോ ബാറ്ററി ലാഭിക്കലോ ഓണായിരിക്കുമ്പോൾ ഇരുണ്ട തീം ഓണാക്കുക</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">ഇന്‍സ്റ്റാളുചെയ്യുക</translation>
 <translation id="3810838688059735925">വീഡിയോ</translation>
 <translation id="3810973564298564668">മാനേജ് ചെയ്യുക</translation>
+<translation id="381841723434055211">ഫോൺ നമ്പറുകൾ</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ഡൗൺലോഡുകൾ ഇല്ലാതാക്കി</translation>
 <translation id="3822502789641063741">സൈറ്റ് സ്‌റ്റോറേജ് മായ്‌ക്കണോ?</translation>
 <translation id="385051799172605136">പിന്നോട്ട്</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> ടാബ് തുറന്നിരിക്കുന്നു, ടാബുകൾ മാറാനായി ടാപ്പ് ചെയ്യുക}other{<ph name="OPEN_TABS_MANY" /> ടാബുകൾ തുറന്നിരിക്കുന്നു, മാറാനായി ടാപ്പ് ചെയ്യുക}}</translation>
 <translation id="5391532827096253100">ഈ സൈറ്റിലേക്കുള്ള നിങ്ങളുടെ കണക്ഷൻ സുരക്ഷിതമല്ല. സൈറ്റ് വിവരങ്ങള്‍</translation>
 <translation id="5400569084694353794">ഈ അപ്ലിക്കേഷൻ ഉപയോഗിക്കുന്നതിലൂടെ, നിങ്ങൾ Chrome-ന്റെ <ph name="BEGIN_LINK1" />സേവന നിബന്ധനകളും<ph name="END_LINK1" /> <ph name="BEGIN_LINK2" />സ്വകാര്യതാ അറിയിപ്പും<ph name="END_LINK2" /> അംഗീകരിക്കുന്നു.</translation>
+<translation id="5403592356182871684">പേരുകൾ</translation>
 <translation id="5403644198645076998">ചില സൈറ്റുകളെ മാത്രം അനുവദിക്കുക</translation>
 <translation id="5414836363063783498">പരിശോധിച്ചുറപ്പിക്കുന്നു...</translation>
 <translation id="5423934151118863508">നിങ്ങളുടെ ഏറ്റവുമധികം സന്ദർശിച്ച പേജുകൾ ഇവിടെ ദൃശ്യമാകും</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">ഫയലിന്റെ പേര് ദൈർഘ്യമേറിയതാണ്</translation>
 <translation id="5689516760719285838">ലൊക്കേഷൻ</translation>
 <translation id="569536719314091526">'കൂടുതൽ ഓപ്‌ഷനുകൾ' ബട്ടണിൽ നിന്ന്, ഈ പേജ് ഏത് ഭാഷയിലേക്കും വിവർത്തനം ചെയ്യുക</translation>
+<translation id="5719150327511160085">ടെക്‌സ്‌റ്റ് മെസേജിനായി കാത്തിരിക്കുന്നു</translation>
 <translation id="572328651809341494">അടുത്തിടെയുള്ള ടാബുകൾ</translation>
 <translation id="5726692708398506830">പേജിൽ എല്ലാം വലുതായി നൽകുക</translation>
 <translation id="5748802427693696783">സ്റ്റാൻഡേർഡ് ടാബുകളിലേക്ക് മാറി</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">ഒരു ദിവസം ശേഷിക്കുന്നു</translation>
 <translation id="8200772114523450471">തുടരൂ</translation>
 <translation id="8209050860603202033">ചിത്രം തുറക്കുക</translation>
+<translation id="8218622182176210845">നിങ്ങളുടെ അക്കൗണ്ട് മാനേജ് ചെയ്യുക</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB ഡൗൺലോഡുചെയ്‌തു</translation>
 <translation id="8224471946457685718">വൈഫൈ ഉപയോഗിച്ച് നിങ്ങൾക്കായി ലേഖനങ്ങൾ ഡൗൺലോഡ് ചെയ്യുക</translation>
 <translation id="8232956427053453090">ഡാറ്റ സൂക്ഷിക്കുക</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
index b51a93fe..5bd7b9d4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">पासवर्ड हटवा</translation>
 <translation id="1516229014686355813">शोधण्यासाठी टॅप करा निवडलेला शब्द आणि सद्य पेज संदर्भ म्हणून Google शोध ला पाठवते. तुम्ही ते <ph name="BEGIN_LINK" />सेटिंग्ज<ph name="END_LINK" /> मध्ये सुरू किंवा बंद करू शकता.</translation>
 <translation id="1521774566618522728">आज ॲक्टिव्ह होते</translation>
+<translation id="1544826120773021464">तुमचे Google खाते व्यवस्थापित करण्यासाठी, "खाते व्यवस्थापित करा" बटणावर टॅप करा</translation>
 <translation id="1549000191223877751">अन्य विंडोवर हलवा</translation>
 <translation id="1553358976309200471">Chrome अपडेट करा</translation>
 <translation id="1569387923882100876">कनेक्‍ट केलेले डिव्हाइस</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">तुम्ही हे व्यवस्थित वाचू शकण्यापार्यंत स्लायडर ड्रॅग करा. परिच्छेदावर डबल-टॅपिंग केल्यानंतर मजकूर कमीत कमी यापेक्षा मोठा दिसावा.</translation>
 <translation id="2323763861024343754">साइट स्टोरेज</translation>
 <translation id="2328985652426384049">साइन इन करू शकत नाही</translation>
+<translation id="2334057574886324800">एसएमएस मिळाला</translation>
 <translation id="2349710944427398404">खाती, बुकमार्क आणि सेव्ह केलेल्या सेटिंग्जसह, Chrome ने वापरलेला एकूण डेटा</translation>
 <translation id="2353636109065292463">तुमचे इंटरनेट कनेक्शन तपासत आहे</translation>
 <translation id="2359808026110333948">सुरू ठेवा</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">पृष्ठ रिफ्रेश करा</translation>
 <translation id="2709516037105925701">ऑटोफिल</translation>
 <translation id="271033894570825754">नवीन</translation>
+<translation id="2717722538473713889">ईमेल अॅड्रेस</translation>
 <translation id="2728754400939377704">साइटनुसार क्रमाने लावा</translation>
 <translation id="2744248271121720757">झटपट शोधण्यासाठी किंवा संबंधित ॲक्‍शन पाहण्यासाठी एखाद्या शब्दावर टॅप करा</translation>
 <translation id="2760989362628427051">तुमच्या डिव्हाइसची गडद थीम किंवा बॅटरी सेव्हर सुरू असताना गडद थीम सुरू करा</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">स्थापना करा</translation>
 <translation id="3810838688059735925">व्हिडिओ</translation>
 <translation id="3810973564298564668">व्यवस्थापित करा</translation>
+<translation id="381841723434055211">फोन नंबर</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> डाउनलोड हटविले</translation>
 <translation id="3822502789641063741">साइट स्टोरेज साफ करायचे?</translation>
 <translation id="385051799172605136">मागील</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> खुला टॅब, टॅब स्विच करण्यासाठी टॅप करा}other{<ph name="OPEN_TABS_MANY" /> खुला टॅब, टॅब स्विच करण्यासाठी टॅप करा}}</translation>
 <translation id="5391532827096253100">या साइटवरील तुमचे कनेक्शन सुरक्षित नाही. साइट माहिती</translation>
 <translation id="5400569084694353794">हे ॲप्लिकेशन वापरून, तुम्ही Chrome च्या <ph name="BEGIN_LINK1" />सेवा अटी<ph name="END_LINK1" /> आणि <ph name="BEGIN_LINK2" />गोपनीयता सूचना<ph name="END_LINK2" /> ला सहमती देता.</translation>
+<translation id="5403592356182871684">नावे</translation>
 <translation id="5403644198645076998">केवळ काही साइटना अनुमती द्या</translation>
 <translation id="5414836363063783498">सत्यापित करत आहे...</translation>
 <translation id="5423934151118863508">तुमची सर्वाधिक भेट दिलेली पेज येथे दिसतील</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">फाइलचे नाव खूप लांब आहे</translation>
 <translation id="5689516760719285838">स्थान</translation>
 <translation id="569536719314091526">अधिक पर्याय बटणावरून या पेजचे कोणत्याही भाषेत भाषांतर करा</translation>
+<translation id="5719150327511160085">एसएमएसची प्रतीक्षा करत आहे</translation>
 <translation id="572328651809341494">अलीकडील टॅब</translation>
 <translation id="5726692708398506830">पृष्ठावरील प्रत्येकगोष्ट आणखी मोठी करा</translation>
 <translation id="5748802427693696783">मानक टॅबवर स्विच केले</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 दिवस शिल्लक</translation>
 <translation id="8200772114523450471">रेझ्युमे</translation>
 <translation id="8209050860603202033">इमेज उघडा</translation>
+<translation id="8218622182176210845">तुमचे खाते व्यवस्थापित करा</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB डाउनलोड केले</translation>
 <translation id="8224471946457685718">वाय-फायवर तुमच्यासाठी लेख डाउनलोड करा</translation>
 <translation id="8232956427053453090">स्टोअर करायचा असलेला डेटा</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
index 9d0ad7bf..b507d870 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Padam kata laluan</translation>
 <translation id="1516229014686355813">Ketik untuk Mencari menghantar perkataan yang dipilih dan halaman semasa sebagai konteks kepada Carian Google. Anda boleh mematikannya dalam <ph name="BEGIN_LINK" />Tetapan<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktif hari ini</translation>
+<translation id="1544826120773021464">Untuk mengurus akaun Google anda, ketik butang "Urus akaun"</translation>
 <translation id="1549000191223877751">Alihkan ke tetingkap lain</translation>
 <translation id="1553358976309200471">Kemas Kini Chrome</translation>
 <translation id="1569387923882100876">Peranti Bersambung</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Seret gelangsar sehingga anda selesa membaca teks ini. Teks harus kelihatan sekurang-kurangnya sebesar ini selepas mengetik dua kali pada perenggan.</translation>
 <translation id="2323763861024343754">Storan tapak</translation>
 <translation id="2328985652426384049">Tidak dapat log masuk</translation>
+<translation id="2334057574886324800">Mesej teks diterima</translation>
 <translation id="2349710944427398404">Jumlah data yang digunakan oleh Chrome, termasuk akaun, penanda halaman dan tetapan yang disimpan</translation>
 <translation id="2353636109065292463">Memeriksa sambungan Internet anda</translation>
 <translation id="2359808026110333948">Teruskan</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Muat semula halaman</translation>
 <translation id="2709516037105925701">Autoisi</translation>
 <translation id="271033894570825754">Baharu</translation>
+<translation id="2717722538473713889">Alamat e-mel</translation>
 <translation id="2728754400939377704">Isih mengikut tapak</translation>
 <translation id="2744248271121720757">Ketik perkataan untuk mencari dengan serta-merta atau melihat tindakan yang berkaitan</translation>
 <translation id="2760989362628427051">Hidupkan tema gelap apabila tema gelap atau Penjimat Bateri peranti anda dihidupkan</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Pasang</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Urus</translation>
+<translation id="381841723434055211">Nombor telefon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> muat turun dipadamkan</translation>
 <translation id="3822502789641063741">Hapuskan storan tapak?</translation>
 <translation id="385051799172605136">Kembali</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> tab terbuka, ketik untuk beralih antara tab}other{<ph name="OPEN_TABS_MANY" /> tab terbuka, ketik untuk beralih antara tab}}</translation>
 <translation id="5391532827096253100">Sambungan anda ke tapak web ini tidak selamat. Maklumat tapak</translation>
 <translation id="5400569084694353794">Dengan menggunakan aplikasi ini, anda bersetuju menerima <ph name="BEGIN_LINK1" />Syarat Perkhidmatan<ph name="END_LINK1" /> dan <ph name="BEGIN_LINK2" />Notis Privasi<ph name="END_LINK2" /> Chrome.</translation>
+<translation id="5403592356182871684">Nama</translation>
 <translation id="5403644198645076998">Benarkan tapak tertentu sahaja</translation>
 <translation id="5414836363063783498">Mengesahkan…</translation>
 <translation id="5423934151118863508">Halaman yang paling kerap anda kunjungi akan muncul di sini</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Nama fail terlalu panjang</translation>
 <translation id="5689516760719285838">Lokasi</translation>
 <translation id="569536719314091526">Terjemahkan halaman ini ke dalam sebarang bahasa lain daripada butang Lagi pilihan</translation>
+<translation id="5719150327511160085">Menunggu mesej teks</translation>
 <translation id="572328651809341494">Tab terbaharu</translation>
 <translation id="5726692708398506830">Jadikan semua yang ada pada halaman lebih besar</translation>
 <translation id="5748802427693696783">Beralih ke tab standard</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 hari lagi</translation>
 <translation id="8200772114523450471">Sambung semula</translation>
 <translation id="8209050860603202033">Buka imej</translation>
+<translation id="8218622182176210845">Urus akaun anda</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB dimuat turun</translation>
 <translation id="8224471946457685718">Muat turun artikel untuk anda apabila menggunakan Wi-Fi</translation>
 <translation id="8232956427053453090">Kekalkan data</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
index 80cf48cd..2760871 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Wachtwoord verwijderen</translation>
 <translation id="1516229014686355813">Met 'Tikken om te zoeken' worden het geselecteerde woord en de huidige pagina als context naar Google Zoeken verzonden. Je kunt deze functie uitschakelen bij <ph name="BEGIN_LINK" />Instellingen<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Vandaag actief</translation>
+<translation id="1544826120773021464">Tik op de knop 'Account beheren' om je Google-account te beheren</translation>
 <translation id="1549000191223877751">Naar ander venster</translation>
 <translation id="1553358976309200471">Chrome updaten</translation>
 <translation id="1569387923882100876">Gekoppeld apparaat</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Sleep de schuifknop tot je deze tekst prettig kunt lezen. De tekst moet minimaal deze grootte hebben nadat je op een alinea hebt gedubbeltikt.</translation>
 <translation id="2323763861024343754">Site-opslag</translation>
 <translation id="2328985652426384049">Kan niet inloggen</translation>
+<translation id="2334057574886324800">Sms ontvangen</translation>
 <translation id="2349710944427398404">Totale gegevens gebruikt door Chrome, inclusief accounts, bladwijzers en opgeslagen instellingen</translation>
 <translation id="2353636109065292463">Je internetverbinding controleren…</translation>
 <translation id="2359808026110333948">Doorgaan</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Pagina vernieuwen</translation>
 <translation id="2709516037105925701">Automatisch aanvullen</translation>
 <translation id="271033894570825754">Nieuw</translation>
+<translation id="2717722538473713889">E-mailadressen</translation>
 <translation id="2728754400939377704">Sorteren op site</translation>
 <translation id="2744248271121720757">Tik op een woord om meteen te zoeken of gerelateerde acties te bekijken</translation>
 <translation id="2760989362628427051">Het donkere thema inschakelen wanneer het donkere thema of de batterijbesparing van je apparaat is ingeschakeld</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installeren</translation>
 <translation id="3810838688059735925">Videobestanden</translation>
 <translation id="3810973564298564668">Beheren</translation>
+<translation id="381841723434055211">Telefoonnummers</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads verwijderd</translation>
 <translation id="3822502789641063741">Site-opslag wissen?</translation>
 <translation id="385051799172605136">Vorige</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> geopend tabblad, tik om tussen tabbladen te schakelen}other{<ph name="OPEN_TABS_MANY" /> geopende tabbladen, tik om tussen tabbladen te schakelen}}</translation>
 <translation id="5391532827096253100">Je verbinding met deze site is niet beveiligd. Site-informatie</translation>
 <translation id="5400569084694353794">Als je deze app gebruikt, ga je akkoord met de <ph name="BEGIN_LINK1" />servicevoorwaarden<ph name="END_LINK1" /> en het <ph name="BEGIN_LINK2" />privacybeleid<ph name="END_LINK2" /> van Chrome.</translation>
+<translation id="5403592356182871684">Namen</translation>
 <translation id="5403644198645076998">Alleen bepaalde sites toestaan</translation>
 <translation id="5414836363063783498">Verifiëren…</translation>
 <translation id="5423934151118863508">Je meest bezochte pagina's worden hier weergegeven</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Bestandsnaam te lang</translation>
 <translation id="5689516760719285838">Locatie</translation>
 <translation id="569536719314091526">Vertaal deze pagina in een andere taal via de knop 'Meer opties'</translation>
+<translation id="5719150327511160085">Wachten op sms</translation>
 <translation id="572328651809341494">Recente tabbladen</translation>
 <translation id="5726692708398506830">Alles op de pagina vergroten</translation>
 <translation id="5748802427693696783">Overgeschakeld naar standaardtabbladen</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 dag resterend</translation>
 <translation id="8200772114523450471">Doorgaan</translation>
 <translation id="8209050860603202033">Afbeelding openen</translation>
+<translation id="8218622182176210845">Je account beheren</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB gedownload</translation>
 <translation id="8224471946457685718">Artikelen voor je downloaden bij verbinding via wifi</translation>
 <translation id="8232956427053453090">Gegevens behouden</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
index 2c598695..3921433 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Slett passordet</translation>
 <translation id="1516229014686355813">«Trykk for å søke» sender det valgte ordet og den aktive siden som kontekst til Google Søk. Du kan slå av dette i <ph name="BEGIN_LINK" />Innstillinger<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktiv i dag</translation>
+<translation id="1544826120773021464">For å administrere Google-kontoen, trykk på «Administrer kontoen»-knappen</translation>
 <translation id="1549000191223877751">Flytt til det andre vinduet</translation>
 <translation id="1553358976309200471">Oppdater Chrome</translation>
 <translation id="1569387923882100876">Tilkoblet enhet</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Dra glidebryteren til du kan lese dette uten problemer. Når du har dobbelttrykket på et avsnitt, bør teksten være minst like stor som dette.</translation>
 <translation id="2323763861024343754">Nettstedslagring</translation>
 <translation id="2328985652426384049">Kan ikke logge på</translation>
+<translation id="2334057574886324800">En SMS er mottatt</translation>
 <translation id="2349710944427398404">Total datamengde som brukes av Chrome, deriblant kontoer, bokmerker og lagrede innstillinger</translation>
 <translation id="2353636109065292463">Sjekker internettilkoblingen din</translation>
 <translation id="2359808026110333948">Fortsett</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Last inn siden på nytt</translation>
 <translation id="2709516037105925701">Autofyll</translation>
 <translation id="271033894570825754">Ny</translation>
+<translation id="2717722538473713889">E-postadresser</translation>
 <translation id="2728754400939377704">Sortér etter nettsted</translation>
 <translation id="2744248271121720757">Trykk på et ord for å søke umiddelbart eller se relaterte handlinger</translation>
 <translation id="2760989362628427051">Slå på mørkt tema når batterisparing eller enhetsinnstillingen for mørkt tema er på</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installer</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Administrer</translation>
+<translation id="381841723434055211">Telefonnumre</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedlastinger er slettet</translation>
 <translation id="3822502789641063741">Slette nettstedslagring?</translation>
 <translation id="385051799172605136">Tilbake</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> åpen fane – trykk for å bytte fane}other{<ph name="OPEN_TABS_MANY" /> åpne faner – trykk for å bytte fane}}</translation>
 <translation id="5391532827096253100">Tilkoblingen din til dette nettstedet er ikke sikker. Informasjon om nettstedet</translation>
 <translation id="5400569084694353794">Ved å bruke dette programmet samtykker du i Chromes <ph name="BEGIN_LINK1" />vilkår for bruk<ph name="END_LINK1" /> og <ph name="BEGIN_LINK2" />merknad om personvern<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Navn</translation>
 <translation id="5403644198645076998">Tillat bare visse nettsteder</translation>
 <translation id="5414836363063783498">Bekrefter …</translation>
 <translation id="5423934151118863508">Sidene du besøker mest, vises her</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Filnavnet er for langt</translation>
 <translation id="5689516760719285838">Sted</translation>
 <translation id="569536719314091526">Oversett denne siden til hvilket som helst språk via Flere alternativer-knappen</translation>
+<translation id="5719150327511160085">Venter på SMS</translation>
 <translation id="572328651809341494">Nylige faner</translation>
 <translation id="5726692708398506830">Gjør alt på siden større</translation>
 <translation id="5748802427693696783">Byttet til standardfaner</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 dag igjen</translation>
 <translation id="8200772114523450471">Fortsett</translation>
 <translation id="8209050860603202033">Åpne bildet</translation>
+<translation id="8218622182176210845">Administrer kontoen din</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB er lastet ned</translation>
 <translation id="8224471946457685718">Last ned artikler for deg via Wi-Fi</translation>
 <translation id="8232956427053453090">Behold dataene</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
index 0fd10eb..15aed2c2 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Usuń hasło</translation>
 <translation id="1516229014686355813">Funkcja Kliknij, by wyszukać wysyła zaznaczone słowo i bieżącą stronę jako kontekst do wyszukiwarki Google. Możesz ją wyłączyć w <ph name="BEGIN_LINK" />ustawieniach<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktywność: dzisiaj</translation>
+<translation id="1544826120773021464">Aby zarządzać kontem Google, kliknij przycisk „Zarządzaj kontem”</translation>
 <translation id="1549000191223877751">Przenieś do innego okna</translation>
 <translation id="1553358976309200471">Zaktualizuj Chrome</translation>
 <translation id="1569387923882100876">Połączone urządzenie</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Przeciągaj suwak, by umożliwić wygodne czytanie. Gdy dwukrotnie klikniesz akapit, tekst powiększy się co najmniej do tej wielkości.</translation>
 <translation id="2323763861024343754">Dane witryn:</translation>
 <translation id="2328985652426384049">Nie można się zalogować</translation>
+<translation id="2334057574886324800">Odebrano SMS-a</translation>
 <translation id="2349710944427398404">Łączna ilość danych używanych przez Chrome, w tym konta, zakładki i zapisane ustawienia</translation>
 <translation id="2353636109065292463">Sprawdzanie połączenia z internetem</translation>
 <translation id="2359808026110333948">Dalej</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Odśwież stronę</translation>
 <translation id="2709516037105925701">Autouzupełnianie</translation>
 <translation id="271033894570825754">Nowy</translation>
+<translation id="2717722538473713889">Adresy e-mail</translation>
 <translation id="2728754400939377704">Sortuj według witryny</translation>
 <translation id="2744248271121720757">Kliknij słowo, by szybko je wyszukać lub wyświetlić powiązane czynności</translation>
 <translation id="2760989362628427051">Włącz ciemny motyw, gdy urządzenie ma włączony ciemny motyw lub Oszczędzanie baterii</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Zainstaluj</translation>
 <translation id="3810838688059735925">Wideo</translation>
 <translation id="3810973564298564668">Zarządzaj</translation>
+<translation id="381841723434055211">Numery telefonów</translation>
 <translation id="3819178904835489326">Usunięte pobrane pliki: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Wyczyścić dane witryn?</translation>
 <translation id="385051799172605136">Wstecz</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> otwarta karta. Kliknij, by przełączyć się między kartami}few{<ph name="OPEN_TABS_MANY" /> otwarte karty. Kliknij, by przełączyć się między kartami}many{<ph name="OPEN_TABS_MANY" /> otwartych kart. Kliknij, by przełączyć się między kartami}other{<ph name="OPEN_TABS_MANY" /> otwartej karty. Kliknij, by przełączyć się między kartami}}</translation>
 <translation id="5391532827096253100">Twoje połączenie z tą witryną nie jest bezpieczne. Informacje o witrynie</translation>
 <translation id="5400569084694353794">Korzystając z tej aplikacji, akceptujesz <ph name="BEGIN_LINK1" />Warunki korzystania z Chrome<ph name="END_LINK1" /> oraz <ph name="BEGIN_LINK2" />Informacje na temat ochrony prywatności w Chrome<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Nazwy</translation>
 <translation id="5403644198645076998">Pozwól na otwieranie tylko wybranych stron</translation>
 <translation id="5414836363063783498">Weryfikuję…</translation>
 <translation id="5423934151118863508">Tu pojawią się strony, na które najczęściej wchodzisz</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Nazwa pliku jest za długa</translation>
 <translation id="5689516760719285838">Lokalizacja</translation>
 <translation id="569536719314091526">Możesz przetłumaczyć tę stronę na dowolny język, używając przycisku Więcej opcji</translation>
+<translation id="5719150327511160085">Czekam na SMS-a</translation>
 <translation id="572328651809341494">Ostatnie karty</translation>
 <translation id="5726692708398506830">Powiększ całą zawartość strony</translation>
 <translation id="5748802427693696783">Przełączono na karty standardowe</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Pozostał dzień</translation>
 <translation id="8200772114523450471">Wznów</translation>
 <translation id="8209050860603202033">Otwórz grafikę</translation>
+<translation id="8218622182176210845">Zarządzaj kontem</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB pobranych plików</translation>
 <translation id="8224471946457685718">Pobieranie artykułów dla Ciebie przez Wi-Fi</translation>
 <translation id="8232956427053453090">Zachowaj dane</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
index 1f747fa2..475f88a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Excluir senha</translation>
 <translation id="1516229014686355813">O recurso "Tocar para pesquisar" envia a palavra selecionada e a página atual como contexto para a Pesquisa Google. É possível desativá-lo em <ph name="BEGIN_LINK" />Configurações<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Ativado hoje</translation>
+<translation id="1544826120773021464">Para gerenciar sua Conta do Google, toque no botão "Gerenciar conta".</translation>
 <translation id="1549000191223877751">Mover para outra janela</translation>
 <translation id="1553358976309200471">Atualizar o Google Chrome</translation>
 <translation id="1569387923882100876">Dispositivo conectado</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Arraste o controle deslizante até a leitura ficar confortável. Com o toque duplo em um parágrafo, o texto ficará pelo menos deste tamanho.</translation>
 <translation id="2323763861024343754">Armazenamento do site</translation>
 <translation id="2328985652426384049">Não consigo fazer login</translation>
+<translation id="2334057574886324800">Mensagem de texto recebida</translation>
 <translation id="2349710944427398404">Total de dados utilizados pelo Chrome, incluindo contas, favoritos e configurações salvas</translation>
 <translation id="2353636109065292463">Verificando sua conexão de Internet</translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Atualizar página</translation>
 <translation id="2709516037105925701">Preenchimento automático</translation>
 <translation id="271033894570825754">Novo</translation>
+<translation id="2717722538473713889">Endereços de e-mail</translation>
 <translation id="2728754400939377704">Classificar por site</translation>
 <translation id="2744248271121720757">Toque em uma palavra para pesquisar instantaneamente ou ver as ações relacionadas</translation>
 <translation id="2760989362628427051">Ativa o tema escuro quando essa opção ou a "Economia de bateria" do dispositivo está ativada</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instalar</translation>
 <translation id="3810838688059735925">Vídeo</translation>
 <translation id="3810973564298564668">Gerenciar</translation>
+<translation id="381841723434055211">Números de telefone</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads excluídos</translation>
 <translation id="3822502789641063741">Limpar armazenamento de sites?</translation>
 <translation id="385051799172605136">Voltar</translation>
@@ -585,6 +589,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> guia aberta, toque para alternar}one{<ph name="OPEN_TABS_MANY" /> guia aberta, toque para alternar}other{<ph name="OPEN_TABS_MANY" /> guias abertas, toque para alternar}}</translation>
 <translation id="5391532827096253100">Sua conexão com este site não é segura. Informações do site</translation>
 <translation id="5400569084694353794">Ao usar este aplicativo, você concorda com os <ph name="BEGIN_LINK1" />Termos de Serviço<ph name="END_LINK1" /> e com o <ph name="BEGIN_LINK2" />Aviso de Privacidade<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Nomes</translation>
 <translation id="5403644198645076998">Permitir apenas determinados sites</translation>
 <translation id="5414836363063783498">Verificando...</translation>
 <translation id="5423934151118863508">Suas páginas mais visitadas aparecerão aqui</translation>
@@ -639,6 +644,7 @@
 <translation id="5686790454216892815">Nome do arquivo muito longo</translation>
 <translation id="5689516760719285838">Local</translation>
 <translation id="569536719314091526">Traduza esta página para qualquer idioma com o botão "Mais opções"</translation>
+<translation id="5719150327511160085">Esperando pela mensagem de texto</translation>
 <translation id="572328651809341494">Guias recentes</translation>
 <translation id="5726692708398506830">Aumentar tudo na página</translation>
 <translation id="5748802427693696783">Alternada para guias padrão</translation>
@@ -982,6 +988,7 @@
 <translation id="8190358571722158785">Um dia restante</translation>
 <translation id="8200772114523450471">Retomar</translation>
 <translation id="8209050860603202033">Abrir imagem</translation>
+<translation id="8218622182176210845">Gerenciar sua conta</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB transferido(s) por download</translation>
 <translation id="8224471946457685718">Fazer o download de "Artigos para você" quando houver conexão Wi-Fi</translation>
 <translation id="8232956427053453090">Manter dados</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
index 4be5be1f..294f611b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Eliminar palavra-passe</translation>
 <translation id="1516229014686355813">A funcionalidade Tocar para pesquisar envia a palavra selecionada e a página atual como contexto para a Pesquisa Google. Pode desativá-la nas <ph name="BEGIN_LINK" />Definições<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Ativo hoje</translation>
+<translation id="1544826120773021464">Para gerir a sua Conta Google, toque no botão "Gerir conta"</translation>
 <translation id="1549000191223877751">Mover para outra janela</translation>
 <translation id="1553358976309200471">Atualizar o Chrome</translation>
 <translation id="1569387923882100876">Dispositivo ligado</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Arraste o controlo de deslize até conseguir ler confortavelmente. O texto deve ter, pelo menos, este tamanho depois de tocar duas vezes num parágrafo.</translation>
 <translation id="2323763861024343754">Armazenamento do site</translation>
 <translation id="2328985652426384049">Não é possível iniciar sessão</translation>
+<translation id="2334057574886324800">Mensagem de texto recebida</translation>
 <translation id="2349710944427398404">Total de dados utilizados pelo Chrome, incluindo contas, marcadores e definições guardadas</translation>
 <translation id="2353636109065292463">A verificar a sua ligação à Internet...</translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Atualizar página</translation>
 <translation id="2709516037105925701">Preenchimento automático</translation>
 <translation id="271033894570825754">Novo</translation>
+<translation id="2717722538473713889">Endereços de email</translation>
 <translation id="2728754400939377704">Ordenar por site</translation>
 <translation id="2744248271121720757">Toque numa palavra para pesquisar instantaneamente ou ver as ações relacionadas.</translation>
 <translation id="2760989362628427051">Ative o tema escuro quando a Poupança de bateria ou o tema escuro do dispositivo estiver ativado(a).</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instalar</translation>
 <translation id="3810838688059735925">Vídeo</translation>
 <translation id="3810973564298564668">Gerir</translation>
+<translation id="381841723434055211">Números de telefone</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> transferências eliminadas</translation>
 <translation id="3822502789641063741">Limpar armazenamento do site?</translation>
 <translation id="385051799172605136">Anterior</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> separador aberto, toque para alternar entre separadores}other{<ph name="OPEN_TABS_MANY" /> separadores abertos, toque para alternar entre separadores}}</translation>
 <translation id="5391532827096253100">A sua ligação a este site não é segura. Informações do site</translation>
 <translation id="5400569084694353794">Ao utilizar esta aplicação, concorda com os <ph name="BEGIN_LINK1" />Termos de Utilização<ph name="END_LINK1" /> e o <ph name="BEGIN_LINK2" />Aviso de Privacidade<ph name="END_LINK2" /> do Chrome.</translation>
+<translation id="5403592356182871684">Nomes</translation>
 <translation id="5403644198645076998">Permitir apenas determinados sites</translation>
 <translation id="5414836363063783498">A validar…</translation>
 <translation id="5423934151118863508">As páginas mais visitadas aparecem aqui</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">O nome do ficheiro é demasiado longo</translation>
 <translation id="5689516760719285838">Local</translation>
 <translation id="569536719314091526">Traduzir esta página para qualquer idioma a partir do botão Mais opções</translation>
+<translation id="5719150327511160085">A aguardar pela mensagem de texto…</translation>
 <translation id="572328651809341494">Separadores recentes</translation>
 <translation id="5726692708398506830">Aumentar o tamanho de todos os itens na página</translation>
 <translation id="5748802427693696783">Mudado para separadores padrão</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Falta 1 dia</translation>
 <translation id="8200772114523450471">Continuar</translation>
 <translation id="8209050860603202033">Abrir imagem</translation>
+<translation id="8218622182176210845">Efetue a gestão da sua conta</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB transferido(s)</translation>
 <translation id="8224471946457685718">Transferir artigos para si com Wi-Fi</translation>
 <translation id="8232956427053453090">Manter os dados</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
index ee3f2e2..91a0ffc 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Șterge parola</translation>
 <translation id="1516229014686355813">Funcția Atinge pentru a căuta trimite cuvântul selectat și pagina actuală drept context către Căutarea Google. Poți dezactiva această funcție din <ph name="BEGIN_LINK" />Setări<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Activ astăzi</translation>
+<translation id="1544826120773021464">Pentru a gestiona contul Google, atinge butonul „Gestionează contul”</translation>
 <translation id="1549000191223877751">Mută în altă fereastră</translation>
 <translation id="1553358976309200471">Actualizează Chrome</translation>
 <translation id="1569387923882100876">Dispozitiv conectat</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Trage cursorul până poți citi textul cu ușurință. Textul trebuie să fie cel puțin la fel de mare ca acesta după o atingere dublă pe un paragraf.</translation>
 <translation id="2323763861024343754">Stocarea site-urilor</translation>
 <translation id="2328985652426384049">Nu se poate conecta</translation>
+<translation id="2334057574886324800">Mesajul text a fost primit</translation>
 <translation id="2349710944427398404">Totalul datelor folosite de Chrome, inclusiv conturile, marcajele și setările salvate</translation>
 <translation id="2353636109065292463">Se verifică conexiunea la internet</translation>
 <translation id="2359808026110333948">Continuă</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Actualizează pagina</translation>
 <translation id="2709516037105925701">Completare automată</translation>
 <translation id="271033894570825754">Nou</translation>
+<translation id="2717722538473713889">Adrese de e-mail</translation>
 <translation id="2728754400939377704">Sortează după site</translation>
 <translation id="2744248271121720757">Atinge un cuvânt pentru a căuta instantaneu sau pentru a vedea acțiuni conexe</translation>
 <translation id="2760989362628427051">Activează tema întunecată când este activată tema întunecată sau Economisirea bateriei pentru dispozitiv</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Instalează</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Gestionează</translation>
+<translation id="381841723434055211">Numere de telefon</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descărcări șterse</translation>
 <translation id="3822502789641063741">Ștergi stocarea site-urilor?</translation>
 <translation id="385051799172605136">Înapoi</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> filă deschisă, atinge pentru a comuta filele}few{<ph name="OPEN_TABS_MANY" /> file deschise, atinge pentru a comuta filele}other{<ph name="OPEN_TABS_MANY" /> de file deschise, atinge pentru a comuta filele}}</translation>
 <translation id="5391532827096253100">Conexiunea la acest site nu este sigură. Informații despre site</translation>
 <translation id="5400569084694353794">Folosind această aplicație, accepți <ph name="BEGIN_LINK1" />Termenii și condițiile<ph name="END_LINK1" /> și <ph name="BEGIN_LINK2" />Notificarea privind confidențialitatea<ph name="END_LINK2" /> Chrome.</translation>
+<translation id="5403592356182871684">Nume</translation>
 <translation id="5403644198645076998">Permite numai anumite site-uri</translation>
 <translation id="5414836363063783498">Se verifică...</translation>
 <translation id="5423934151118863508">Cele mai accesate pagini vor apărea aici</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Numele fișierului este prea lung</translation>
 <translation id="5689516760719285838">Locație</translation>
 <translation id="569536719314091526">Tradu această pagină în orice limbă folosind butonul Mai multe opțiuni</translation>
+<translation id="5719150327511160085">Se așteaptă mesajul text</translation>
 <translation id="572328651809341494">File recente</translation>
 <translation id="5726692708398506830">Mărește întregul conținut al paginii</translation>
 <translation id="5748802427693696783">Ai comutat la filele standard</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 zi rămasă</translation>
 <translation id="8200772114523450471">Reia</translation>
 <translation id="8209050860603202033">Deschideți imaginea</translation>
+<translation id="8218622182176210845">Gestionează contul</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB pentru descărcări</translation>
 <translation id="8224471946457685718">Descarcă articole pentru tine pe Wi-Fi</translation>
 <translation id="8232956427053453090">Păstrează datele</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
index 7641d8d5..2860edf5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Удалить пароль</translation>
 <translation id="1516229014686355813">Быстрый поиск отправляет в Google выбранное слово, а также – в качестве контекста – текущую страницу. Отключить эту функцию можно в <ph name="BEGIN_LINK" />настройках<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Последние действия: сегодня</translation>
+<translation id="1544826120773021464">Чтобы перейти к управлению аккаунтом Google, нажмите кнопку "Настройки аккаунта"</translation>
 <translation id="1549000191223877751">Перейти к другому окну</translation>
 <translation id="1553358976309200471">Обновить Chrome</translation>
 <translation id="1569387923882100876">Подключенное устройство</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Перемещайте ползунок, пока текст не станет удобным для чтения. После двойного нажатия на абзац текст должен быть такого размера.</translation>
 <translation id="2323763861024343754">Данные сайтов</translation>
 <translation id="2328985652426384049">Не удается войти</translation>
+<translation id="2334057574886324800">SMS-сообщение получено.</translation>
 <translation id="2349710944427398404">Общее количество данных Chrome, включая аккаунты, закладки и сохраненные настройки</translation>
 <translation id="2353636109065292463">Проверка подключения к Интернету</translation>
 <translation id="2359808026110333948">Продолжить</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Обновить страницу</translation>
 <translation id="2709516037105925701">Автозаполнение</translation>
 <translation id="271033894570825754">Новый</translation>
+<translation id="2717722538473713889">Адреса электронной почты</translation>
 <translation id="2728754400939377704">Сортировать по имени домена</translation>
 <translation id="2744248271121720757">Нажмите на слово, чтобы увидеть связанные с ним результаты поиска и действия.</translation>
 <translation id="2760989362628427051">Использовать тёмную тему, когда на устройстве включена тёмная тема или режим энергосбережения.</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Установить</translation>
 <translation id="3810838688059735925">Видео</translation>
 <translation id="3810973564298564668">Настроить</translation>
+<translation id="381841723434055211">Номера телефонов</translation>
 <translation id="3819178904835489326">Удаленные скачивания: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Удалить данные сайтов?</translation>
 <translation id="385051799172605136">Назад</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{Открыта <ph name="OPEN_TABS_ONE" /> вкладка. Нажмите для переключения.}one{Открыта <ph name="OPEN_TABS_MANY" /> вкладка. Нажмите для переключения.}few{Открыто <ph name="OPEN_TABS_MANY" /> вкладки. Нажмите для переключения.}many{Открыто <ph name="OPEN_TABS_MANY" /> вкладок. Нажмите для переключения.}other{Открыто <ph name="OPEN_TABS_MANY" /> вкладки. Нажмите для переключения.}}</translation>
 <translation id="5391532827096253100">Подключение к сайту не защищено. Информация о сайте</translation>
 <translation id="5400569084694353794">Работая с приложением, вы принимаете <ph name="BEGIN_LINK1" />Условия использования<ph name="END_LINK1" /> и <ph name="BEGIN_LINK2" />Примечание о конфиденциальности<ph name="END_LINK2" /> Chrome.</translation>
+<translation id="5403592356182871684">Имена</translation>
 <translation id="5403644198645076998">Разрешить доступ только к определенным сайтам</translation>
 <translation id="5414836363063783498">Проверка…</translation>
 <translation id="5423934151118863508">Здесь появятся страницы, которые вы чаще всего просматриваете.</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Имя файла слишком длинное.</translation>
 <translation id="5689516760719285838">Геоданные</translation>
 <translation id="569536719314091526">Чтобы перевести эту страницу на какой-либо язык, нажмите кнопку "Ещё"</translation>
+<translation id="5719150327511160085">Ожидание SMS…</translation>
 <translation id="572328651809341494">Недавние вкладки</translation>
 <translation id="5726692708398506830">Увеличить масштаб страницы</translation>
 <translation id="5748802427693696783">Переключено на обычные вкладки</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Остался 1 день</translation>
 <translation id="8200772114523450471">Возобновить</translation>
 <translation id="8209050860603202033">Открыть изображение</translation>
+<translation id="8218622182176210845">Управление аккаунтом</translation>
 <translation id="8220488350232498290">Скачанные файлы: <ph name="GIGABYTES" /> ГБ</translation>
 <translation id="8224471946457685718">Скачивать "Статьи для вас" только по Wi-Fi</translation>
 <translation id="8232956427053453090">Не удалять данные</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
index a53aada..8548018 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Odstrániť heslo</translation>
 <translation id="1516229014686355813">Vyhľadávanie klepnutím odošle vybraté slovo a súčasnú stránku ako kontext do Vyhľadávania Google. Môžete ho vypnúť v <ph name="BEGIN_LINK" />Nastaveniach<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktívne dnes</translation>
+<translation id="1544826120773021464">Ak chcete spravovať svoj účet Google, klepnite na tlačidlo Spravovať účet</translation>
 <translation id="1549000191223877751">Prejsť do druhého okna</translation>
 <translation id="1553358976309200471">Aktualizovať Chrome</translation>
 <translation id="1569387923882100876">Pripojené zariadenie</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Presúvajte posúvač, dokým nebude čítanie tohto textu pohodlné. Po dvojitom klepnutí na odsek by mal byť text aspoň takto veľký.</translation>
 <translation id="2323763861024343754">Úložisko webu</translation>
 <translation id="2328985652426384049">Nedá sa prihlásiť</translation>
+<translation id="2334057574886324800">Textová správa bola prijatá</translation>
 <translation id="2349710944427398404">Celkové dáta využívané Chromom vrátane účtov, záložiek a uložených nastavení</translation>
 <translation id="2353636109065292463">Kontroluje sa internetové pripojenie</translation>
 <translation id="2359808026110333948">Pokračovať</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Obnoviť stránku</translation>
 <translation id="2709516037105925701">Automatické dopĺňanie</translation>
 <translation id="271033894570825754">Nové</translation>
+<translation id="2717722538473713889">E‑mailové adresy</translation>
 <translation id="2728754400939377704">Zoradiť podľa webu</translation>
 <translation id="2744248271121720757">Klepnutím na slovo aktivujete dynamické vyhľadávanie alebo zobrazíte súvisiace akcie</translation>
 <translation id="2760989362628427051">Zapnúť tmavý motív, keď je v zariadení zapnutý tmavý motív alebo šetrič batérie</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Inštalovať</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Spravovať</translation>
+<translation id="381841723434055211">Telefónne čísla</translation>
 <translation id="3819178904835489326">Počet odstránených stiahnutých súborov: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Vymazať úložisko webov?</translation>
 <translation id="385051799172605136">Naspäť</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> otvorená karta, karty prepnete klepnutím}few{<ph name="OPEN_TABS_MANY" /> otvorené karty, karty prepnete klepnutím}many{<ph name="OPEN_TABS_MANY" /> open tabs, tap to switch tabs}other{<ph name="OPEN_TABS_MANY" /> otvorených kariet, karty prepnete klepnutím}}</translation>
 <translation id="5391532827096253100">Spojenie s týmto webom nie je zabezpečené. Informácie o webe</translation>
 <translation id="5400569084694353794">Používaním tejto aplikácie vyjadrujete súhlas so <ph name="BEGIN_LINK1" />zmluvnými podmienkami<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />oznámením o ochrane súkromia<ph name="END_LINK2" /> prehliadača Chrome.</translation>
+<translation id="5403592356182871684">Názvy</translation>
 <translation id="5403644198645076998">Povoliť len určité weby</translation>
 <translation id="5414836363063783498">Overuje sa...</translation>
 <translation id="5423934151118863508">Tu sa zobrazia vaše najnavštevovanejšie stránky.</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Názov súboru je príliš dlhý</translation>
 <translation id="5689516760719285838">Poloha</translation>
 <translation id="569536719314091526">Preložte si túto stránku do ľubovoľného jazyka pomocou tlačidla Ďalšie možnosti</translation>
+<translation id="5719150327511160085">Čaká sa na textovú správu</translation>
 <translation id="572328651809341494">Nedávne karty</translation>
 <translation id="5726692708398506830">Zväčšenie obsahu na stránke</translation>
 <translation id="5748802427693696783">Prepnuté na štandardné karty</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Zostáva: 1 d</translation>
 <translation id="8200772114523450471">Pokračovať</translation>
 <translation id="8209050860603202033">Otvoriť obrázok</translation>
+<translation id="8218622182176210845">Spravujte svoj účet</translation>
 <translation id="8220488350232498290">Stiahnuté: <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">Sťahovať články cez Wi-Fi</translation>
 <translation id="8232956427053453090">Ponechať údaje</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
index ce01b340..eb8fc5f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Izbris gesla</translation>
 <translation id="1516229014686355813">Funkcija »Iskanje z dotikom« zagotovi, da sta izbrana beseda in trenutna stran poslani kot kontekst v Iskanje Google. Izklopite jo lahko v <ph name="BEGIN_LINK" />nastavitvah<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktivno danes</translation>
+<translation id="1544826120773021464">Če želite upravljati račun Google, se dotaknite gumba »Upravljanje računa«</translation>
 <translation id="1549000191223877751">Premik v drugo okno</translation>
 <translation id="1553358976309200471">Posodobi Chrome</translation>
 <translation id="1569387923882100876">Povezana naprava</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Drsnik povlecite tako daleč, da boste lahko to besedilo brez težave prebrali. Besedilo bo po dvakratnem dotiku odstavka vsaj tako veliko.</translation>
 <translation id="2323763861024343754">Shranjeni podatki splet. mesta</translation>
 <translation id="2328985652426384049">Ne morem se prijaviti</translation>
+<translation id="2334057574886324800">Sporočilo SMS je bilo prejeto</translation>
 <translation id="2349710944427398404">Skupna količina podatkov, ki jih uporablja Chrome, vključno z računi, zaznamki in shranjenimi nastavitvami.</translation>
 <translation id="2353636109065292463">Preverjanje internetne povezave</translation>
 <translation id="2359808026110333948">Naprej</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Osveži stran</translation>
 <translation id="2709516037105925701">Samodejno izpolnjevanje</translation>
 <translation id="271033894570825754">Novo</translation>
+<translation id="2717722538473713889">E-poštni naslovi</translation>
 <translation id="2728754400939377704">Razvrsti glede na spletno mesto</translation>
 <translation id="2744248271121720757">Dotaknite se besede, če želite dinamično iskati ali prikazati sorodna dejanja</translation>
 <translation id="2760989362628427051">Vklop temne teme, ko je v napravi vklopljena temna tema ali je vklopljeno varčevanje z energijo akumulatorja</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Namesti</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Upravljanje</translation>
+<translation id="381841723434055211">Telefonske številke</translation>
 <translation id="3819178904835489326">Št. izbrisanih prenosov: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Izbris shrambe mesta?</translation>
 <translation id="385051799172605136">Nazaj</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> odprt zavihek, dotaknite se, če želite preklopiti med zavihki}one{<ph name="OPEN_TABS_MANY" /> odprt zavihek, dotaknite se, če želite preklopiti med zavihki}two{<ph name="OPEN_TABS_MANY" /> odprta zavihka, dotaknite se, če želite preklopiti med zavihki}few{<ph name="OPEN_TABS_MANY" /> odprti zavihki, dotaknite se, če želite preklopiti med zavihki}other{<ph name="OPEN_TABS_MANY" /> odprtih zavihkov, dotaknite se, če želite preklopiti med zavihki}}</translation>
 <translation id="5391532827096253100">Povezava s tem spletnim mestom ni varna. Podatki o spletnem mestu.</translation>
 <translation id="5400569084694353794">Če uporabljate to aplikacijo, se strinjate s <ph name="BEGIN_LINK1" />pogoji storitve<ph name="END_LINK1" /> in <ph name="BEGIN_LINK2" />pravilnikom o zasebnosti<ph name="END_LINK2" /> za Chrome.</translation>
+<translation id="5403592356182871684">Imena</translation>
 <translation id="5403644198645076998">Dovoli samo nekatera spletna mesta</translation>
 <translation id="5414836363063783498">Preverjanje …</translation>
 <translation id="5423934151118863508">Tu bodo prikazane strani, ki jih obiskujete najpogosteje</translation>
@@ -620,7 +625,7 @@
 <translation id="5578795271662203820">Za iskanje te slike uporabi <ph name="SEARCH_ENGINE" /></translation>
 <translation id="5580090775658607195">Št. združenih zavihkov: <ph name="TAB_COUNT" /></translation>
 <translation id="5581519193887989363">V <ph name="BEGIN_LINK1" />nastavitvah<ph name="END_LINK1" /> lahko kadar koli izberete, kaj želite sinhronizirati.</translation>
-<translation id="5586306159936941448">Povlecite zavihek na drugi zavihek, če ju želite združiti v skupino</translation>
+<translation id="5586306159936941448">Povlecite zavihek na drug zavihek, če ju želite združiti v skupino</translation>
 <translation id="5595485650161345191">Uredi naslov</translation>
 <translation id="5596627076506792578">Več možnosti</translation>
 <translation id="5599455543593328020">Način brez beleženja zgodovine</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Ime datoteke je predolgo</translation>
 <translation id="5689516760719285838">Lokacija</translation>
 <translation id="569536719314091526">Prevedite to stran v kateri koli jezik z gumbom »Več možnosti«</translation>
+<translation id="5719150327511160085">Čakanje na sporočilo SMS</translation>
 <translation id="572328651809341494">Nedavni zavihki</translation>
 <translation id="5726692708398506830">Povečanje vsebine strani</translation>
 <translation id="5748802427693696783">Preklopljeno na standardne zavihke</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Še 1 dan</translation>
 <translation id="8200772114523450471">Nadaljuj</translation>
 <translation id="8209050860603202033">Odpri sliko</translation>
+<translation id="8218622182176210845">Upravljanje računa</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB prenesenih datotek</translation>
 <translation id="8224471946457685718">Prenos člankov v omrežju Wi-Fi</translation>
 <translation id="8232956427053453090">Ohrani podatke</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
index dd7507e2..5015618 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Избриши лозинку</translation>
 <translation id="1516229014686355813">Функција „Додирните за претрагу“ шаље изабрану реч и актуелну страницу као контекст у Google претрагу. Можете да је искључите у <ph name="BEGIN_LINK" />Подешавањима<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Активан је данас</translation>
+<translation id="1544826120773021464">Да бисте управљали Google налогом, додирните дугме „Управљајте налогом“</translation>
 <translation id="1549000191223877751">Премести у други прозор</translation>
 <translation id="1553358976309200471">Ажурирај Chrome</translation>
 <translation id="1569387923882100876">Повезани уређај</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Превлачите клизач док ово не будете могли лако да прочитате. Када двапут додирнете пасус, текст треба да буде бар оволики.</translation>
 <translation id="2323763861024343754">Меморијски простор за сајт</translation>
 <translation id="2328985652426384049">Не могу да се пријавим</translation>
+<translation id="2334057574886324800">SMS је примљен</translation>
 <translation id="2349710944427398404">Сви подаци које користи Chrome, укључујући налоге, обележиваче и сачувана подешавања</translation>
 <translation id="2353636109065292463">Проверава се интернет веза</translation>
 <translation id="2359808026110333948">Наставите</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Освежи страницу</translation>
 <translation id="2709516037105925701">Аутоматско попуњавање</translation>
 <translation id="271033894570825754">Ново</translation>
+<translation id="2717722538473713889">Имејл адресе</translation>
 <translation id="2728754400939377704">Сортирај по сајту</translation>
 <translation id="2744248271121720757">Додирните реч да бисте је тренутно претражили или видели повезане радње</translation>
 <translation id="2760989362628427051">Укључите тамну тему када је тамна тема или Уштеда батерије укључена на уређају</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Инсталирај</translation>
 <translation id="3810838688059735925">Видео</translation>
 <translation id="3810973564298564668">Промени</translation>
+<translation id="381841723434055211">Бројеви телефона</translation>
 <translation id="3819178904835489326">Избрисана преузимања: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Бришете меморију сајта?</translation>
 <translation id="385051799172605136">Назад</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> отворена картица, додирните да бисте прешли на другу картицу}one{<ph name="OPEN_TABS_MANY" /> отворена картица, додирните да бисте прешли на другу картицу}few{<ph name="OPEN_TABS_MANY" /> отворене картице, додирните да бисте прешли на другу картицу}other{<ph name="OPEN_TABS_MANY" /> отворених картица, додирните да бисте прешли на другу картицу}}</translation>
 <translation id="5391532827096253100">Веза са овим сајтом није безбедна. Информације о сајту</translation>
 <translation id="5400569084694353794">Коришћењем ове апликације прихватате <ph name="BEGIN_LINK1" />Услове коришћења услуге<ph name="END_LINK1" /> и <ph name="BEGIN_LINK2" />Обавештење о приватности<ph name="END_LINK2" /> за Chrome.</translation>
+<translation id="5403592356182871684">Имена</translation>
 <translation id="5403644198645076998">Дозволи само одређене сајтове</translation>
 <translation id="5414836363063783498">Верификују се...</translation>
 <translation id="5423934151118863508">Најчешће посећиване странице ће се појавити овде</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Име датотеке је предугачко</translation>
 <translation id="5689516760719285838">Локација</translation>
 <translation id="569536719314091526">Преведите ову страницу на било који језик помоћу дугмета Још опција</translation>
+<translation id="5719150327511160085">Чека се SMS</translation>
 <translation id="572328651809341494">Недавно коришћене картице</translation>
 <translation id="5726692708398506830">Увећавање целокупног приказа странице</translation>
 <translation id="5748802427693696783">Пребацили сте на стандардне картице</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Још 1 дан</translation>
 <translation id="8200772114523450471">Настави</translation>
 <translation id="8209050860603202033">Отвори слику</translation>
+<translation id="8218622182176210845">Управљајте налогом</translation>
 <translation id="8220488350232498290">Преузели сте <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">Преузимај чланке за мене преко Wi-Fi мреже</translation>
 <translation id="8232956427053453090">Задржи податке</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
index 4dd8e738..0ba3177 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Radera lösenord</translation>
 <translation id="1516229014686355813">Med funktionen Tryck för att söka skickas det markerade ordet till Google Sök med den aktuella sidan som kontext. Du kan stänga av funktionen i <ph name="BEGIN_LINK" />inställningarna<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Aktiv idag</translation>
+<translation id="1544826120773021464">Tryck på knappen Hantera kontot om du vill hantera ditt Google-konto</translation>
 <translation id="1549000191223877751">Flytta till annat fönster</translation>
 <translation id="1553358976309200471">Uppdatera Chrome</translation>
 <translation id="1569387923882100876">Ansluten enhet</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Flytta reglaget tills du kan läsa texten ordentligt. Texten bör bli åtminstone så här stor när du trycker två gånger på ett stycke.</translation>
 <translation id="2323763861024343754">Webbplatslagring</translation>
 <translation id="2328985652426384049">Det gick inte att logga in</translation>
+<translation id="2334057574886324800">Sms mottaget</translation>
 <translation id="2349710944427398404">Total data som används av Chrome, inklusive konton, bokmärken och sparade inställningar</translation>
 <translation id="2353636109065292463">Kontrollera internetanslutningen</translation>
 <translation id="2359808026110333948">Fortsätt</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Uppdatera sidan</translation>
 <translation id="2709516037105925701">Autofyll</translation>
 <translation id="271033894570825754">Ny</translation>
+<translation id="2717722538473713889">E-postadresser</translation>
 <translation id="2728754400939377704">Sortera efter webbplats</translation>
 <translation id="2744248271121720757">Tryck på ett ord om du vill söka direkt eller visa relaterade åtgärder</translation>
 <translation id="2760989362628427051">Aktivera mörkt tema när batterisparläget eller mörkt tema aktiveras på enheten</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Installera</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Hantera</translation>
+<translation id="381841723434055211">Telefonnummer</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedladdningar har raderats</translation>
 <translation id="3822502789641063741">Rensa webbplatslagring?</translation>
 <translation id="385051799172605136">Bakåt</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> flik öppen, tryck här om du vill byta flik}other{<ph name="OPEN_TABS_MANY" /> flikar öppna, tryck här om du vill byta flik}}</translation>
 <translation id="5391532827096253100">Anslutningen till webbplatsen är inte säker. Webbplatsinformation</translation>
 <translation id="5400569084694353794">Genom att använda det här programmet godkänner du Chromes <ph name="BEGIN_LINK1" />användarvillkor<ph name="END_LINK1" /> och <ph name="BEGIN_LINK2" />sekretessmeddelande<ph name="END_LINK2" />.</translation>
+<translation id="5403592356182871684">Namn</translation>
 <translation id="5403644198645076998">Tillåt endast vissa webbplatser</translation>
 <translation id="5414836363063783498">Verifierar ...</translation>
 <translation id="5423934151118863508">Dina mest besökta sidor visas här</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Filnamnet är för långt</translation>
 <translation id="5689516760719285838">Plats</translation>
 <translation id="569536719314091526">Översätt den här sidan till vilket språk som helst via knappen Fler alternativ</translation>
+<translation id="5719150327511160085">Väntar på sms</translation>
 <translation id="572328651809341494">Senaste flikarna</translation>
 <translation id="5726692708398506830">Gör allt på sidan större</translation>
 <translation id="5748802427693696783">Bytte till standardflikar</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 dag kvar</translation>
 <translation id="8200772114523450471">Återuppta</translation>
 <translation id="8209050860603202033">Öppna bild</translation>
+<translation id="8218622182176210845">Hantera kontot</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB används av nedladdningar</translation>
 <translation id="8224471946457685718">Ladda ned artiklar för dig via Wi-Fi</translation>
 <translation id="8232956427053453090">Behåll data</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
index 7d2caef6..67f43ed 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Futa nenosiri</translation>
 <translation id="1516229014686355813">Kipengele cha Gusa ili Utafute hutuma neno lililochaguliwa na ukurasa wa sasa kuwa muktadha kwa Tafuta na Google. Unaweza kukizima katika <ph name="BEGIN_LINK" />Miipangilio<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Ameitumia leo</translation>
+<translation id="1544826120773021464">Ili udhibiti akaunti yako ya Google, gusa kitufe cha "Dhibiti akaunti"</translation>
 <translation id="1549000191223877751">Nenda kwenye dirisha jingine</translation>
 <translation id="1553358976309200471">Sasisha Chrome</translation>
 <translation id="1569387923882100876">Kifaa Kilichounganishwa</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Buruta kitelezi hadi uweze kusoma haya kwa starehe. Maandishi yanapaswa kuonekana angalau kwa ukubwa huu baada ya kugonga mara mbili kwenye aya.</translation>
 <translation id="2323763861024343754">Hifadhi ya tovuti</translation>
 <translation id="2328985652426384049">Imeshindwa kuingia katika akaunti</translation>
+<translation id="2334057574886324800">Imepokea SMS</translation>
 <translation id="2349710944427398404">Jumla ya data iliyotumiwa na Chrome, ikiwa ni pamoja na akaunti, alamisho na mipangilio iliyohifadhiwa</translation>
 <translation id="2353636109065292463">Inaangalia muunganisho wako wa intaneti</translation>
 <translation id="2359808026110333948">Endelea</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Onyesha upya ukurasa</translation>
 <translation id="2709516037105925701">Kujaza Kiotomatiki</translation>
 <translation id="271033894570825754">Mpya</translation>
+<translation id="2717722538473713889">Anwani za barua pepe</translation>
 <translation id="2728754400939377704">Panga kulingana na tovuti</translation>
 <translation id="2744248271121720757">Gusa neno ili utafute papo hapo au uone vitendo vinavyohusiana</translation>
 <translation id="2760989362628427051">Washa hali ya mandhari meusi wakati umewasha kipengele cha mandhari meusi au Kiokoa Betri cha kifaa chako</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Sakinisha</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Dhibiti</translation>
+<translation id="381841723434055211">Nambari za simu</translation>
 <translation id="3819178904835489326">Vipakuliwa <ph name="NUMBER_OF_DOWNLOADS" /> vimefutwa</translation>
 <translation id="3822502789641063741">Ungependa kufuta hifadhi ya tovuti?</translation>
 <translation id="385051799172605136">Rudi nyuma</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{Umefungua kichupo <ph name="OPEN_TABS_ONE" />, gusa ili ubadilishe vichupo}other{Umefungua vichupo <ph name="OPEN_TABS_MANY" />, gusa ili ubadilishe vichupo}}</translation>
 <translation id="5391532827096253100">Muunganisho wako kwenye tovuti hii si salama. Maelezo ya tovuti</translation>
 <translation id="5400569084694353794">Kwa kutumia programu hii, unakubali <ph name="BEGIN_LINK1" />Sheria na Masharti<ph name="END_LINK1" /> na <ph name="BEGIN_LINK2" />Ilani ya Faragha<ph name="END_LINK2" /> ya Chrome.</translation>
+<translation id="5403592356182871684">Majina</translation>
 <translation id="5403644198645076998">Ruhusu tovuti maalum pekee</translation>
 <translation id="5414836363063783498">Inathibitisha...</translation>
 <translation id="5423934151118863508">Kurasa zako zilizotembelewa sana zitaonekana hapa</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Jina la faili ni ndefu mno</translation>
 <translation id="5689516760719285838">Mahali</translation>
 <translation id="569536719314091526">Tafsiri ukurasa huu katika lugha yoyote kutoka kitufe cha Chaguo zaidi</translation>
+<translation id="5719150327511160085">Inasubiri SMS</translation>
 <translation id="572328651809341494">Vichupo vya hivi majuzi</translation>
 <translation id="5726692708398506830">Fanya kila kitu kwenye ukurasa kiwe kikubwa zaidi</translation>
 <translation id="5748802427693696783">Imebadilisha kwenda vichupo muundo-msingi</translation>
@@ -980,6 +986,7 @@
 <translation id="8190358571722158785">Imesalia siku 1</translation>
 <translation id="8200772114523450471">Endelea</translation>
 <translation id="8209050860603202033">Fungua picha</translation>
+<translation id="8218622182176210845">Dhibiti akaunti yako</translation>
 <translation id="8220488350232498290">Imepakua GB <ph name="GIGABYTES" /></translation>
 <translation id="8224471946457685718">Ipakue makala unayopendekezewa kwenye Wi-Fi</translation>
 <translation id="8232956427053453090">Hifadhi data</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
index adb2ff1..c36c8277 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
@@ -239,7 +239,7 @@
 <translation id="271033894570825754">புதிது</translation>
 <translation id="2728754400939377704">தளத்தின்படி வரிசைப்படுத்தும்</translation>
 <translation id="2744248271121720757">உடனடியாகத் தேட அல்லது தொடர்புடைய செயல்களைப் பார்க்க, சொல்லைத் தட்டவும்</translation>
-<translation id="2760989362628427051">உங்கள் சாதனத்தில் டார்க் தீம் அல்லது பேட்டரி சேமிப்பான் ஆன் செய்யப்பட்டால் டார்க் தீமினை ஆன் செய்யும்</translation>
+<translation id="2760989362628427051">சாதனத்தில் டார்க் தீம் அல்லது பேட்டரி சேமிப்பான் ஆன் செய்யப்பட்டால் டார்க் தீமினை ஆன் செய்யும்</translation>
 <translation id="2762000892062317888">சற்று முன்</translation>
 <translation id="2777555524387840389"><ph name="SECONDS" /> வினாடிகள் மீதமுள்ளன</translation>
 <translation id="2779651927720337254">தோல்வியுற்றது</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
index 821b8fe..892fb491 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">పాస్‌వర్డ్‌ను తొలగించు</translation>
 <translation id="1516229014686355813">'వెతకడానికి నొక్కండి' ఫీచర్, ఎంచుకున్న పదాన్ని మరియు ప్రస్తుత పేజీని సంబంధిత సందర్భం లాగా Google శోధనకు పంపుతుంది. మీరు <ph name="BEGIN_LINK" />సెట్టింగ్‌లు<ph name="END_LINK" />లో దీనిని ఆఫ్ చేయవచ్చు.</translation>
 <translation id="1521774566618522728">ఈ రోజు యాక్టివ్‌గా ఉంది</translation>
+<translation id="1544826120773021464">మీ Google ఖాతాను నిర్వహించడానికి, "ఖాతాను నిర్వహించు" బటన్‌ను నొక్కండి</translation>
 <translation id="1549000191223877751">వేరే విండోకు తరలించు</translation>
 <translation id="1553358976309200471">Chromeని నవీకరించు</translation>
 <translation id="1569387923882100876">కనెక్ట్ చేసిన డివైజ్</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">మీరు దీనిని సౌకర్యవంతంగా చదవగలిగే వరకు స్లైడర్‌ను లాగండి. పేరాపై రెండుసార్లు నొక్కిన తర్వాత వచనం కనీసం ఇంత పెద్దదిగా కనిపించాలి.</translation>
 <translation id="2323763861024343754">సైట్ నిల్వ</translation>
 <translation id="2328985652426384049">సైన్ ఇన్ చేయడం సాధ్యపడదు</translation>
+<translation id="2334057574886324800">వచన సందేశం స్వీకరించబడింది</translation>
 <translation id="2349710944427398404">ఖాతాలు, బుక్‌మార్క్‌లు మరియు సేవ్ చేసిన సెట్టింగ్‌లతో సహా Chrome ద్వారా ఉపయోగించబడిన మొత్తం డేటా</translation>
 <translation id="2353636109065292463">మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేస్తోంది</translation>
 <translation id="2359808026110333948">కొనసాగించు</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">పేజీని రిఫ్రెష్ చేయండి</translation>
 <translation id="2709516037105925701">స్వయంపూర్తి</translation>
 <translation id="271033894570825754">కొత్తది</translation>
+<translation id="2717722538473713889">ఇమెయిల్ చిరునామాలు</translation>
 <translation id="2728754400939377704">సైట్ ద్వారా క్రమీకరించు</translation>
 <translation id="2744248271121720757">తక్షణమే వెతకడానికి లేదా సంబంధిత చర్యలను చూడటానికి ఒక పదాన్ని నొక్కండి</translation>
 <translation id="2760989362628427051">మీ పరికరంలో ముదురు రంగు థీమ్ లేదా బ్యాటరీ సేవర్ ఆన్‌లో ఉన్నప్పుడు, ముదురు రంగు థీమ్‌ను ఆన్ చేయండి</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">ఇన్‌స్టాల్ చేయి</translation>
 <translation id="3810838688059735925">వీడియో</translation>
 <translation id="3810973564298564668">నిర్వహించు</translation>
+<translation id="381841723434055211">ఫోన్ నంబర్‌లు</translation>
 <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> డౌన్‌లోడ్‌లు తొలగించబడ్డాయి</translation>
 <translation id="3822502789641063741">సైట్ నిల్వను తీసివేయాలా?</translation>
 <translation id="385051799172605136">వెనుకకు</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> ట్యాబ్ తెరవబడి ఉంది, ట్యాబ్‌లను మార్చడం కోసం నొక్కండి}other{<ph name="OPEN_TABS_MANY" /> ట్యాబ్‌లు తెరవబడి ఉన్నాయి, ట్యాబ్‌లను మార్చడం కోసం నొక్కండి}}</translation>
 <translation id="5391532827096253100">ఈ సైట్‌కి మీ కనెక్షన్ సురక్షితంగా లేదు. సైట్ సమాచారం</translation>
 <translation id="5400569084694353794">ఈ అప్లికేషన్‌ను ఉపయోగించడం ద్వారా, మీరు Chrome <ph name="BEGIN_LINK1" />సేవా నిబంధనలు<ph name="END_LINK1" /> మరియు <ph name="BEGIN_LINK2" />గోప్యతా నోటీసు<ph name="END_LINK2" />ని అంగీకరిస్తున్నారు.</translation>
+<translation id="5403592356182871684">పేర్లు</translation>
 <translation id="5403644198645076998">నిర్దిష్ట సైట్‌లను మాత్రమే అనుమతించండి</translation>
 <translation id="5414836363063783498">ధృవీకరిస్తోంది...</translation>
 <translation id="5423934151118863508">మీరు అత్యంత ఎక్కువగా సందర్శించిన పేజీలు ఇక్కడ కనిపిస్తాయి</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">ఫైల్ పేరు చాలా పొడవుగా ఉంది</translation>
 <translation id="5689516760719285838">స్థానం</translation>
 <translation id="569536719314091526">మరిన్ని ఎంపికలు బటన్‌ని ఉపయోగించి ఈ పేజీని ఏ భాషలోకైనా అనువదించుకోవచ్చు</translation>
+<translation id="5719150327511160085">వచన సందేశాల కోసం వేచి చూస్తోంది</translation>
 <translation id="572328651809341494">ఇటీవలి ట్యాబ్‌లు</translation>
 <translation id="5726692708398506830">పేజీలోని అన్నింటినీ పెద్దవిగా చేయండి</translation>
 <translation id="5748802427693696783">ప్రామాణిక ట్యాబ్‌లకు మార్చబడింది</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 రోజు మిగిలి ఉంది</translation>
 <translation id="8200772114523450471">మ‌ళ్లీ ప్రారంభించు</translation>
 <translation id="8209050860603202033">చిత్రాన్ని తెరువు</translation>
+<translation id="8218622182176210845">మీ ఖాతాను నిర్వహించండి</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB డౌన్‌లోడ్ అయింది</translation>
 <translation id="8224471946457685718">మీ కోసం అందించే కథనాలను Wi-Fi ద్వారా డౌన్‌లోడ్ చేసుకోండి</translation>
 <translation id="8232956427053453090">డేటాను అలాగే ఉంచు</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
index 3893c364..3281395 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">ลบรหัสผ่าน</translation>
 <translation id="1516229014686355813">แตะเพื่อค้นหาจะส่งคำที่เลือกและหน้าปัจจุบันเป็นบริบทไปยัง Google Search คุณปิดฟีเจอร์นี้ในได้ใน<ph name="BEGIN_LINK" />การตั้งค่า<ph name="END_LINK" /></translation>
 <translation id="1521774566618522728">ใช้งานวันนี้</translation>
+<translation id="1544826120773021464">หากต้องการจัดการบัญชี Google ให้แตะปุ่ม "จัดการบัญชี"</translation>
 <translation id="1549000191223877751">ย้ายไปยังหน้าต่างอื่น</translation>
 <translation id="1553358976309200471">อัปเดต Chrome</translation>
 <translation id="1569387923882100876">อุปกรณ์ที่เชื่อมต่อ</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">ลากแถบเลื่อนจนกว่าคุณจะสามารถอ่านได้อย่างสะดวก ข้อความควรมีขนาดเท่านี้เป็นอย่างน้อยหลังจากแตะ 2 ครั้งบนย่อหน้า</translation>
 <translation id="2323763861024343754">พื้นที่เก็บข้อมูลเว็บไซต์</translation>
 <translation id="2328985652426384049">ลงชื่อเข้าใช้ไม่ได้</translation>
+<translation id="2334057574886324800">ได้รับ SMS</translation>
 <translation id="2349710944427398404">ข้อมูลทั้งหมดที่ Chrome ใช้ รวมถึงบัญชี บุ๊กมาร์ก และการตั้งค่าที่บันทึกไว้</translation>
 <translation id="2353636109065292463">ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="2359808026110333948">ต่อไป</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">รีเฟรชหน้า</translation>
 <translation id="2709516037105925701">ป้อนอัตโนมัติ</translation>
 <translation id="271033894570825754">ใหม่</translation>
+<translation id="2717722538473713889">อีเมล</translation>
 <translation id="2728754400939377704">จัดเรียงตามเว็บไซต์</translation>
 <translation id="2744248271121720757">แตะคำเพื่อค้นหาทันทีหรือดูการทำงานที่เกี่ยวข้อง</translation>
 <translation id="2760989362628427051">เปิดธีมสีเข้มเมื่อโหมดธีมสีเข้มหรือโหมดประหยัดแบตเตอรี่ของอุปกรณ์เปิดอยู่</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">ติดตั้ง</translation>
 <translation id="3810838688059735925">วิดีโอ</translation>
 <translation id="3810973564298564668">จัดการ</translation>
+<translation id="381841723434055211">หมายเลขโทรศัพท์</translation>
 <translation id="3819178904835489326">ลบการดาวน์โหลด <ph name="NUMBER_OF_DOWNLOADS" /> รายการแล้ว</translation>
 <translation id="3822502789641063741">ล้างพื้นที่เก็บข้อมูลเว็บไซต์ไหม</translation>
 <translation id="385051799172605136">กลับ</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{เปิดแท็บไว้ <ph name="OPEN_TABS_ONE" /> แท็บ แตะเพื่อเปลี่ยนแท็บ}other{เปิดแท็บไว้ <ph name="OPEN_TABS_MANY" /> แท็บ แตะเพื่อเปลี่ยนแท็บ}}</translation>
 <translation id="5391532827096253100">การเชื่อมต่อกับเว็บไซต์นี้ไม่ปลอดภัย ข้อมูลเว็บไซต์</translation>
 <translation id="5400569084694353794">การใช้แอปพลิเคชันนี้แสดงว่าคุณยอมรับ<ph name="BEGIN_LINK1" />ข้อกำหนดในการให้บริการ<ph name="END_LINK1" />และ<ph name="BEGIN_LINK2" />ประกาศเกี่ยวกับนโยบายความเป็นส่วนตัว<ph name="END_LINK2" />ของ Chrome</translation>
+<translation id="5403592356182871684">ชื่อ</translation>
 <translation id="5403644198645076998">อนุญาตเฉพาะบางไซต์</translation>
 <translation id="5414836363063783498">กำลังยืนยัน…</translation>
 <translation id="5423934151118863508">หน้าที่มีการเข้าชมมากที่สุดของคุณจะปรากฏที่นี่</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">ชื่อไฟล์ยาวเกินไป</translation>
 <translation id="5689516760719285838">ตำแหน่ง</translation>
 <translation id="569536719314091526">แปลหน้านี้เป็นภาษาใดก็ได้จากปุ่มตัวเลือกเพิ่มเติม</translation>
+<translation id="5719150327511160085">กำลังรอ SMS</translation>
 <translation id="572328651809341494">แท็บล่าสุด</translation>
 <translation id="5726692708398506830">ขยายรายละเอียดทั้งหมดบนหน้า</translation>
 <translation id="5748802427693696783">สลับเป็นแท็บมาตรฐานแล้ว</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">เหลือ 1 วัน</translation>
 <translation id="8200772114523450471">ทำต่อ</translation>
 <translation id="8209050860603202033">เปิดรูปภาพ</translation>
+<translation id="8218622182176210845">จัดการบัญชีของคุณ</translation>
 <translation id="8220488350232498290">พื้นที่ที่ใช้ไปสำหรับการดาวน์โหลด <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">ดาวน์โหลดบทความสำหรับคุณผ่าน Wi-Fi</translation>
 <translation id="8232956427053453090">เก็บข้อมูลไว้</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
index f91f6b37..067a328 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Şifreyi sil</translation>
 <translation id="1516229014686355813">Dokun ve Ara özelliği, seçilen kelimeyi ve geçerli sayfayı Google Arama'ya bağlam olarak gönderir. Bu özelliği <ph name="BEGIN_LINK" />Ayarlar<ph name="END_LINK" />'da kapatabilirsiniz.</translation>
 <translation id="1521774566618522728">Son etkin olduğu zaman:</translation>
+<translation id="1544826120773021464">Google hesabınızı yönetmek için "Hesabı yönet" düğmesine dokunun</translation>
 <translation id="1549000191223877751">Diğer pencereye git</translation>
 <translation id="1553358976309200471">Chrome'u güncelle</translation>
 <translation id="1569387923882100876">Bağlı Cihaz</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Bu yazıyı rahatça okuyana kadar kaydırma çubuğunu sürükleyin. Bir paragrafa iki kez hafifçe dokunduğunuzda metin en az bunun kadar büyük görünmelidir.</translation>
 <translation id="2323763861024343754">Site depolama alanı</translation>
 <translation id="2328985652426384049">Oturum açılamıyor</translation>
+<translation id="2334057574886324800">Kısa mesaj alındı</translation>
 <translation id="2349710944427398404">Hesaplar, yer işaretleri ve kayıtlı ayarlar da dahil olmak üzere Chrome tarafından kullanılan tüm veriler</translation>
 <translation id="2353636109065292463">İnternet bağlantınızı kontrol etme</translation>
 <translation id="2359808026110333948">Devam et</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Sayfayı yenile</translation>
 <translation id="2709516037105925701">Otomatik doldurma</translation>
 <translation id="271033894570825754">Yeni</translation>
+<translation id="2717722538473713889">E-posta adresleri</translation>
 <translation id="2728754400939377704">Siteye göre sırala</translation>
 <translation id="2744248271121720757">Anında aramak veya ilgili işlemleri görmek için bir kelimeye dokunun</translation>
 <translation id="2760989362628427051">Cihazınızın koyu tema veya Pil Tasarrufu özelliği açık olduğunda koyu tema açılır</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Yükle</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Yönet</translation>
+<translation id="381841723434055211">Telefon numaraları</translation>
 <translation id="3819178904835489326">İndirilen <ph name="NUMBER_OF_DOWNLOADS" /> dosya silindi</translation>
 <translation id="3822502789641063741">Site depolama silinsin mi?</translation>
 <translation id="385051799172605136">Geri</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> açık sekme, sekmeler arasında geçiş yapmak için dokunun}other{<ph name="OPEN_TABS_MANY" /> açık sekme, sekmeler arasında geçiş yapmak için dokunun}}</translation>
 <translation id="5391532827096253100">Bu siteye bağlantınız güvenli değil. Site bilgileri</translation>
 <translation id="5400569084694353794">Bu uygulamayı kullanarak <ph name="BEGIN_LINK1" />Chrome'un Gizlilik Şartları<ph name="END_LINK1" />'nı ve <ph name="BEGIN_LINK2" />Gizlilik Uyarısı<ph name="END_LINK2" />'nı kabul etmiş olursunuz.</translation>
+<translation id="5403592356182871684">Adlar</translation>
 <translation id="5403644198645076998">Yalnızca belirli sitelere izin ver</translation>
 <translation id="5414836363063783498">Doğrulanıyor…</translation>
 <translation id="5423934151118863508">En çok ziyaret ettiğiniz sayfalar burada görünecektir</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Dosya adı çok uzun</translation>
 <translation id="5689516760719285838">Konum</translation>
 <translation id="569536719314091526">Diğer seçenekler düğmesini kullanarak bu sayfayı istediğiniz dile çevirin</translation>
+<translation id="5719150327511160085">Kısa mesaj bekleniyor</translation>
 <translation id="572328651809341494">Son sekmeler</translation>
 <translation id="5726692708398506830">Sayfadaki her şeyi büyütür</translation>
 <translation id="5748802427693696783">Standart sekmelere geçildi</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">1 gün kaldı</translation>
 <translation id="8200772114523450471">Sürdür</translation>
 <translation id="8209050860603202033">Resmi aç</translation>
+<translation id="8218622182176210845">Hesabınızı yönetin</translation>
 <translation id="8220488350232498290"><ph name="GIGABYTES" /> GB indirildi</translation>
 <translation id="8224471946457685718">Size özel makaleleri kablosuz bağlantıda indirin</translation>
 <translation id="8232956427053453090">Verileri koru</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
index 19cc49be..4d2865c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Видалити пароль</translation>
 <translation id="1516229014686355813">Функція "Торкніться, щоб шукати" надсилає слово та поточну сторінку як додаткові дані в Пошук Google. Її можна вимкнути в <ph name="BEGIN_LINK" />налаштуваннях<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">У мережі сьогодні</translation>
+<translation id="1544826120773021464">Щоб налаштувати обліковий запис Google, натисніть кнопку "Керувати обліковим записом"</translation>
 <translation id="1549000191223877751">Відкрити в іншому вікні</translation>
 <translation id="1553358976309200471">Оновити Chrome</translation>
 <translation id="1569387923882100876">Під’єднаний пристрій</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Перетягуйте повзунок, доки розмір тексту не стане зручним для читання. Якщо двічі торкнутись абзацу, розмір тексту має стати принаймні таким, як цей.</translation>
 <translation id="2323763861024343754">Дані сайтів</translation>
 <translation id="2328985652426384049">Не вдається ввійти</translation>
+<translation id="2334057574886324800">Текстове повідомлення отримано</translation>
 <translation id="2349710944427398404">Усі дані, які використовує Chrome, зокрема облікові записи, закладки та збережені налаштування</translation>
 <translation id="2353636109065292463">Перевірка інтернет-з’єднання</translation>
 <translation id="2359808026110333948">Продовжити</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Оновити сторінку</translation>
 <translation id="2709516037105925701">Автозаповнення</translation>
 <translation id="271033894570825754">Новий</translation>
+<translation id="2717722538473713889">Електронні адреси</translation>
 <translation id="2728754400939377704">Сортувати за сайтом</translation>
 <translation id="2744248271121720757">Торкніться слова для миттєвого пошуку або перегляду схожих дій</translation>
 <translation id="2760989362628427051">Активувати нічний режим, якщо його налаштовано або ввімкнено режим енергозбереження</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Встановити</translation>
 <translation id="3810838688059735925">Відео</translation>
 <translation id="3810973564298564668">Змінити</translation>
+<translation id="381841723434055211">Номери телефонів</translation>
 <translation id="3819178904835489326">Видалено завантажених файлів: <ph name="NUMBER_OF_DOWNLOADS" /></translation>
 <translation id="3822502789641063741">Видалити дані сайтів?</translation>
 <translation id="385051799172605136">Назад</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> відкрита вкладка: натисніть, щоб перейти на іншу вкладку}one{<ph name="OPEN_TABS_MANY" /> відкрита вкладка: натисніть, щоб перейти на іншу вкладку}few{<ph name="OPEN_TABS_MANY" /> відкриті вкладки: натисніть, щоб перейти на іншу вкладку}many{<ph name="OPEN_TABS_MANY" /> відкритих вкладок: натисніть, щоб перейти на іншу вкладку}other{<ph name="OPEN_TABS_MANY" /> відкритої вкладки: натисніть, щоб перейти на іншу вкладку}}</translation>
 <translation id="5391532827096253100">Ваше з’єднання з цим сайтом незахищене. Інформація про сайт</translation>
 <translation id="5400569084694353794">Користуючись цим додатком, ви приймаєте <ph name="BEGIN_LINK1" />Умови використання<ph name="END_LINK1" /> та <ph name="BEGIN_LINK2" />Примітку про конфіденційність<ph name="END_LINK2" /> Chrome.</translation>
+<translation id="5403592356182871684">Назви</translation>
 <translation id="5403644198645076998">Дозволити лише певні сайти</translation>
 <translation id="5414836363063783498">Підтвердження…</translation>
 <translation id="5423934151118863508">Тут відображатимуться найчастіше відвідувані сторінки</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Назва файлу задовга</translation>
 <translation id="5689516760719285838">Місцезнаходження</translation>
 <translation id="569536719314091526">Перекладіть цю сторінку будь-якою мовою, натиснувши кнопку "Більше опцій"</translation>
+<translation id="5719150327511160085">Очікується текстове повідомлення</translation>
 <translation id="572328651809341494">Останні вкладки</translation>
 <translation id="5726692708398506830">Збільшити всі елементи на сторінці</translation>
 <translation id="5748802427693696783">Ви перейшли на стандартні вкладки</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Залишився 1 день</translation>
 <translation id="8200772114523450471">Поновити</translation>
 <translation id="8209050860603202033">Відкрити зображення</translation>
+<translation id="8218622182176210845">Керувати обліковим записом</translation>
 <translation id="8220488350232498290">Завантажено <ph name="GIGABYTES" /> ГБ</translation>
 <translation id="8224471946457685718">Завантажувати статті через Wi-Fi</translation>
 <translation id="8232956427053453090">Зберігати дані</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
index 5e4fab0..1e6a34a4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">Xóa mật khẩu</translation>
 <translation id="1516229014686355813">Tính năng Nhấn để tìm kiếm sẽ gửi từ đã chọn và trang hiện tại dưới dạng ngữ cảnh cho Google Tìm kiếm. Bạn có thể tắt tính năng này trong mục <ph name="BEGIN_LINK" />Cài đặt<ph name="END_LINK" />.</translation>
 <translation id="1521774566618522728">Hoạt động hôm nay</translation>
+<translation id="1544826120773021464">Để quản lý Tài khoản Google của bạn, hãy nhấn vào nút "Quản lý tài khoản"</translation>
 <translation id="1549000191223877751">Di chuyển đến cửa sổ khác</translation>
 <translation id="1553358976309200471">Cập nhật Chrome</translation>
 <translation id="1569387923882100876">Thiết bị đã kết nối</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">Kéo thanh trượt cho đến khi bạn có thể đọc nội dung này thoải mái. Chữ tối thiểu phải to như này sau khi bấm đúp vào một đoạn.</translation>
 <translation id="2323763861024343754">Bộ nhớ trang web</translation>
 <translation id="2328985652426384049">Không thể đăng nhập</translation>
+<translation id="2334057574886324800">Đã nhận tin nhắn văn bản</translation>
 <translation id="2349710944427398404">Tổng số dữ liệu mà Chrome sử dụng, bao gồm tài khoản, dấu trang và cài đặt đã lưu</translation>
 <translation id="2353636109065292463">Kiểm tra kết nối Internet</translation>
 <translation id="2359808026110333948">Tiếp tục</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">Làm mới trang</translation>
 <translation id="2709516037105925701">Tự động điền</translation>
 <translation id="271033894570825754">Mới</translation>
+<translation id="2717722538473713889">Địa chỉ email</translation>
 <translation id="2728754400939377704">Sắp xếp theo trang web</translation>
 <translation id="2744248271121720757">Hãy nhấn vào một từ để tìm kiếm ngay hoặc xem các hành động có liên quan</translation>
 <translation id="2760989362628427051">Bật giao diện tối khi Trình tiết kiệm pin hoặc giao diện tối trên thiết bị đang bật</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">Cài đặt</translation>
 <translation id="3810838688059735925">Video</translation>
 <translation id="3810973564298564668">Quản lý</translation>
+<translation id="381841723434055211">Số điện thoại</translation>
 <translation id="3819178904835489326">Đã xóa <ph name="NUMBER_OF_DOWNLOADS" /> bản tải xuống</translation>
 <translation id="3822502789641063741">Xóa dữ liệu trang trong bộ nhớ?</translation>
 <translation id="385051799172605136">Quay lại</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> tab đang mở, nhấn để chuyển tab}other{<ph name="OPEN_TABS_MANY" /> tab đang mở, nhấn để chuyển tab}}</translation>
 <translation id="5391532827096253100">Kết nối của bạn tới trang web này không an toàn. Thông tin trang web</translation>
 <translation id="5400569084694353794">Bằng việc sử dụng ứng dụng này, bạn đồng ý với <ph name="BEGIN_LINK1" />Điều khoản dịch vụ<ph name="END_LINK1" /> và <ph name="BEGIN_LINK2" />Thông báo quyền riêng tư<ph name="END_LINK2" /> của Chrome.</translation>
+<translation id="5403592356182871684">Tên</translation>
 <translation id="5403644198645076998">Chỉ cho phép một số trang web</translation>
 <translation id="5414836363063783498">Đang xác minh...</translation>
 <translation id="5423934151118863508">Trang bạn truy cập nhiều nhất sẽ xuất hiện ở đây</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">Tên tệp quá dài</translation>
 <translation id="5689516760719285838">Vị trí</translation>
 <translation id="569536719314091526">Dịch trang này sang ngôn ngữ bất kỳ từ nút Tùy chọn khác</translation>
+<translation id="5719150327511160085">Đang chờ tin nhắn văn bản</translation>
 <translation id="572328651809341494">Các tab gần đây</translation>
 <translation id="5726692708398506830">Phóng to mọi nội dung trên trang</translation>
 <translation id="5748802427693696783">Đã chuyển sang tab chuẩn</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">Còn 1 ngày</translation>
 <translation id="8200772114523450471">Tiếp tục</translation>
 <translation id="8209050860603202033">Mở ảnh</translation>
+<translation id="8218622182176210845">Quản lý tài khoản của bạn</translation>
 <translation id="8220488350232498290">Đã tải xuống <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">Tải tin bài cho bạn xuống qua Wi-Fi</translation>
 <translation id="8232956427053453090">Lưu giữ dữ liệu</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
index 36096a7..5befec7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">删除密码</translation>
 <translation id="1516229014686355813">“点按搜索”功能会将所选字词和当前页面(作为上下文)一起发送给 Google 搜索。您可在<ph name="BEGIN_LINK" />设置<ph name="END_LINK" />中关闭该功能。</translation>
 <translation id="1521774566618522728">今天曾有活动</translation>
+<translation id="1544826120773021464">要管理您的 Google 帐号,请点按“管理帐号”按钮</translation>
 <translation id="1549000191223877751">移至其他窗口</translation>
 <translation id="1553358976309200471">更新 Chrome</translation>
 <translation id="1569387923882100876">连接的设备</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">拖动该滑块,将文字调整到适合您阅读的大小。点按两次某段落后,显示的文字至少应是这么大。</translation>
 <translation id="2323763861024343754">网站存储数据</translation>
 <translation id="2328985652426384049">无法登录</translation>
+<translation id="2334057574886324800">已收到短信</translation>
 <translation id="2349710944427398404">Chrome 所使用的数据总量,包括帐号、书签和已保存的设置</translation>
 <translation id="2353636109065292463">检查互联网连接状况</translation>
 <translation id="2359808026110333948">继续</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">刷新网页</translation>
 <translation id="2709516037105925701">自动填充</translation>
 <translation id="271033894570825754">新建</translation>
+<translation id="2717722538473713889">电子邮件地址</translation>
 <translation id="2728754400939377704">按网站排序</translation>
 <translation id="2744248271121720757">点按某个字词可立即开始搜索或查看相关操作</translation>
 <translation id="2760989362628427051">在设备开启深色主题背景或省电模式时启用深色主题背景</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">安装</translation>
 <translation id="3810838688059735925">视频</translation>
 <translation id="3810973564298564668">管理</translation>
+<translation id="381841723434055211">电话号码</translation>
 <translation id="3819178904835489326">已删除 <ph name="NUMBER_OF_DOWNLOADS" /> 项下载内容</translation>
 <translation id="3822502789641063741">要清除网站存储数据吗?</translation>
 <translation id="385051799172605136">后退</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{<ph name="OPEN_TABS_ONE" /> 个打开的标签页,点按即可切换标签页}other{<ph name="OPEN_TABS_MANY" /> 个打开的标签页,点按即可切换标签页}}</translation>
 <translation id="5391532827096253100">您与此网站之间建立的连接不安全。网站信息</translation>
 <translation id="5400569084694353794">使用此应用即表示您同意遵守 Chrome 的<ph name="BEGIN_LINK1" />服务条款<ph name="END_LINK1" />和<ph name="BEGIN_LINK2" />隐私权声明<ph name="END_LINK2" />。</translation>
+<translation id="5403592356182871684">名称</translation>
 <translation id="5403644198645076998">只允许访问某些网站</translation>
 <translation id="5414836363063783498">正在验证…</translation>
 <translation id="5423934151118863508">您最常访问的网页将列在此处</translation>
@@ -620,7 +625,7 @@
 <translation id="5578795271662203820">在<ph name="SEARCH_ENGINE" />中搜索此图片</translation>
 <translation id="5580090775658607195">已将 <ph name="TAB_COUNT" /> 个标签页合为一组</translation>
 <translation id="5581519193887989363">您始终可在<ph name="BEGIN_LINK1" />设置<ph name="END_LINK1" />中选择要同步的内容。</translation>
-<translation id="5586306159936941448">将标签拖动到另一个标签上以对它们进行分组</translation>
+<translation id="5586306159936941448">将标签拖动到另一个标签上,可将它们归为一组</translation>
 <translation id="5595485650161345191">修改地址</translation>
 <translation id="5596627076506792578">更多选项</translation>
 <translation id="5599455543593328020">无痕模式</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">文件名过长</translation>
 <translation id="5689516760719285838">位置信息</translation>
 <translation id="569536719314091526">通过“更多选项”按钮将此页面翻译成任何语言</translation>
+<translation id="5719150327511160085">正在等待接收短信</translation>
 <translation id="572328651809341494">最近打开的标签页</translation>
 <translation id="5726692708398506830">放大网页上的所有内容</translation>
 <translation id="5748802427693696783">已切换到标准标签页</translation>
@@ -651,7 +657,7 @@
 <translation id="5809361687334836369">{HOURS,plural, =1{# 小时前}other{# 小时前}}</translation>
 <translation id="5810288467834065221">版权所有 <ph name="YEAR" /> Google LLC. 保留所有权利。</translation>
 <translation id="5817918615728894473">配对</translation>
-<translation id="58326064309361797">拖动标签以将其分组</translation>
+<translation id="58326064309361797">拖动标签可进行分组</translation>
 <translation id="583281660410589416">未知</translation>
 <translation id="5833984609253377421">分享链接</translation>
 <translation id="5836192821815272682">正在下载 Chrome 更新…</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">还剩 1 天</translation>
 <translation id="8200772114523450471">继续</translation>
 <translation id="8209050860603202033">打开图片</translation>
+<translation id="8218622182176210845">管理您的帐号</translation>
 <translation id="8220488350232498290">下载内容已占用的空间:<ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">在连接到 Wi-Fi 时下载为您推荐的文章</translation>
 <translation id="8232956427053453090">保留数据</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
index abf1a6b7..7d70d4d8 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -78,6 +78,7 @@
 <translation id="1513858653616922153">刪除密碼</translation>
 <translation id="1516229014686355813">「輕觸搜尋」會將選取的字詞和目前所在的網頁 (以便比對內容) 傳送給 Google 搜尋。你可以在<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />中關閉這項功能。</translation>
 <translation id="1521774566618522728">上次使用時間:今天</translation>
+<translation id="1544826120773021464">如要管理你的 Google 帳戶,請輕觸 [管理帳戶] 按鈕</translation>
 <translation id="1549000191223877751">移至其他視窗</translation>
 <translation id="1553358976309200471">更新 Chrome</translation>
 <translation id="1569387923882100876">連結的裝置</translation>
@@ -185,6 +186,7 @@
 <translation id="2321958826496381788">拖曳滑桿,將文字調整到適當的字體大小。當你輕觸兩下文字段落時,瀏覽器至少應呈現這樣的字體大小。</translation>
 <translation id="2323763861024343754">網站儲存資料量</translation>
 <translation id="2328985652426384049">無法登入</translation>
+<translation id="2334057574886324800">已收到簡訊</translation>
 <translation id="2349710944427398404">Chrome 使用的資料總量,包括帳戶、書籤和儲存的設定</translation>
 <translation id="2353636109065292463">檢查你的網際網路連線</translation>
 <translation id="2359808026110333948">繼續</translation>
@@ -237,6 +239,7 @@
 <translation id="2707726405694321444">重新整理頁面</translation>
 <translation id="2709516037105925701">自動填入</translation>
 <translation id="271033894570825754">新</translation>
+<translation id="2717722538473713889">電子郵件地址</translation>
 <translation id="2728754400939377704">依網站排序</translation>
 <translation id="2744248271121720757">只要輕觸字詞就能立即展開搜尋或查看相關的動作</translation>
 <translation id="2760989362628427051">當裝置開啟深色主題或節約耗電量功能時,啟用深色主題</translation>
@@ -368,6 +371,7 @@
 <translation id="3789841737615482174">安裝</translation>
 <translation id="3810838688059735925">影片</translation>
 <translation id="3810973564298564668">管理</translation>
+<translation id="381841723434055211">電話號碼</translation>
 <translation id="3819178904835489326">已刪除 <ph name="NUMBER_OF_DOWNLOADS" /> 個下載項目</translation>
 <translation id="3822502789641063741">要清除網站儲存的資料嗎?</translation>
 <translation id="385051799172605136">返回</translation>
@@ -584,6 +588,7 @@
 <translation id="5368958499335451666">{OPEN_TABS,plural, =1{已開啟 <ph name="OPEN_TABS_ONE" /> 個分頁,輕觸即可切換分頁}other{已開啟 <ph name="OPEN_TABS_MANY" /> 個分頁,輕觸即可切換分頁}}</translation>
 <translation id="5391532827096253100">你與這個網站的連線不安全。網站資訊</translation>
 <translation id="5400569084694353794">使用這個應用程式即表示您同意接受 Chrome 的《<ph name="BEGIN_LINK1" />服務條款<ph name="END_LINK1" />》和《<ph name="BEGIN_LINK2" />隱私權聲明<ph name="END_LINK2" />》。</translation>
+<translation id="5403592356182871684">名稱</translation>
 <translation id="5403644198645076998">只允許特定網站</translation>
 <translation id="5414836363063783498">驗證中…</translation>
 <translation id="5423934151118863508">這裡會顯示您最常造訪的網頁</translation>
@@ -638,6 +643,7 @@
 <translation id="5686790454216892815">檔案名稱過長</translation>
 <translation id="5689516760719285838">位置</translation>
 <translation id="569536719314091526">透過 [更多選項] 按鈕將這個網頁翻譯成任何語言</translation>
+<translation id="5719150327511160085">正在等待簡訊</translation>
 <translation id="572328651809341494">最近開啟的分頁</translation>
 <translation id="5726692708398506830">放大網頁上的所有內容</translation>
 <translation id="5748802427693696783">已切換成標準分頁</translation>
@@ -981,6 +987,7 @@
 <translation id="8190358571722158785">還剩 1 天</translation>
 <translation id="8200772114523450471">繼續</translation>
 <translation id="8209050860603202033">開啟圖片</translation>
+<translation id="8218622182176210845">管理你的帳戶</translation>
 <translation id="8220488350232498290">下載內容佔 <ph name="GIGABYTES" /> GB</translation>
 <translation id="8224471946457685718">透過 Wi-Fi 下載為你推薦的文章</translation>
 <translation id="8232956427053453090">保留資料</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkReorderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkReorderTest.java
index 248ae7f..242d398 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkReorderTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkReorderTest.java
@@ -557,6 +557,23 @@
         onView(withText("Move down")).check(doesNotExist());
     }
 
+    @Test
+    @MediumTest
+    public void testMoveButtonsGoneWithOneBookmark() throws Exception {
+        addFolder(TEST_FOLDER_TITLE);
+        BookmarkPromoHeader.forcePromoStateForTests(BookmarkPromoHeader.PromoState.PROMO_SYNC);
+        openBookmarkManager();
+
+        View testFolder = mItemsContainer.findViewHolderForAdapterPosition(1).itemView;
+        Assert.assertEquals("Wrong bookmark item selected.", TEST_FOLDER_TITLE,
+                ((BookmarkFolderRow) testFolder).getTitle());
+        View more = testFolder.findViewById(R.id.more);
+        TestThreadUtils.runOnUiThreadBlocking(more::callOnClick);
+
+        onView(withText("Move up")).check(doesNotExist());
+        onView(withText("Move down")).check(doesNotExist());
+    }
+
     @Override
     protected void openBookmarkManager() throws InterruptedException {
         super.openBookmarkManager();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
index d9ab113..c19c6fd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
@@ -395,7 +395,6 @@
     @SmallTest
     @Feature({"Browser", "ContextMenu"})
     @Policies.Add({ @Policies.Item(key = "DefaultSearchProviderEnabled", string = "false") })
-    @FlakyTest(message = "http://crbug.com/988891")
     @RetryOnFailure
     public void testContextMenuRetrievesImageOptions_NoDefaultSearchEngine()
             throws TimeoutException, InterruptedException {
diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn
index 2242fdc..413eb35 100644
--- a/chrome/app/BUILD.gn
+++ b/chrome/app/BUILD.gn
@@ -505,7 +505,7 @@
   ]
 
   if (is_chromeos) {
-    deps += [ "//components/arc/common:media" ]
+    deps += [ "//components/arc/mojom:media" ]
   }
 }
 
@@ -545,19 +545,6 @@
   }
 }
 
-source_set("chrome_content_utility_overlay_manifest") {
-  sources = [
-    "chrome_content_utility_overlay_manifest.cc",
-    "chrome_content_utility_overlay_manifest.h",
-  ]
-
-  deps = [
-    "//base",
-    "//components/services/heap_profiling/public/mojom",
-    "//services/service_manager/public/cpp",
-  ]
-}
-
 source_set("builtin_service_manifests") {
   sources = [
     "builtin_service_manifests.cc",
@@ -575,7 +562,6 @@
     "//device/vr/buildflags",
     "//extensions/buildflags",
     "//printing/buildflags",
-    "//services/preferences/public/cpp:local_state_manifest",
     "//services/service_manager/public/cpp",
   ]
 
@@ -632,6 +618,5 @@
     ":chrome_content_browser_overlay_manifest",
     ":chrome_content_gpu_overlay_manifest",
     ":chrome_content_renderer_overlay_manifest",
-    ":chrome_content_utility_overlay_manifest",
   ]
 }
diff --git a/chrome/app/DEPS b/chrome/app/DEPS
index ef53833..fe69675 100644
--- a/chrome/app/DEPS
+++ b/chrome/app/DEPS
@@ -69,7 +69,7 @@
     "+third_party/blink/public/mojom",
   ],
   "chrome_content_gpu_overlay_manifest\.cc": [
-    "+components/arc/common",
+    "+components/arc/mojom",
   ],
   "chrome_content_renderer_overlay_manifest\.cc": [
     "+chromeos/services/network_config/public",
diff --git a/chrome/app/OWNERS b/chrome/app/OWNERS
index d96ba2d..2b82288 100644
--- a/chrome/app/OWNERS
+++ b/chrome/app/OWNERS
@@ -64,7 +64,3 @@
 per-file chrome_content_renderer_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
 per-file chrome_content_renderer_overlay_manifest.h=set noparent
 per-file chrome_content_renderer_overlay_manifest.h=file://ipc/SECURITY_OWNERS
-per-file chrome_content_utility_overlay_manifest.cc=set noparent
-per-file chrome_content_utility_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
-per-file chrome_content_utility_overlay_manifest.h=set noparent
-per-file chrome_content_utility_overlay_manifest.h=file://ipc/SECURITY_OWNERS
diff --git a/chrome/app/builtin_service_manifests.cc b/chrome/app/builtin_service_manifests.cc
index cf2e0307..b9cbc3b 100644
--- a/chrome/app/builtin_service_manifests.cc
+++ b/chrome/app/builtin_service_manifests.cc
@@ -12,7 +12,6 @@
 #include "device/vr/buildflags/buildflags.h"
 #include "extensions/buildflags/buildflags.h"
 #include "printing/buildflags/buildflags.h"
-#include "services/preferences/public/cpp/local_state_manifest.h"
 
 #if defined(OS_CHROMEOS)
 #include "ash/public/cpp/manifest.h"
@@ -61,7 +60,6 @@
 GetChromeBuiltinServiceManifests() {
   static base::NoDestructor<std::vector<service_manager::Manifest>> manifests{{
       GetFileUtilManifest(),
-      prefs::GetLocalStateManifest(),
       quarantine::GetQuarantineManifest(),
 #if BUILDFLAG(ENABLE_EXTENSIONS)
       GetRemovableStorageWriterManifest(),
diff --git a/chrome/app/chrome_command_ids.h b/chrome/app/chrome_command_ids.h
index f91d2a2..385adb9 100644
--- a/chrome/app/chrome_command_ids.h
+++ b/chrome/app/chrome_command_ids.h
@@ -220,7 +220,6 @@
 #define IDC_CHROME_MENU                 44002     // OSX only
 #define IDC_HIDE_APP                    44003     // OSX only
 #define IDC_HISTORY_MENU                46000     // OSX only
-#define IDC_TAB_MENU                    46001     // OSX only
 #define IDC_PROFILE_MAIN_MENU           46100     // OSX only
 #define IDC_INPUT_METHODS_MENU          46300     // Linux only
 
diff --git a/chrome/app/chrome_content_browser_overlay_manifest.cc b/chrome/app/chrome_content_browser_overlay_manifest.cc
index 6da905b..05d1d49 100644
--- a/chrome/app/chrome_content_browser_overlay_manifest.cc
+++ b/chrome/app/chrome_content_browser_overlay_manifest.cc
@@ -33,7 +33,6 @@
 #include "components/metrics/public/mojom/call_stack_profile_collector.mojom.h"
 #include "components/rappor/public/mojom/rappor_recorder.mojom.h"
 #include "components/safe_browsing/common/safe_browsing.mojom.h"
-#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
 #include "components/services/quarantine/public/mojom/quarantine.mojom.h"
 #include "components/translate/content/common/translate.mojom.h"
 #include "extensions/buildflags/buildflags.h"
@@ -130,8 +129,6 @@
         .RequireCapability("device_sync", "device_sync")
         .RequireCapability("file_util", "analyze_archive")
         .RequireCapability("file_util", "zip_file")
-        .RequireCapability("heap_profiling", "heap_profiler")
-        .RequireCapability("heap_profiling", "profiling")
         .RequireCapability("identity", "identity_accessor")
         .RequireCapability(image_annotation::mojom::kServiceName,
                            image_annotation::mojom::kAnnotationCapability)
diff --git a/chrome/app/chrome_content_gpu_overlay_manifest.cc b/chrome/app/chrome_content_gpu_overlay_manifest.cc
index 2c9dd19c..d38cc5c 100644
--- a/chrome/app/chrome_content_gpu_overlay_manifest.cc
+++ b/chrome/app/chrome_content_gpu_overlay_manifest.cc
@@ -6,30 +6,28 @@
 
 #include "base/no_destructor.h"
 #include "build/build_config.h"
-#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
 #include "services/service_manager/public/cpp/manifest_builder.h"
 
 #if defined(OS_CHROMEOS)
-#include "components/arc/common/protected_buffer_manager.mojom.h"
-#include "components/arc/common/video_decode_accelerator.mojom.h"
-#include "components/arc/common/video_encode_accelerator.mojom.h"
-#include "components/arc/common/video_protected_buffer_allocator.mojom.h"
+#include "components/arc/mojom/protected_buffer_manager.mojom.h"
+#include "components/arc/mojom/video_decode_accelerator.mojom.h"
+#include "components/arc/mojom/video_encode_accelerator.mojom.h"
+#include "components/arc/mojom/video_protected_buffer_allocator.mojom.h"
 #endif  // defined(OS_CHROMEOS)
 
 const service_manager::Manifest& GetChromeContentGpuOverlayManifest() {
   static base::NoDestructor<service_manager::Manifest> manifest {
     service_manager::ManifestBuilder()
+#if defined(OS_CHROMEOS)
         .ExposeCapability("browser",
                           service_manager::Manifest::InterfaceList<
-#if defined(OS_CHROMEOS)
                               arc::mojom::ProtectedBufferManager,
                               arc::mojom::VideoDecodeAccelerator,
                               arc::mojom::VideoDecodeClient,
                               arc::mojom::VideoEncodeAccelerator,
                               arc::mojom::VideoEncodeClient,
-                              arc::mojom::VideoProtectedBufferAllocator,
+                              arc::mojom::VideoProtectedBufferAllocator>())
 #endif  // defined(OS_CHROMEOS)
-                              heap_profiling::mojom::ProfilingClient>())
         .Build()
   };
   return *manifest;
diff --git a/chrome/app/chrome_content_renderer_overlay_manifest.cc b/chrome/app/chrome_content_renderer_overlay_manifest.cc
index c48368a0..083b9a2 100644
--- a/chrome/app/chrome_content_renderer_overlay_manifest.cc
+++ b/chrome/app/chrome_content_renderer_overlay_manifest.cc
@@ -14,7 +14,6 @@
 #include "components/dom_distiller/content/common/mojom/distiller_page_notifier_service.mojom.h"
 #include "components/safe_browsing/buildflags.h"
 #include "components/safe_browsing/common/safe_browsing.mojom.h"
-#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
 #include "components/subresource_filter/content/mojom/subresource_filter_agent.mojom.h"
 #include "extensions/buildflags/buildflags.h"
 #include "services/service_manager/public/cpp/manifest_builder.h"
@@ -43,10 +42,8 @@
 const service_manager::Manifest& GetChromeContentRendererOverlayManifest() {
   static base::NoDestructor<service_manager::Manifest> manifest {
     service_manager::ManifestBuilder()
-        .ExposeCapability("browser",
-                          service_manager::Manifest::InterfaceList<
-                              chrome::mojom::SearchBouncer,
-                              heap_profiling::mojom::ProfilingClient>())
+        .ExposeCapability("browser", service_manager::Manifest::InterfaceList<
+                                         chrome::mojom::SearchBouncer>())
         .ExposeInterfaceFilterCapability_Deprecated(
             "navigation:frame", "browser",
             service_manager::Manifest::InterfaceList<
diff --git a/chrome/app/chrome_content_utility_overlay_manifest.cc b/chrome/app/chrome_content_utility_overlay_manifest.cc
deleted file mode 100644
index a92357d..0000000
--- a/chrome/app/chrome_content_utility_overlay_manifest.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/app/chrome_content_utility_overlay_manifest.h"
-
-#include "base/no_destructor.h"
-#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
-#include "services/service_manager/public/cpp/manifest_builder.h"
-
-const service_manager::Manifest& GetChromeContentUtilityOverlayManifest() {
-  static base::NoDestructor<service_manager::Manifest> manifest{
-      service_manager::ManifestBuilder()
-          .ExposeCapability("browser",
-                            service_manager::Manifest::InterfaceList<
-                                heap_profiling::mojom::ProfilingClient>())
-          .Build()};
-  return *manifest;
-}
diff --git a/chrome/app/chrome_content_utility_overlay_manifest.h b/chrome/app/chrome_content_utility_overlay_manifest.h
deleted file mode 100644
index f83a6b84..0000000
--- a/chrome/app/chrome_content_utility_overlay_manifest.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_APP_CHROME_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
-#define CHROME_APP_CHROME_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
-
-#include "services/service_manager/public/cpp/manifest.h"
-
-// Returns the Manifest Chrome amends to Contents's content_utility service
-// manifest. This allows Chrome to extend the capabilities exposed and/or
-// required by content_utility service instances
-const service_manager::Manifest& GetChromeContentUtilityOverlayManifest();
-
-#endif  // CHROME_APP_CHROME_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 29605e1c..f922975 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5114,6 +5114,15 @@
       <message name="IDS_NTP_CUSTOMIZE_3PT_THEME_UNINSTALL" desc="The label for the third-party theme uninstall button in the customization menu on the New Tab Page">
         Uninstall
       </message>
+      <message name="IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL" desc="The label for the color picker in the customization menu on the New Tab Page">
+        Select color
+      </message>
+      <message name="IDS_NTP_CUSTOMIZE_DEFAULT_LABEL" desc="The label for the Default theme in the customization menu on the New Tab Page">
+        Default
+      </message>
+      <message name="IDS_NTP_CUSTOMIZE_COLOR_LABEL_PREFIX" desc="The label prefix for the color options in the customization menu on the New Tab Page. It is followed by a hex value in #000000 format">
+        Hex color value
+      </message>
 
       <if expr="is_android">
         <message name="IDS_NTP_EXPLORE_SITES_TILE_TITLE" desc="A label for a button that when clicked takes the user to a tab that contains categorized links to websites that are popular in their country. [CHAR_LIMIT=12]">
@@ -7704,9 +7713,6 @@
         <message name="IDS_WINDOW_MENU_MAC" desc="The menu title of the Mac window menu.">
           Window
         </message>
-        <message name="IDS_TAB_MENU_MAC" desc="The menu title of the Mac tab menu.">
-          Tab
-        </message>
         <message name="IDS_HELP_MENU_MAC" desc="The menu title of the Mac help menu.">
           Help
         </message>
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_COLOR_LABEL_PREFIX.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_COLOR_LABEL_PREFIX.png.sha1
new file mode 100644
index 0000000..52951f5
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_COLOR_LABEL_PREFIX.png.sha1
@@ -0,0 +1 @@
+dcf786564be1d6de14b8636caf742fc922ee4344
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL.png.sha1
new file mode 100644
index 0000000..979fda5
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL.png.sha1
@@ -0,0 +1 @@
+f73e91018684682237fa39464bb6b467411ac6e5
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_DEFAULT_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_DEFAULT_LABEL.png.sha1
new file mode 100644
index 0000000..9a2017b
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOMIZE_DEFAULT_LABEL.png.sha1
@@ -0,0 +1 @@
+8cb45bffd11c5fb2171b4c4112ef53efa5da2749
\ No newline at end of file
diff --git a/chrome/app/profiles_strings.grdp b/chrome/app/profiles_strings.grdp
index bbd5e993..55b6b74 100644
--- a/chrome/app/profiles_strings.grdp
+++ b/chrome/app/profiles_strings.grdp
@@ -118,12 +118,6 @@
     Addresses and more
   </message>
   <if expr="not use_titlecase">
-    <message name="IDS_PROFILES_DICE_SIGNIN_WITH_ANOTHER_ACCOUNT_BUTTON" desc="Button to sign in and turn on Sync with another web account.">
-      Sync to another account
-    </message>
-    <message name="IDS_PROFILES_DICE_USE_ANOTHER_ACCOUNT_BUTTON" desc="Button to use another account to sign in and turn on Sync.">
-      Use another account
-    </message>
     <message name="IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to manage accounts for a profile.">
       Your accounts
     </message>
@@ -141,12 +135,6 @@
     </message>
   </if>
   <if expr="use_titlecase">
-    <message name="IDS_PROFILES_DICE_SIGNIN_WITH_ANOTHER_ACCOUNT_BUTTON" desc="Button to sign in and turn on Sync with another web account.">
-      Sync to Another Account
-    </message>
-    <message name="IDS_PROFILES_DICE_USE_ANOTHER_ACCOUNT_BUTTON" desc="Button to use another account to sign in and turn on Sync.">
-      Use Another Account
-    </message>
     <message name="IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to manage accounts for a profile.">
       Your Accounts
     </message>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index 1f1ab83..02faacf 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -213,7 +213,7 @@
 <translation id="7747138024166251722">Das Installationsprogramm konnte kein temporäres Verzeichnis erstellen. Überprüfen Sie, ob freier Speicherplatz und die Rechte zum Installieren von Software vorhanden sind.</translation>
 <translation id="7773960292263897147">Achtung: Chromium kann nicht verhindern, dass Ihr Browserverlauf von Erweiterungen protokolliert wird. Sie können diese Erweiterung für den Inkognitomodus deaktivieren, indem Sie die Auswahl für die entsprechende Option aufheben.</translation>
 <translation id="7790626492778995050"><ph name="PAGE_TITLE" /> – Chromium Canary</translation>
-<translation id="7827169012280634081">Alle Cookies und Websitedaten beim Beenden von Chromium löschen</translation>
+<translation id="7827169012280634081">Cookies und Websitedaten beim Beenden von Chromium löschen</translation>
 <translation id="7867198900892795913">Chromium konnte nicht auf die neueste Version aktualisiert werden. In Ihrer Version fehlen daher einige neue Funktionen und Sicherheitspatches.</translation>
 <translation id="7901117350626490574">Ein neues Update für Chromium ist verfügbar und wird installiert, sobald Sie den Browser neu starten.</translation>
 <translation id="7937630085815544518">Sie waren in Chromium als <ph name="USER_EMAIL_ADDRESS" /> angemeldet. Melden Sie sich bitte wieder mit demselben Konto an.</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb
index cc57287..bbad8df 100644
--- a/chrome/app/resources/chromium_strings_es.xtb
+++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -241,7 +241,7 @@
 <translation id="8667808506758191620">El dispositivo <ph name="DEVICE_TYPE" /> está actualizado.</translation>
 <translation id="8697124171261953979">También controla qué página se muestra al iniciar Chromium o al hacer búsquedas desde el omnibox.</translation>
 <translation id="8704119203788522458">Aquí tienes tu navegador Chromium</translation>
-<translation id="8739167630197873875">Se borrarán las cookies cuando salgas de Chromium. Para continuar la sincronización, cambia esta <ph name="COOKIE_SETTINGS_LINK" />.</translation>
+<translation id="8739167630197873875">Se borrarán las cookies cuando salgas de Chromium. Para continuar la sincronización, cambia <ph name="COOKIE_SETTINGS_LINK" />.</translation>
 <translation id="8748383401829947534">Cerrar todas las instancias de Chromium.</translation>
 <translation id="8796602469536043152">Chromium necesita permiso para acceder a la cámara y al micrófono en este sitio web</translation>
 <translation id="8803635938069941624">Condiciones de Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb
index 2f06ec5..463ee76 100644
--- a/chrome/app/resources/chromium_strings_fil.xtb
+++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -241,7 +241,7 @@
 <translation id="8667808506758191620">Napapanahon ang iyong <ph name="DEVICE_TYPE" />.</translation>
 <translation id="8697124171261953979">Kinokontrol din nito kung anong pahina ang ipinapakita kapag sinimulan mo ang Chromium o naghanap mula sa Omnibox.</translation>
 <translation id="8704119203788522458">Ito ang iyong Chromium</translation>
-<translation id="8739167630197873875">Naki-clear mo ang cookies kapag umalis ka sa Chromium. Para patuloy na mag-sync, baguhin ang <ph name="COOKIE_SETTINGS_LINK" /> na ito.</translation>
+<translation id="8739167630197873875">Maki-clear mo ang cookies kapag umalis ka sa Chromium. Para patuloy na mag-sync, baguhin ang <ph name="COOKIE_SETTINGS_LINK" /> na ito.</translation>
 <translation id="8748383401829947534">Ihinto ang lahat ng kopya ng Chromium.</translation>
 <translation id="8796602469536043152">Kailangan ng Chromium ng pahintulot na i-access ang iyong camera at mikropono para sa site na ito</translation>
 <translation id="8803635938069941624">Mga tuntunin ng Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb
index 845032e6..f14993b 100644
--- a/chrome/app/resources/chromium_strings_fr.xtb
+++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -66,7 +66,7 @@
 <translation id="3258596308407688501">Chromium ne peut ni lire, ni écrire dans son répertoire de données :
 
 <ph name="USER_DATA_DIRECTORY" /></translation>
-<translation id="328888136576916638">Les clés d'API Google sont manquantes. Certaines fonctionnalités de Chromium vont être désactivées.</translation>
+<translation id="328888136576916638">Les clés API Google sont manquantes. Certaines fonctionnalités de Chromium vont être désactivées.</translation>
 <translation id="3296368748942286671">Poursuivre l'exécution des applications en arrière-plan après la fermeture de Chromium</translation>
 <translation id="331951419404882060">Impossible de synchroniser vos données dans Chromium OS, car une erreur s'est produite lors de la connexion.</translation>
 <translation id="3340978935015468852">paramètres</translation>
diff --git a/chrome/app/resources/chromium_strings_id.xtb b/chrome/app/resources/chromium_strings_id.xtb
index 2aa6701..b9a5182f 100644
--- a/chrome/app/resources/chromium_strings_id.xtb
+++ b/chrome/app/resources/chromium_strings_id.xtb
@@ -213,7 +213,7 @@
 <translation id="7747138024166251722">Pemasang tidak dapat membuat direktori sementara. Periksa kapasitas kosong pada disk dan izin untuk memasang software.</translation>
 <translation id="7773960292263897147">Peringatan: Chromium tidak dapat mencegah ekstensi merekam histori browsing Anda. Untuk menonaktifkan ekstensi ini dalam mode samaran, jangan pilih opsi ini.</translation>
 <translation id="7790626492778995050"><ph name="PAGE_TITLE" /> - Chromium Canary</translation>
-<translation id="7827169012280634081">Bersihkan cookie dan data situs ketika Anda keluar dari Chromium</translation>
+<translation id="7827169012280634081">Hapus cookie dan data situs ketika Anda keluar dari Chromium</translation>
 <translation id="7867198900892795913">Chromium tidak dapat diupdate ke versi terbaru, sehingga Anda tidak mendapatkan perbaikan keamanan dan fitur baru.</translation>
 <translation id="7901117350626490574">Update baru untuk Chromium telah tersedia dan akan diterapkan segera setelah diluncurkan ulang.</translation>
 <translation id="7937630085815544518">Anda telah masuk ke Chromium sebagai <ph name="USER_EMAIL_ADDRESS" />. Gunakan akun yang sama untuk masuk kembali.</translation>
@@ -239,7 +239,7 @@
 <translation id="8667808506758191620"><ph name="DEVICE_TYPE" /> Anda sudah diperbarui.</translation>
 <translation id="8697124171261953979">Juga mengontrol halaman apa yang ditampilkan saat Anda memulai Chromium atau menelusuri dari Omnibox.</translation>
 <translation id="8704119203788522458">Ini Chromium Anda</translation>
-<translation id="8739167630197873875">Anda membersihkan cookie ketika keluar dari Chromium. Agar tetap tersinkron, ubah <ph name="COOKIE_SETTINGS_LINK" /> ini.</translation>
+<translation id="8739167630197873875">Anda menghapus cookie ketika keluar dari Chromium. Agar tetap tersinkron, ubah <ph name="COOKIE_SETTINGS_LINK" /> ini.</translation>
 <translation id="8748383401829947534">Tutup semua salinan Chromium.</translation>
 <translation id="8796602469536043152">Chromium memerlukan izin akses ke kamera dan mikrofon untuk situs ini</translation>
 <translation id="8803635938069941624">Persyaratan Chromium OS</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb
index 90c1bd2..b90ced32 100644
--- a/chrome/app/resources/chromium_strings_sl.xtb
+++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -216,7 +216,7 @@
 <translation id="7747138024166251722">Namestitvenemu programu ni uspelo ustvariti začasnega imenika. Preverite, ali je na disku dovolj prostora in ali imate dovoljenje za namestitev programske opreme.</translation>
 <translation id="7773960292263897147">Opozorilo: Chromium razširitvam ne more preprečiti beleženja zgodovine brskanja. Če želite onemogočiti to razširitev v načinu brez beleženja zgodovine, počistite to možnost.</translation>
 <translation id="7790626492778995050"><ph name="PAGE_TITLE" /> – delovna različica Chromiuma</translation>
-<translation id="7827169012280634081">Izbris piškotkov in podatkov spletnih mesti, ko zaprete Chromium</translation>
+<translation id="7827169012280634081">Izbris piškotkov in podatkov spletnih mest, ko zaprete Chromium</translation>
 <translation id="7867198900892795913">Chromiuma ni bilo mogoče posodobiti na najnovejšo različico, zato nimate novih funkcij in varnostnih popravkov.</translation>
 <translation id="7901117350626490574">Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete.</translation>
 <translation id="7937630085815544518">V Chromium ste bili prijavljeni kot <ph name="USER_EMAIL_ADDRESS" />. Pri vnovični prijavi uporabite isti račun.</translation>
diff --git a/chrome/app/resources/chromium_strings_ta.xtb b/chrome/app/resources/chromium_strings_ta.xtb
index 5752e26..ca7f4f5 100644
--- a/chrome/app/resources/chromium_strings_ta.xtb
+++ b/chrome/app/resources/chromium_strings_ta.xtb
@@ -239,7 +239,7 @@
 <translation id="8667808506758191620">உங்கள் <ph name="DEVICE_TYPE" /> புதுப்பித்த நிலையில் உள்ளது.</translation>
 <translation id="8697124171261953979">Chromiumமைத் தொடங்கும்போது அல்லது சர்வபுலத்திலிருந்து தேடலை மேற்கொள்ளும்போது காண்பிக்கப்படும் பக்கத்தையும் இது கட்டுப்படுத்துகிறது.</translation>
 <translation id="8704119203788522458">இது உங்கள் Chromium ஆகும்</translation>
-<translation id="8739167630197873875">நீங்கள் Chromiumமை விட்டு வெளியேறும் போது குக்கீகளை அழிக்கும் ஒத்திசைவைத் தொடர இந்த <ph name="COOKIE_SETTINGS_LINK" /> மாற்றவும்.</translation>
+<translation id="8739167630197873875">நீங்கள் Chromiumமை விட்டு வெளியேறும் போது குக்கீகளை அழிக்கும் ஒத்திசைவைத் தொடர இந்த <ph name="COOKIE_SETTINGS_LINK" /> ஐ மாற்றவும்.</translation>
 <translation id="8748383401829947534">Chromiumமின் அனைத்து நேர்வுகளில் இருந்தும் வெளியேறுதல்.</translation>
 <translation id="8796602469536043152">இந்தத் தளத்திற்காகக் கேமராவையும் மைக்ரோஃபோனையும் அணுக Chromiumமுக்கு அனுமதி தேவை</translation>
 <translation id="8803635938069941624">Chromium OS விதிமுறைகள்</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb
index 9060134..e6982588 100644
--- a/chrome/app/resources/chromium_strings_th.xtb
+++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -239,7 +239,7 @@
 <translation id="8667808506758191620"><ph name="DEVICE_TYPE" /> ของคุณเป็นเวอร์ชันล่าสุดแล้ว</translation>
 <translation id="8697124171261953979">อีกทั้งยังควบคุมหน้าที่จะแสดงเมื่อคุณเปิด Chromium หรือทำการค้นหาจากแถบอเนกประสงค์ด้วย</translation>
 <translation id="8704119203788522458">นี่คือ Chromium ของคุณ</translation>
-<translation id="8739167630197873875">คุณจะล้างคุ้กกี้เมื่อปิด Chromium หากต้องการเก็บการซิงค์ไว้ ให้เปลี่ยน<ph name="COOKIE_SETTINGS_LINK" />นี้</translation>
+<translation id="8739167630197873875">คุณจะล้างคุ้กกี้เมื่อปิด Chromium หากต้องการซิงค์ต่อไป ให้เปลี่ยน<ph name="COOKIE_SETTINGS_LINK" />นี้</translation>
 <translation id="8748383401829947534">ปิด Chromium ทุกสำเนา</translation>
 <translation id="8796602469536043152">Chromium ต้องการสิทธิ์เข้าถึงไมโครโฟนและกล้องถ่ายรูปของคุณสำหรับเว็บไซต์นี้</translation>
 <translation id="8803635938069941624">ข้อกำหนดของ Chromium OS</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index d3a0eb97..d83be042 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">በሚከተለው ላይ የማንብብ ወይም የመጻፍ ክወና ልክ ባልሆነ ማሸጋሸጊያ ነው የተጠየቀው፦ «<ph name="DEVICE_NAME" />»።</translation>
 <translation id="1097658378307015415">ከመግባትዎ በፊት አውታረ መረብ <ph name="NETWORK_ID" />ን ለማንቃት እባክዎ እንደ እንግዳ ይግቡ</translation>
 <translation id="1103523840287552314">ሁልጊዜ <ph name="LANGUAGE" />ን መተርጎም</translation>
+<translation id="1104038495841596279">ሲም ካርድዎን ልናገኘው አልቻልንም</translation>
 <translation id="1108600514891325577">&amp;አቁም</translation>
 <translation id="1110155001042129815">ጠብቅ</translation>
 <translation id="1112420131909513020">የጀርባ ትር ብሉቱዝን እየተጠቀመ ነው</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">ስምረት በእርስዎ አስተዳዳሪ ተሰናክሏል።</translation>
 <translation id="2127372758936585790">አነስተኛ ኃይል ያለው ባትሪ መሙያ</translation>
 <translation id="212862741129535676">የተደጋጋሚነት ሁኔታ ያዥነት መቶኛ</translation>
+<translation id="212876957201860463">የእርስዎን የተንቀሳቃሽ ስልክ መሣሪያ ለማዋቀር በመዘጋጀት ላይ...</translation>
 <translation id="2129825002735785149">ተሰኪን አዘምን</translation>
 <translation id="2131077480075264">በ«<ph name="IMPORT_NAME" />» ስላልተፈቀደ «<ph name="APP_NAME" />»ን መጫን አልተቻለም</translation>
 <translation id="21354425047973905">ፒኖችን ይደብቁ</translation>
@@ -955,6 +957,7 @@
 <translation id="2413749388954403953">የዕልባቶች ተጠቃሚ በይነገጽ ይቀይራል</translation>
 <translation id="241727068219398187">ውሂብ <ph name="TIME" /> ላይ በነበረው የGoogle ይለፍ ቃልዎ ተመስጥሯል። ይህ ከGoogle Pay የመክፈያ ዘዴዎችን እና አድራሻዎችን አያካትትም።</translation>
 <translation id="2419706071571366386">ለደህንነት ሲባል የእርስዎ ኮምፒውተር ጥቅም ላይ በማይውልበት ጊዜ ዘግተውት ይውጡ።</translation>
+<translation id="2422125132043002186">የLinux ወደነበረበት መመለስ ተሰርዟል</translation>
 <translation id="2423578206845792524">ምስል አስ&amp;ቀምጥ እንደ…</translation>
 <translation id="2428510569851653187">ትሩ ሲሰናከል ምን እየሰሩ እንደነበር ያብራሩ</translation>
 <translation id="2431027948063157455">Google ረዳት የአውታረ መረብ ግንኙነትዎን መፈተሽ እና ዳግም መሞከር አልቻለም።</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">የኦዲዮ እና የቪዲዮ ግብዓትን በመድረስ ላይ</translation>
 <translation id="3090819949319990166">ውጫዊ የcrx ፋይል ወደ <ph name="TEMP_CRX_FILE" /> መቅዳት አልተቻለም።</translation>
 <translation id="3090871774332213558">«<ph name="DEVICE_NAME" />» ተጣምሯል</translation>
+<translation id="3092699946856346803">እባክዎ የእርስዎን ሲም ያስገቡና እንደገና ይሞክሩ</translation>
 <translation id="3101709781009526431">ቀን እና ሰዓት</translation>
 <translation id="310671807099593501">ጣቢያ ብሉቱዝን እየተጠቀመ ነው</translation>
 <translation id="3115147772012638511">መሸጎጫ በመጠበቅ ላይ…</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">የሚገለሉ ፋይሎች እና ፕሮግራሞች፦</translation>
 <translation id="3282568296779691940">Chrome ውስጥ ይግቡ</translation>
 <translation id="3285322247471302225">አዲስ &amp;ትር</translation>
+<translation id="3286654161521615710">በChrome አሳሽ እና የ<ph name="DEVICE_TYPE" /> አስጀማሪ ስራ ላይ የሚውል</translation>
 <translation id="3286737518123001369">በእርስዎ የደህንነት ቁልፍ ላይ የተከማቸውን በመለያ መግቢያ ውሂብ ይመልከቱ እና ይሰረዙ</translation>
 <translation id="3288047731229977326">በገንቢ ሁኔታ የሚሄዱ ጥያዎች የእርስዎን ኮምፒውተር ሊጎዱ ይችላሉ። እርስዎ ገንቢ ካልሆኑ ደህንነትዎን ለማረገገጥ በገንቢ ሁኔታ የሚሄዱ ቅጥያዎችን ማሰናከል አለብዎ።</translation>
 <translation id="3289856944988573801">ዝማኔዎች ካሉ ለማየት እባክዎ Ethernet ወይም Wi-Fi ይጠቀሙ።</translation>
@@ -1874,6 +1879,7 @@
 <translation id="3775432569830822555">SSL አገልጋይ ሰርቲፊኬት</translation>
 <translation id="3775705724665058594">ወደ መሣሪያዎችዎ ይላኩ</translation>
 <translation id="3776796446459804932">ይህ ቅጥያ የChrome ድር ማከማቻ መመሪያን ይጥሳል።</translation>
+<translation id="3777483481409781352">የተንቀሳቃሽ ስልክ መሣሪያን ማግበር አልተቻለም</translation>
 <translation id="3777806571986431400">ቅጥያ ነቅቷል</translation>
 <translation id="3778152852029592020">ማውረድ ተሰርዟል።</translation>
 <translation id="3778208826288864398">ትክክል ያልሆነ ፒን ከልክ በላይ ለብዙ ጊዜ ስለገባ ይህ የደህንነት ቁልፍ ተቆልፏል። የደህንነት ቁልፉን ዳግም ማቀናበር ያስፈልግዎታል።</translation>
@@ -2135,6 +2141,7 @@
 <translation id="4131410914670010031">ጥቁር እና ነጭ</translation>
 <translation id="4136203100490971508">ፀሐይ ስትወጣ የማታ ብርሃን በራስ-ሰር ይጠፋል</translation>
 <translation id="4138267921960073861">በመግቢያ ገጹ ላይ የተጠቃሚ ስሞች እና ፎቶዎችን አሳይ</translation>
+<translation id="4142052906269098341">የእርስዎን <ph name="DEVICE_TYPE" /> በስልክዎ መክፈት አለብዎት። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">የተሻለ ጥራት ያለውን ቪዲዮ ያግኙ እና የባትሪ ዕድሜ ይቆጥቡ። ቪዲዮ በእርስዎ የCast-የነቃ ማያ ገጽ ላይ ብቻ ይጫወታል።</translation>
 <translation id="4145922204387553806">ረዳቱ በእርስዎ ማያ ገጽ ላይ ካለው ጋር ተዛማጅ መረጃ ለእርስዎ እንዲሰጥዎት ያድርጉ</translation>
 <translation id="4146026355784316281">ሁልጊዜ ከሥርዓት ተመልካች ጋር ክፈት</translation>
@@ -2176,6 +2183,7 @@
 <translation id="42126664696688958">ወደ ውጪ ላክ</translation>
 <translation id="42137655013211669">የዚህ መርጃ መዳረሻ በአገልጋዩ ተከልክሏል።</translation>
 <translation id="4215350869199060536">ውይ ውይ፣ በስም ውስጥ ህገ-ወጥ ምልክቶች!</translation>
+<translation id="4220648711404560261">በማግበር ጊዜ አንድ ስህተት ተከስቷል።</translation>
 <translation id="4225397296022057997">በሁሉም ጣቢያዎች ላይ</translation>
 <translation id="4232375817808480934">Kerberosን ያዋቅሩ</translation>
 <translation id="4235200303672858594">መላው የማያ ገጽ</translation>
@@ -2324,6 +2332,7 @@
 <translation id="4470957202018033307">የውጫዊ ማከማቻ ምርጫዎች</translation>
 <translation id="447252321002412580">የChrome ባህሪያት እና አፈጻጸም እንዲሻሻል ያግዙ</translation>
 <translation id="4474155171896946103">ለሁሉም ትሮች ዕልባት አብጅ...</translation>
+<translation id="4474461121892222090">የሞባይል ውሂብን ማግበር ማጠናቀቅ እስከ 15 ደቂቃዎች ድረስ ሊወስድ ይችላል።</translation>
 <translation id="4475552974751346499">የሚወርዱ ፈልግ</translation>
 <translation id="4476590490540813026">አትሌት</translation>
 <translation id="4477015793815781985">Ctrl፣ Alt ወይም ⌘ ያካትቱ</translation>
@@ -2333,6 +2342,7 @@
 <translation id="4479877282574735775">ምናባዊውን ማሽን በማዋቀር ላይ። ይሄ ጥቂት ደቂቃዎችን ሊወስደ ይችላል።</translation>
 <translation id="4480590691557335796">Chrome በእርስዎ ኮምፒውተር ላይ ጎጂ ሶፍትዌርን ማግኘት እና ማስወገድ ይችላል</translation>
 <translation id="4481530544597605423">ያልተጣመሩ መሣሪያዎች</translation>
+<translation id="4483579413421375386">ለጣቢያ አሳይ</translation>
 <translation id="4495419450179050807">በዚህ ገጽ ላይ አታሳይ</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ተበላሽቷል</translation>
 <translation id="450099669180426158">የቃለ አጋኖ አዶ</translation>
@@ -2436,6 +2446,7 @@
 <translation id="4647697156028544508">እባክዎ የ«<ph name="DEVICE_NAME" />»ን ፒን ያስገቡ፦</translation>
 <translation id="4648491805942548247">በቂ ያልሆኑ ፍቃዶች</translation>
 <translation id="4648499713050786492">አንድ ሰው ከማከልዎ በፊት እባክዎ የእርስዎን መገለጫ ይክፈቱ።</translation>
+<translation id="4650591383426000695">ስልክዎን ከ<ph name="DEVICE_TYPE" /> ጋር ያለው ግንኙነት ያቋርጡት</translation>
 <translation id="4651484272688821107">የመስመር ላይ ክፍለ አካላትን ከቅንጭብ ማሳያ ሁነታ ግብዓቶች ጋር መጫን አልተቻለም።</translation>
 <translation id="465878909996028221">http፣ https እና ፋይል ፕሮቶኮሎች ብቻ ለአሳሽ አቅጣጫ መቀየሮች ይደገፋሉ።</translation>
 <translation id="4659077111144409915">ዋና መለያ</translation>
@@ -2737,6 +2748,7 @@
 <translation id="5115309401544567011">እባክዎ የእርስዎን <ph name="DEVICE_TYPE" /> ወደ የኃይል ምንጭ ይሰኩት።</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">ተሰሚ/ኦዲዮ አስ&amp;ቀምጥ እንደ…</translation>
+<translation id="5117139026559873716">የእርስዎን ስልክ ከእርስዎ <ph name="DEVICE_TYPE" /> ጋር ያለውን ግንኙነት ያቋርጡ። ከእንግዲህ በራስ-ሰር አይገናኙም።</translation>
 <translation id="5117427536932535467">ገጽታዎች እና የግድግዳ ወረቀቶች</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" />ን በተሳካ ሁኔታ አትሟል</translation>
 <translation id="5117930984404104619">የተጎበኙ ዩ አር ኤሎችንም ጨምሮ የሌሎች ቅጥያዎች ባህሪ ይከታተሉ</translation>
@@ -2966,6 +2978,7 @@
 <translation id="5463275305984126951">የ<ph name="LOCATION" /> ጠቋሚ</translation>
 <translation id="5463856536939868464">የተደበቁ ዕልባቶችን የያዘ ምናሌ</translation>
 <translation id="5464632865477611176">አሁን አሂደው</translation>
+<translation id="5464660706533281090">ይህ ቅንብር በልጅ ተጠቃሚ ሊቀየር አይችልም።</translation>
 <translation id="5466374726908360271">ይለጥፉና «<ph name="SEARCH_TERMS" />»ን ይፈልጉ</translation>
 <translation id="5471768120198416576">ጤና ይስጥልን! እኔ የጽሑፍ-ወደ-ንግግር ድምጽዎ ነኝ።</translation>
 <translation id="5473333559083690127">አዲሱን ፒን ደግመው ያስገቡ</translation>
@@ -3201,6 +3214,7 @@
 <translation id="5817918615728894473">አጣምር</translation>
 <translation id="5821565227679781414">አቋራጭ ፍጠር</translation>
 <translation id="5825412242012995131">በርቷል (የሚመከር)</translation>
+<translation id="5826395379250998812">የእርስዎን <ph name="DEVICE_TYPE" /> ከስልክዎ ጋር ያገናኙት። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">የጋር ስም (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">በማተም ላይ...</translation>
@@ -3422,6 +3436,7 @@
 <translation id="6129691635767514872">የተመረጠው ውሂብ ከChrome እና የሰመሩ መሣሪያዎች ተወግዷል። የGoogle መለያዎ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ላይ እንደ የሌሎች Google አገልግሎቶች ፍለጋዎች እና እንቅስቃሴ ያለ ሌሎች የአሰሳ ታሪክ ዓይነት ሊኖረው ይችላል።</translation>
 <translation id="6129938384427316298">የNetscape ሰርቲፊኬት አስተያየት</translation>
 <translation id="6129953537138746214">ባዶ ቦታ</translation>
+<translation id="6130024555057767093">ማሳወቂያዎች በአሁኑ ጊዜ እርስዎ በተናጠል ከፈቀዱላቸው ውጭ ለሁሉም ጣቢያዎች ታግደዋል።</translation>
 <translation id="6136114942382973861">የውርዶች አሞሌን ዝጋ</translation>
 <translation id="6137767437444130246">የተጠቃሚ እውቅና ማረጋገጫ</translation>
 <translation id="6138680304137685902">የX9.62 ECDSA ፊርማ በSHA-384</translation>
@@ -3467,6 +3482,7 @@
 <translation id="620722923698527029">ሁልጊዜ እነዚህን የአገናኝ አይነቶች በተጓዳኙ መተግበሪያ ውስጥ ክፈት</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux መተግበሪያ) ይጫኑ</translation>
 <translation id="6207937957461833379">አገር/ክልል</translation>
+<translation id="6208521041562685716">የሞባይል ውሂብን በማግበር ላይ</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />፦ ስምረት እየሠራ አይደለም</translation>
 <translation id="6212039847102026977">የላቁ የአውታረ መረብ ባህሪያትን አሳይ</translation>
 <translation id="6212168817037875041">ማሳያን አጥፋ</translation>
@@ -3828,6 +3844,7 @@
 <translation id="677965093459947883">በጣም ትንሽ</translation>
 <translation id="6780439250949340171">ሌሎች ቅንብሮችን ያቀናብሩ</translation>
 <translation id="6781284683813954823">Doodle አገናኝ</translation>
+<translation id="6781978626986383437">የLinux ምትኬ ተሰርዟል</translation>
 <translation id="6782111308708962316">የሦስተኛ ወገን ድር ጣቢያዎች የኩኪ ውሂብን እንዳያስቀምጡ እና እንዳያነብቡ ከልክል</translation>
 <translation id="6786747875388722282">ቅጥያዎች</translation>
 <translation id="6787839852456839824">የቁልፍ ሰሌዳ አቋራጮች</translation>
@@ -4115,6 +4132,7 @@
 <translation id="7197632491113152433">በዚህ መሣሪያ ላይ መጠቀም የሚቻሉ <ph name="NUMBER_OF_APPS" /> መተግበሪያዎችን ከመለያዎ አግኝተናል።</translation>
 <translation id="7199158086730159431">እ&amp;ገዛ አግኝ</translation>
 <translation id="7200083590239651963">ውቅረትን ይምረጡ</translation>
+<translation id="7201042526153088083">በእርስዎ <ph name="DEVICE_TYPE" /> ላይ መተግበሪያዎችን እና ጨዋታዎችን ከGoogle Play ይጫኑ። &lt;a target="_blank" href="<ph name="URL" />"&gt;የበለጠ ለመረዳት&lt;/a&gt;</translation>
 <translation id="720110658997053098">ይህን መሣሪያ እስከመጨረሻው በኪዮስክ ሁነታ አቆየው</translation>
 <translation id="7201118060536064622">«<ph name="DELETED_ITEM_NAME" />» ተሰርዟል</translation>
 <translation id="7201420661433230412">ፋይሎችን ይመልከቱ</translation>
@@ -4139,6 +4157,7 @@
 <translation id="7229570126336867161">ኢቪዲኦ ያስፈልጋል</translation>
 <translation id="7230787553283372882">የእርስዎን የጽሑፍ መጠን ያብጁ</translation>
 <translation id="7232750842195536390">ዳግም መሰየም አልተሳካም</translation>
+<translation id="7234010996000898150">የLinux ወደነበረበት መመለስን በመሰረዝ ላይ</translation>
 <translation id="7235716375204803342">እንቅስቃሴዎችን በማግኘት ላይ...</translation>
 <translation id="7235737137505019098">የእርስዎ ደህንነት ቁልፍ ለማናቸውም ተጨማሪ መለያዎች በቂ ቦታ የለውም።</translation>
 <translation id="7238585580608191973">SHA-256 የጣት አሻራ</translation>
@@ -4274,6 +4293,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{ሁሉንም በ&amp;አዲስ መስኮት ውስጥ ክፈት}=1{&amp;በአዲስ መስኮት ውስጥ ክፈት}one{ሁሉንም (#) በ&amp;አዲስ መስኮት ውስጥ ክፈት}other{ሁሉንም (#) በ&amp;አዲስ መስኮት ውስጥ ክፈት}}</translation>
 <translation id="7434509671034404296">ገንቢ</translation>
 <translation id="7436921188514130341">ኧረ ቴች! ዳግም በሚሰየምበት ጊዜ የሆነ ስህተት ነበር።</translation>
+<translation id="7437427339141948518">ማሳወቂያዎች ጠፍተዋል</translation>
 <translation id="7438976808740265764">Flash Player ከዲሴምበር 2020 በኋላ አይደገፍም።</translation>
 <translation id="7441736921018636843">ይህን ቅንብር ለመቀየር፣ የእርስዎን የስምረት ይለፍ ሐረግ ለማስወገድ <ph name="BEGIN_LINK" />ስምረትን ዳግም ያቀናብሩ<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">ሌሎች ተጠቃሚዎች</translation>
@@ -4403,6 +4423,7 @@
 <translation id="7643932971554933646">ጣቢያ ፋይሎችን እንዲያይ ይፈቀድለት?</translation>
 <translation id="7644543211198159466">ቀለም እና ገጽታ</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (ባለቤት)</translation>
+<translation id="7645681574855902035">የLinux ምትኬን በመሰረዝ ላይ</translation>
 <translation id="7647403192093989392">ምንም የቅርብ ጊዜ እንቅስቃሴ የለም</translation>
 <translation id="7648142322539582331">የወላጅ መቆጣጠሪያዎችን ለማቀናበር ከበይነመረብ ጋር ይገናኙ</translation>
 <translation id="7648992873808071793">በዚህ መሣሪያ ላይ ፋይሎችን አከማች</translation>
@@ -4858,6 +4879,7 @@
 <translation id="8256319818471787266">Sparky</translation>
 <translation id="8257950718085972371">የካሜራ መዳረሻ ማገዱን ቀጥል</translation>
 <translation id="8259239505248583312">እንሂድ</translation>
+<translation id="8259556432390118667">የአስራስድስትዮሽ ቀለም እሴት</translation>
 <translation id="8260126382462817229">እንደገና ለመግባት ይሞክሩ</translation>
 <translation id="8260864402787962391">መዳፊት</translation>
 <translation id="8261378640211443080">ይህ ቅጥያ በ<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ውስጥ ያልተጠቀሰ ሲሆን እርስዎ ሳያውቁት የታከለ ሊሆን ይችላል።</translation>
@@ -5110,6 +5132,7 @@
 <translation id="8662911384982557515">መነሻ ገጽዎን ወደዚህ ይቀይሩት፦ <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome የግድግዳ ወረቀቱን ሊያዘጋጅ አይችልም።</translation>
 <translation id="8663099077749055505">ሁልጊዜም ከ<ph name="HOST" /> ላይ በርካታ የራስ ሰር ማውረዶችን አግድ</translation>
+<translation id="8663534996262079772">ለዚህ ጣቢያ ማሳወቂያዎች ይታዩ?</translation>
 <translation id="8664389313780386848">የፍሬም መነሻ  &amp;አሳይ</translation>
 <translation id="8665180165765946056">ምትኬ ማስቀመጥ ተጠናቋል</translation>
 <translation id="866611985033792019">የኢሜይል ተጠቃሚዎችን ለመለየት ይህን የዕውቅና ማረጋገጫ እመን</translation>
@@ -5399,6 +5422,7 @@
 <translation id="9065203028668620118">አርትዕ</translation>
 <translation id="9066773882585798925">ጽሑፍ ጮክ ተብሎ ሲነበብ ይስሙ</translation>
 <translation id="9066782832737749352">ጽሑፍ ወደ ንግግር</translation>
+<translation id="9068849894565669697">ቀለም ይምረጡ</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">ብሉቱዝ</translation>
 <translation id="9074836595010225693">የUSB መዳፊት ተገናኝቷል</translation>
@@ -5436,6 +5460,7 @@
 <translation id="9131487537093447019">መልዕክቶችን ወደ ብሉቱዝ መሣሪያዎች ይልካል እና ከእነሱ ይቀበላል።</translation>
 <translation id="9134304429738380103">አዎ፣ ገብቼበታለሁ።</translation>
 <translation id="9137013805542155359">የመጀመሪያውን አሳይ</translation>
+<translation id="9137157311132182254">የተመረጠው የፍለጋ ፕሮግራም</translation>
 <translation id="9137916601698928395">እንደ <ph name="USER" /> ሆነው አገናኙን ይክፈቱ</translation>
 <translation id="9138978632494473300">ለሚከተሉት ቦታዎች አቋራጮችን ያክሉ፦</translation>
 <translation id="9140067245205650184">የማይደገፍ የባህሪ ጥቆማን እየተጠቀሙ ነው፦ <ph name="BAD_FLAG" />። እርጋታ እና ደህንነት ችግር ይደርስባቸዋል።</translation>
@@ -5508,6 +5533,7 @@
 <translation id="962802172452141067">የእልባት አቃፊ ዛፍ</translation>
 <translation id="964286338916298286">የእርስዎ የአይቲ አስተዳዳሪ Chrome Goodiesን ለመሣሪያዎ አሰናክሏል።</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{መተግበሪያ}one{መተግበሪያዎች}other{መተግበሪያዎች}}</translation>
+<translation id="965211523698323809">ከእርስዎ <ph name="DEVICE_TYPE" /> ሆነው የጽሑፍ መልዕክቶችን ይላኩ እና ይቀበሉ። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">በእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች ላይ የሚደረጉ ለውጦች ከአሁን በኋላ ከGoogle መለያዎ ጋር አይሰምሩም። ይሁንና፣ የእርስዎ ነባር ውሂብ በGoogle መለያዎ ላይ እንደተከማቸ የሚቆይ እና በ<ph name="BEGIN_LINK" />Google ዳሽቦርድ<ph name="END_LINK" /> ላይ መቀናበር የሚችል ነው።</translation>
 <translation id="967624055006145463">የተከማቸ ውሂብ</translation>
 <translation id="968000525894980488">Google Play አገልግሎቶችን ያብሩ።</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index c145eb5..f566d1c 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">تم طلب عملية القراءة أو الكتابة باستخدام إزاحة غير صالحة على: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">قبل تسجيل الدخول، يُرجى الدخول كضيف لتفعيل الشبكة <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">ترجمة اللغة <ph name="LANGUAGE" /> دائمًا</translation>
+<translation id="1104038495841596279">‏تعذّر علينا رصد شريحة SIM.</translation>
 <translation id="1108600514891325577">إي&amp;قاف</translation>
 <translation id="1110155001042129815">انتظار</translation>
 <translation id="1112420131909513020">هناك علامة تبويب خلفية تستخدم البلوتوث</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">تم إيقاف المزامنة من قِبل المشرف.</translation>
 <translation id="2127372758936585790">شاحن منخفض الطاقة</translation>
 <translation id="212862741129535676">نسبة إشغال حالة التردد</translation>
+<translation id="212876957201860463">جارٍ التحضير لإعداد جهازك الخلوي...</translation>
 <translation id="2129825002735785149">تحديث المكوِّن الإضافي</translation>
 <translation id="2131077480075264">تعذّر تثبيت "<ph name="APP_NAME" />" لأنه لم يُسمح به من قبل "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">إخفاء أرقام التعريف الشخصية</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">‏تم تشفير البيانات باستخدام كلمة مرور Google اعتبارًا من
           <ph name="TIME" />. لا يتضمّن ذلك طرق الدفع والعناوين من Google Pay.</translation>
 <translation id="2419706071571366386">لأغراض الأمان، سجّل الخروج عندما لا يتم استخدام الكمبيوتر.</translation>
+<translation id="2422125132043002186">‏تم إلغاء عملية الاسترداد من Linux</translation>
 <translation id="2423578206845792524">حف&amp;ظ الصورة باسم...</translation>
 <translation id="2428510569851653187">وصف ما كنت تفعله عندما تعطّلت علامة التبويب</translation>
 <translation id="2431027948063157455">‏تعذّر تحميل مساعد Google، يُرجى التحقُّق من اتصال الشبكة وإعادة المحاولة.</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">جارٍ الوصول إلى إدخال الصوت والفيديو</translation>
 <translation id="3090819949319990166">‏لا يمكن نسخ ملف CRX الخارجي إلى <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">تم إقران "<ph name="DEVICE_NAME" />"</translation>
+<translation id="3092699946856346803">‏يُرجى إدخال بطاقة SIM وإعادة المحاولة.</translation>
 <translation id="3101709781009526431">التاريخ والوقت</translation>
 <translation id="310671807099593501">يستخدم موقع الويب البلوتوث.</translation>
 <translation id="3115147772012638511">في انتظار ذاكرة التخزين المؤقت ...</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">الملفات والبرامج التي تم وضعها في وحدة العزل:</translation>
 <translation id="3282568296779691940">‏تسجيل الدخول إلى Chrome</translation>
 <translation id="3285322247471302225">&amp;علامة تبويب جديدة</translation>
+<translation id="3286654161521615710">‏يتم استخدامه من قبِل متصفِّح Chromre ومشغّل التطبيقات للجهاز <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3286737518123001369">يُرجى عرض بيانات تسجيل الدخول المخزّنة على مفتاح الأمان وحذفها</translation>
 <translation id="3288047731229977326">يمكن أن تؤدي الإضافات التي تعمل في وضع مطور البرامج إلى إلحاق الضرر بجهاز الكمبيوتر. إذا لم تكن مطور برامج، فيجب إيقاف هذه الإضافات التي تعمل في وضع مطور البرامج للبقاء في أمان.</translation>
 <translation id="3289856944988573801">‏للتحقق من وجود تحديثات، يُرجى استخدام شبكة Ethernet أو Wi-Fi.</translation>
@@ -1873,6 +1878,7 @@
 <translation id="3775432569830822555">‏شهادة خادم بروتوكول SSL (طبقة المقابس الآمنة)</translation>
 <translation id="3775705724665058594">إرسال إلى أجهزتك</translation>
 <translation id="3776796446459804932">‏هذه الإضافة تنتهك سياسة سوق Chrome الإلكتروني.</translation>
+<translation id="3777483481409781352">تعذّر تفعيل الجهاز الخلوي.</translation>
 <translation id="3777806571986431400">تم تفعيل الإضافة</translation>
 <translation id="3778152852029592020">تم إلغاء التنزيل.</translation>
 <translation id="3778208826288864398">تم قفل مفتاح الأمان بسبب إدخال رقم التعريف الشخصي غير الصحيح عدّة مرات. يجب إعادة ضبط مفتاح الأمان.</translation>
@@ -2133,6 +2139,7 @@
 <translation id="4131410914670010031">أبيض وأسود</translation>
 <translation id="4136203100490971508">سيتم إيقاف الإضاءة الليلية تلقائيًا عند شروق الشمس.</translation>
 <translation id="4138267921960073861">عرض أسماء المستخدمين والصور على شاشة تسجيل الدخول</translation>
+<translation id="4142052906269098341">يمكنك فتح قفل الجهاز <ph name="DEVICE_TYPE" /> باستخدام هاتفك <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">‏يمكنك الحصول على فيديو بجودة أفضل والحفاظ على عمر البطارية. ولن يتم تشغيل الفيديو إلا على شاشة تعمل بتكنولوجيا Google Cast.</translation>
 <translation id="4145922204387553806">‏السماح "لمساعد Google" بعرض معلومات متعلِّقة بالمحتوى المعروض على شاشتك</translation>
 <translation id="4146026355784316281">افتح دائمًا باستخدام عرض النظام</translation>
@@ -2174,6 +2181,7 @@
 <translation id="42126664696688958">تصدير</translation>
 <translation id="42137655013211669">الدخول إلى هذا المورد محظور  من الخادم</translation>
 <translation id="4215350869199060536">عفوًا، يشتمل الاسم على رموز غير مسموح بها!</translation>
+<translation id="4220648711404560261">حدث خطأ أثناء التفعيل.</translation>
 <translation id="4225397296022057997">على جميع المواقع</translation>
 <translation id="4232375817808480934">‏ضبط Kerberos</translation>
 <translation id="4235200303672858594">الشاشة بالكامل</translation>
@@ -2322,6 +2330,7 @@
 <translation id="4470957202018033307">الإعدادات المفضلة لمساحة التخزين الخارجية</translation>
 <translation id="447252321002412580">‏المساعدة في تحسين ميزات Chrome وأدائه</translation>
 <translation id="4474155171896946103">وضع إشارات على كل علامات التبويب...</translation>
+<translation id="4474461121892222090">قد يستغرق إكمال عملية تفعيل بيانات الجوّال مدة تصل إلى 15 دقيقة.</translation>
 <translation id="4475552974751346499">البحث في التنزيلات</translation>
 <translation id="4476590490540813026">رياضي</translation>
 <translation id="4477015793815781985">‏يرجى تضمين مفتاح Ctrl أو Alt أو ⌘.</translation>
@@ -2331,6 +2340,7 @@
 <translation id="4479877282574735775">جارٍ ضبط الآلة الافتراضية. قد يستغرق ذلك بضع دقائق.</translation>
 <translation id="4480590691557335796">‏يمكن لـ Chrome العثور على البرامج الضارة على جهاز الكمبيوتر وإزالتها.</translation>
 <translation id="4481530544597605423">الأجهزة التي تم إلغاء إقرانها</translation>
+<translation id="4483579413421375386">عرض للموقع الإلكتروني</translation>
 <translation id="4495419450179050807">عدم الظهور في هذه الصفحة</translation>
 <translation id="4500114933761911433">تعطّل <ph name="PLUGIN_NAME" />.</translation>
 <translation id="450099669180426158">رمز علامة التعجب</translation>
@@ -2434,6 +2444,7 @@
 <translation id="4647697156028544508">يُرجى إدخال رقم التعريف الشخصي لـ "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">أذونات غير كافية</translation>
 <translation id="4648499713050786492">يُرجى إلغاء قفل ملفك الشخصي قبل إضافة شخص.</translation>
+<translation id="4650591383426000695">إلغاء ربط الهاتف من الجهاز <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">تعذَّر تحميل المكوِّن على الإنترنت باستخدام موارد الوضع التجريبي.</translation>
 <translation id="465878909996028221">‏يمكن إعادة توجيه المتصفّح باستخدام بروتوكولات الملف وhttp وhttps فقط.</translation>
 <translation id="4659077111144409915">الحساب الأساسي</translation>
@@ -2735,6 +2746,7 @@
 <translation id="5115309401544567011">يُرجى توصيل جهاز <ph name="DEVICE_TYPE" /> بمصدر طاقة.</translation>
 <translation id="5115338116365931134">‏الدخول المُوحَّد (SSO)</translation>
 <translation id="5116628073786783676">حف&amp;ظ ملف الصوت باسم...</translation>
+<translation id="5117139026559873716">يمكنك إلغاء ربط هاتفك بجهاز <ph name="DEVICE_TYPE" />. لن يتم ربطهما تلقائيًا بعد الآن.</translation>
 <translation id="5117427536932535467">المظاهر والخلفيات</translation>
 <translation id="5117625797180141189">تمت طباعة <ph name="DOCUMENT_NAME" /> بنجاح</translation>
 <translation id="5117930984404104619">‏مراقبة سلوك الإضافات الأخرى، بما في ذلك عناوين URL التي تم الانتقال إليها</translation>
@@ -2964,6 +2976,7 @@
 <translation id="5463275305984126951">فهرس المجلد <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">قائمة تحتوي على إشارات مخفية</translation>
 <translation id="5464632865477611176">التشغيل في هذه المرة</translation>
+<translation id="5464660706533281090">لا يمكن لمستخدم ثانوي تغيير هذا الإعداد.</translation>
 <translation id="5466374726908360271">ل&amp;صق وبحث عن "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">مرحبًا! هذا صوت ميزة تحويل النص إلى كلام.</translation>
 <translation id="5473333559083690127">إعادة إدخال رقم التعريف الشخصي الجديد</translation>
@@ -3199,6 +3212,7 @@
 <translation id="5817918615728894473">إقران</translation>
 <translation id="5821565227679781414">إنشاء اختصار</translation>
 <translation id="5825412242012995131">تفعيل (مُقترح)</translation>
+<translation id="5826395379250998812">يمكنك ربط الجهاز <ph name="DEVICE_TYPE" /> بهاتفك. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">‏الاسم الشائع (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">الطباعة جارية...</translation>
@@ -3420,6 +3434,7 @@
 <translation id="6129691635767514872">‏تمت إزالة البيانات المحددة من Chrome والأجهزة التي تمت مزامنتها. قد يحتوي حسابك على Google على نماذج أخرى من سجل التصفح، مثل عمليات البحث والنشاط من خدمات Google الأخرى في <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">‏التعليق على شهادة Netscape</translation>
 <translation id="6129953537138746214">مسافة</translation>
+<translation id="6130024555057767093">تم حظر الإشعارات حاليًا لجميع المواقع الإلكترونية ما عدا المواقع التي تسمح لها بشكلٍ فردي.</translation>
 <translation id="6136114942382973861">إغلاق شريط التنزيلات</translation>
 <translation id="6137767437444130246">شهادة المستخدم</translation>
 <translation id="6138680304137685902">‏توقيع X9.62 ECDSA باستخدام SHA-384</translation>
@@ -3466,6 +3481,7 @@
 <translation id="620722923698527029">فتح هذه الأنواع من الروابط دائمًا في التطبيق المرتبط</translation>
 <translation id="6207282396926186323">‏تثبيت <ph name="APP_NAME" /> (تطبيق Linux)</translation>
 <translation id="6207937957461833379">البلد/المنطقة</translation>
+<translation id="6208521041562685716">جارٍ تفعيل بيانات الجوّال</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: المزامنة لا تعمل</translation>
 <translation id="6212039847102026977">عرض خصائص الشبكة المتقدمة</translation>
 <translation id="6212168817037875041">إيقاف تشغيل الشاشة</translation>
@@ -3827,6 +3843,7 @@
 <translation id="677965093459947883">صغير جدًا</translation>
 <translation id="6780439250949340171">إدارة الإعدادات الأخرى</translation>
 <translation id="6781284683813954823">رابط رسومات الشعار المبتكرة</translation>
+<translation id="6781978626986383437">‏تم إلغاء عملية الاحتفاظ بنسخة احتياطية من Linux</translation>
 <translation id="6782111308708962316">منع مواقع الويب التابعة لجهات خارجية من حفظ بيانات ملفات تعريف الارتباط وقراءتها</translation>
 <translation id="6786747875388722282">الإضافات</translation>
 <translation id="6787839852456839824">اختصارات لوحة المفاتيح</translation>
@@ -4114,6 +4131,7 @@
 <translation id="7197632491113152433">لقد عثرنا على <ph name="NUMBER_OF_APPS" /> من التطبيقات من حسابك التي يمكن استخدامها على هذا الجهاز.</translation>
 <translation id="7199158086730159431">الحصول على مساعدة</translation>
 <translation id="7200083590239651963">اختيار تهيئة</translation>
+<translation id="7201042526153088083">‏يمكنك تثبيت التطبيقات والألعاب من Google Play على الجهاز <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;مزيد من المعلومات&lt;/a&gt;</translation>
 <translation id="720110658997053098">تشغيل هذا الجهاز في وضع الكشك دائمًا</translation>
 <translation id="7201118060536064622">تم حذف "<ph name="DELETED_ITEM_NAME" />"</translation>
 <translation id="7201420661433230412">عرض الملفات</translation>
@@ -4138,6 +4156,7 @@
 <translation id="7229570126336867161">‏يلزم توفر EVDO</translation>
 <translation id="7230787553283372882">تخصيص حجم النَّص</translation>
 <translation id="7232750842195536390">تعذّرت إعادة التسمية</translation>
+<translation id="7234010996000898150">‏جارٍ إلغاء عملية الاسترداد من Linux</translation>
 <translation id="7235716375204803342">جارٍ جلب الأنشطة...</translation>
 <translation id="7235737137505019098">لا تتوفر مساحة كافية في مفتاح الأمان لأي حسابات إضافية.</translation>
 <translation id="7238585580608191973">‏بصمة أصبع SHA-256</translation>
@@ -4273,6 +4292,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{فتح الكل في &amp;نافذة جديدة}=1{فتح في &amp;نافذة جديدة}two{فتح كلا العنوانين (#) في &amp;نافذة جديدة}few{فتح كل الـ (#) عناوين في &amp;نافذة جديدة}many{فتح كل الـ (#) عنوانًا في &amp;نافذة جديدة}other{فتح كل الـ (#) عنوان في &amp;نافذة جديدة}}</translation>
 <translation id="7434509671034404296">المطوِّر</translation>
 <translation id="7436921188514130341">عذرًا، حدث خطأ في أثناء إعادة التسمية.</translation>
+<translation id="7437427339141948518">الإشعارات متوقفة</translation>
 <translation id="7438976808740265764">‏لن يتوفَّر برنامج Adobe Flash Player بعد كانون الأول (ديسمبر) 2020.</translation>
 <translation id="7441736921018636843">لتغيير هذا الإعداد، يمكنك <ph name="BEGIN_LINK" />إعادة ضبط المزامنة<ph name="END_LINK" /> لإزالة عبارة مرور المزامنة.</translation>
 <translation id="7441830548568730290">المستخدمون الآخرون</translation>
@@ -4402,6 +4422,7 @@
 <translation id="7643932971554933646">هل تسمح للموقع الإلكتروني بعرض الملفات؟</translation>
 <translation id="7644543211198159466">اللون والتصميم</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (المالك)</translation>
+<translation id="7645681574855902035">‏جارٍ إلغاء عملية الاحتفاظ بنسخة احتياطية من Linux</translation>
 <translation id="7647403192093989392">ليست هناك أنشطة حديثة</translation>
 <translation id="7648142322539582331">الاتصال بالإنترنت لإعداد أدوات الرقابة الأبوية</translation>
 <translation id="7648992873808071793">تخزين الملفات على هذا الجهاز</translation>
@@ -4853,6 +4874,7 @@
 <translation id="8256319818471787266">اللامع</translation>
 <translation id="8257950718085972371">متابعة حظر الدخول إلى الكاميرا</translation>
 <translation id="8259239505248583312">بدء الاستخدام</translation>
+<translation id="8259556432390118667">القيمة السداسية للّون</translation>
 <translation id="8260126382462817229">محاولة تسجيل الدخول مرة أخرى</translation>
 <translation id="8260864402787962391">الماوس</translation>
 <translation id="8261378640211443080">هذه الإضافة غير مدرجة في <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> وربما تمت إضافتها بدون علمك.</translation>
@@ -5105,6 +5127,7 @@
 <translation id="8662911384982557515">تغيير الصفحة الرئيسية إلى: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">‏يتعذر على Chrome تعيين هذه الخلفية.</translation>
 <translation id="8663099077749055505">حظر التنزيلات المتعددة تلقائيًا بشكل دائم على <ph name="HOST" /></translation>
+<translation id="8663534996262079772">هل تريد عرض الإشعارات لهذا الموقع الإلكتروني؟</translation>
 <translation id="8664389313780386848">عرض م&amp;صدر الصفحة</translation>
 <translation id="8665180165765946056">اكتمل النسخ الاحتياطي</translation>
 <translation id="866611985033792019">الوثوق بهذه الشهادة لتحديد هوية مستخدمي البريد الإلكتروني</translation>
@@ -5394,6 +5417,7 @@
 <translation id="9065203028668620118">تعديل</translation>
 <translation id="9066773882585798925">سماع النص بصوت عالٍ</translation>
 <translation id="9066782832737749352">تحويل النَّص إلى الكلام</translation>
+<translation id="9068849894565669697">اختيار اللون</translation>
 <translation id="9073281213608662541">‏بروتوكول مصادقة كلمات المرور (PAP)</translation>
 <translation id="9074739597929991885">بلوتوث</translation>
 <translation id="9074836595010225693">‏ماوس USB متصل</translation>
@@ -5431,6 +5455,7 @@
 <translation id="9131487537093447019">إرسال الرسائل إلى أجهزة البلوتوث واستلامها منها.</translation>
 <translation id="9134304429738380103">نعم، أنا موافق.</translation>
 <translation id="9137013805542155359">إظهار الصفحة الأصلية</translation>
+<translation id="9137157311132182254">محرِّك البحث المفضل</translation>
 <translation id="9137916601698928395">فتح الرابط كـ <ph name="USER" /></translation>
 <translation id="9138978632494473300">إضافة اختصارات إلى الأماكن التالية:</translation>
 <translation id="9140067245205650184">أنت تستخدم علامة ميزة غير مدعومة: <ph name="BAD_FLAG" />. سيؤثر ذلك سلبًا على وظائف الميزة وأمانها.</translation>
@@ -5503,6 +5528,7 @@
 <translation id="962802172452141067">شجرة مجلد الإشارات المرجعية</translation>
 <translation id="964286338916298286">‏أوقف مشرف تقنية المعلومات ميزات Chrome الإضافية لجهازك.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{تطبيق}zero{تطبيقات}two{تطبيقان}few{تطبيقات}many{تطبيقات}other{تطبيقات}}</translation>
+<translation id="965211523698323809">إرسال رسائل نصية واستلامها من جهاز <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">‏سيؤدي هذا إلى تسجيل خروجك من حساباتك على Google. لن تتم بعد ذلك مزامنة التغييرات التي تطرأ على الإشارات المرجعية والسجلّ وكلمات المرور وغيرها من الإعدادات مع حسابك على Google، ولكن ستظل بياناتك الحالية مخزّنة في حسابك على Google ويمكن إدارتها في <ph name="BEGIN_LINK" />لوحة تحكُّم Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">البيانات المُخزَّنة</translation>
 <translation id="968000525894980488">‏يُرجى تفعيل خدمات Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index c9fd258..8077940 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Операция за четене или запис с невалидно отместване бе заявена на: <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Преди да влезете в профила си, моля, влезте като гост, за да активирате мрежата <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Винаги да се превежда от <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Не можахме да открием SIM картата ви</translation>
 <translation id="1108600514891325577">&amp;Стоп</translation>
 <translation id="1110155001042129815">Изчакване</translation>
 <translation id="1112420131909513020">Раздел на заден план използва Bluetooth</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">Синхронизирането е деактивирано от администратора ви.</translation>
 <translation id="2127372758936585790">Зарядно устройство с малка мощност</translation>
 <translation id="212862741129535676">Процент на използване в състояние на активност</translation>
+<translation id="212876957201860463">Мобилното ви устройство се подготвя за настройване...</translation>
 <translation id="2129825002735785149">Актуализиране на приставката</translation>
 <translation id="2131077480075264"><ph name="APP_NAME" /> не може да се инсталира, защото няма разрешение за импортиране на ресурси от <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Скриване на ПИН кодовете</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187">Данните бяха шифровани с паролата ви за Google от
 <ph name="TIME" />. Това не включва начините на плащане и адресите от Google Pay.</translation>
 <translation id="2419706071571366386">От съображения за сигурност излизайте от профила си, когато не използвате компютъра си.</translation>
+<translation id="2422125132043002186">Възстановяването на Linux бе анулирано</translation>
 <translation id="2423578206845792524">&amp;Запазване на изображението като...</translation>
 <translation id="2428510569851653187">Опишете какво правехте, когато разделът претърпя срив</translation>
 <translation id="2431027948063157455">Google Асистент не можа да се зареди. Моля, проверете връзката си с мрежата и опитайте отново.</translation>
@@ -1421,6 +1424,7 @@
 <translation id="3090193911106258841">Осъществява се достъп до аудио- и видеовхода</translation>
 <translation id="3090819949319990166">Външният crx файл не може да се копира в/ъв „<ph name="TEMP_CRX_FILE" />“.</translation>
 <translation id="3090871774332213558">Успешно сдвояване на <ph name="DEVICE_NAME" /></translation>
+<translation id="3092699946856346803">Моля, поставете SIM карта и опитайте отново</translation>
 <translation id="3101709781009526431">Дата и час</translation>
 <translation id="310671807099593501">Сайтът използва Bluetooth</translation>
 <translation id="3115147772012638511">Кешът се изчаква...</translation>
@@ -1528,6 +1532,7 @@
 <translation id="3281892622610078515">Файлове и програми, които да бъдат поставени под карантина:</translation>
 <translation id="3282568296779691940">Вход в Chrome</translation>
 <translation id="3285322247471302225">Нов &amp;раздел</translation>
+<translation id="3286654161521615710">Използва се от браузъра Chrome и стартовия панел на <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Преглед и изтриване на данните за вход, съхранявани в ключа ви за сигурност</translation>
 <translation id="3288047731229977326">Разширенията, които се изпълняват в режим за програмисти, могат да навредят на компютъра ви. Ако не сте програмист, за по-голяма безопасност трябва да деактивирате изпълнението им в този режим.</translation>
 <translation id="3289856944988573801">За да проверите за актуализации, моля, използвайте Ethernet или Wi-Fi.</translation>
@@ -1873,6 +1878,7 @@
 <translation id="3775432569830822555">Сертификат на SSL сървър</translation>
 <translation id="3775705724665058594">Изпращане до устройствата ви</translation>
 <translation id="3776796446459804932">Това разширение нарушава правилата на уеб магазина на Chrome.</translation>
+<translation id="3777483481409781352">Мобилното устройство не можа да бъде активирано</translation>
 <translation id="3777806571986431400">Разширението е активирано</translation>
 <translation id="3778152852029592020">Изтеглянето бе анулирано.</translation>
 <translation id="3778208826288864398">Ключът за сигурност е заключен поради многократно въвеждане на грешен ПИН код. Трябва да нулирате ключа.</translation>
@@ -2137,6 +2143,7 @@
 <translation id="4131410914670010031">Черно-бяло</translation>
 <translation id="4136203100490971508">Нощното осветление ще се изключи автоматично по изгрев</translation>
 <translation id="4138267921960073861">Потребителските имена и снимките да се показват на екрана за вход</translation>
+<translation id="4142052906269098341">Отключвайте своя <ph name="DEVICE_TYPE" /> с телефона си. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Гледайте видео с по-добро качество и удължете живота на батерията. Видеото ще се възпроизвежда само на екрана ви, поддържащ Cast.</translation>
 <translation id="4145922204387553806">Разрешаване на Асистент да ви показва информация въз основа на съдържанието на екрана ви</translation>
 <translation id="4146026355784316281">Отваряне винаги със системния визуализатор</translation>
@@ -2178,6 +2185,7 @@
 <translation id="42126664696688958">Експортиране</translation>
 <translation id="42137655013211669">Достъпът до този ресурс бе забранен от сървъра.</translation>
 <translation id="4215350869199060536">Ами сега! Името съдържа невалидни символи!</translation>
+<translation id="4220648711404560261">При активирането възникна грешка.</translation>
 <translation id="4225397296022057997">На всички сайтове</translation>
 <translation id="4232375817808480934">Конфигуриране на Kerberos</translation>
 <translation id="4235200303672858594">Цял екран</translation>
@@ -2326,6 +2334,7 @@
 <translation id="4470957202018033307">Предпочитания за външно хранилище</translation>
 <translation id="447252321002412580">Помощ за подобряването на функциите и ефективността на Chrome</translation>
 <translation id="4474155171896946103">Запазване на отметки към всички раздели…</translation>
+<translation id="4474461121892222090">Активирането на мобилните данни може да отнеме до 15 минути.</translation>
 <translation id="4475552974751346499">Търсене във файловете за изтегляне</translation>
 <translation id="4476590490540813026">Спортист</translation>
 <translation id="4477015793815781985">Добавете Ctrl, Alt или ⌘</translation>
@@ -2335,6 +2344,7 @@
 <translation id="4479877282574735775">Виртуалната машина се конфигурира. Това може да отнеме няколко минути.</translation>
 <translation id="4480590691557335796">Chrome може да намери опасния софтуер на компютъра ви и да го премахне</translation>
 <translation id="4481530544597605423">Несдвоени устройства</translation>
+<translation id="4483579413421375386">Показване за сайта</translation>
 <translation id="4495419450179050807">Да не се показва на тази страница</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> претърпя срив</translation>
 <translation id="450099669180426158">Икона на удивителен знак</translation>
@@ -2438,6 +2448,7 @@
 <translation id="4647697156028544508">Моля, въведете ПИН кода за „<ph name="DEVICE_NAME" />“:</translation>
 <translation id="4648491805942548247">Недостатъчни разрешения</translation>
 <translation id="4648499713050786492">Моля, отключете потребителския си профил, преди да добавите човек.</translation>
+<translation id="4650591383426000695">Прекратяване на връзката между телефона ви и вашия <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Онлайн компонентът с ресурси за демонстрационен режим не можа да бъде зареден.</translation>
 <translation id="465878909996028221">Само протоколите http, https и file се поддържат за пренасочвания на браузъра.</translation>
 <translation id="4659077111144409915">Основен профил</translation>
@@ -2739,6 +2750,7 @@
 <translation id="5115309401544567011">Моля, включете устройството си <ph name="DEVICE_TYPE" /> в източник на захранване.</translation>
 <translation id="5115338116365931134">Единичен вход за достъп</translation>
 <translation id="5116628073786783676">&amp;Запазване на аудиоклипа като...</translation>
+<translation id="5117139026559873716">Прекратяване на връзката между телефона и вашия <ph name="DEVICE_TYPE" />. Те повече няма да се свързват автоматично.</translation>
 <translation id="5117427536932535467">Теми и тапети</translation>
 <translation id="5117625797180141189">Документът „<ph name="DOCUMENT_NAME" />“ бе отпечатан успешно</translation>
 <translation id="5117930984404104619">Наблюдение на поведението на други разширения, включително посетените URL адреси</translation>
@@ -2968,6 +2980,7 @@
 <translation id="5463275305984126951">Индекс на <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Менюто съдържа скрити отметки</translation>
 <translation id="5464632865477611176">Стартиране този път</translation>
+<translation id="5464660706533281090">Тази настройка не може да бъде променена от дете.</translation>
 <translation id="5466374726908360271">Пост&amp;авяне и търсене на „<ph name="SEARCH_TERMS" />“</translation>
 <translation id="5471768120198416576">Здравейте! Аз съм гласът за синтезиран говор.</translation>
 <translation id="5473333559083690127">Въведете пак новия ПИН</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Сдвояване</translation>
 <translation id="5821565227679781414">Създаване на пряк път</translation>
 <translation id="5825412242012995131">Включено (препоръчително)</translation>
+<translation id="5826395379250998812">Свържете своя <ph name="DEVICE_TYPE" /> с телефона си. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Общо име (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Отпечатва се...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Избраните данни са премахнати от Chrome и синхронизираните устройства. Възможно е в профила ви в Google да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> – например търсения и активност от други наши услуги.</translation>
 <translation id="6129938384427316298">Коментар на сертификат на Netscape</translation>
 <translation id="6129953537138746214">Интервал</translation>
+<translation id="6130024555057767093">Понастоящем известията са блокирани за всички сайтове освен за онези, за които ги разрешите индивидуално.</translation>
 <translation id="6136114942382973861">Затваряне на лентата на изтеглянето</translation>
 <translation id="6137767437444130246">Потребителски сертификат</translation>
 <translation id="6138680304137685902">Подпис по X9.62 ECDSA с SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Тези типове връзки винаги да се отварят в свързаното приложение</translation>
 <translation id="6207282396926186323">Инсталиране на <ph name="APP_NAME" /> (приложение за Linux)</translation>
 <translation id="6207937957461833379">Държава/Регион</translation>
+<translation id="6208521041562685716">Мобилните данни се активират</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: синхронизирането не работи</translation>
 <translation id="6212039847102026977">Показване на разширените свойства на мрежата</translation>
 <translation id="6212168817037875041">Изключване на екрана</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Много малък</translation>
 <translation id="6780439250949340171">да управлявате други настройки.</translation>
 <translation id="6781284683813954823">Връзка към драскулката</translation>
+<translation id="6781978626986383437">Създаването на резервно копие на Linux бе анулирано</translation>
 <translation id="6782111308708962316">Забраняване на уебсайтовете на трети страни да запазват и четат данни в „бисквитки“</translation>
 <translation id="6786747875388722282">Разширения</translation>
 <translation id="6787839852456839824">Клавишни комбинации</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Открихме <ph name="NUMBER_OF_APPS" /> приложения от профила ви, които могат да се използват на това устройство.</translation>
 <translation id="7199158086730159431">Получаване на помощ</translation>
 <translation id="7200083590239651963">Избиране на конфигурация</translation>
+<translation id="7201042526153088083">Инсталирайте приложения и игри от Google Play на своя <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Научете повече&lt;/a&gt;</translation>
 <translation id="720110658997053098">Това устройство да е постоянно в павилионен режим</translation>
 <translation id="7201118060536064622">Изтрихте „<ph name="DELETED_ITEM_NAME" />“</translation>
 <translation id="7201420661433230412">Преглед на файловете</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Необходим е EVDO</translation>
 <translation id="7230787553283372882">Персонализирайте размера на текста</translation>
 <translation id="7232750842195536390">Преименуването не бе успешно</translation>
+<translation id="7234010996000898150">Възстановяването на Linux се анулира</translation>
 <translation id="7235716375204803342">Активността се извлича...</translation>
 <translation id="7235737137505019098">В ключа ви за сигурност няма достатъчно място за повече профили.</translation>
 <translation id="7238585580608191973">Пръстов отпечатък SHA-256</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Отваряне на всички в &amp;нов прозорец}=1{Отваряне в &amp;нов прозорец}other{Отваряне на всички (#) в &amp;нов прозорец}}</translation>
 <translation id="7434509671034404296">Програмист</translation>
 <translation id="7436921188514130341">Ужас! При преименуването възникна грешка.</translation>
+<translation id="7437427339141948518">Известията са изключени</translation>
 <translation id="7438976808740265764">Поддръжката на Flash Player ще бъде прекратена след декември 2020 г.</translation>
 <translation id="7441736921018636843">За да промените тази настройка, <ph name="BEGIN_LINK" />нулирайте синхронизирането<ph name="END_LINK" />, така че да премахнете съответния си пропуск</translation>
 <translation id="7441830548568730290">Други потребители</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Да се разреши ли на сайта да преглежда файловете?</translation>
 <translation id="7644543211198159466">Цвят и тема</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (собственик)</translation>
+<translation id="7645681574855902035">Създаването на резервно копие на Linux се анулира</translation>
 <translation id="7647403192093989392">Няма скорошна активност</translation>
 <translation id="7648142322539582331">Свържете се с интернет, за да настроите родителските контроли</translation>
 <translation id="7648992873808071793">Да съхранява файлове на това устройство.</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Спарки</translation>
 <translation id="8257950718085972371">Достъпът до камерата да продължи да се блокира</translation>
 <translation id="8259239505248583312">Начало</translation>
+<translation id="8259556432390118667">Шестнадесетична стойност за цвета</translation>
 <translation id="8260126382462817229">Опитайте да влезете отново</translation>
 <translation id="8260864402787962391">Мишка</translation>
 <translation id="8261378640211443080">Това разширение не е посочено в <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и може да е било добавено без ваше знание.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Промяна на началната ви страница на <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome не може да зададе тапета.</translation>
 <translation id="8663099077749055505">Автоматичното изтегляне на няколко файла да се блокира винаги за <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Да се показват ли известия за този сайт?</translation>
 <translation id="8664389313780386848">&amp;Преглед на изходния код на страницата</translation>
 <translation id="8665180165765946056">Създаването на резервно копие завърши</translation>
 <translation id="866611985033792019">Да се има доверие на този сертификат за идентифициране на потребители на имейл</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Редактиране</translation>
 <translation id="9066773882585798925">Прослушване на текст, прочетен на глас</translation>
 <translation id="9066782832737749352">Синтезиран говор</translation>
+<translation id="9068849894565669697">Избор на цвят</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Мишката с USB е свързана</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Да обменя съобщения с устройства с Bluetooth.</translation>
 <translation id="9134304429738380103">Да, ще участвам.</translation>
 <translation id="9137013805542155359">Показване на оригинала</translation>
+<translation id="9137157311132182254">Предпочитана търсеща машина</translation>
 <translation id="9137916601698928395">Отваряне на връзката като <ph name="USER" /></translation>
 <translation id="9138978632494473300">Добавяне на преки пътища към следните места:</translation>
 <translation id="9140067245205650184">Използвате неподдържан флаг за функция: <ph name="BAD_FLAG" />. Стабилността и сигурността ще пострадат.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Дърво на папките с отметки</translation>
 <translation id="964286338916298286">Системният ви администратор е деактивирал екстрите за Chrome за устройството ви.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Приложение}other{Приложения}}</translation>
+<translation id="965211523698323809">Изпращайте и получавайте SMS съобщения от своя <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Така ще излезете от профилите си в Google. Промените във вашите отметки, история, пароли и други настройки повече няма да се синхронизират с профила ви в Google. Съществуващите ви данни обаче ще продължат да се съхраняват в него. Можете да ги управлявате от <ph name="BEGIN_LINK" />Google Табло за управление<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Съхранени данни</translation>
 <translation id="968000525894980488">Включете услугите за Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 58f72581..859c8b06 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">এখানে একটি ভুল অফসেট সহ পড়া বা লেখার ক্রিয়াকলাপের অনুরোধ করা হয়েছিল:: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">প্রবেশ করার আগে, <ph name="NETWORK_ID" /> নেটওয়ার্ক সক্রিয় করতে দয়া করে অতিথি রূপে প্রবেশ করুন</translation>
 <translation id="1103523840287552314">সর্বদা অনুবাদ করুন <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">আমরা আপনার সিম কার্ড শনাক্ত করতে পারিনি</translation>
 <translation id="1108600514891325577">&amp;Stop</translation>
 <translation id="1110155001042129815">অপেক্ষা করুন</translation>
 <translation id="1112420131909513020">ব্যাকগ্রাউন্ড ট্যাব ব্লুটুথ ব্যবহার করছে</translation>
@@ -755,6 +756,7 @@
 <translation id="2126167708562367080">আপনার প্রশাসকের দ্বারা সিঙ্ক অক্ষম করা হয়েছে।</translation>
 <translation id="2127372758936585790">নিম্ন শক্তির চার্জার</translation>
 <translation id="212862741129535676">ফ্রিকোয়েন্সি স্টেট ওকুপেন্সির শতকরা হার</translation>
+<translation id="212876957201860463">আপনার সেলুলার ডিভাইসকে সেট-আপ করার জন্য প্রস্তুত করা হচ্ছে...</translation>
 <translation id="2129825002735785149">প্লাগ-ইন আপডেট করুন</translation>
 <translation id="2131077480075264">"<ph name="APP_NAME" />" ইনস্টল করা যায়নি কারণ এটি "<ph name="IMPORT_NAME" />" এর দ্বারা অনুমোদিত নয়</translation>
 <translation id="21354425047973905">পিন লুকিয়ে রাখুন</translation>
@@ -954,6 +956,7 @@
 <translation id="2413749388954403953">বুকমার্ক ইউজার ইন্টারফেস পরিবর্তন করুন</translation>
 <translation id="241727068219398187">Google পাসওয়ার্ড দিয়ে <ph name="TIME" />-এ আপনার ডেটা এনক্রিপ্ট করা হয়েছিল। এতে Google Pay-এর পেমেন্ট পদ্ধতি ও ঠিকানা অন্তর্ভুক্ত থাকে না।</translation>
 <translation id="2419706071571366386">নিরাপত্তার কারণে, আপনার কম্পিউটার ব্যবহার করা না হলে সাইন-আউট করুন।</translation>
+<translation id="2422125132043002186">Linux ফিরিয়ে আনা বাতিল করা হয়ছে</translation>
 <translation id="2423578206845792524">এই হিসেবে ইমেজ সেভ করুন...</translation>
 <translation id="2428510569851653187">ট্যাবটি ক্র্যাশ হওয়ার সময় আপনি কি করছিলেন তা বর্ণনা করুন</translation>
 <translation id="2431027948063157455">Google অ্যাসিস্ট্যান্চ লোড করা যায়নি, আপনার ইন্টারনেট সংযোগ দেখে নিয়ে আবার চেষ্টা করুন।</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">অডিও এবং ভিডিও ইনপুটে অ্যাক্সেস করা হচ্ছে</translation>
 <translation id="3090819949319990166"><ph name="TEMP_CRX_FILE" />-এ বহিরাগত crx ফাইলটি কপি করতে পারবেন না৷</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" যুক্ত করা হয়েছে</translation>
+<translation id="3092699946856346803">সিম যোগ করে আবার চেষ্টা করুন</translation>
 <translation id="3101709781009526431">তারিখ এবং সময়</translation>
 <translation id="310671807099593501">সাইটটি ব্লুটুথ ব্যবহার করছে</translation>
 <translation id="3115147772012638511">ক্যাশের অপেক্ষা করা হচ্ছে...</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">ফাইল এবং প্রোগ্রাম কোয়ারেন্টাইন করা হবে:</translation>
 <translation id="3282568296779691940">Chrome-এ সাইন-ইন করুন</translation>
 <translation id="3285322247471302225">নতুন &amp;ট্যাব</translation>
+<translation id="3286654161521615710">Chrome এবং <ph name="DEVICE_TYPE" /> লঞ্চার এটি ব্যবহার করে</translation>
 <translation id="3286737518123001369">আপনার নিরাপত্তা কীয়ে সেভ করা সাইন-ইন ডেটা দেখুন ও মুছুন</translation>
 <translation id="3288047731229977326">ডেভেলপার মোডে চলমান এক্সটেনশনগুলি আপনার কম্পিউটারের ক্ষতি করতে পারে৷ যদি আপনি একজন ডেভেলপার না হন, তবে সুরক্ষিত থাকার জন্য আপনার এই এক্সটেনশনগুলিকে ডেভেলপার মোডে চালানো বন্ধ করা উচিৎ৷</translation>
 <translation id="3289856944988573801">আপডেটগুলি পরীক্ষা করার জন্য, অনুগ্রহ করে Ethernet বা ওয়াই-ফাই ব্যবহার করুন৷</translation>
@@ -1871,6 +1876,7 @@
 <translation id="3775432569830822555">SSL সার্ভার সার্টিফিকেট</translation>
 <translation id="3775705724665058594">আপনার ডিভাইসে পাঠান</translation>
 <translation id="3776796446459804932">এই এক্সটেনশনটি 'Chrome ওয়েব স্টোরে'র নীতি লঙ্ঘন করে৷</translation>
+<translation id="3777483481409781352">সেলুলার ডিভাইস অ্যাক্টিভেট করা যায়নি</translation>
 <translation id="3777806571986431400">এক্সটেনশন চালু করা হয়েছে</translation>
 <translation id="3778152852029592020">ডাউনলোড বাতিল হয়েছে৷</translation>
 <translation id="3778208826288864398">অনেক বার ভুল পিন দেওয়ার জন্য নিরাপত্তা কী লক হয়ে গেছে। আপনাকে নিরাপত্তা কী রিসেট করতে হবে।</translation>
@@ -2133,6 +2139,7 @@
 <translation id="4131410914670010031">সাদা ও কালো</translation>
 <translation id="4136203100490971508">সূর্যোদয়ের সময় নাইট লাইট নিজে থেকেই বন্ধ হয়ে যাবে</translation>
 <translation id="4138267921960073861">সাইন-ইন স্ক্রিনে ব্যবহারকারীর নামগুলি এবং ফটো দেখান</translation>
+<translation id="4142052906269098341">ফোন দিয়ে <ph name="DEVICE_TYPE" /> আনলক করুন <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">আরও উন্নত মানের ভিডিও পান এবং ব্যাটারি সাশ্রয় করুন। শুধুমাত্র আপনার Cast চালু আছে এমন স্ক্রিনে ভিডিও চলবে</translation>
 <translation id="4145922204387553806">আপনার স্ক্রিনে যা আছে সেই সম্পর্কিত তথ্য দেখানোর জন্য অ্যাসিস্ট্যান্টকে অনুমতি দিন</translation>
 <translation id="4146026355784316281">সর্বদা সিস্টেম নিরীক্ষকের সাথে খুলুন</translation>
@@ -2174,6 +2181,7 @@
 <translation id="42126664696688958">রপ্তানি</translation>
 <translation id="42137655013211669">এই সম্পদে অ্যাক্সেস করা সার্ভার দ্বারা নিষিদ্ধ ছিল।</translation>
 <translation id="4215350869199060536">উপস, নামে অবৈধ চিহ্ন রয়েছে!</translation>
+<translation id="4220648711404560261">অ্যাক্টিভেট করার সময় কোনও সমস্যা হয়েছে।</translation>
 <translation id="4225397296022057997">সমস্ত সাইটে</translation>
 <translation id="4232375817808480934">Kerberos কনফিগার করুন</translation>
 <translation id="4235200303672858594">সম্পূর্ণ স্ক্রিন</translation>
@@ -2322,6 +2330,7 @@
 <translation id="4470957202018033307">এক্সটারনাল স্টোরেজের ব্যাপারে অভিরুচি</translation>
 <translation id="447252321002412580">Chrome-এর বৈশিষ্ট্য এবং পারফরম্যান্স আরও ভালো করতে সাহায্য করুন</translation>
 <translation id="4474155171896946103">সব কটি ট্যাব বুকমার্ক করুন...</translation>
+<translation id="4474461121892222090">মোবাইল ডেটা অ্যাক্টিভেট করতে ১৫ মিনিট পর্যন্ত সময় লাগতে পারে।</translation>
 <translation id="4475552974751346499">ডাউনলোডগুলি খুঁজুন</translation>
 <translation id="4476590490540813026">ক্রীড়াবিদ</translation>
 <translation id="4477015793815781985">Ctrl, Alt অথবা ⌘ ব্যবহার করতে হবে</translation>
@@ -2331,6 +2340,7 @@
 <translation id="4479877282574735775">ভার্চুয়াল মেশিন কনফিগার করা হচ্ছে। এর জন্য কয়েক মিনিট সময় লাগতে পারে।</translation>
 <translation id="4480590691557335796">Chrome আপনার কম্পিউটারে ক্ষতিকর সফ্টওয়্যার খুঁজে বের করে সেগুলি সরিয়ে দিতে পারে</translation>
 <translation id="4481530544597605423">বিযুক্ত করা ডিভাইসগুলি</translation>
+<translation id="4483579413421375386">এই সাইটের বিজ্ঞপ্তি দেখুন</translation>
 <translation id="4495419450179050807">এই পৃষ্ঠাতে দেখাবেন না</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ক্র্যাশ করে গেছে</translation>
 <translation id="450099669180426158">বিস্ময়বোধক চিহ্ন আইকন</translation>
@@ -2434,6 +2444,7 @@
 <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />"-এর PIN লিখুন:</translation>
 <translation id="4648491805942548247">অপর্যাপ্ত অনুমতিগুলি</translation>
 <translation id="4648499713050786492">কোনো ব্যক্তি যোগ করার আগে দয়া করে আপনার প্রোফাইলটি আনলক করুন।</translation>
+<translation id="4650591383426000695"><ph name="DEVICE_TYPE" /> থেকে আপনার ফোন ডিসকানেক্ট করুন</translation>
 <translation id="4651484272688821107">ডেমো মোড রিসোর্স সহ অনলাইন কম্পোনেন্ট লোড করা যায়নি।</translation>
 <translation id="465878909996028221">ব্রাউজার রিডাইরেক্টের জন্য শুধুমাত্র http, https ও ফাইল প্রটোকল কাজ করে।</translation>
 <translation id="4659077111144409915">প্রাথমিক অ্যাকাউন্ট</translation>
@@ -2735,6 +2746,7 @@
 <translation id="5115309401544567011">অনুগ্রহ করে আপনার <ph name="DEVICE_TYPE" /> এ চার্জ দিন।</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">এইরূপে অডিও সংর&amp;ক্ষণ করুন...</translation>
+<translation id="5117139026559873716"><ph name="DEVICE_TYPE" /> থেকে আপনার ফোন ডিসকানেক্ট করুন। সেগুলি আর অটোমেটিক কানেক্ট হবে না।</translation>
 <translation id="5117427536932535467">থিম ও ওয়ালপেপার</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> প্রিন্ট করা হয়েছে</translation>
 <translation id="5117930984404104619">পরিদর্শিত URL গুলি সহ অন্যান্য এক্সটেনশানগুলির আচরণ নিরীক্ষণ করুন</translation>
@@ -2964,6 +2976,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" />-এর সূচী</translation>
 <translation id="5463856536939868464">গোপন বুকমার্কগুলি সমন্বিত মেনু</translation>
 <translation id="5464632865477611176">এখন চালান</translation>
+<translation id="5464660706533281090">নাবালক ব্যবহারকারী এই সেটিংস পরিবর্তন করতে পারবেন না।</translation>
 <translation id="5466374726908360271">“<ph name="SEARCH_TERMS" />” পে&amp;স্ট করে সার্চ করুন</translation>
 <translation id="5471768120198416576">হ্যালো! আমি হলাম আপনার পাঠ্য থেকে ভাষ্য ভয়েস।</translation>
 <translation id="5473333559083690127">নতুন পিন পুনরায় লিখুন</translation>
@@ -3200,6 +3213,7 @@
 <translation id="5817918615728894473">যুক্ত করুন</translation>
 <translation id="5821565227679781414">শর্টকাট তৈরি করুন</translation>
 <translation id="5825412242012995131">চালু আছে (সাজেস্ট করা)</translation>
+<translation id="5826395379250998812"><ph name="DEVICE_TYPE" />-কে আপনার ফোনের সাথে কানেক্ট করুন। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">কমন নেম (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">মুদ্রন হচ্ছে...</translation>
@@ -3421,6 +3435,7 @@
 <translation id="6129691635767514872">বেছে নেওয়া ডেটা Chrome ও সিঙ্ক করা ডিভাইস থেকে সরিয়ে ফেলা হয়েছে। আপনার Google অ্যাকাউন্টের অন্যান্য ধরনের ব্রাউজিং ইতিহাস, যেমন বিভিন্ন Google পরিষেবায় করা সার্চ এবং অ্যাক্টিভিটির মতো তথ্য <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />-এ সেভ করা থাকতে পারে।</translation>
 <translation id="6129938384427316298">Netscape সার্টিফিকেট মন্তব্য</translation>
 <translation id="6129953537138746214">ব্যবধান</translation>
+<translation id="6130024555057767093">আপনি নিজে থেকে যেসব সাইটের বিজ্ঞপ্তি দেখার অনুমতি দিয়েছেন সেগুলি ছাড়া সব সাইটের বিজ্ঞপ্তি বর্তমানে ব্লক করা আছে।</translation>
 <translation id="6136114942382973861">ডাউনলোড বার বন্ধ করুন</translation>
 <translation id="6137767437444130246">ব্যবহারকারীর সার্টিফিকেট</translation>
 <translation id="6138680304137685902">SHA-384 সহ X9.62 ECDSA স্বাক্ষর</translation>
@@ -3467,6 +3482,7 @@
 <translation id="620722923698527029">অ্যাপের সাথে এই ধরণের লিঙ্ক সবসময় খুলুন</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux অ্যাপ) ইনস্টল করা</translation>
 <translation id="6207937957461833379">দেশ/অঞ্চল</translation>
+<translation id="6208521041562685716">মোবাইল ডেটা অ্যাক্টিভেট করা হচ্ছে</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: সিঙ্ক কাজ করছে না</translation>
 <translation id="6212039847102026977">উন্নত নেটওয়ার্ক বৈশিষ্ট্যগুলি দেখুন</translation>
 <translation id="6212168817037875041">ডিসপ্লে বন্ধ করুন</translation>
@@ -3828,6 +3844,7 @@
 <translation id="677965093459947883">অতি ক্ষুদ্র</translation>
 <translation id="6780439250949340171">অন্যান্য সেটিংস পরিচালনা করুন</translation>
 <translation id="6781284683813954823">ডুডল লিঙ্ক</translation>
+<translation id="6781978626986383437">Linux ব্যাক-আপ বাতিল করা হয়েছে</translation>
 <translation id="6782111308708962316">কুকি ডেটা সংরক্ষণ করা এবং পড়া থেকে তৃতীয় পক্ষের ওয়েবসাইটগুলিকে আটকান</translation>
 <translation id="6786747875388722282">এক্সটেনশানসমূহ</translation>
 <translation id="6787839852456839824">কীবোর্ড শর্টকাটগুলি</translation>
@@ -4115,6 +4132,7 @@
 <translation id="7197632491113152433">আমরা আপনার অ্যাকাউন্ট থেকে <ph name="NUMBER_OF_APPS" />টি অ্যাপ পেয়েছি যা এই ডিভাইসে ব্যবহার করা যাবে।</translation>
 <translation id="7199158086730159431">সহায়তা পান</translation>
 <translation id="7200083590239651963">কনফিগারেশন বেছে নিন</translation>
+<translation id="7201042526153088083">আপনার <ph name="DEVICE_TYPE" />-এ Google Play থেকে অ্যাপ এবং গেম ইনস্টল করুন। &lt;a target="_blank" href="<ph name="URL" />"&gt;আরও জানুন&lt;/a&gt;</translation>
 <translation id="720110658997053098">স্থায়ীভাবে এই ডিভাইসটিকে কিয়স্ক মোডে রাখুন</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' মুছে ফেলা হয়েছে</translation>
 <translation id="7201420661433230412">ফাইলগুলি দেখুন</translation>
@@ -4139,6 +4157,7 @@
 <translation id="7229570126336867161">EVDO এর প্রয়োজন</translation>
 <translation id="7230787553283372882">আপনার পাঠ্যের আকার কাস্টমাইজ করুন</translation>
 <translation id="7232750842195536390">নাম পরিবর্তন করা যায়নি</translation>
+<translation id="7234010996000898150">Linux ফিরিয়ে আনা বাতিল করা হচ্ছে</translation>
 <translation id="7235716375204803342">অ্যাক্টিভিটি নিয়ে আসা হচ্ছে...</translation>
 <translation id="7235737137505019098">আপনার নিরাপত্তা কীয়ে আরও অ্যাকাউন্টের জন্য যথেষ্ট জায়গা খালি নেই।</translation>
 <translation id="7238585580608191973">SHA-256 আঙুলের ছাপ</translation>
@@ -4274,6 +4293,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{সবগুলি &amp;নতুন উইন্ডোতে খুলুন}=1{&amp;নতুন উইন্ডোতে খুলুন}one{সবগুলি (#টি) &amp;নতুন উইন্ডোতে খুলুন}other{সবগুলি (#টি) &amp;নতুন উইন্ডোতে খুলুন}}</translation>
 <translation id="7434509671034404296">ডেভেলপার</translation>
 <translation id="7436921188514130341">নাম পরিবর্তনের সময় একটি ত্রুটি হয়েছিল।</translation>
+<translation id="7437427339141948518">বিজ্ঞপ্তি বন্ধ করা আছে</translation>
 <translation id="7438976808740265764">Flash Player ২০২০ সালের ডিসেম্বরের পরে আর ব্যবহার করা যাবে না।</translation>
 <translation id="7441736921018636843">এই সেটিংটি পরিবর্তন করতে, আপনার সিঙ্ক পাসফ্রেজটি সরানোর জন্য <ph name="BEGIN_LINK" />সিঙ্ক রিসেট করুন<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">অন্যান্য ব্যবহারকারী</translation>
@@ -4400,9 +4420,10 @@
 <translation id="764017888128728"><ph name="PASSWORD_MANAGER_BRAND" /> স্বয়ংক্রিয়ভাবে আপনার সংরক্ষণ করা পাসওয়ার্ড দিয়ে উপযুক্ত সাইটগুলিতে আপনাকে প্রবেশ করায়।</translation>
 <translation id="7642778300616172920">ব্যক্তিগত কোনও কিছু দেখতে চাই না</translation>
 <translation id="7643842463591647490">{0,plural, =1{#টি খোলা উইন্ডো}one{#টি খোলা উইন্ডো}other{#টি খোলা উইন্ডো}}</translation>
-<translation id="7643932971554933646">সাইটকে এই ফাইল পড়তে দিতে চান?</translation>
+<translation id="7643932971554933646">সাইটকে এই ফাইল পড়ার অনুমতি দেবেন?</translation>
 <translation id="7644543211198159466">রঙ ও থিম</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (মালিক)</translation>
+<translation id="7645681574855902035">Linux ব্যাক-আপ বাতিল করা হচ্ছে</translation>
 <translation id="7647403192093989392">সাম্প্রতিক কোনও অ্যাক্টিভিটি নেই</translation>
 <translation id="7648142322539582331">অভিভাবকীয় নিয়ন্ত্রণ সেট-আপ করতে ইন্টারনেটে কানেক্ট করুন</translation>
 <translation id="7648992873808071793">এই ডিভাইসে ফাইলগুলি জমা করুন</translation>
@@ -4852,6 +4873,7 @@
 <translation id="8256319818471787266">স্পার্কি</translation>
 <translation id="8257950718085972371">ক্যামেরা অ্যাক্সেস অবরোধ করা অবিরত রাখুন</translation>
 <translation id="8259239505248583312">শুরু করা যাক</translation>
+<translation id="8259556432390118667">হেক্স রঙের মান</translation>
 <translation id="8260126382462817229">আবার সাইন ইন করার চেষ্টা করুন</translation>
 <translation id="8260864402787962391">মাউস</translation>
 <translation id="8261378640211443080">এই এক্সটেনশনটি <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />-এ তালিকাভুক্ত নেই এবং হয়ত আপনাকে না জানিয়ে যোগ করা হয়েছে৷</translation>
@@ -5104,6 +5126,7 @@
 <translation id="8662911384982557515">আপনার হোম পৃষ্ঠাকে এতে পরিবর্তিত করুন: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome ওয়ালপেপার সেট করতে পারে না৷</translation>
 <translation id="8663099077749055505"><ph name="HOST" />-এ সবসময় একাধিক অটোমেটিক ডাউনলোড ব্লক করুন</translation>
+<translation id="8663534996262079772">এই সাইটের বিজ্ঞপ্তি দেখতে চান?</translation>
 <translation id="8664389313780386848">পৃষ্ঠা উৎস &amp;দেখুন</translation>
 <translation id="8665180165765946056">ব্যাক-আপ নেওয়া হয়ে গেছে</translation>
 <translation id="866611985033792019">ইমেল ব্যবহারকারীদেরকে শনাক্ত করার কাজে এই সার্টিফিকেটটি বিশ্বাস করুন</translation>
@@ -5393,6 +5416,7 @@
 <translation id="9065203028668620118">সম্পাদনা</translation>
 <translation id="9066773882585798925">'টেক্সট পড়ে শোনানো'র বৈশিষ্ট্যটি চালু করুন</translation>
 <translation id="9066782832737749352">পাঠ্য থেকে ভাষ্য</translation>
+<translation id="9068849894565669697">রঙ বেছে নিন</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">ব্লুটুথ</translation>
 <translation id="9074836595010225693">USB মাউস সংযুক্ত হয়েছে</translation>
@@ -5430,6 +5454,7 @@
 <translation id="9131487537093447019">ব্লুটুথ ডিভাইসগুলি থেকে বার্তা পাঠান ও গ্রহণ করুন।</translation>
 <translation id="9134304429738380103">হ্যাঁ, আমি রাজি৷</translation>
 <translation id="9137013805542155359">প্রকৃত রূপ দেখান</translation>
+<translation id="9137157311132182254">বেছে নেওয়া সার্চ ইঞ্জিন</translation>
 <translation id="9137916601698928395"><ph name="USER" /> হিসেবে লিঙ্ক খুলুন</translation>
 <translation id="9138978632494473300">নিম্নল্লিখিত স্থানগুলিতে শর্টকাটগুলি যোগ করুন:</translation>
 <translation id="9140067245205650184">আপনি যে ফিচার ফ্ল্যাগটি ব্যবহার করছেন সেটি সমর্থিত নয়: <ph name="BAD_FLAG" />। স্থিতিশীলতা এবং নিরাপত্তা ব্যাহত হতে পারে।</translation>
@@ -5502,6 +5527,7 @@
 <translation id="962802172452141067">বুকমার্ক ফোল্ডার ট্রি</translation>
 <translation id="964286338916298286">আপনার আইটি অ্যাডমিনিস্ট্রেটর আপনার ডিভাইসের জন্য Chrome গুডিজগুলিকে বন্ধ করেছেন৷</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{অ্যাপ্লিকেশন}one{অ্যাপ্লিকেশনগুলি}other{অ্যাপ্লিকেশনগুলি}}</translation>
+<translation id="965211523698323809"><ph name="DEVICE_TYPE" /> থেকে টেক্সট মেসেজ পাঠান ও পান। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">এটি আপনাকে আপনার Google অ্যাকাউন্ট থেকে সাইন-আউট করিয়ে দেবে। আপনার বুকমার্ক, ইতিহাস, পাসওয়ার্ড সহ অন্যান্য সেটিংসের পরিবর্তনগুলি আপনার Google অ্যাকাউন্টের সাথে আর সিঙ্ক করা হবে না। কিন্তু, আগে থেকে থাকা আপনার ডেটা আপনার Google অ্যাকাউন্টে স্টোর থাকবে এবং <ph name="BEGIN_LINK" />Google ড্যাশবোর্ড<ph name="END_LINK" /> থেকে পরিচালনা করা যাবে।</translation>
 <translation id="967624055006145463">ডেটা স্টোর করা হয়েছে</translation>
 <translation id="968000525894980488">Google Play পরিষেবা চালু করুন।</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index f97cf92..4c141a47 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">S'ha sol·licitat una operació de lectura o escriptura amb un decalatge no vàlid a <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Abans d'iniciar la sessió amb el vostre usuari, entreu com a convidat per activar la xarxa <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Tradueix sempre el text en <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">No hem pogut detectar la targeta SIM</translation>
 <translation id="1108600514891325577">&amp;Atura</translation>
 <translation id="1110155001042129815">Espera</translation>
 <translation id="1112420131909513020">Una pestanya de fons utilitza el Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">L'administrador ha desactivat la sincronització.</translation>
 <translation id="2127372758936585790">Carregador de baix consum</translation>
 <translation id="212862741129535676">Percentatge d'ocupació de l'estat de freqüència</translation>
+<translation id="212876957201860463">S'està preparant el dispositiu mòbil per configurar-lo...</translation>
 <translation id="2129825002735785149">Actualitza el connector</translation>
 <translation id="2131077480075264">No s'ha pogut instal·lar <ph name="APP_NAME" /> perquè <ph name="IMPORT_NAME" /> no ho permet.</translation>
 <translation id="21354425047973905">Amaga els PIN</translation>
@@ -955,6 +957,7 @@
 <translation id="2413749388954403953">Modifica la interfície d'usuari de les adreces d'interès</translation>
 <translation id="241727068219398187">Les dades s'han encriptat amb la contrasenya de Google del dia <ph name="TIME" />. No inclouen les formes de pagament ni les adreces de Google Pay.</translation>
 <translation id="2419706071571366386">Per motius de seguretat, tanca la sessió quan no estiguis utilitzant l'ordinador.</translation>
+<translation id="2422125132043002186">S'ha cancel·lat la restauració de Linux</translation>
 <translation id="2423578206845792524">De&amp;sa la imatge com a...</translation>
 <translation id="2428510569851653187">Descriu què feies quan la pestanya s'ha bloquejat</translation>
 <translation id="2431027948063157455">L'Assistent de Google no s'ha pogut carregar. Comprova la connexió a Internet i tornar-ho a provar.</translation>
@@ -1422,6 +1425,7 @@
 <translation id="3090193911106258841">S'està accedint a l'entrada d'àudio i de vídeo</translation>
 <translation id="3090819949319990166">No es pot copiar el fitxer crx extern a <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" vinculat</translation>
+<translation id="3092699946856346803">Insereix la targeta SIM i torna-ho a provar</translation>
 <translation id="3101709781009526431">Data i hora</translation>
 <translation id="310671807099593501">El lloc web està utilitzant el Bluetooth</translation>
 <translation id="3115147772012638511">Esperant la memòria cau...</translation>
@@ -1527,6 +1531,7 @@
 <translation id="3281892622610078515">Fitxer i programes que es posaran en quarantena:</translation>
 <translation id="3282568296779691940">Inicia la sessió a Chrome</translation>
 <translation id="3285322247471302225">Pes&amp;tanya nova</translation>
+<translation id="3286654161521615710">S'utilitza al navegador Chrome i al menú d'aplicacions del dispositiu <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Mostra i suprimeix les dades d'inici de sessió emmagatzemades a la clau de seguretat</translation>
 <translation id="3288047731229977326">Les extensions que funcionen amb el mode de desenvolupador poden malmetre el vostre ordinador. Si no sou desenvolupador, hauríeu de desactivar aquestes extensions per continuar protegit.</translation>
 <translation id="3289856944988573801">Per comprovar si hi ha actualitzacions, feu servir Ethernet o Wi-Fi.</translation>
@@ -1871,6 +1876,7 @@
 <translation id="3775432569830822555">Certificat de servidor SSL</translation>
 <translation id="3775705724665058594">Envia als teus dispositius</translation>
 <translation id="3776796446459804932">Aquesta extensió incompleix la política de Chrome Web Store.</translation>
+<translation id="3777483481409781352">No s'ha pogut activar el dispositiu mòbil</translation>
 <translation id="3777806571986431400">Extensió activada</translation>
 <translation id="3778152852029592020">La baixada s'ha cancel·lat.</translation>
 <translation id="3778208826288864398">La clau de seguretat està bloquejada perquè s'ha introduït un PIN incorrecte massa vegades. Cal que restableixis la clau de seguretat.</translation>
@@ -2133,6 +2139,7 @@
 <translation id="4131410914670010031">Blanc i negre</translation>
 <translation id="4136203100490971508">La funció Llum nocturna es desactivarà automàticament quan surti el sol</translation>
 <translation id="4138267921960073861">Mostra els noms d'usuari i les fotos a la pantalla d'inici de sessió</translation>
+<translation id="4142052906269098341">Desbloqueja el dispositiu <ph name="DEVICE_TYPE" /> amb el telèfon. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Obtén una millor qualitat de vídeo i estalvia bateria. El vídeo només es reproduirà a la pantalla compatible amb Cast.</translation>
 <translation id="4145922204387553806">Permet que l'Assistent et mostri informació relacionada amb el que hi ha a la pantalla</translation>
 <translation id="4146026355784316281">Obrir sempre amb el visualitzador del sistema</translation>
@@ -2174,6 +2181,7 @@
 <translation id="42126664696688958">Exporta</translation>
 <translation id="42137655013211669">El servidor ha prohibit l'accés a aquest recurs.</translation>
 <translation id="4215350869199060536">El nom conté símbols no permesos.</translation>
+<translation id="4220648711404560261">S'ha produït un error durant l'activació.</translation>
 <translation id="4225397296022057997">En tots els llocs web</translation>
 <translation id="4232375817808480934">Configura Kerberos</translation>
 <translation id="4235200303672858594">Tota la pantalla</translation>
@@ -2322,6 +2330,7 @@
 <translation id="4470957202018033307">Preferències de l'emmagatzematge extern</translation>
 <translation id="447252321002412580">Ajuda a millorar les funcions i el rendiment de Chrome</translation>
 <translation id="4474155171896946103">Afegeix totes les pestanyes a les adreces d'interès...</translation>
+<translation id="4474461121892222090">És possible que les dades mòbils tardin fins a 15 minuts a activar-se.</translation>
 <translation id="4475552974751346499">Cerca baixades</translation>
 <translation id="4476590490540813026">Atleta</translation>
 <translation id="4477015793815781985">Inclou la tecla Ctrl, Alt o ⌘</translation>
@@ -2331,6 +2340,7 @@
 <translation id="4479877282574735775">S'està configurant la màquina virtual. Aquest procés pot tardar uns quants minuts.</translation>
 <translation id="4480590691557335796">Chrome pot cercar programari nociu a l'ordinador i suprimir-lo</translation>
 <translation id="4481530544597605423">Dispositius desvinculats</translation>
+<translation id="4483579413421375386">Mostra al lloc web</translation>
 <translation id="4495419450179050807">No la mostris en aquesta pàgina</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ha fallat</translation>
 <translation id="450099669180426158">Icona de signe d'exclamació</translation>
@@ -2434,6 +2444,7 @@
 <translation id="4647697156028544508">Introduïu el PIN per a "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Permisos insuficients</translation>
 <translation id="4648499713050786492">Desbloquegeu el vostre perfil per poder afegir una persona.</translation>
+<translation id="4650591383426000695">Desconnecta el telèfon del dispositiu <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">No s'ha pogut carregar el component en línia amb recursos del mode de demostració.</translation>
 <translation id="465878909996028221">Les redireccions del navegador només admeten els protocols http, https i de fitxers.</translation>
 <translation id="4659077111144409915">Compte principal</translation>
@@ -2735,6 +2746,7 @@
 <translation id="5115309401544567011">Endolla el dispositiu <ph name="DEVICE_TYPE" /> a una font d'alimentació.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">De&amp;sa l'àudio com a...</translation>
+<translation id="5117139026559873716">Desconnecta el telèfon del dispositiu <ph name="DEVICE_TYPE" />. Es deixaran de connectar automàticament.</translation>
 <translation id="5117427536932535467">Temes i fons de pantalla</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> s'ha imprès correctament</translation>
 <translation id="5117930984404104619">Control del comportament d'altres extensions, inclosos els URL visitats</translation>
@@ -2965,6 +2977,7 @@
 <translation id="5463275305984126951">Índex de <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menú amb adreces d'interès amagades</translation>
 <translation id="5464632865477611176">Executa aquesta vegada</translation>
+<translation id="5464660706533281090">Els usuaris menors d'edat no poden canviar aquesta opció de configuració.</translation>
 <translation id="5466374726908360271">Engan&amp;xa i cerca "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Hola! Soc la teva veu per a la conversió de text a parla.</translation>
 <translation id="5473333559083690127">Torna a introduir el PIN nou</translation>
@@ -3201,6 +3214,7 @@
 <translation id="5817918615728894473">Vincula</translation>
 <translation id="5821565227679781414">Crea una drecera</translation>
 <translation id="5825412242012995131">Activat (opció recomanada)</translation>
+<translation id="5826395379250998812">Connecta el dispositiu <ph name="DEVICE_TYPE" /> al telèfon. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nom comú (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">S'està imprimint...</translation>
@@ -3422,6 +3436,7 @@
 <translation id="6129691635767514872">Les dades seleccionades s'han suprimit de Chrome i dels dispositius sincronitzats. És possible que el teu compte de Google tingui altres formes de l'historial de navegació, com ara les cerques i l'activitat d'altres serveis de Google a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Comentari de certificat de Netscape</translation>
 <translation id="6129953537138746214">Espai</translation>
+<translation id="6130024555057767093">Actualment les notificacions estan bloquejades en tots els llocs web, excepte en llocs concrets en què les permets.</translation>
 <translation id="6136114942382973861">Tanca la barra de baixades</translation>
 <translation id="6137767437444130246">Certificat d'usuari</translation>
 <translation id="6138680304137685902">Signatura d'ECDSA X9.62 amb SHA-384</translation>
@@ -3467,6 +3482,7 @@
 <translation id="620722923698527029">Obre sempre aquest tipus d'enllaços a l'aplicació associada</translation>
 <translation id="6207282396926186323">Instal·la <ph name="APP_NAME" /> (aplicació de Linux)</translation>
 <translation id="6207937957461833379">País/Regió</translation>
+<translation id="6208521041562685716">S'estan activant les dades mòbils</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: la sincronització no funciona</translation>
 <translation id="6212039847102026977">Mostra les propietats de xarxa avançades</translation>
 <translation id="6212168817037875041">Desactiva la pantalla</translation>
@@ -3828,6 +3844,7 @@
 <translation id="677965093459947883">Molt petita</translation>
 <translation id="6780439250949340171">gestiona una altra configuració</translation>
 <translation id="6781284683813954823">Enllaç al doodle</translation>
+<translation id="6781978626986383437">S'ha cancel·lat la còpia de seguretat de Linux</translation>
 <translation id="6782111308708962316">Impedeix que els llocs web de tercers desin i llegeixin les dades de les galetes</translation>
 <translation id="6786747875388722282">Extensions</translation>
 <translation id="6787839852456839824">Tecles de drecera</translation>
@@ -4115,6 +4132,7 @@
 <translation id="7197632491113152433">Hem trobat <ph name="NUMBER_OF_APPS" /> aplicacions al compte que es poden utilitzar en aquest dispositiu.</translation>
 <translation id="7199158086730159431">Obtén a&amp;juda</translation>
 <translation id="7200083590239651963">Selecciona la configuració</translation>
+<translation id="7201042526153088083">Instal·la aplicacions i jocs de Google Play al dispositiu <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Més informació&lt;/a&gt;</translation>
 <translation id="720110658997053098">Activa permanentment el mode quiosc en aquest dispositiu</translation>
 <translation id="7201118060536064622">S'ha suprimit <ph name="DELETED_ITEM_NAME" /></translation>
 <translation id="7201420661433230412">Visualitza els fitxers</translation>
@@ -4139,6 +4157,7 @@
 <translation id="7229570126336867161">Es necessita EVDO</translation>
 <translation id="7230787553283372882">Personalitza la mida del text</translation>
 <translation id="7232750842195536390">S'ha produït un error en canviar el nom</translation>
+<translation id="7234010996000898150">S'està cancel·lant la restauració de Linux</translation>
 <translation id="7235716375204803342">S'estan obtenint les activitats...</translation>
 <translation id="7235737137505019098">La clau de seguretat no té prou espai per a més comptes.</translation>
 <translation id="7238585580608191973">Empremta SHA-256</translation>
@@ -4274,6 +4293,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Obre-les totes en una &amp;finestra nova}=1{Obre en una &amp;finestra nova}other{Obre-les totes (#) en una &amp;finestra nova}}</translation>
 <translation id="7434509671034404296">Desenvolupador</translation>
 <translation id="7436921188514130341">S'ha produït un error durant el canvi de nom.</translation>
+<translation id="7437427339141948518">Les notificacions estan desactivades</translation>
 <translation id="7438976808740265764">Flash Player ja no s'admetrà a partir de desembre de 2020.</translation>
 <translation id="7441736921018636843">Si vols canviar aquesta opció, <ph name="BEGIN_LINK" />restableix la sincronització<ph name="END_LINK" /> perquè se suprimeixi la frase de contrasenya de sincronització</translation>
 <translation id="7441830548568730290">Altres usuaris</translation>
@@ -4401,6 +4421,7 @@
 <translation id="7643932971554933646">Vols permetre que el lloc web vegi els fitxers?</translation>
 <translation id="7644543211198159466">Color i tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (propietari)</translation>
+<translation id="7645681574855902035">S'està cancel·lant la còpia de seguretat de Linux</translation>
 <translation id="7647403192093989392">No hi ha cap activitat recent</translation>
 <translation id="7648142322539582331">Connecta't a Internet per configurar els controls parentals</translation>
 <translation id="7648992873808071793">Emmagatzema fitxers en aquest dispositiu</translation>
@@ -4851,6 +4872,7 @@
 <translation id="8256319818471787266">Gosset</translation>
 <translation id="8257950718085972371">Continua bloquejant l'accés a la càmera</translation>
 <translation id="8259239505248583312">Som-hi</translation>
+<translation id="8259556432390118667">Valor del color hexadecimal</translation>
 <translation id="8260126382462817229">Torna a iniciar la sessió</translation>
 <translation id="8260864402787962391">Ratolí</translation>
 <translation id="8261378640211443080">Aquesta extensió no apareix a <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i és possible que s'hagi afegit sense que ho sapigueu.</translation>
@@ -5103,6 +5125,7 @@
 <translation id="8662911384982557515">Canviar la pàgina d'inici per: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome no pot establir un fons de pantalla.</translation>
 <translation id="8663099077749055505">Bloqueja sempre les baixades automàtiques múltiples a l'amfitrió <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Vols que es mostrin les notificacions d'aquest lloc web?</translation>
 <translation id="8664389313780386848">&amp;Visualitza l'origen de la pàgina</translation>
 <translation id="8665180165765946056">S'ha completat la còpia de seguretat</translation>
 <translation id="866611985033792019">Confia en aquest certificat per identificar els usuaris de correu electrònic</translation>
@@ -5392,6 +5415,7 @@
 <translation id="9065203028668620118">Edita</translation>
 <translation id="9066773882585798925">Sent text en veu alta</translation>
 <translation id="9066782832737749352">Text a parla</translation>
+<translation id="9068849894565669697">Selecció de color</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Ratolí USB connectat</translation>
@@ -5429,6 +5453,7 @@
 <translation id="9131487537093447019">Enviar missatges a dispositius Bluetooth i rebre'n</translation>
 <translation id="9134304429738380103">Sí, ho accepto</translation>
 <translation id="9137013805542155359">Mostra l'original</translation>
+<translation id="9137157311132182254">Motor de cerca preferit</translation>
 <translation id="9137916601698928395">Obre l'enllaç com a <ph name="USER" /></translation>
 <translation id="9138978632494473300">Afegeix dreceres als llocs següents:</translation>
 <translation id="9140067245205650184">Utilitzes una marca de funció que no és compatible: <ph name="BAD_FLAG" />. Se'n ressentiran l'estabilitat i la seguretat.</translation>
@@ -5501,6 +5526,7 @@
 <translation id="962802172452141067">Arbre de carpetes d'adreces d'interès</translation>
 <translation id="964286338916298286">L'administrador de TI ha desactivat els productes extra de Chrome per al dispositiu.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplicació}other{Aplicacions}}</translation>
+<translation id="965211523698323809">Envia i rep missatges de text amb el dispositiu <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Es tancarà la sessió dels comptes de Google. Els canvis que es facin a les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració es deixaran de sincronitzar amb el Compte de Google. No obstant això, les dades actuals hi continuaran emmagatzemades i es podran gestionar al <ph name="BEGIN_LINK" />Tauler de control de Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Dades emmagatzemades</translation>
 <translation id="968000525894980488">Activa els serveis de Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 16e2c33c..4910b27e 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Na zařízení <ph name="DEVICE_NAME" /> byla požadována operace čtení nebo zápisu s neplatným odstupem.</translation>
 <translation id="1097658378307015415">Chcete-li aktivovat síť <ph name="NETWORK_ID" />, vstupte prosím před přihlášením jako host</translation>
 <translation id="1103523840287552314">Vždy překládat jazyk <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Nepodařilo se nám rozpoznat vaši SIM kartu</translation>
 <translation id="1108600514891325577">&amp;Zastavit</translation>
 <translation id="1110155001042129815">Počkat</translation>
 <translation id="1112420131909513020">Karta na pozadí používá Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Synchronizace je administrátorem zakázána.</translation>
 <translation id="2127372758936585790">Nabíječka má příliš nízký výkon</translation>
 <translation id="212862741129535676">Procentuální zastoupení stavů frekvence</translation>
+<translation id="212876957201860463">Probíhá příprava na nastavení mobilního zařízení...</translation>
 <translation id="2129825002735785149">Aktualizovat plugin</translation>
 <translation id="2131077480075264">Aplikaci <ph name="APP_NAME" /> nelze nainstalovat, protože není povolena rozhraním <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Skrýt kódy PIN</translation>
@@ -955,6 +957,7 @@
 <translation id="2413749388954403953">Změnit uživatelské rozhraní záložek</translation>
 <translation id="241727068219398187">Všechny údaje byly zašifrovány pomocí hesla účtu Google ze dne <ph name="TIME" />. Toto šifrování se nevztahuje na platební metody a adresy z Google Pay.</translation>
 <translation id="2419706071571366386">Když počítač nepoužíváte, z bezpečnostních důvodů se odhlaste.</translation>
+<translation id="2422125132043002186">Obnovování kontejneru systému Linux bylo zrušeno</translation>
 <translation id="2423578206845792524">Uložit o&amp;brázek jako...</translation>
 <translation id="2428510569851653187">Popište, co jste dělali, když karta selhala</translation>
 <translation id="2431027948063157455">Načtení Asistenta Google se nezdařilo, zkontrolujte připojení k síti a zkuste to znovu.</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">Přístup ke vstupu zvuku a videa</translation>
 <translation id="3090819949319990166">Obsah externího souboru CRX nelze zkopírovat do souboru <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Zařízení „<ph name="DEVICE_NAME" />“ bylo spárováno</translation>
+<translation id="3092699946856346803">Vložte SIM kartu a zkuste to znovu</translation>
 <translation id="3101709781009526431">Datum a čas</translation>
 <translation id="310671807099593501">Web používá Bluetooth</translation>
 <translation id="3115147772012638511">Čekání na mezipaměť</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">Soubory a programy, které chcete umístit do karantény:</translation>
 <translation id="3282568296779691940">Přihlásit se do Chromu</translation>
 <translation id="3285322247471302225">Nová kar&amp;ta</translation>
+<translation id="3286654161521615710">Používáno prohlížečem Chrome a spouštěčem zařízení <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Zobrazit a vymazat přihlašovací údaje uložené na bezpečnostním klíči</translation>
 <translation id="3288047731229977326">Rozšíření spuštěná v režimu pro vývojáře mohou poškodit počítač. Pokud nejste vývojář, měli byste s ohledem na svou bezpečnost rozšíření spuštěná v tomto režimu deaktivovat.</translation>
 <translation id="3289856944988573801">Chcete-li zkontrolovat dostupnost aktualizací, použijte síť Ethernet nebo Wi-Fi.</translation>
@@ -1872,6 +1877,7 @@
 <translation id="3775432569830822555">Certifikát serveru SSL</translation>
 <translation id="3775705724665058594">Odeslat na vaše zařízení</translation>
 <translation id="3776796446459804932">Toto rozšíření porušuje zásady Internetového obchodu Chrome.</translation>
+<translation id="3777483481409781352">Aktivace mobilního zařízení se nezdařila</translation>
 <translation id="3777806571986431400">Rozšíření povoleno</translation>
 <translation id="3778152852029592020">Stahování bylo zrušeno</translation>
 <translation id="3778208826288864398">Bezpečnostní klíč je uzamčen, protože byl příliš mnohokrát zadán nesprávný PIN. Budete bezpečnostní klíč muset resetovat.</translation>
@@ -2134,6 +2140,7 @@
 <translation id="4131410914670010031">Černobíle</translation>
 <translation id="4136203100490971508">Noční režim se vypne automaticky za úsvitu</translation>
 <translation id="4138267921960073861">Zobrazit na přihlašovací obrazovce uživatelská jména a fotografie</translation>
+<translation id="4142052906269098341">Odemykejte své zařízení <ph name="DEVICE_TYPE" /> telefonem. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Získejte kvalitnější video a prodlužte životnost baterie. Video se bude přehrávat jen na obrazovce, která podporuje technologii Cast.</translation>
 <translation id="4145922204387553806">Nechat Asistenta zobrazovat informace související s obsahem na obrazovce</translation>
 <translation id="4146026355784316281">Vždy otevřít pomocí systémového prohlížeče</translation>
@@ -2175,6 +2182,7 @@
 <translation id="42126664696688958">Exportovat</translation>
 <translation id="42137655013211669">Server zakázal přístup k tomuto zdroji.</translation>
 <translation id="4215350869199060536">Jejda, název obsahuje zakázané znaky!</translation>
+<translation id="4220648711404560261">Při aktivaci došlo k chybě.</translation>
 <translation id="4225397296022057997">Na všech webech</translation>
 <translation id="4232375817808480934">Nakonfigurovat Kerberos</translation>
 <translation id="4235200303672858594">Celá obrazovka</translation>
@@ -2323,6 +2331,7 @@
 <translation id="4470957202018033307">Předvolby externího úložiště</translation>
 <translation id="447252321002412580">Pomoci s vylepšováním funkcí a výkonu prohlížeče Chrome</translation>
 <translation id="4474155171896946103">Přidat do záložek všechny karty...</translation>
+<translation id="4474461121892222090">Dokončení aktivace mobilní dat může trvat až 15 minut.</translation>
 <translation id="4475552974751346499">Hledat stažené soubory</translation>
 <translation id="4476590490540813026">Sportovkyně</translation>
 <translation id="4477015793815781985">Zahrňte klávesu Ctrl, Alt, nebo ⌘</translation>
@@ -2332,6 +2341,7 @@
 <translation id="4479877282574735775">Probíhá konfigurace virtuálního počítače. Může to trvat několik minut.</translation>
 <translation id="4480590691557335796">Chrome na vašem počítači může vyhledat škodlivý software a odstranit jej</translation>
 <translation id="4481530544597605423">Nespárovaná zařízení</translation>
+<translation id="4483579413421375386">Zobrazit pro web</translation>
 <translation id="4495419450179050807">Nezobrazovat na této stránce</translation>
 <translation id="4500114933761911433">Plugin <ph name="PLUGIN_NAME" /> selhal</translation>
 <translation id="450099669180426158">Ikona vykřičníku</translation>
@@ -2435,6 +2445,7 @@
 <translation id="4647697156028544508">Zadejte prosím PIN pro zařízení <ph name="DEVICE_NAME" />:</translation>
 <translation id="4648491805942548247">Nedostatečná oprávnění</translation>
 <translation id="4648499713050786492">Před přidáním osoby prosím odemkněte svůj profil.</translation>
+<translation id="4650591383426000695">Odpojit telefon od zařízení <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Online komponentu se zdroji pro ukázkový režim se nepodařilo načíst.</translation>
 <translation id="465878909996028221">U přesměrování prohlížeče jsou podporovány pouze protokoly http, https a file.</translation>
 <translation id="4659077111144409915">Primární účet</translation>
@@ -2736,6 +2747,7 @@
 <translation id="5115309401544567011">Zapojte <ph name="DEVICE_TYPE" /> do zdroje napájení.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Uložit &amp;zvuk jako...</translation>
+<translation id="5117139026559873716">Odpojit telefon od zařízení <ph name="DEVICE_TYPE" />. Již se nebudou propojovat automaticky.</translation>
 <translation id="5117427536932535467">Motivy a tapety</translation>
 <translation id="5117625797180141189">Dokument <ph name="DOCUMENT_NAME" /> byl úspěšně vytisknut</translation>
 <translation id="5117930984404104619">Sledovat chování ostatních rozšíření (včetně navštívených adres URL)</translation>
@@ -2965,6 +2977,7 @@
 <translation id="5463275305984126951">Index <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Nabídka obsahující skryté záložky</translation>
 <translation id="5464632865477611176">Tentokrát spustit</translation>
+<translation id="5464660706533281090">Dětský uživatel toto nastavení nemůže změnit.</translation>
 <translation id="5466374726908360271">Vl&amp;ožit a vyhledat výraz „<ph name="SEARCH_TERMS" />“</translation>
 <translation id="5471768120198416576">Zdravím vás. Jsem váš hlas převodu textu na řeč.</translation>
 <translation id="5473333559083690127">Znovu zadejte nový PIN</translation>
@@ -3200,6 +3213,7 @@
 <translation id="5817918615728894473">Spárovat</translation>
 <translation id="5821565227679781414">Vytvořit zástupce</translation>
 <translation id="5825412242012995131">Zapnout (doporučeno)</translation>
+<translation id="5826395379250998812">Propojte své zařízení <ph name="DEVICE_TYPE" /> s telefonem. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Běžný název (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Tisk...</translation>
@@ -3421,6 +3435,7 @@
 <translation id="6129691635767514872">Vybraná data byla z Chromu a synchronizovaných zařízení odstraněna. Na stránce <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google, například vyhledávací dotazy a aktivita z ostatních služeb Google.</translation>
 <translation id="6129938384427316298">Komentář certifikátu Netscape</translation>
 <translation id="6129953537138746214">Mezera</translation>
+<translation id="6130024555057767093">Oznámení jsou aktuálně blokována u všech webů s výjimkou těch, jimž je jednotlivě povolíte.</translation>
 <translation id="6136114942382973861">Zavřít lištu se staženými soubory</translation>
 <translation id="6137767437444130246">Certifikát uživatele</translation>
 <translation id="6138680304137685902">Podpis X9.62 ECDSA s SHA-384</translation>
@@ -3466,6 +3481,7 @@
 <translation id="620722923698527029">Tento typ odkazů vždy otevírat v přidružené aplikaci</translation>
 <translation id="6207282396926186323">Instalace aplikace <ph name="APP_NAME" /> (aplikace pro Linux)</translation>
 <translation id="6207937957461833379">Země nebo oblast</translation>
+<translation id="6208521041562685716">Probíhá aktivace mobilních dat</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Synchronizace nefunguje</translation>
 <translation id="6212039847102026977">Zobrazit rozšířené vlastnosti sítě</translation>
 <translation id="6212168817037875041">Vypnout displej</translation>
@@ -3827,6 +3843,7 @@
 <translation id="677965093459947883">Velmi malé</translation>
 <translation id="6780439250949340171">spravovat jiná nastavení</translation>
 <translation id="6781284683813954823">Odkaz na sváteční logo</translation>
+<translation id="6781978626986383437">Zálohování kontejneru systému Linux bylo zrušeno</translation>
 <translation id="6782111308708962316">Zabránit webům třetích stran v ukládání a čtení dat souborů cookie</translation>
 <translation id="6786747875388722282">Rozšíření</translation>
 <translation id="6787839852456839824">Klávesové zkratky</translation>
@@ -4114,6 +4131,7 @@
 <translation id="7197632491113152433">Ve vašem účtu jsme našli aplikace, které lze použít na tomto zařízení, celkem <ph name="NUMBER_OF_APPS" />.</translation>
 <translation id="7199158086730159431">Zobrazit nápovědu</translation>
 <translation id="7200083590239651963">Vyberte konfiguraci</translation>
+<translation id="7201042526153088083">Instalujte do svého zařízení <ph name="DEVICE_TYPE" /> aplikace a hry z Google Play. &lt;a target="_blank" href="<ph name="URL" />"&gt;Další informace&lt;/a&gt;</translation>
 <translation id="720110658997053098">Trvale toto zařízení ponechat v režimu veřejného terminálu</translation>
 <translation id="7201118060536064622">Položka „<ph name="DELETED_ITEM_NAME" />“ byla smazána</translation>
 <translation id="7201420661433230412">Zobrazit soubory</translation>
@@ -4138,6 +4156,7 @@
 <translation id="7229570126336867161">Je zapotřebí technologie EVDO.</translation>
 <translation id="7230787553283372882">Přizpůsobení velikosti textu</translation>
 <translation id="7232750842195536390">Přejmenování se nezdařilo</translation>
+<translation id="7234010996000898150">Obnovení kontejneru systému Linux se ruší</translation>
 <translation id="7235716375204803342">Načítání aktivit...</translation>
 <translation id="7235737137505019098">Na bezpečnostním klíči již není dost místa pro žádné další účty.</translation>
 <translation id="7238585580608191973">Digitální otisk SHA-256</translation>
@@ -4273,6 +4292,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Otevřít vše v &amp;novém okně}=1{Otevřít v &amp;novém okně}few{Otevřít vše (#) v &amp;novém okně}many{Otevřít vše (#) v &amp;novém okně}other{Otevřít vše (#) v &amp;novém okně}}</translation>
 <translation id="7434509671034404296">Vývojář</translation>
 <translation id="7436921188514130341">Aj, chyba! Při přejmenovávání došlo k chybě.</translation>
+<translation id="7437427339141948518">Oznámení vypnuta</translation>
 <translation id="7438976808740265764">Přehrávač Flash Player bude podporován jen do prosince 2020.</translation>
 <translation id="7441736921018636843">Chcete-li toto nastavení změnit, <ph name="BEGIN_LINK" />resetováním synchronizace<ph name="END_LINK" /> odstraňte svou heslovou frázi pro synchronizaci</translation>
 <translation id="7441830548568730290">Ostatní uživatelé</translation>
@@ -4400,6 +4420,7 @@
 <translation id="7643932971554933646">Povolit webu zobrazení souborů?</translation>
 <translation id="7644543211198159466">Barva a motiv</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (vlastník)</translation>
+<translation id="7645681574855902035">Zálohování kontejneru systému Linux se ruší</translation>
 <translation id="7647403192093989392">Žádné nedávné aktivity</translation>
 <translation id="7648142322539582331">Chcete-li nastavit rodičovskou kontrolu, připojte se k internetu</translation>
 <translation id="7648992873808071793">Ukládat soubory v tomto zařízení</translation>
@@ -4850,6 +4871,7 @@
 <translation id="8256319818471787266">Štěně</translation>
 <translation id="8257950718085972371">Blokovat přístup ke kameře i nadále</translation>
 <translation id="8259239505248583312">Jdeme na to</translation>
+<translation id="8259556432390118667">Hexadecimální kód barvy</translation>
 <translation id="8260126382462817229">Zkuste se přihlásit znovu.</translation>
 <translation id="8260864402787962391">Myš</translation>
 <translation id="8261378640211443080">Toto rozšíření není uvedeno na webu <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a mohlo být přidáno bez vašeho vědomí.</translation>
@@ -5102,6 +5124,7 @@
 <translation id="8662911384982557515">Změnit domovskou stránku na: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome nemůže nastavit tapetu.</translation>
 <translation id="8663099077749055505">Vždy blokovat automatické stahování několika souborů u hostitele <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Zobrazovat pro tento web oznámení?</translation>
 <translation id="8664389313780386848">&amp;Zobrazit zdrojový kód stránky</translation>
 <translation id="8665180165765946056">Zálohování bylo dokončeno</translation>
 <translation id="866611985033792019">Důvěřovat tomuto certifikátu k ověřování uživatelů e-mailu</translation>
@@ -5391,6 +5414,7 @@
 <translation id="9065203028668620118">Upravit</translation>
 <translation id="9066773882585798925">Čtení textu nahlas</translation>
 <translation id="9066782832737749352">Převod textu na řeč</translation>
+<translation id="9068849894565669697">Výběr barvy</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Myš s konektorem USB byla připojena</translation>
@@ -5428,6 +5452,7 @@
 <translation id="9131487537093447019">Odesílání zpráv do zařízení Bluetooth a přijímání zpráv ze zařízení Bluetooth</translation>
 <translation id="9134304429738380103">Souhlasím.</translation>
 <translation id="9137013805542155359">Zobrazit originál</translation>
+<translation id="9137157311132182254">Preferovaný vyhledávač</translation>
 <translation id="9137916601698928395">Otevřít odkaz jako <ph name="USER" /></translation>
 <translation id="9138978632494473300">Přidat zkratky na následující místa:</translation>
 <translation id="9140067245205650184">Používáte nepodporovaný příznak funkce: <ph name="BAD_FLAG" />. Bude to mít negativní vliv na stabilitu a zabezpečení.</translation>
@@ -5500,6 +5525,7 @@
 <translation id="962802172452141067">Strom seznamu záložek</translation>
 <translation id="964286338916298286">Váš správce IT pro toto zařízení využití promoakcí Chrome Goodies zakázal.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplikace}few{Aplikace}many{Aplikace}other{Aplikace}}</translation>
+<translation id="965211523698323809">Odesílejte a přijímejte na zařízení <ph name="DEVICE_TYPE" /> textové zprávy. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Tímto se odhlásíte ze svých účtů Google. Změny záložek, historie, hesel a dalších nastavení se již nebudou synchronizovat do účtu Google. Vaše existující data v účtu Google zůstanou uložena a lze je spravovat na <ph name="BEGIN_LINK" />Hlavním panelu Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Uložená data</translation>
 <translation id="968000525894980488">Zapněte Služby Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index ec4463f..b12a5c522 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Der blev anmodet om en læse- eller skrivehandling med en ugyldig forskydning på: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Før du logger ind, skal du logge ind som gæst for at aktivere netværket <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Oversæt altid <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Vi kunne ikke registrere dit SIM-kort</translation>
 <translation id="1108600514891325577">&amp;Stop</translation>
 <translation id="1110155001042129815">Vent</translation>
 <translation id="1112420131909513020">En fane i baggrunden anvender Bluetooth</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">Din administrator har deaktiveret synkronisering.</translation>
 <translation id="2127372758936585790">Oplader ved lav kraft</translation>
 <translation id="212862741129535676">Anvendt andel for frekvenstilstand</translation>
+<translation id="212876957201860463">Forbereder konfiguration af din mobilenhed...</translation>
 <translation id="2129825002735785149">Opdater plugin</translation>
 <translation id="2131077480075264">"<ph name="APP_NAME" />" kan ikke installeres, fordi den ikke tillades af "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Skjul pinkoder</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187">Dataene er krypteret med din Google-adgangskode fra
           <ph name="TIME" />. Dette omfatter ikke betalingsmetoder og adresser fra Google Pay.</translation>
 <translation id="2419706071571366386">Af sikkerhedshensyn skal du logge ud, når computeren ikke bruges.</translation>
+<translation id="2422125132043002186">Linux-gendannelsen blev annulleret</translation>
 <translation id="2423578206845792524">&amp;Gem billede som...</translation>
 <translation id="2428510569851653187">Beskriv, hvad du foretog dig, da fanen gik ned</translation>
 <translation id="2431027948063157455">Google Assistent kunne ikke indlæses. Tjek din netværksforbindelse, og prøv igen.</translation>
@@ -1422,6 +1425,7 @@
 <translation id="3090193911106258841">Åbner lyd- og videoinput</translation>
 <translation id="3090819949319990166">Ekstern crx-fil kan ikke kopieres til <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" er parret</translation>
+<translation id="3092699946856346803">Indsæt dit SIM-kort, og prøv igen</translation>
 <translation id="3101709781009526431">Dato og klokkeslæt</translation>
 <translation id="310671807099593501">Websitet anvender Bluetooth</translation>
 <translation id="3115147772012638511">Venter på cache...</translation>
@@ -1529,6 +1533,7 @@
 <translation id="3281892622610078515">Filer og programmer, der skal i karantæne:</translation>
 <translation id="3282568296779691940">Log ind i Chrome</translation>
 <translation id="3285322247471302225">Ny &amp;fane</translation>
+<translation id="3286654161521615710">Anvendes af Chrome-browseren og applisten for <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Se og slet de logindata, som er gemt på din sikkerhedsnøgle</translation>
 <translation id="3288047731229977326">Udvidelser, der kører i udviklertilstand, kan skade din computer. Hvis du ikke er udvikler, skal du deaktivere udvidelserne, der kører i udviklertilstand, af hensyn til sikkerheden.</translation>
 <translation id="3289856944988573801">Du kan søge efter opdateringer via Ethernet eller Wi-Fi.</translation>
@@ -1873,6 +1878,7 @@
 <translation id="3775432569830822555">SSL-servercertifikat</translation>
 <translation id="3775705724665058594">Send til dine enheder</translation>
 <translation id="3776796446459804932">Denne udvidelse krænker politikken for Chrome Webshop.</translation>
+<translation id="3777483481409781352">Mobilenheden kunne ikke aktiveres</translation>
 <translation id="3777806571986431400">Udvidelsen er aktiveret</translation>
 <translation id="3778152852029592020">Download blev annulleret.</translation>
 <translation id="3778208826288864398">Sikkerhedsnøglen er låst, fordi der blev angivet en forkert pinkode for mange gange. Sikkerhedsnøglen skal nulstilles.</translation>
@@ -2136,6 +2142,7 @@
 <translation id="4131410914670010031">Sort/hvid</translation>
 <translation id="4136203100490971508">Nattelys slukkes automatisk ved solopgang</translation>
 <translation id="4138267921960073861">Vis brugernavne og billeder på loginskærmen</translation>
+<translation id="4142052906269098341">Lås din <ph name="DEVICE_TYPE" /> op med din telefon. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Se video i bedre kvalitet, og forlæng batteritiden. Der afspilles kun video på din Cast-kompatible skærm.</translation>
 <translation id="4145922204387553806">Tillad, at assistenten viser dig relaterede oplysninger til det, der vises på din skærm</translation>
 <translation id="4146026355784316281">Åbn altid med systemets visningsprogram</translation>
@@ -2177,6 +2184,7 @@
 <translation id="42126664696688958">Eksportér</translation>
 <translation id="42137655013211669">Serveren har forbudt dig adgang til denne ressource.</translation>
 <translation id="4215350869199060536">Ups! Navnet indeholder ulovlige tegn.</translation>
+<translation id="4220648711404560261">Der opstod en fejl under aktiveringen.</translation>
 <translation id="4225397296022057997">På alle websites</translation>
 <translation id="4232375817808480934">Konfigurer Kerberos</translation>
 <translation id="4235200303672858594">Hele skærmen</translation>
@@ -2325,6 +2333,7 @@
 <translation id="4470957202018033307">Præferencer for ekstern lagerplads</translation>
 <translation id="447252321002412580">Vær med til at forbedre Chromes funktioner og ydeevne</translation>
 <translation id="4474155171896946103">Tilføj alle faner som bogmærker...</translation>
+<translation id="4474461121892222090">Det kan tage op til 15 minutter, før mobildata er aktiveret.</translation>
 <translation id="4475552974751346499">Søg i downloads</translation>
 <translation id="4476590490540813026">Atlet</translation>
 <translation id="4477015793815781985">Medtag Ctrl, Alt eller ⌘</translation>
@@ -2334,6 +2343,7 @@
 <translation id="4479877282574735775">Konfigurerer den virtuelle maskine. Dette kan tage et par minutter.</translation>
 <translation id="4480590691557335796">Chrome kan finde og fjerne skadelig software på din computer</translation>
 <translation id="4481530544597605423">Ikke-parrede enheder</translation>
+<translation id="4483579413421375386">Vis for website</translation>
 <translation id="4495419450179050807">Vis ikke på denne side</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> er gået ned</translation>
 <translation id="450099669180426158">Ikon for udråbstegn</translation>
@@ -2437,6 +2447,7 @@
 <translation id="4647697156028544508">Angiv pinkoden for "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Utilstrækkelige tilladelser</translation>
 <translation id="4648499713050786492">Lås din profil op, før du kan tilføje en person.</translation>
+<translation id="4650591383426000695">Afbryd forbindelsen mellem din telefon og <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Onlinekomponenten med ressourcer til demotilstand kunne ikke indlæses.</translation>
 <translation id="465878909996028221">Det er kun http, https og filprotokoller, der kan omdirigeres til en alternativ browser.</translation>
 <translation id="4659077111144409915">Primær konto</translation>
@@ -2738,6 +2749,7 @@
 <translation id="5115309401544567011">Slut din <ph name="DEVICE_TYPE" /> til en strømkilde.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Ge&amp;m lyd som...</translation>
+<translation id="5117139026559873716">Afbryd forbindelsen mellem din telefon og din <ph name="DEVICE_TYPE" />. Der oprettes ikke længere automatisk forbindelse.</translation>
 <translation id="5117427536932535467">Temaer og baggrunde</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> er udskrevet</translation>
 <translation id="5117930984404104619">Overvåge adfærden for andre udvidelser, herunder de webadresser, du har besøgt.</translation>
@@ -2967,6 +2979,7 @@
 <translation id="5463275305984126951">Indeks over <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu med skjulte bogmærker</translation>
 <translation id="5464632865477611176">Kør nu</translation>
+<translation id="5464660706533281090">Denne indstilling kan ikke ændres af en bruger, som er et barn.</translation>
 <translation id="5466374726908360271">Ind&amp;sæt, og søg efter "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Hej! Jeg er din stemme til oplæsning.</translation>
 <translation id="5473333559083690127">Angiv ny pinkode igen</translation>
@@ -3202,6 +3215,7 @@
 <translation id="5817918615728894473">Start parring</translation>
 <translation id="5821565227679781414">Opret genvej</translation>
 <translation id="5825412242012995131">Til (anbefales)</translation>
+<translation id="5826395379250998812">Opret forbindelse til <ph name="DEVICE_TYPE" /> med din telefon. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Kaldenavn (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Udskriver...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">De valgte data er blevet fjernet fra Chrome og synkroniserede enheder. Din Google-konto kan indeholde andre former for browserhistorik, f.eks. søgninger og aktivitet i andre Google-tjenester, på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
 <translation id="6129938384427316298">Kommentar til Netscape-certifikat</translation>
 <translation id="6129953537138746214">Mellemrum</translation>
+<translation id="6130024555057767093">Notifikationer er i øjeblikket blokeret for alle websites med undtagelse de websites, du har givet tilladelse til enkeltvis.</translation>
 <translation id="6136114942382973861">Luk downloadlinje</translation>
 <translation id="6137767437444130246">Brugercertifikat</translation>
 <translation id="6138680304137685902">X9.62 ECDSA-signatur med SHA-384</translation>
@@ -3469,6 +3484,7 @@
 <translation id="620722923698527029">Åbn altid denne type links i den tilknyttede app</translation>
 <translation id="6207282396926186323">Installer <ph name="APP_NAME" /> (Linux-app)</translation>
 <translation id="6207937957461833379">Land/Region</translation>
+<translation id="6208521041562685716">Mobildata aktiveres</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Synkronisering fungerer ikke</translation>
 <translation id="6212039847102026977">Vis avancerede netværksegenskaber</translation>
 <translation id="6212168817037875041">Sluk skærmen</translation>
@@ -3830,6 +3846,7 @@
 <translation id="677965093459947883">Meget lille</translation>
 <translation id="6780439250949340171">administrer andre indstillinger</translation>
 <translation id="6781284683813954823">Link til doodle</translation>
+<translation id="6781978626986383437">Linux-sikkerhedskopieringen blev annulleret</translation>
 <translation id="6782111308708962316">Undgå, at tredjepartswebsites gemmer og læser cookiedata</translation>
 <translation id="6786747875388722282">Udvidelser</translation>
 <translation id="6787839852456839824">Tastaturgenveje</translation>
@@ -4117,6 +4134,7 @@
 <translation id="7197632491113152433">Vi fandt <ph name="NUMBER_OF_APPS" /> apps på din konto, der kan bruges på denne enhed.</translation>
 <translation id="7199158086730159431">Få H&amp;jælp</translation>
 <translation id="7200083590239651963">Vælg konfiguration</translation>
+<translation id="7201042526153088083">Installer apps og spil fra Google Play på din <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Få flere oplysninger&lt;/a&gt;</translation>
 <translation id="720110658997053098">Lad kiosktilstand forblive aktiveret på denne enhed</translation>
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" er slettet</translation>
 <translation id="7201420661433230412">Få vist filer</translation>
@@ -4141,6 +4159,7 @@
 <translation id="7229570126336867161">EVDO mangler</translation>
 <translation id="7230787553283372882">Tilpas din tekststørrelse</translation>
 <translation id="7232750842195536390">Omdøbningen mislykkedes</translation>
+<translation id="7234010996000898150">Annullerer Linux-gendannelse</translation>
 <translation id="7235716375204803342">Henter aktiviteter...</translation>
 <translation id="7235737137505019098">Din sikkerhedsnøgle har ikke nok plads til flere konti.</translation>
 <translation id="7238585580608191973">SHA-256-fingeraftryk</translation>
@@ -4276,6 +4295,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Åbn alle i &amp;nyt vindue}=1{Åbn i &amp;nyt vindue}one{Åbn (#) i &amp;nyt vindue}other{Åbn alle (#) i &amp;nyt vindue}}</translation>
 <translation id="7434509671034404296">Udvikler</translation>
 <translation id="7436921188514130341">Øv, surt! Der opstod en fejl under omdøbningen.</translation>
+<translation id="7437427339141948518">Notifikationer fra</translation>
 <translation id="7438976808740265764">Flash Player understøttes ikke længere fra december 2020.</translation>
 <translation id="7441736921018636843">Hvis du vil ændre denne indstilling, skal du <ph name="BEGIN_LINK" />nulstille synkronisering<ph name="END_LINK" /> for at fjerne din adgangssætning for synkronisering</translation>
 <translation id="7441830548568730290">Andre brugere</translation>
@@ -4405,6 +4425,7 @@
 <translation id="7643932971554933646">Skal websitet kunne se filer?</translation>
 <translation id="7644543211198159466">Farve og tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (ejer)</translation>
+<translation id="7645681574855902035">Annullerer Linux-sikkerhedskopiering</translation>
 <translation id="7647403192093989392">Ingen nye aktiviteter</translation>
 <translation id="7648142322539582331">Opret forbindelse til internettet for at konfigurere børnesikring</translation>
 <translation id="7648992873808071793">Gemme filer på denne enhed</translation>
@@ -4855,6 +4876,7 @@
 <translation id="8256319818471787266">Fido</translation>
 <translation id="8257950718085972371">Fortsæt blokering af kameraadgang</translation>
 <translation id="8259239505248583312">Start</translation>
+<translation id="8259556432390118667">Hex-farveværdi</translation>
 <translation id="8260126382462817229">Prøv at logge ind igen</translation>
 <translation id="8260864402787962391">Mus</translation>
 <translation id="8261378640211443080">Denne udvidelse er ikke anført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og er muligvis blevet tilføjet, uden at du vidste det.</translation>
@@ -5107,6 +5129,7 @@
 <translation id="8662911384982557515">Skifte din startside til: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome kan ikke indstille baggrunden.</translation>
 <translation id="8663099077749055505">Bloker altid flere automatiske downloads på <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Vil du vise notifikationer for dette website?</translation>
 <translation id="8664389313780386848">&amp;Vis kildetekst</translation>
 <translation id="8665180165765946056">Sikkerhedskopieringen blev fuldført</translation>
 <translation id="866611985033792019">Hav tillid til dette certifikat i forbindelse med identifikation af e-mailbrugere</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">Rediger</translation>
 <translation id="9066773882585798925">Få læst teksten højt</translation>
 <translation id="9066782832737749352">Oplæsning</translation>
+<translation id="9068849894565669697">Vælg farve</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-mus er tilsluttet</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">Sende beskeder til og modtage beskeder fra Bluetooth-enheder.</translation>
 <translation id="9134304429738380103">Ja tak.</translation>
 <translation id="9137013805542155359">Vis oprindelig</translation>
+<translation id="9137157311132182254">Foretrukken søgemaskine</translation>
 <translation id="9137916601698928395">Åbn linket som <ph name="USER" /></translation>
 <translation id="9138978632494473300">Føj genveje til følgende steder:</translation>
 <translation id="9140067245205650184">Du benytter en ikke-understøttet funktionsmarkering: <ph name="BAD_FLAG" />. Det går ud over stabiliteten og sikkerheden.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">Bogmærkemappe i trævisning</translation>
 <translation id="964286338916298286">Din it-administrator har deaktiveret Chrome Goodies for din enhed.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{App}one{App}other{Apps}}</translation>
+<translation id="965211523698323809">Send og modtag sms-beskeder fra din <ph name="DEVICE_TYPE" /> <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Du logges ud af dine Google-konti. Ændringer af bogmærker, historik, adgangskoder og andre indstillinger synkroniseres ikke længere med din Google-konto. Dine eksisterende data er dog stadig gemt på din Google-konto og kan administreres i <ph name="BEGIN_LINK" />Google Betjeningspanel<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Lagrede data</translation>
 <translation id="968000525894980488">Aktivér Google Play-tjenester.</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 7d2c768..94368e6 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Auf folgendem Gerät wurde ein Lese- oder Schreibvorgang mit ungültiger Abweichung angefordert: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Melden Sie vor der Anmeldung als Gast an, um das Netzwerk <ph name="NETWORK_ID" /> zu aktivieren.</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> immer übersetzen</translation>
+<translation id="1104038495841596279">Es wurde keine SIM-Karte erkannt</translation>
 <translation id="1108600514891325577">&amp;Anhalten</translation>
 <translation id="1110155001042129815">Warten</translation>
 <translation id="1112420131909513020">Tab im Hintergrund verwendet Bluetooth</translation>
@@ -338,7 +339,7 @@
 <translation id="1503394326855300303">Dieses Inhaberkonto muss in einer Sitzung mit Mehrfachanmeldung das erste angemeldete Konto sein.</translation>
 <translation id="150411034776756821"><ph name="SITE" /> entfernen</translation>
 <translation id="1506061864768559482">Suchmaschine</translation>
-<translation id="1507049466468737452"><ph name="ORIGIN" /> kann alle Dateien in den unten angegebenen Ordnern abrufen.</translation>
+<translation id="1507049466468737452"><ph name="ORIGIN" /> kann alle Dateien in den unten angegebenen Ordnern abrufen</translation>
 <translation id="1507170440449692343">Diese Seite darf nicht auf Ihre Kamera zugreifen.</translation>
 <translation id="1507246803636407672">&amp;Verwerfen</translation>
 <translation id="1508491105858779599">Legen Sie den Finger auf den Fingerabdrucksensor, um das Gerät zu entsperren.</translation>
@@ -387,7 +388,7 @@
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Gast)</translation>
 <translation id="1572266655485775982">WLAN-Aktivierung</translation>
 <translation id="1572876035008611720">E-Mail-Adresse eingeben</translation>
-<translation id="1574038418461948632">Sollen die Änderungen an <ph name="FILENAME" /> gespeichert werden?</translation>
+<translation id="1574038418461948632">Änderungen in <ph name="FILENAME" /> speichern?</translation>
 <translation id="1576594961618857597">Weißer Standardavatar</translation>
 <translation id="1581962803218266616">Im Finder anzeigen</translation>
 <translation id="1582955169539260415">[<ph name="FINGERPRINT_NAME" />] löschen</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">Synchronisierung wurde von Ihrem Administrator deaktiviert.</translation>
 <translation id="2127372758936585790">Schwachstrom-Ladegerät</translation>
 <translation id="212862741129535676">Aktiver Zustand – Auslastung in Prozent</translation>
+<translation id="212876957201860463">Die Einrichtung Ihres Mobilgeräts wird vorbereitet…</translation>
 <translation id="2129825002735785149">Plug-in aktualisieren</translation>
 <translation id="2131077480075264">"<ph name="APP_NAME" />" konnte nicht installiert werden, da dies vom "<ph name="IMPORT_NAME" />" nicht zugelassen wurde.</translation>
 <translation id="21354425047973905">PINs ausblenden</translation>
@@ -952,6 +954,7 @@
 <translation id="2413749388954403953">Benutzeroberfläche für Lesezeichen ändern</translation>
 <translation id="241727068219398187">Ihre Daten wurden mit Ihrem Google-Passwort vom <ph name="TIME" /> verschlüsselt. Davon ausgenommen sind Zahlungsmethoden oder Adressen von Google Pay.</translation>
 <translation id="2419706071571366386">Melden Sie sich zur Sicherheit ab, wenn Ihr Computer nicht verwendet wird.</translation>
+<translation id="2422125132043002186">Linux-Wiederherstellung abgebrochen</translation>
 <translation id="2423578206845792524">Bi&amp;ld speichern unter...</translation>
 <translation id="2428510569851653187">Beschreiben Sie, was Sie beim Absturz des Tabs getan haben</translation>
 <translation id="2431027948063157455">Google Assistant konnte nicht geladen werden. Überprüfen Sie Ihre Netzverbindung und versuchen Sie es noch einmal.</translation>
@@ -1419,6 +1422,7 @@
 <translation id="3090193911106258841">Zugriff auf Audio- und Video-Eingang</translation>
 <translation id="3090819949319990166">Externe CRX-Datei konnte nicht als <ph name="TEMP_CRX_FILE" /> kopiert werden.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" ist gekoppelt</translation>
+<translation id="3092699946856346803">Bitte setzen Sie die SIM-Karte ein und versuchen Sie es noch einmal</translation>
 <translation id="3101709781009526431">Datum und Uhrzeit</translation>
 <translation id="310671807099593501">Die Website verwendet Bluetooth</translation>
 <translation id="3115147772012638511">Warten auf den Cache...</translation>
@@ -1526,7 +1530,8 @@
 <translation id="3281892622610078515">Dateien und Programme, die unter Quarantäne gestellt werden:</translation>
 <translation id="3282568296779691940">In Chrome anmelden</translation>
 <translation id="3285322247471302225">Neuer &amp;Tab</translation>
-<translation id="3286737518123001369">Hiermit können Sie die auf Ihrem Sicherheitsschlüssel gespeicherten Anmeldedaten abrufen und löschen</translation>
+<translation id="3286654161521615710">Wird vom Chrome-Browser und <ph name="DEVICE_TYPE" />-Launcher verwendet</translation>
+<translation id="3286737518123001369">Auf Ihrem Sicherheitsschlüssel gespeicherte Anmeldedaten abrufen und löschen</translation>
 <translation id="3288047731229977326">Erweiterungen im Entwicklermodus können auf Ihrem Computer Schaden anrichten. Wenn Sie kein Entwickler sind, sollten Sie diese Erweiterungen im Entwicklermodus deaktivieren, um sicher zu sein.</translation>
 <translation id="3289856944988573801">Verwenden Sie Ethernet oder WLAN zur Suche nach Updates.</translation>
 <translation id="3293644607209440645">Diese Seite senden</translation>
@@ -1662,7 +1667,7 @@
 <translation id="348780365869651045">Warten auf AppCache...</translation>
 <translation id="3488065109653206955">Teilweise aktiviert</translation>
 <translation id="3492788708641132712">Die Synchronisierung funktioniert nicht. Melden Sie sich noch einmal an.</translation>
-<translation id="3493486281776271508">Es ist eine Internetverbindung erforderlich.</translation>
+<translation id="3493486281776271508">Es ist eine Internetverbindung erforderlich</translation>
 <translation id="3493881266323043047">Gültigkeit</translation>
 <translation id="3494769164076977169">Nachfragen, wenn eine Website versucht, Dateien nach der ersten Datei automatisch herunterzuladen (empfohlen)</translation>
 <translation id="3495660573538963482">Google Assistant-Einstellungen</translation>
@@ -1870,6 +1875,7 @@
 <translation id="3775432569830822555">SSL-Serverzertifikat</translation>
 <translation id="3775705724665058594">An meine Geräte senden</translation>
 <translation id="3776796446459804932">Diese Erweiterung verletzt die Chrome Web Store-Richtlinien.</translation>
+<translation id="3777483481409781352">Mobilgerät konnte nicht aktiviert werden</translation>
 <translation id="3777806571986431400">Erweiterung aktiviert</translation>
 <translation id="3778152852029592020">Der Download wurde abgebrochen.</translation>
 <translation id="3778208826288864398">Der Sicherheitsschlüssel wurde gesperrt, weil zu oft die falsche PIN eingegeben wurde. Sie müssen den Sicherheitsschlüssel zurücksetzen.</translation>
@@ -2133,6 +2139,7 @@
 <translation id="4131410914670010031">Schwarz-Weiß</translation>
 <translation id="4136203100490971508">Das Nachtlicht wird automatisch bei Sonnenaufgang deaktiviert</translation>
 <translation id="4138267921960073861">Nutzernamen und Fotos auf der Anmeldeseite anzeigen</translation>
+<translation id="4142052906269098341"><ph name="DEVICE_TYPE" /> mit Ihrem Smartphone entsperren. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Bessere Videoqualität und längere Akkulaufzeit. Videos werden nur auf Ihrem für Google Cast optimierten Gerät abgespielt.</translation>
 <translation id="4145922204387553806">Zulassen, dass Assistant Ihnen Informationen zu den Inhalten auf Ihrem Bildschirm anzeigt</translation>
 <translation id="4146026355784316281">Immer mit System Viewer öffnen</translation>
@@ -2174,6 +2181,7 @@
 <translation id="42126664696688958">Exportieren</translation>
 <translation id="42137655013211669">Der Zugriff auf diese Ressource wurde vom Server nicht zugelassen.</translation>
 <translation id="4215350869199060536">Der Name enthält unzulässige Zeichen.</translation>
+<translation id="4220648711404560261">Bei der Aktivierung ist ein Fehler aufgetreten.</translation>
 <translation id="4225397296022057997">Auf allen Websites</translation>
 <translation id="4232375817808480934">Kerberos konfigurieren</translation>
 <translation id="4235200303672858594">Gesamten Bildschirm</translation>
@@ -2318,10 +2326,11 @@
 <translation id="4459169140545916303">Vor <ph name="DEVICE_LAST_ACTIVATED_TIME" /> Tagen aktiv</translation>
 <translation id="4462159676511157176">Benutzerdefinierte Nameserver</translation>
 <translation id="4469477701382819144">Auf Websites blockiert, die aufdringliche oder irreführende Werbung anzeigen</translation>
-<translation id="4469943624506685059">Verwenden Sie ein USB Typ-C-Netzteil oder ein Netzteil vom Hersteller Ihres Chromebooks, um Lade- und Leistungsprobleme zu vermeiden.</translation>
+<translation id="4469943624506685059">Bitte ein USB-Typ-C-Netzteil oder ein Netzteil des Chromebook-Herstellers verwenden, um Lade- und Leistungsprobleme zu vermeiden.</translation>
 <translation id="4470957202018033307">Einstellungen für externe Speichergeräte</translation>
 <translation id="447252321002412580">Helfen, die Funktionen und die Leistung von Chrome zu verbessern</translation>
 <translation id="4474155171896946103">Alle Tabs als Lesezeichen speichern...</translation>
+<translation id="4474461121892222090">Die Aktivierung der mobilen Daten kann bis zu 15 Minuten in Anspruch nehmen.</translation>
 <translation id="4475552974751346499">In Downloads suchen</translation>
 <translation id="4476590490540813026">Athletin</translation>
 <translation id="4477015793815781985">Verwenden Sie Strg, Alt oder ⌘</translation>
@@ -2331,6 +2340,7 @@
 <translation id="4479877282574735775">Die virtuelle Maschine wird konfiguriert. Dies kann einige Minuten dauern.</translation>
 <translation id="4480590691557335796">Chrome kann auf Ihrem Computer schädliche Software suchen und entfernen</translation>
 <translation id="4481530544597605423">Entkoppelte Geräte</translation>
+<translation id="4483579413421375386">Für diese Website anzeigen</translation>
 <translation id="4495419450179050807">Nicht auf dieser Seite anzeigen</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ist abgestürzt</translation>
 <translation id="450099669180426158">Ausrufezeichensymbol</translation>
@@ -2434,6 +2444,7 @@
 <translation id="4647697156028544508">Bitte geben Sie die PIN für "<ph name="DEVICE_NAME" />" ein:</translation>
 <translation id="4648491805942548247">Unzureichende Berechtigungen</translation>
 <translation id="4648499713050786492">Entsperren Sie Ihr Profil, bevor Sie eine Person hinzufügen.</translation>
+<translation id="4650591383426000695">Ihr Smartphone von Ihrem <ph name="DEVICE_TYPE" /> trennen</translation>
 <translation id="4651484272688821107">Die Onlinekomponente konnte mit den Ressourcen des Demomodus nicht geladen werden.</translation>
 <translation id="465878909996028221">Nur HTTP-, HTTPS- und Dateiprotokolle werden für Browserweiterleitungen unterstützt.</translation>
 <translation id="4659077111144409915">Primäres Konto</translation>
@@ -2735,6 +2746,7 @@
 <translation id="5115309401544567011">Bitte schließen Sie Ihr <ph name="DEVICE_TYPE" /> an eine Stromquelle an.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Audio &amp;speichern unter...</translation>
+<translation id="5117139026559873716">Smartphone vom <ph name="DEVICE_TYPE" /> trennen. Die Geräte werden nicht mehr automatisch miteinander verbunden.</translation>
 <translation id="5117427536932535467">Designs &amp; Hintergründe</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> erfolgreich gedruckt</translation>
 <translation id="5117930984404104619">Verhalten anderer Erweiterungen überwachen, einschließlich besuchter URLs</translation>
@@ -2791,7 +2803,7 @@
 <translation id="5213891612754844763">Proxyeinstellungen anzeigen</translation>
 <translation id="5215502535566372932">Land auswählen</translation>
 <translation id="521582610500777512">Das Foto wurde verworfen.</translation>
-<translation id="5217313969810784338">Verwenden Sie zum Laden einen Akku vom Hersteller Ihres Chromebooks.</translation>
+<translation id="5217313969810784338">Bitte zum Laden einen Akku des Chromebook-Herstellers verwenden.</translation>
 <translation id="5222676887888702881">Abmelden</translation>
 <translation id="52232769093306234">Fehler bei der Paketerstellung.</translation>
 <translation id="5225324770654022472">Verknüpfung "Apps" anzeigen</translation>
@@ -2964,6 +2976,7 @@
 <translation id="5463275305984126951">Index von <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menü enthält ausgeblendete Lesezeichen</translation>
 <translation id="5464632865477611176">Dieses Mal ausführen</translation>
+<translation id="5464660706533281090">Diese Einstellung kann nicht von einem Kind geändert werden.</translation>
 <translation id="5466374726908360271">Ei&amp;nfügen und nach "<ph name="SEARCH_TERMS" />" suchen</translation>
 <translation id="5471768120198416576">Hallo! Ich bin die Stimme Ihrer Sprachausgabe.</translation>
 <translation id="5473333559083690127">Neue PIN noch einmal eingeben</translation>
@@ -3152,7 +3165,7 @@
 <translation id="5750324801516359607">Weit entfernt</translation>
 <translation id="5756163054456765343">H&amp;ilfe</translation>
 <translation id="5759728514498647443">Dokumente, die Sie über <ph name="APP_NAME" /> zum Druck senden, können von <ph name="APP_NAME" /> gelesen werden.</translation>
-<translation id="5760765233610147582">Verwenden Sie eine für dieses Chromebook geeignete Dockingstation.</translation>
+<translation id="5760765233610147582">Bitte eine für dieses Chromebook geeignete Dockingstation verwenden.</translation>
 <translation id="5763315388120433852">Netzwerkfreigaben einrichten oder verwalten.</translation>
 <translation id="5763751966069581670">Keine USB-Geräte gefunden</translation>
 <translation id="5764483294734785780">Audio &amp;speichern unter...</translation>
@@ -3199,6 +3212,7 @@
 <translation id="5817918615728894473">Koppeln</translation>
 <translation id="5821565227679781414">Verknüpfung erstellen</translation>
 <translation id="5825412242012995131">An (empfohlen)</translation>
+<translation id="5826395379250998812">Verbinden Sie Ihr <ph name="DEVICE_TYPE" /> mit Ihrem Smartphone. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Allgemeiner Name (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Wird gedruckt...</translation>
@@ -3326,7 +3340,7 @@
 <translation id="6010869025736512584">Zugriff auf Video-Eingang</translation>
 <translation id="6011193465932186973">Fingerabdruck</translation>
 <translation id="6011449291337289699">Websitedaten löschen</translation>
-<translation id="6013505829696424563">Geben Sie die PIN für Ihren Sicherheitsschlüssel ein, um die Anmeldedaten abzurufen. Falls Sie den PIN nicht kennen, müssen Sie den Sicherheitsschlüssel zurücksetzen.</translation>
+<translation id="6013505829696424563">Geben Sie die PIN für Ihren Sicherheitsschlüssel ein, um die Anmeldedaten abzurufen. Falls Sie die PIN nicht kennen, müssen Sie den Sicherheitsschlüssel zurücksetzen.</translation>
 <translation id="6015266928248016057">Ungültiger PUK. Noch <ph name="RETRIES" /> Versuche.</translation>
 <translation id="6015796118275082299">Jahr</translation>
 <translation id="6016551720757758985">Powerwash und Zurücksetzen auf vorherige Version bestätigen</translation>
@@ -3420,6 +3434,7 @@
 <translation id="6129691635767514872">Die ausgewählten Daten wurden aus Chrome und von synchronisierten Geräten entfernt. Ihr Google-Konto weist möglicherweise andere Formen von Browserverläufen wie Suchanfragen und Aktivitäten von anderen Google-Diensten unter <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> auf.</translation>
 <translation id="6129938384427316298">Kommentar zu Netscape-Zertifikaten</translation>
 <translation id="6129953537138746214">Leerzeichen</translation>
+<translation id="6130024555057767093">Benachrichtigungen werden derzeit für alle Websites blockiert, mit Ausnahme von Websites, für die Sie sie einzeln zulassen.</translation>
 <translation id="6136114942382973861">Downloadleiste schließen</translation>
 <translation id="6137767437444130246">Nutzerzertifikat</translation>
 <translation id="6138680304137685902">X9.62-ECDSA-Signatur mit SHA-384</translation>
@@ -3465,6 +3480,7 @@
 <translation id="620722923698527029">Diese Arten von Links immer in der verknüpften App öffnen</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> installieren (Linux-App)</translation>
 <translation id="6207937957461833379">Land/Region</translation>
+<translation id="6208521041562685716">Mobile Daten werden aktiviert</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Synchronisierung funktioniert nicht</translation>
 <translation id="6212039847102026977">Erweiterte Netzwerkeigenschaften anzeigen</translation>
 <translation id="6212168817037875041">Display deaktivieren</translation>
@@ -3826,6 +3842,7 @@
 <translation id="677965093459947883">Sehr klein</translation>
 <translation id="6780439250949340171">andere Einstellungen verwalten</translation>
 <translation id="6781284683813954823">Doodle-Link</translation>
+<translation id="6781978626986383437">Linux-Sicherung abgebrochen</translation>
 <translation id="6782111308708962316">Websites von Drittanbietern am Speichern und Lesen von Cookiedaten hindern</translation>
 <translation id="6786747875388722282">Erweiterungen</translation>
 <translation id="6787839852456839824">Tastenkombinationen</translation>
@@ -4113,6 +4130,7 @@
 <translation id="7197632491113152433">Wir haben <ph name="NUMBER_OF_APPS" /> Apps in Ihrem Konto gefunden, die auf diesem Gerät verwendet werden können.</translation>
 <translation id="7199158086730159431">H&amp;ilfe erhalten</translation>
 <translation id="7200083590239651963">Konfiguration auswählen</translation>
+<translation id="7201042526153088083">Apps und Spiele von Google Play auf Ihrem <ph name="DEVICE_TYPE" /> installieren. &lt;a target="_blank" href="<ph name="URL" />"&gt;Weitere Informationen&lt;/a&gt;</translation>
 <translation id="720110658997053098">Gerät dauerhaft im Kioskmodus betreiben</translation>
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" wurde gelöscht</translation>
 <translation id="7201420661433230412">Dateien ansehen</translation>
@@ -4137,6 +4155,7 @@
 <translation id="7229570126336867161">EVDO erforderlich</translation>
 <translation id="7230787553283372882">Textgröße anpassen</translation>
 <translation id="7232750842195536390">Fehler beim Umbenennen</translation>
+<translation id="7234010996000898150">Linux-Wiederherstellung wird abgebrochen</translation>
 <translation id="7235716375204803342">Aktivitäten werden abgerufen...</translation>
 <translation id="7235737137505019098">Auf Ihrem Sicherheitsschlüssel ist nicht genügend Platz für weitere Konten.</translation>
 <translation id="7238585580608191973">SHA-256-Fingerabdruck</translation>
@@ -4272,6 +4291,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Alle in &amp;neuem Fenster öffnen}=1{In &amp;neuem Fenster öffnen}other{Alle (#) in &amp;neuem Fenster öffnen}}</translation>
 <translation id="7434509671034404296">Entwickler</translation>
 <translation id="7436921188514130341">Oh nein! Beim Umbenennen ist ein Fehler aufgetreten.</translation>
+<translation id="7437427339141948518">Benachrichtigungen aus</translation>
 <translation id="7438976808740265764">Flash Player wird ab Dezember 2020 nicht mehr unterstützt.</translation>
 <translation id="7441736921018636843">Wenn Sie diese Einstellung ändern möchten, müssen Sie die <ph name="BEGIN_LINK" />Synchronisierung zurücksetzen<ph name="END_LINK" />, um die Synchronisierungspassphrase zu entfernen</translation>
 <translation id="7441830548568730290">Andere Nutzer</translation>
@@ -4401,6 +4421,7 @@
 <translation id="7643932971554933646">Website erlauben, diese Dateien zu lesen?</translation>
 <translation id="7644543211198159466">Farbe und Design</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (Eigentümer)</translation>
+<translation id="7645681574855902035">Linux-Sicherung wird abgebrochen</translation>
 <translation id="7647403192093989392">Keine neuen Aktivitäten</translation>
 <translation id="7648142322539582331">Stellen Sie eine Internetverbindung her, um Jugendschutzeinstellungen einzurichten</translation>
 <translation id="7648992873808071793">Dateien auf diesem Gerät speichern</translation>
@@ -4695,7 +4716,7 @@
       Von Ihnen gekaufte Inhalte, wie Filme, TV-Sendungen, Musik, Bücher oder andere In-App-Käufe werden eventuell ebenfalls gelöscht.
       <ph name="LINE_BREAKS2" />
       Apps oder Inhalte auf anderen Geräten sind davon nicht betroffen.</translation>
-<translation id="8025958612547562988">In Ihrem Profil gespeicherte erkannte Drucker oder neue Drucker können hinzugefügt werden.</translation>
+<translation id="8025958612547562988">Sie können erkannte Drucker in Ihrem Profil speichern oder neue Drucker hinzufügen.</translation>
 <translation id="8026334261755873520">Browserdaten löschen</translation>
 <translation id="8028060951694135607">Microsoft-Schlüsselwiederherstellung</translation>
 <translation id="8028803902702117856"><ph name="SIZE" /> werden heruntergeladen, <ph name="FILE_NAME" /></translation>
@@ -4851,6 +4872,7 @@
 <translation id="8256319818471787266">Bello</translation>
 <translation id="8257950718085972371">Zugriff auf die Kamera weiter blockieren</translation>
 <translation id="8259239505248583312">Los gehts!</translation>
+<translation id="8259556432390118667">Hex-Farbwert</translation>
 <translation id="8260126382462817229">Melden Sie sich noch einmal an</translation>
 <translation id="8260864402787962391">Maus</translation>
 <translation id="8261378640211443080">Diese Erweiterung ist nicht im <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> aufgeführt und wurde möglicherweise ohne Ihr Wissen hinzugefügt.</translation>
@@ -5103,6 +5125,7 @@
 <translation id="8662911384982557515">Startseite zu <ph name="HOME_PAGE" /> ändern</translation>
 <translation id="8662978096466608964">Chrome kann dieses Hintergrundbild nicht festlegen.</translation>
 <translation id="8663099077749055505">Mehrere automatische Downloads auf <ph name="HOST" /> immer blockieren</translation>
+<translation id="8663534996262079772">Benachrichtigungen für diese Website anzeigen?</translation>
 <translation id="8664389313780386848">Seitenquelltext &amp;anzeigen</translation>
 <translation id="8665180165765946056">Sicherung abgeschlossen</translation>
 <translation id="866611985033792019">Diesem Zertifikat zur Identifizierung von E-Mail-Nutzern vertrauen</translation>
@@ -5393,6 +5416,7 @@
 <translation id="9065203028668620118">Bearbeiten</translation>
 <translation id="9066773882585798925">Text vorlesen lassen</translation>
 <translation id="9066782832737749352">Sprachausgabe</translation>
+<translation id="9068849894565669697">Farbe auswählen</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-Maus angeschlossen</translation>
@@ -5430,6 +5454,7 @@
 <translation id="9131487537093447019">Nachrichten an Bluetooth-Geräte senden und von diesen erhalten</translation>
 <translation id="9134304429738380103">Ok.</translation>
 <translation id="9137013805542155359">Original anzeigen</translation>
+<translation id="9137157311132182254">Bevorzugte Suchmaschine</translation>
 <translation id="9137916601698928395">Link als <ph name="USER" /> öffnen</translation>
 <translation id="9138978632494473300">Fügen Sie zu den folgenden Orten Verknüpfungen hinzu:</translation>
 <translation id="9140067245205650184">Sie verwenden eine nicht unterstützte Funktionsmarkierung: <ph name="BAD_FLAG" />. Dadurch werden Stabilität und Sicherheit beeinträchtigt.</translation>
@@ -5502,6 +5527,7 @@
 <translation id="962802172452141067">Lesezeichenordnerstruktur</translation>
 <translation id="964286338916298286">Ihr IT-Administrator hat Chrome-Extras für Ihr Gerät deaktiviert.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Anwendung}other{Anwendungen}}</translation>
+<translation id="965211523698323809">SMS auf Ihrem <ph name="DEVICE_TYPE" /> senden und empfangen. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Hierdurch werden Sie von allen Ihren Google-Konten abgemeldet. Änderungen an Ihrem Verlauf sowie an Ihren Lesezeichen, Passwörtern und sonstigen Einstellungen werden nicht mehr mit Ihrem Google-Konto synchronisiert. Bereits in Ihrem Google-Konto gespeicherte Daten bleiben dort erhalten und können über das <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" /> verwaltet werden.</translation>
 <translation id="967624055006145463">Gespeicherte Daten</translation>
 <translation id="968000525894980488">Aktivieren Sie die Google Play-Dienste.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 6e2ef40..afc0f8b 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Η λειτουργία ανάγνωσης ή γραφής ζητήθηκε με μη έγκυρη μετατόπιση στη συσκευή: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Προτού συνδεθείτε, πραγματοποιήστε είσοδο ως επισκέπτης για να ενεργοποιηθεί το δίκτυο <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Να μεταφράζονται πάντα τα <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Δεν ήταν δυνατός ο εντοπισμός της κάρτας SIM σας</translation>
 <translation id="1108600514891325577">&amp;Διακοπή</translation>
 <translation id="1110155001042129815">Αναμονή</translation>
 <translation id="1112420131909513020">Μια καρτέλα παρασκηνίου χρησιμοποιεί Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Ο συγχρονισμός έχει απενεργοποιηθεί από τον διαχειριστή σας.</translation>
 <translation id="2127372758936585790">Χαμηλή ισχύς φορτιστή</translation>
 <translation id="212862741129535676">Ποσοστό κατοχής κατάστασης συχνότητας</translation>
+<translation id="212876957201860463">Προετοιμασία ρύθμισης της συσκευής κινητής τηλεφωνίας…</translation>
 <translation id="2129825002735785149">Ενημέρωση προσθήκης</translation>
 <translation id="2131077480075264">Δεν είναι δυνατή η εγκατάσταση του "<ph name="APP_NAME" />" επειδή δεν επιτρέπεται από το "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Απόκρυψη PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Τα δεδομένα κρυπτογραφήθηκαν με τον κωδικό πρόσβασης Google από τις
           <ph name="TIME" />. Αυτά τα δεδομένα δεν περιλαμβάνουν τρόπους πληρωμής και διευθύνσεις από το Google Pay.</translation>
 <translation id="2419706071571366386">Για λόγους ασφαλείας, θα είναι καλό να αποσυνδέεστε όταν ο υπολογιστής σας δεν χρησιμοποιείται.</translation>
+<translation id="2422125132043002186">Η επαναφορά Linux ακυρώθηκε</translation>
 <translation id="2423578206845792524">Αποθήκευση εικόνας &amp;ως...</translation>
 <translation id="2428510569851653187">Περιγράψτε τι κάνατε όταν παρουσιάστηκε το σφάλμα στην καρτέλα</translation>
 <translation id="2431027948063157455">Δεν ήταν δυνατή η φόρτωση του Βοηθού Google. Ελέγξτε τη σύνδεση δικτύου σας και δοκιμάστε ξανά.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Πρόσβαση στην είσοδο ήχου και βίντεο</translation>
 <translation id="3090819949319990166">Δεν είναι δυνατή η αντιγραφή του εξωτερικού αρχείου crx στο <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Έγινε σύζευξη της συσκευής "<ph name="DEVICE_NAME" />"</translation>
+<translation id="3092699946856346803">Τοποθετήστε την κάρτα SIM σας και δοκιμάστε ξανά.</translation>
 <translation id="3101709781009526431">Ημερομηνία και ώρα</translation>
 <translation id="310671807099593501">Ο ιστότοπος χρησιμοποιεί bluetooth</translation>
 <translation id="3115147772012638511">Αναμονή για προσωρινή μνήμη...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Αρχεία και προγράμματα για καραντίνα:</translation>
 <translation id="3282568296779691940">Σύνδεση στο Chrome</translation>
 <translation id="3285322247471302225">Νέα &amp;Καρτέλα</translation>
+<translation id="3286654161521615710">Χρησιμοποιείται από το πρόγραμμα περιήγησης Chrome και την εφαρμογή εκκίνησης της συσκευής <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Προβάλετε και διαγράψτε τα δεδομένα σύνδεσης που έχουν αποθηκευτεί στο κλειδί ασφαλείας σας.</translation>
 <translation id="3288047731229977326">Οι επεκτάσεις που εκτελούνται σε λειτουργία προγραμματιστή μπορούν να βλάψουν τον υπολογιστή σας. Εάν δεν είστε προγραμματιστής, θα πρέπει να απενεργοποιήσετε αυτές τις επεκτάσεις που εκτελούνται σε λειτουργία προγραμματιστή για να διατηρήσετε την ασφάλειά σας.</translation>
 <translation id="3289856944988573801">Για να ελέγξετε για ενημερώσεις, χρησιμοποιήστε δίκτυο Ethernet ή Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Πιστοποιητικό διακομιστή SSL</translation>
 <translation id="3775705724665058594">Αποστολή στις συσκευές σας</translation>
 <translation id="3776796446459804932">Αυτή η επέκταση παραβαίνει την πολιτική του Chrome Web Store.</translation>
+<translation id="3777483481409781352">Δεν ήταν δυνατή η ενεργοποίηση της συσκευής κινητής τηλεφωνίας</translation>
 <translation id="3777806571986431400">Η επέκταση έχει ενεργοποιηθεί</translation>
 <translation id="3778152852029592020">Η λήψη έχει ακυρωθεί.</translation>
 <translation id="3778208826288864398">Το κλειδί ασφαλείας είναι κλειδωμένο επειδή έγινε εισαγωγή εσφαλμένου PIN πάρα πολλές φορές. Θα πρέπει να επαναφέρετε το κλειδί ασφαλείας.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Ασπρόμαυρο</translation>
 <translation id="4136203100490971508">Ο Νυχτερινός φωτισμός θα απενεργοποιείται αυτόματα κατά την ανατολή του ηλίου</translation>
 <translation id="4138267921960073861">Εμφάνιση ονομάτων χρηστών και φωτογραφιών στην οθόνη σύνδεσης</translation>
+<translation id="4142052906269098341">Ξεκλειδώστε τη συσκευή <ph name="DEVICE_TYPE" /> με το τηλέφωνό σας. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Απολαύστε βίντεο καλύτερης ποιότητας και εξοικονομήστε μπαταρία. Το βίντεο θα αναπαράγεται μόνο στην οθόνη σας με δυνατότητα Cast.</translation>
 <translation id="4145922204387553806">Επιτρέψτε στον Βοηθό να σας εμφανίζει πληροφορίες σχετικά με το περιεχόμενο της οθόνης σας</translation>
 <translation id="4146026355784316281">Άνοιγμα πάντα με πρόγραμμα προβολής συστήματος</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Εξαγωγή</translation>
 <translation id="42137655013211669">Η πρόσβαση σε αυτόν τον πόρο απαγορεύεται από το διακομιστή.</translation>
 <translation id="4215350869199060536">Ωχ! Υπάρχουν μη έγκυρα σύμβολα στο όνομα!</translation>
+<translation id="4220648711404560261">Παρουσιάστηκε σφάλμα κατά την ενεργοποίηση.</translation>
 <translation id="4225397296022057997">Σε όλους τους ιστοτόπους</translation>
 <translation id="4232375817808480934">Διαμόρφωση του Kerberos</translation>
 <translation id="4235200303672858594">Πλήρης οθόνη</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Προτιμήσεις εξωτερικού αποθηκευτικού χώρου</translation>
 <translation id="447252321002412580">Συμβάλλετε στη βελτίωση των λειτουργιών και της απόδοσης του Chrome</translation>
 <translation id="4474155171896946103">Δημιουργία σελιδοδείκτη για όλες τις καρτέλες...</translation>
+<translation id="4474461121892222090">Μπορεί να χρειαστούν έως και 15 λεπτά για την ολοκλήρωση της ενεργοποίησης των δεδομένων κινητής τηλεφωνίας.</translation>
 <translation id="4475552974751346499">Αναζήτηση λήψεων</translation>
 <translation id="4476590490540813026">Αθλήτρια</translation>
 <translation id="4477015793815781985">Συμπεριλάβετε το Ctrl, το Alt ή το ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Διαμόρφωση της εικονικής μηχανής. Ενδέχεται να χρειαστούν μερικά λεπτά.</translation>
 <translation id="4480590691557335796">Το Chrome μπορεί να εντοπίσει και να καταργήσει επιβλαβές λογισμικό από τον υπολογιστή σας</translation>
 <translation id="4481530544597605423">Συσκευές στις οποίες διακόπηκε η σύζευξη</translation>
+<translation id="4483579413421375386">Εμφάνιση για τον ιστότοπο</translation>
 <translation id="4495419450179050807">Να μην γίνεται εμφάνιση σε αυτήν τη σελίδα</translation>
 <translation id="4500114933761911433">Η προσθήκη <ph name="PLUGIN_NAME" /> παρουσίασε σφάλμα</translation>
 <translation id="450099669180426158">Εικονίδιο θαυμαστικού</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Εισαγάγετε το PIN για τη συσκευή "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Ανεπαρκείς άδειες</translation>
 <translation id="4648499713050786492">Ξεκλειδώστε το προφίλ σας προτού προσθέσετε κάποιο άτομο.</translation>
+<translation id="4650591383426000695">Αποσυνδέστε το τηλέφωνό σας από τη συσκευή <ph name="DEVICE_TYPE" />.</translation>
 <translation id="4651484272688821107">Δεν ήταν δυνατή η φόρτωση του ηλεκτρονικού στοιχείου με τους πόρους της λειτουργίας επίδειξης.</translation>
 <translation id="465878909996028221">Για τις ανακατευθύνσεις προγράμματος περιήγησης υποστηρίζονται μόνο http, https και πρωτόκολλα αρχείων.</translation>
 <translation id="4659077111144409915">Κύριος λογαριασμός</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Συνδέστε τη συσκευή <ph name="DEVICE_TYPE" /> σε τροφοδοσία ρεύματος.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Απο&amp;θήκευση ήχου ως...</translation>
+<translation id="5117139026559873716">Αποσυνδέστε το τηλέφωνό σας από τη συσκευή <ph name="DEVICE_TYPE" />. Δεν θα συνδέονται πλέον αυτόματα.</translation>
 <translation id="5117427536932535467">Θέματα και ταπετσαρίες</translation>
 <translation id="5117625797180141189">Επιτυχής εκτύπωση του εγγράφου <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Παρακολούθηση της συμπεριφοράς άλλων επεκτάσεων, συμπεριλαμβανομένων των διευθύνσεων URL που έχουν δεχτεί επίσκεψη</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Ευρετήριο του <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Μενού που περιέχει κρυφούς σελιδοδείκτες</translation>
 <translation id="5464632865477611176">Εκτέλεση αυτή τη φορά</translation>
+<translation id="5464660706533281090">Δεν είναι δυνατή η αλλαγή αυτής της ρύθμισης από ένα παιδί.</translation>
 <translation id="5466374726908360271">Επικόλληση και αναζήτηση για "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Γεια σας! Είμαι η φωνή της λειτουργίας μετατροπής κειμένου σε ομιλία.</translation>
 <translation id="5473333559083690127">Εισαγάγετε ξανά το νέο PIN</translation>
@@ -3205,6 +3218,7 @@
 <translation id="5817918615728894473">Σύζευξη</translation>
 <translation id="5821565227679781414">Δημιουργία συντόμευσης</translation>
 <translation id="5825412242012995131">Ενεργοποίηση (Συνιστάται)</translation>
+<translation id="5826395379250998812">Συνδέστε τη συσκευή <ph name="DEVICE_TYPE" /> με το τηλέφωνό σας. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Κοινό όνομα (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Εκτύπωση...</translation>
@@ -3426,6 +3440,7 @@
 <translation id="6129691635767514872">Τα επιλεγμένα δεδομένα καταργήθηκαν από το Chrome και από τις συγχρονισμένες συσκευές. Ο Λογαριασμός σας Google μπορεί να διαθέτει άλλες μορφές ιστορικού περιήγησης, όπως αναζητήσεις και δραστηριότητα από άλλες υπηρεσίες Google στη διεύθυνση <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Σχόλιο πιστοποιητικού Netscape</translation>
 <translation id="6129953537138746214">Κενό</translation>
+<translation id="6130024555057767093">Οι ειδοποιήσεις είναι προς το παρόν αποκλεισμένες για όλους τους ιστοτόπους εκτός από τους ιστοτόπους που επιτρέπετε μεμονωμένα.</translation>
 <translation id="6136114942382973861">Κλείσιμο γραμμής λήψεων</translation>
 <translation id="6137767437444130246">Πιστοποιητικό χρήστη</translation>
 <translation id="6138680304137685902">Υπογραφή X9.62 ECDSA με SHA-384</translation>
@@ -3471,6 +3486,7 @@
 <translation id="620722923698527029">Να ανοίγουν πάντα αυτοί οι τύποι συνδέσμων στη συσχετισμένη εφαρμογή</translation>
 <translation id="6207282396926186323">Εγκατάσταση <ph name="APP_NAME" /> (εφαρμογή Linux)</translation>
 <translation id="6207937957461833379">Χώρα/Περιοχή</translation>
+<translation id="6208521041562685716">Γίνεται ενεργοποίηση των δεδομένων κινητής τηλεφωνίας</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Ο συγχρονισμός δεν λειτουργεί</translation>
 <translation id="6212039847102026977">Προβολή σύνθετων ιδιοτήτων δικτύου</translation>
 <translation id="6212168817037875041">Απενεργοποίηση οθόνης</translation>
@@ -3832,6 +3848,7 @@
 <translation id="677965093459947883">Πολύ μικρό</translation>
 <translation id="6780439250949340171">διαχείριση άλλων ρυθμίσεων</translation>
 <translation id="6781284683813954823">Σύνδεσμος doodle</translation>
+<translation id="6781978626986383437">Η δημιουργία αντιγράφου ασφαλείας Linux ακυρώθηκε</translation>
 <translation id="6782111308708962316">Αποτροπή αποθήκευσης και ανάγνωσης δεδομένων cookie από ιστότοπους τρίτων</translation>
 <translation id="6786747875388722282">Επεκτάσεις</translation>
 <translation id="6787839852456839824">Συντομεύσεις πληκτρολογίου</translation>
@@ -4119,6 +4136,7 @@
 <translation id="7197632491113152433">Εντοπίσαμε <ph name="NUMBER_OF_APPS" /> εφαρμογές από τον λογαριασμό σας, η χρήση των οποίων δεν είναι δυνατή σε αυτήν τη συσκευή.</translation>
 <translation id="7199158086730159431">Λάβετε β&amp;οήθεια</translation>
 <translation id="7200083590239651963">Επιλογή διαμόρφωσης</translation>
+<translation id="7201042526153088083">Εγκαταστήστε εφαρμογές και παιχνίδια από το Google Play στη συσκευή <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Μάθετε περισσότερα&lt;/a&gt;</translation>
 <translation id="720110658997053098">Μόνιμη διατήρηση της παρούσας συσκευής σε λειτουργία Kiosk</translation>
 <translation id="7201118060536064622">Το "<ph name="DELETED_ITEM_NAME" />" διαγράφηκε</translation>
 <translation id="7201420661433230412">Προβολή αρχείων</translation>
@@ -4143,6 +4161,7 @@
 <translation id="7229570126336867161">Απαιτείται EVDO</translation>
 <translation id="7230787553283372882">Προσαρμόστε το μέγεθος του κειμένου σας</translation>
 <translation id="7232750842195536390">Η μετονομασία απέτυχε</translation>
+<translation id="7234010996000898150">Ακύρωση επαναφοράς Linux</translation>
 <translation id="7235716375204803342">Ανάκτηση δραστηριοτήτων…</translation>
 <translation id="7235737137505019098">Το κλειδί ασφαλείας δεν διαθέτει αρκετό αποθηκευτικό χώρο για επιπλέον λογαριασμούς.</translation>
 <translation id="7238585580608191973">Αποτύπωμα SHA-256</translation>
@@ -4278,6 +4297,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Άνοιγμα όλων σε &amp;νέο παράθυρο}=1{Άνοιγμα σε &amp;νέο παράθυρο}other{Άνοιγμα όλων (#) σε &amp;νέο παράθυρο}}</translation>
 <translation id="7434509671034404296">Για Προγραμματιστές</translation>
 <translation id="7436921188514130341">Δυστυχώς, παρουσιάστηκε σφάλμα κατά τη μετονομασία.</translation>
+<translation id="7437427339141948518">Ανενεργές ειδοποιήσεις</translation>
 <translation id="7438976808740265764">Το Flash Player δεν θα υποστηρίζεται πλέον μετά τον Δεκέμβριο του 2020.</translation>
 <translation id="7441736921018636843">Για να αλλάξετε αυτήν τη ρύθμιση, <ph name="BEGIN_LINK" />κάντε επαναφορά στον συγχρονισμό<ph name="END_LINK" />, έτσι ώστε να καταργηθεί η φράση πρόσβασης συγχρονισμού</translation>
 <translation id="7441830548568730290">Άλλοι χρήστες</translation>
@@ -4407,6 +4427,7 @@
 <translation id="7643932971554933646">Να επιτρέπεται στον ιστότοπο να βλέπει αρχεία;</translation>
 <translation id="7644543211198159466">Χρώμα και θέμα</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (κάτοχος)</translation>
+<translation id="7645681574855902035">Ακύρωση δημιουργίας αντιγράφου ασφαλείας Linux</translation>
 <translation id="7647403192093989392">Δεν υπάρχουν πρόσφατες δραστηριότητες</translation>
 <translation id="7648142322539582331">Συνδεθείτε στο διαδίκτυο για να ρυθμίσετε τους γονικούς ελέγχους</translation>
 <translation id="7648992873808071793">Αποθήκευση αρχείων σε αυτήν τη συσκευή</translation>
@@ -4858,6 +4879,7 @@
 <translation id="8256319818471787266">Ζωηρός</translation>
 <translation id="8257950718085972371">Να συνεχιστεί ο αποκλεισμός πρόσβασης στην κάμερα</translation>
 <translation id="8259239505248583312">Ας ξεκινήσουμε</translation>
+<translation id="8259556432390118667">Δεκαεξαδική τιμή χρώματος</translation>
 <translation id="8260126382462817229">Δοκιμάστε να συνδεθείτε ξανά</translation>
 <translation id="8260864402787962391">Ποντίκι</translation>
 <translation id="8261378640211443080">Αυτή η επέκταση δεν αναφέρεται στο <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> και ενδέχεται να έχει προστεθεί εν αγνοία σας.</translation>
@@ -5110,6 +5132,7 @@
 <translation id="8662911384982557515">Αλλαγή της αρχικής σελίδας σε: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Δεν είναι δυνατός ο ορισμός ταπετσαρίας από το Chrome.</translation>
 <translation id="8663099077749055505">Να γίνεται πάντα αποκλεισμός των πολλών αυτόματων λήψεων στον κεντρικό υπολογιστή <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Εμφάνιση ειδοποιήσεων από αυτόν τον ιστότοπο;</translation>
 <translation id="8664389313780386848">&amp;Προβολή κώδικα σελίδας</translation>
 <translation id="8665180165765946056">Η δημιουργία αντιγράφων ασφαλείας ολοκληρώθηκε</translation>
 <translation id="866611985033792019">Να θεωρείται αξιόπιστο αυτό το πιστοποιητικό για τον προσδιορισμό χρηστών ηλεκτρονικού ταχυδρομείου</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">Επεξεργασία</translation>
 <translation id="9066773882585798925">Ακρόαση εκφώνησης κειμένου</translation>
 <translation id="9066782832737749352">Κείμενο σε ομιλία</translation>
+<translation id="9068849894565669697">Επιλογή χρώματος</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Συνδέθηκε ποντίκι USB</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">Αποστολή και λήψη μηνυμάτων από συσκευές Bluetooth.</translation>
 <translation id="9134304429738380103">Ναι, συμφωνώ.</translation>
 <translation id="9137013805542155359">Εμφάνιση πρωτοτύπου</translation>
+<translation id="9137157311132182254">Προτιμώμενη μηχανή αναζήτησης</translation>
 <translation id="9137916601698928395">Άνοιγμα συνδέσμου ως <ph name="USER" /></translation>
 <translation id="9138978632494473300">Προσθήκη συντομεύσεων στα παρακάτω σημεία:</translation>
 <translation id="9140067245205650184">Χρησιμοποιείτε μια επισήμανση λειτουργίας που δεν υποστηρίζεται: <ph name="BAD_FLAG" />. Θα παρουσιαστούν προβλήματα σταθερότητας και ασφάλειας.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">Δέντρο φακέλου σελιδοδεικτών</translation>
 <translation id="964286338916298286">Ο διαχειριστής τεχνολογιών πληροφορικής της συσκευής σας απενεργοποίησε τα Καλούδια Chrome για τη συσκευή σας.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Εφαρμογή}other{Εφαρμογές}}</translation>
+<translation id="965211523698323809">Στείλτε και λάβετε μηνύματα κειμένου μέσω της συσκευής <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Με αυτήν την ενέργεια, θα αποσυνδεθείτε από όλους τους Λογαριασμούς σας Google. Οι αλλαγές στους σελιδοδείκτες, το ιστορικό, τους κωδικούς πρόσβασης και σε άλλες ρυθμίσεις δεν θα συγχρονίζονται πλέον με το Λογαριασμό σας Google. Ωστόσο, τα υπάρχοντα δεδομένα σας θα παραμείνουν αποθηκευμένα στον Λογαριασμό σας Google και η διαχείρισή τους μπορεί να πραγματοποιείται στον <ph name="BEGIN_LINK" />Πίνακα ελέγχου Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Αποθηκευμένα δεδομένα</translation>
 <translation id="968000525894980488">Ενεργοποίηση των Υπηρεσιών Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index b737252..0d0fb7a 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Read or write operation was requested with an invalid offset on: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Before signing in, please enter as Guest to activate the network <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Always translate <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">We couldn't detect your SIM card</translation>
 <translation id="1108600514891325577">&amp;Stop</translation>
 <translation id="1110155001042129815">Wait</translation>
 <translation id="1112420131909513020">Background tab is using Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Sync is disabled by your administrator.</translation>
 <translation id="2127372758936585790">Low-power charger</translation>
 <translation id="212862741129535676">Frequency State Occupancy Percentage</translation>
+<translation id="212876957201860463">Preparing to set up your mobile device…</translation>
 <translation id="2129825002735785149">Update plug-in</translation>
 <translation id="2131077480075264">Unable to install "<ph name="APP_NAME" />" because it is not allowed by "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Hide PINs</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Data was encrypted with your Google password as of
           <ph name="TIME" />. This doesn't include payment methods and addresses from Google Pay.</translation>
 <translation id="2419706071571366386">For security, sign out when your computer isn't being used.</translation>
+<translation id="2422125132043002186">Linux restore cancelled</translation>
 <translation id="2423578206845792524">Sa&amp;ve image as...</translation>
 <translation id="2428510569851653187">Describe what you were doing when the tab crashed</translation>
 <translation id="2431027948063157455">Google Assistant was unable to load. Please check your network connection and retry.</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">Accessing audio and video input</translation>
 <translation id="3090819949319990166">Can't copy external crx file to <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" paired</translation>
+<translation id="3092699946856346803">Please insert your SIM and try again</translation>
 <translation id="3101709781009526431">Date and time</translation>
 <translation id="310671807099593501">Site is using Bluetooth</translation>
 <translation id="3115147772012638511">Waiting for cache...</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">Files and programs to be quarantined:</translation>
 <translation id="3282568296779691940">Sign in to Chrome</translation>
 <translation id="3285322247471302225">New &amp;Tab</translation>
+<translation id="3286654161521615710">Used by Chrome browser and <ph name="DEVICE_TYPE" /> launcher</translation>
 <translation id="3286737518123001369">View and delete the sign-in data stored on your security key</translation>
 <translation id="3288047731229977326">Extensions running in developer mode can harm your computer. If you're not a developer, you should disable these extensions running in developer mode to stay safe.</translation>
 <translation id="3289856944988573801">To check for updates, please use Ethernet or Wi-Fi.</translation>
@@ -1874,6 +1879,7 @@
 <translation id="3775432569830822555">SSL Server Certificate</translation>
 <translation id="3775705724665058594">Send to your devices</translation>
 <translation id="3776796446459804932">This extension violates the Chrome Web Store policy.</translation>
+<translation id="3777483481409781352">Could not activate mobile device</translation>
 <translation id="3777806571986431400">Extension Enabled</translation>
 <translation id="3778152852029592020">Download was cancelled.</translation>
 <translation id="3778208826288864398">The security key is locked because the wrong PIN was entered too many times. You’ll need to reset the security key.</translation>
@@ -2137,6 +2143,7 @@
 <translation id="4131410914670010031">Black and white</translation>
 <translation id="4136203100490971508">Night Light will turn off automatically at sunrise</translation>
 <translation id="4138267921960073861">Show usernames and photos on the sign-in screen</translation>
+<translation id="4142052906269098341">Unlock your <ph name="DEVICE_TYPE" /> with your phone. <ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Get better quality video and save battery life. Video will play only on your Cast-enabled screen.</translation>
 <translation id="4145922204387553806">Let the Assistant show you info related to what's on your screen</translation>
 <translation id="4146026355784316281">Always Open With System Viewer</translation>
@@ -2178,6 +2185,7 @@
 <translation id="42126664696688958">Export</translation>
 <translation id="42137655013211669">Access to this resource was forbidden by the server.</translation>
 <translation id="4215350869199060536">Oops, illegal symbols in name!</translation>
+<translation id="4220648711404560261">An error occurred during activation.</translation>
 <translation id="4225397296022057997">On all sites</translation>
 <translation id="4232375817808480934">Configure Kerberos</translation>
 <translation id="4235200303672858594">Entire screen</translation>
@@ -2326,6 +2334,7 @@
 <translation id="4470957202018033307">External storage preferences</translation>
 <translation id="447252321002412580">Help improve Chrome's features and performance</translation>
 <translation id="4474155171896946103">Bookmark all tabs...</translation>
+<translation id="4474461121892222090">It might take up to 15 minutes to complete mobile data activation.</translation>
 <translation id="4475552974751346499">Search downloads</translation>
 <translation id="4476590490540813026">Athlete</translation>
 <translation id="4477015793815781985">Include Ctrl, Alt or ⌘</translation>
@@ -2335,6 +2344,7 @@
 <translation id="4479877282574735775">Configuring the virtual machine. This may take a few minutes.</translation>
 <translation id="4480590691557335796">Chrome can find harmful software on your computer and remove it</translation>
 <translation id="4481530544597605423">Unpaired devices</translation>
+<translation id="4483579413421375386">Show for site</translation>
 <translation id="4495419450179050807">Don't show on this page</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> has crashed</translation>
 <translation id="450099669180426158">Exclamation mark icon</translation>
@@ -2438,6 +2448,7 @@
 <translation id="4647697156028544508">Please enter the PIN for "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Insufficient permissions</translation>
 <translation id="4648499713050786492">Please unlock your profile before adding a person.</translation>
+<translation id="4650591383426000695">Disconnect your phone from your <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Could not load online component with demo mode resources.</translation>
 <translation id="465878909996028221">Only http, https and file protocols are supported for browser redirects.</translation>
 <translation id="4659077111144409915">Primary account</translation>
@@ -2739,6 +2750,7 @@
 <translation id="5115309401544567011">Please plug your <ph name="DEVICE_TYPE" /> into a power source.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sa&amp;ve Audio As...</translation>
+<translation id="5117139026559873716">Disconnect your phone from your <ph name="DEVICE_TYPE" />. They will no longer connect automatically.</translation>
 <translation id="5117427536932535467">Themes &amp; Wallpapers</translation>
 <translation id="5117625797180141189">Successfully printed <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Monitor the behaviour of other extensions, including visited URLs</translation>
@@ -2968,6 +2980,7 @@
 <translation id="5463275305984126951">Index of <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu containing hidden bookmarks</translation>
 <translation id="5464632865477611176">Run this time</translation>
+<translation id="5464660706533281090">This setting can't be changed by a child user.</translation>
 <translation id="5466374726908360271">Paste and search for '<ph name="SEARCH_TERMS" />'</translation>
 <translation id="5471768120198416576">Hi there! I'm your text-to-speech voice.</translation>
 <translation id="5473333559083690127">Re-enter new PIN</translation>
@@ -3203,6 +3216,7 @@
 <translation id="5817918615728894473">Pair</translation>
 <translation id="5821565227679781414">Create Shortcut</translation>
 <translation id="5825412242012995131">On (recommended)</translation>
+<translation id="5826395379250998812">Connect your <ph name="DEVICE_TYPE" /> with your phone. <ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Common Name (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Printing...</translation>
@@ -3424,6 +3438,7 @@
 <translation id="6129691635767514872">The selected data has been removed from Chrome and synced devices. Your Google Account may have other forms of browsing history such as searches and activity from other Google services at <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Netscape Certificate Comment</translation>
 <translation id="6129953537138746214">Space</translation>
+<translation id="6130024555057767093">Notifications are currently blocked for all sites except for sites that you individually allow.</translation>
 <translation id="6136114942382973861">Close downloads bar</translation>
 <translation id="6137767437444130246">User certificate</translation>
 <translation id="6138680304137685902">X9.62 ECDSA Signature with SHA-384</translation>
@@ -3469,6 +3484,7 @@
 <translation id="620722923698527029">Always open these types of links in the associated app</translation>
 <translation id="6207282396926186323">Install <ph name="APP_NAME" /> (Linux App)</translation>
 <translation id="6207937957461833379">Country/Region</translation>
+<translation id="6208521041562685716">Mobile data being activated</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Sync isn't working</translation>
 <translation id="6212039847102026977">Show advanced network properties</translation>
 <translation id="6212168817037875041">Turn off display</translation>
@@ -3830,6 +3846,7 @@
 <translation id="677965093459947883">Very small</translation>
 <translation id="6780439250949340171">manage other settings</translation>
 <translation id="6781284683813954823">Doodle Link</translation>
+<translation id="6781978626986383437">Linux backup cancelled</translation>
 <translation id="6782111308708962316">Prevent third-party websites from saving and reading cookie data</translation>
 <translation id="6786747875388722282">Extensions</translation>
 <translation id="6787839852456839824">Keyboard shortcuts</translation>
@@ -4117,6 +4134,7 @@
 <translation id="7197632491113152433">We found <ph name="NUMBER_OF_APPS" /> apps from your account that can be used on this device.</translation>
 <translation id="7199158086730159431">Get H&amp;elp</translation>
 <translation id="7200083590239651963">Select configuration</translation>
+<translation id="7201042526153088083">Install apps and games from Google Play on your <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Learn more&lt;/a&gt;</translation>
 <translation id="720110658997053098">Permanently keep this device in kiosk mode</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' deleted</translation>
 <translation id="7201420661433230412">View files</translation>
@@ -4141,6 +4159,7 @@
 <translation id="7229570126336867161">Need EVDO</translation>
 <translation id="7230787553283372882">Customise your text size</translation>
 <translation id="7232750842195536390">Renaming failed</translation>
+<translation id="7234010996000898150">Cancelling Linux restore</translation>
 <translation id="7235716375204803342">Fetching activities...</translation>
 <translation id="7235737137505019098">Your security key does not have enough space for any more accounts.</translation>
 <translation id="7238585580608191973">SHA-256 Fingerprint</translation>
@@ -4276,6 +4295,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Open All in &amp;New Window}=1{Open in &amp;New Window}other{Open All (#) in &amp;New Window}}</translation>
 <translation id="7434509671034404296">Developer</translation>
 <translation id="7436921188514130341">Oh no! There was an error during renaming.</translation>
+<translation id="7437427339141948518">Notifications off</translation>
 <translation id="7438976808740265764">Flash Player will no longer be supported after December 2020.</translation>
 <translation id="7441736921018636843">To change this setting, <ph name="BEGIN_LINK" />reset sync<ph name="END_LINK" /> to remove your sync passphrase</translation>
 <translation id="7441830548568730290">Other users</translation>
@@ -4405,6 +4425,7 @@
 <translation id="7643932971554933646">Let site view files?</translation>
 <translation id="7644543211198159466">Colour and theme</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (owner)</translation>
+<translation id="7645681574855902035">Cancelling Linux backup</translation>
 <translation id="7647403192093989392">No recent activities</translation>
 <translation id="7648142322539582331">Connect to the Internet to set up Parental Controls</translation>
 <translation id="7648992873808071793">Store files on this device</translation>
@@ -4856,6 +4877,7 @@
 <translation id="8256319818471787266">Sparky</translation>
 <translation id="8257950718085972371">Continue blocking camera access</translation>
 <translation id="8259239505248583312">Let's go</translation>
+<translation id="8259556432390118667">Hex colour value</translation>
 <translation id="8260126382462817229">Try signing in again</translation>
 <translation id="8260864402787962391">Mouse</translation>
 <translation id="8261378640211443080">This extension is not listed in the <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> and may have been added without your knowledge.</translation>
@@ -5108,6 +5130,7 @@
 <translation id="8662911384982557515">Change your home page to: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome cannot set wallpaper.</translation>
 <translation id="8663099077749055505">Always block multiple automatic downloads on <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Show notifications for this site?</translation>
 <translation id="8664389313780386848">&amp;View page source</translation>
 <translation id="8665180165765946056">Backup complete</translation>
 <translation id="866611985033792019">Trust this certificate for identifying email users</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">Edit</translation>
 <translation id="9066773882585798925">Hear text read aloud</translation>
 <translation id="9066782832737749352">Text-to-Speech</translation>
+<translation id="9068849894565669697">Select colour</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB mouse connected</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">Send messages to and receive messages from Bluetooth devices.</translation>
 <translation id="9134304429738380103">Yes, I'm in.</translation>
 <translation id="9137013805542155359">Show original</translation>
+<translation id="9137157311132182254">Preferred search engine</translation>
 <translation id="9137916601698928395">Open link as <ph name="USER" /></translation>
 <translation id="9138978632494473300">Add shortcuts to the following places:</translation>
 <translation id="9140067245205650184">You are using an unsupported feature flag: <ph name="BAD_FLAG" />. Stability and security will suffer.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">Bookmark folder tree</translation>
 <translation id="964286338916298286">Your IT administrator has disabled Chrome Goodies for your device.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Application}other{Applications}}</translation>
+<translation id="965211523698323809">Send and receive text messages from your <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">This will sign you out of your Google Accounts. Changes to your bookmarks, history, passwords and other settings will no longer be synced to your Google Account. However, your existing data will remain stored in your Google Account and can be managed on <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Data stored</translation>
 <translation id="968000525894980488">Turn on Google Play services.</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 484520b..a7415d09 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Se solicitó una operación de lectura o escritura con un intervalo no válido en: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Antes de acceder, ingresa como Invitado para activar la red <ph name="NETWORK_ID" />.</translation>
 <translation id="1103523840287552314">Siempre traducir <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">No pudimos detectar tu tarjeta SIM</translation>
 <translation id="1108600514891325577">&amp;Interrumpir</translation>
 <translation id="1110155001042129815">Esperar</translation>
 <translation id="1112420131909513020">La pestaña en segundo plano está usando Bluetooth</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">Tu administrador inhabilitó la sincronización.</translation>
 <translation id="2127372758936585790">Carga lenta</translation>
 <translation id="212862741129535676">Porcentaje de ocupación de estado de frecuencia</translation>
+<translation id="212876957201860463">Preparando la configuración de tu dispositivo celular…</translation>
 <translation id="2129825002735785149">Actualizar complemento</translation>
 <translation id="2131077480075264">No se pudo instalar "<ph name="APP_NAME" />" porque no tiene permisos de "<ph name="IMPORT_NAME" />".</translation>
 <translation id="21354425047973905">Oculta los PIN</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187">Los datos se encriptaron con tu contraseña de Google a partir del
           <ph name="TIME" />. No se incluyen formas de pago ni direcciones de Google Pay.</translation>
 <translation id="2419706071571366386">Como medida de seguridad, sal de la cuenta cuando no estés usando la computadora.</translation>
+<translation id="2422125132043002186">Se canceló la restauración de Linux</translation>
 <translation id="2423578206845792524">Guar&amp;dar imagen como...</translation>
 <translation id="2428510569851653187">Describir lo que estabas haciendo cuando se bloqueó la pestaña</translation>
 <translation id="2431027948063157455">No se pudo cargar el Asistente de Google. Comprueba tu conexión de red y vuelve a intentarlo.</translation>
@@ -1210,7 +1213,7 @@
 <translation id="2773288106548584039">Compatibilidad con navegadores heredados</translation>
 <translation id="2773802008104670137">Este tipo de archivo puede dañar tu computadora.</translation>
 <translation id="2775104091073479743">Editar huellas digitales</translation>
-<translation id="2775188527796017992"><ph name="ORIGIN" /> podrá guardar tus cambios directamente en <ph name="FILENAME" />. El sitio podrá guardar cambios hasta que cierres esta pestaña.</translation>
+<translation id="2775188527796017992"><ph name="ORIGIN" /> podrá guardar tus cambios directamente en <ph name="FILENAME" />. El sitio puede guardar cambios hasta que cierres esta pestaña.</translation>
 <translation id="2776441542064982094">Parece que no hay dispositivos disponibles para registrar en la red. Si el dispositivo está activado y conectado a Internet, prueba a registrarlo siguiendo las instrucciones del manual.</translation>
 <translation id="2780009105947267877">Configurando Plugin VM…</translation>
 <translation id="2781692009645368755">Google Pay</translation>
@@ -1421,6 +1424,7 @@
 <translation id="3090193911106258841">Accediendo a la entrada de video y de audio</translation>
 <translation id="3090819949319990166">No se puede copiar el archivo crx externo a <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" sincronizado</translation>
+<translation id="3092699946856346803">Inserta tu tarjeta SIM y vuelve a intentarlo</translation>
 <translation id="3101709781009526431">Fecha y hora</translation>
 <translation id="310671807099593501">El sitio está usando la conexión Bluetooth</translation>
 <translation id="3115147772012638511">Esperando caché...</translation>
@@ -1528,6 +1532,7 @@
 <translation id="3281892622610078515">Archivos y programas que se guardarán en cuarentena:</translation>
 <translation id="3282568296779691940">Acceder a Chrome</translation>
 <translation id="3285322247471302225">Nueva pes&amp;taña en</translation>
+<translation id="3286654161521615710">Lo usa el navegador Chrome y el Selector de <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Visualiza y borra los datos de acceso almacenados en la llave de seguridad</translation>
 <translation id="3288047731229977326">Las extensiones que se ejecutan en modo de programador pueden dañar tu computadora. Si no eres programador, debes inhabilitar las extensiones que se ejecutan en modo de programador para mantenerte protegido.</translation>
 <translation id="3289856944988573801">Para comprobar si hay actualizaciones, utiliza una conexión Ethernet o Wi-Fi.</translation>
@@ -1827,7 +1832,7 @@
 <translation id="3712217561553024354">Permite que este dispositivo encuentre a otros dispositivos con tu cuenta de Google que tengan una conexión de datos móviles</translation>
 <translation id="3712897371525859903">Gu&amp;ardar página como...</translation>
 <translation id="371300529209814631">Atrás/adelante</translation>
-<translation id="3713047097299026954">Esta llave de seguridad no tiene datos de acceso</translation>
+<translation id="3713047097299026954">Esta llave de seguridad no tiene almacenados datos de acceso</translation>
 <translation id="3714195043138862580">Se estableció el estado de desaprovisionamiento para este dispositivo de demostración.</translation>
 <translation id="3714633008798122362">Calendario web</translation>
 <translation id="3719826155360621982">Página principal</translation>
@@ -1872,6 +1877,7 @@
 <translation id="3775432569830822555">Certificado del servidor SSL</translation>
 <translation id="3775705724665058594">Enviar a tus dispositivos</translation>
 <translation id="3776796446459804932">Esta extensión infringe la política de Chrome Web Store.</translation>
+<translation id="3777483481409781352">No se pudo activar el dispositivo celular</translation>
 <translation id="3777806571986431400">Extensión habilitada</translation>
 <translation id="3778152852029592020">Se canceló la descarga.</translation>
 <translation id="3778208826288864398">Se ingresó el PIN de forma incorrecta demasiadas veces; por lo tanto, se bloqueó la llave de seguridad. Deberás restablecerla.</translation>
@@ -2135,6 +2141,7 @@
 <translation id="4131410914670010031">Blanco y negro</translation>
 <translation id="4136203100490971508">La Luz nocturna se desactivará automáticamente al amanecer</translation>
 <translation id="4138267921960073861">Mostrar nombres de usuarios y fotos en la pantalla de inicio</translation>
+<translation id="4142052906269098341">Desbloquea tu <ph name="DEVICE_TYPE" /> con el teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Obtén videos de mejor calidad y extiende la duración de la batería. El video solo se reproducirá en tu pantalla compatible con Cast.</translation>
 <translation id="4145922204387553806">Permitir que el Asistente proporcione información relacionada con lo que aparece en tu pantalla</translation>
 <translation id="4146026355784316281">Abrir siempre con el visualizador del sistema</translation>
@@ -2176,6 +2183,7 @@
 <translation id="42126664696688958">Exportar</translation>
 <translation id="42137655013211669">El servidor prohibió el acceso a este recurso.</translation>
 <translation id="4215350869199060536">El nombre incluye símbolos no permitidos.</translation>
+<translation id="4220648711404560261">Se produjo un error durante la activación.</translation>
 <translation id="4225397296022057997">En todos los sitios</translation>
 <translation id="4232375817808480934">Configurar Kerberos</translation>
 <translation id="4235200303672858594">Toda la pantalla</translation>
@@ -2324,6 +2332,7 @@
 <translation id="4470957202018033307">Preferencias de almacenamiento externo</translation>
 <translation id="447252321002412580">Ayudar a mejorar las funciones y el rendimiento de Chrome</translation>
 <translation id="4474155171896946103">Agregar a favoritos todas las pestañas...</translation>
+<translation id="4474461121892222090">La activación de los datos móviles puede tardar hasta 15 minutos en completarse.</translation>
 <translation id="4475552974751346499">Buscar descargas</translation>
 <translation id="4476590490540813026">Atleta</translation>
 <translation id="4477015793815781985">Incluye Ctrl, Alt o ⌘</translation>
@@ -2333,6 +2342,7 @@
 <translation id="4479877282574735775">Se está configurando la máquina virtual. Es posible que este proceso demore unos minutos.</translation>
 <translation id="4480590691557335796">Chrome puede buscar software dañino en tu computadora y quitarlo</translation>
 <translation id="4481530544597605423">Dispositivos no sincronizados</translation>
+<translation id="4483579413421375386">Ver las notificaciones de este sitio</translation>
 <translation id="4495419450179050807">No mostrar en esta página</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> se bloqueó</translation>
 <translation id="450099669180426158">Ícono de signo de exclamación</translation>
@@ -2436,6 +2446,7 @@
 <translation id="4647697156028544508">Ingresa el PIN para "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Permisos insuficientes</translation>
 <translation id="4648499713050786492">Desbloquea tu perfil antes de agregar una persona.</translation>
+<translation id="4650591383426000695">Desconecta el teléfono de tu <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">No se pudo cargar el componente en línea con los recursos del modo de demostración.</translation>
 <translation id="465878909996028221">Solo se admiten los protocolos http, https y de archivo para las redirecciones a navegadores.</translation>
 <translation id="4659077111144409915">Cuenta principal</translation>
@@ -2726,7 +2737,7 @@
 <translation id="5097002363526479830">Error al conectar a la red "<ph name="NAME" />": <ph name="DETAILS" /></translation>
 <translation id="5101042277149003567">Abrir todos los favoritos</translation>
 <translation id="5101839224773798795">Hacer clic automáticamente cuando se detenga el cursor</translation>
-<translation id="5102007300153090427">Esta página puede guardar archivos.</translation>
+<translation id="5102007300153090427">Esta página puede guardar cambios en archivos.</translation>
 <translation id="5108967062857032718">Configuración - Quitar las apps de Android</translation>
 <translation id="5109044022078737958">Victoria</translation>
 <translation id="5111646998522066203">Salir del modo incógnito</translation>
@@ -2737,6 +2748,7 @@
 <translation id="5115309401544567011">Conecta el dispositivo <ph name="DEVICE_TYPE" /> a una fuente de alimentación.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Gu&amp;ardar audio como...</translation>
+<translation id="5117139026559873716">Desconecta el teléfono de tu <ph name="DEVICE_TYPE" />. Ya no se conectarán automáticamente.</translation>
 <translation id="5117427536932535467">Temas y fondos de pantalla</translation>
 <translation id="5117625797180141189">El documento <ph name="DOCUMENT_NAME" /> se imprimió correctamente</translation>
 <translation id="5117930984404104619">Supervisar el comportamiento de otras extensiones (incluidas las URL visitadas)</translation>
@@ -2900,7 +2912,7 @@
 <translation id="5370819323174483825">&amp;Volver a cargar</translation>
 <translation id="5372529912055771682">El modo de inscripción proporcionado no es compatible con esta versión del sistema operativo. Asegúrate de que estás ejecutando la versión más reciente y vuelve a intentarlo.</translation>
 <translation id="5374359983950678924">Cambiar imagen</translation>
-<translation id="5375793835576008230"><ph name="ORIGIN" /> podrá guardar tus cambios directamente en los archivos de la carpeta <ph name="FOLDERNAME" />. El sitio podrá guardar cambios hasta que cierres esta pestaña.</translation>
+<translation id="5375793835576008230"><ph name="ORIGIN" /> podrá guardar tus cambios directamente en los archivos de la carpeta <ph name="FOLDERNAME" />. El sitio puede guardar cambios hasta que cierres esta pestaña.</translation>
 <translation id="5376169624176189338">Haz clic para volver atrás o espera para ver el historial</translation>
 <translation id="5376931455988532197">Archivo demasiado grande</translation>
 <translation id="537813040452600081">Las páginas a las que accedas desde esta ventana no aparecerán en el historial del navegador ni dejarán rastros (por ejemplo, cookies) en la computadora una vez que salgas del navegador. Los archivos que descargues y los favoritos que crees no se guardarán.</translation>
@@ -2966,6 +2978,7 @@
 <translation id="5463275305984126951">Índice de <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">El menú contiene favoritos ocultos.</translation>
 <translation id="5464632865477611176">Ejecutar esta vez</translation>
+<translation id="5464660706533281090">Un niño no puede cambiar esta configuración.</translation>
 <translation id="5466374726908360271">&amp;Pegar y buscar "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Hola, soy la voz que leerá tus textos.</translation>
 <translation id="5473333559083690127">Vuelve a ingresar el PIN nuevo</translation>
@@ -3201,6 +3214,7 @@
 <translation id="5817918615728894473">Sincronizar</translation>
 <translation id="5821565227679781414">Crear acceso directo</translation>
 <translation id="5825412242012995131">Activado (recomendado)</translation>
+<translation id="5826395379250998812">Conecta tu <ph name="DEVICE_TYPE" /> con el teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nombre común (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Impresión...</translation>
@@ -3422,6 +3436,7 @@
 <translation id="6129691635767514872">Los datos seleccionados se quitaron de Chrome y los dispositivos sincronizados. Es posible que tu cuenta de Google tenga otros formularios del historial de navegación, como las búsquedas y la actividad de otros servicios de Google en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Comentario sobre el certificado Netscape</translation>
 <translation id="6129953537138746214">Google Space</translation>
+<translation id="6130024555057767093">En este momento, las notificaciones están bloqueadas para todos los sitios excepto para los que permites de forma individual.</translation>
 <translation id="6136114942382973861">Cerrar la barra de descargas</translation>
 <translation id="6137767437444130246">Certificado del usuario</translation>
 <translation id="6138680304137685902">Firma X9.62 ECDSA con SHA-384</translation>
@@ -3467,6 +3482,7 @@
 <translation id="620722923698527029">Siempre abrir este tipo de vínculos en la app asociada</translation>
 <translation id="6207282396926186323">Instalar <ph name="APP_NAME" /> (app de Linux)</translation>
 <translation id="6207937957461833379">País/Región</translation>
+<translation id="6208521041562685716">Se están activando los datos móviles</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: La sincronización no funciona</translation>
 <translation id="6212039847102026977">Mostrar las propiedades de red avanzadas</translation>
 <translation id="6212168817037875041">Apagar la pantalla</translation>
@@ -3828,6 +3844,7 @@
 <translation id="677965093459947883">Muy pequeño</translation>
 <translation id="6780439250949340171">administrar otros parámetros de configuración</translation>
 <translation id="6781284683813954823">Vínculo al doodle</translation>
+<translation id="6781978626986383437">Se canceló la copia de seguridad de Linux</translation>
 <translation id="6782111308708962316">Evitar que los sitios web de terceros guarden y lean datos de cookies</translation>
 <translation id="6786747875388722282">Extensiones</translation>
 <translation id="6787839852456839824">Combinaciones de teclas para acceso directo</translation>
@@ -4037,7 +4054,7 @@
 <translation id="7078120482318506217">Todas las redes</translation>
 <translation id="708060913198414444">Copiar dirección del audio</translation>
 <translation id="7081952801286122383">Estás en modo de navegación incógnito</translation>
-<translation id="7082772857801260480">Algunas funciones no son compatibles en este conector</translation>
+<translation id="7082772857801260480">Algunas funciones de este conector no son compatibles</translation>
 <translation id="708278670402572152">Desactiva la conexión para habilitar el análisis</translation>
 <translation id="7085389578340536476">¿Permitir que Chrome grabe audio?</translation>
 <translation id="7088434364990739311">Error al iniciar la verificación de actualizaciones (código de error <ph name="ERROR" />).</translation>
@@ -4115,6 +4132,7 @@
 <translation id="7197632491113152433">Encontramos <ph name="NUMBER_OF_APPS" /> apps de tu cuenta que pueden usarse en este dispositivo.</translation>
 <translation id="7199158086730159431">Obtener ayuda</translation>
 <translation id="7200083590239651963">Seleccionar configuración</translation>
+<translation id="7201042526153088083">Instala apps y juegos de Google Play en tu <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Más información&lt;/a&gt;</translation>
 <translation id="720110658997053098">Mantener este dispositivo en modo kiosco de forma permanente</translation>
 <translation id="7201118060536064622">Se borró "<ph name="DELETED_ITEM_NAME" />"</translation>
 <translation id="7201420661433230412">Ver archivos</translation>
@@ -4139,6 +4157,7 @@
 <translation id="7229570126336867161">Se necesita EVDO</translation>
 <translation id="7230787553283372882">Personaliza el tamaño del texto</translation>
 <translation id="7232750842195536390">No se pudo cambiar el nombre</translation>
+<translation id="7234010996000898150">Cancelando el restablecimiento de Linux</translation>
 <translation id="7235716375204803342">Recuperando actividades…</translation>
 <translation id="7235737137505019098">Tu llave de seguridad no tiene suficiente espacio disponible para crear más cuentas.</translation>
 <translation id="7238585580608191973">Huella digital SHA-256</translation>
@@ -4274,6 +4293,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Abrir todo en una ventana &amp;nueva}=1{Abrir en una ventana &amp;nueva}other{Abrir todo (#) en una ventana &amp;nueva}}</translation>
 <translation id="7434509671034404296">Opciones para desarrolladores</translation>
 <translation id="7436921188514130341">Se produjo un error al cambiar el nombre.</translation>
+<translation id="7437427339141948518">Se desactivaron las notificaciones</translation>
 <translation id="7438976808740265764">Flash Player dejará de ser compatible a partir de diciembre de 2020.</translation>
 <translation id="7441736921018636843">A fin de cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /> para quitar la frase de contraseña de sincronización</translation>
 <translation id="7441830548568730290">Otros usuarios</translation>
@@ -4403,6 +4423,7 @@
 <translation id="7643932971554933646">¿Quieres permitir que el sitio vea los archivos?</translation>
 <translation id="7644543211198159466">Color y tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (propietario/a)</translation>
+<translation id="7645681574855902035">Cancelando la copia de seguridad de Linux</translation>
 <translation id="7647403192093989392">No hay actividades recientes</translation>
 <translation id="7648142322539582331">Conéctate a Internet para configurar los Controles parentales</translation>
 <translation id="7648992873808071793">Almacenar archivos en el dispositivo</translation>
@@ -4854,6 +4875,7 @@
 <translation id="8256319818471787266">Bobby</translation>
 <translation id="8257950718085972371">Seguir bloqueando el acceso a la cámara</translation>
 <translation id="8259239505248583312">Comenzar</translation>
+<translation id="8259556432390118667">Valor de color hexadecimal</translation>
 <translation id="8260126382462817229">Intenta volver a acceder</translation>
 <translation id="8260864402787962391">Mouse</translation>
 <translation id="8261378640211443080">Esta extensión no figura en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y es posible que se haya agregado sin tu conocimiento.</translation>
@@ -5106,6 +5128,7 @@
 <translation id="8662911384982557515">Cambiar la página principal por <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome no puede establecer el fondo de pantalla.</translation>
 <translation id="8663099077749055505">Siempre bloquear varias descargas automáticas en <ph name="HOST" /></translation>
+<translation id="8663534996262079772">¿Quieres ver las notificaciones de este sitio?</translation>
 <translation id="8664389313780386848">&amp;Ver código fuente de página</translation>
 <translation id="8665180165765946056">Se completó la copia de seguridad</translation>
 <translation id="866611985033792019">Confía en este certificado para identificar usuarios de correo electrónico</translation>
@@ -5395,6 +5418,7 @@
 <translation id="9065203028668620118">Editar</translation>
 <translation id="9066773882585798925">Escucha el texto leído en voz alta</translation>
 <translation id="9066782832737749352">Texto a voz</translation>
+<translation id="9068849894565669697">Seleccionar color</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB conectado</translation>
@@ -5432,6 +5456,7 @@
 <translation id="9131487537093447019">Enviar y recibir mensajes desde dispositivos Bluetooth</translation>
 <translation id="9134304429738380103">Acepto.</translation>
 <translation id="9137013805542155359">Mostrar original</translation>
+<translation id="9137157311132182254">Motor de búsqueda preferido</translation>
 <translation id="9137916601698928395">Abrir vínculo como <ph name="USER" /></translation>
 <translation id="9138978632494473300">Agregar accesos directos a los siguientes lugares:</translation>
 <translation id="9140067245205650184">Estás usando una marca de función no compatible: <ph name="BAD_FLAG" />. Esto afectará la estabilidad y la seguridad.</translation>
@@ -5504,6 +5529,7 @@
 <translation id="962802172452141067">Árbol de carpetas de favoritos</translation>
 <translation id="964286338916298286">El administrador de TI inhabilitó los accesorios de Chrome para tu dispositivo.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplicación}other{Aplicaciones}}</translation>
+<translation id="965211523698323809">Usa tu <ph name="DEVICE_TYPE" /> para enviar o recibir mensajes de texto. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Con esta acción, saldrás de tus cuentas de Google. Los cambios en tus favoritos, historial, contraseñas y demás opciones de configuración ya no se sincronizarán con tu cuenta. Sin embargo, los datos existentes permanecerán almacenados allí y se podrán administrar en el <ph name="BEGIN_LINK" />Panel de control de Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Datos almacenados</translation>
 <translation id="968000525894980488">Activa los Servicios de Google Play.</translation>
@@ -5529,5 +5555,5 @@
 <translation id="995782501881226248">YouTube</translation>
 <translation id="996250603853062861">Estableciendo una conexión segura...</translation>
 <translation id="998747458861718449">Inspeccionar</translation>
-<translation id="999180493986838144"><ph name="ORIGIN" /> podrá ver todos los archivos que se encuentran en <ph name="FOLDERNAME" />. El sitio puede ver cualquier cambio que se produzca en la carpeta hasta que cierres esta pestaña.</translation>
+<translation id="999180493986838144"><ph name="ORIGIN" /> podrá ver todos los archivos que se encuentran en <ph name="FOLDERNAME" />. El sitio puede ver cualquier cambio que se realice en la carpeta hasta que cierres esta pestaña.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 65b5ffcf..10d22179e 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">La operación de lectura o escritura se ha solicitado con una variación no válida de "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Antes de iniciar sesión, entra como invitado para activar la red <ph name="NETWORK_ID" />.</translation>
 <translation id="1103523840287552314">Traducir siempre del <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">No hemos podido detectar tu tarjeta SIM</translation>
 <translation id="1108600514891325577">&amp;Detener</translation>
 <translation id="1110155001042129815">Esperar</translation>
 <translation id="1112420131909513020">La pestaña en segundo plano está usando el Bluetooth</translation>
@@ -178,7 +179,7 @@
 <translation id="1241753985463165747">Leer y modificar todos los datos del sitio web actual cuando se ejecute</translation>
 <translation id="1242633766021457174"><ph name="THIRD_PARTY_TOOL_NAME" /> quiere restablecer la configuración.</translation>
 <translation id="1243314992276662751">Subir</translation>
-<translation id="1244265436519979884">Actualmente hay una restauración de Linux en curso</translation>
+<translation id="1244265436519979884">Hay una restauración de Linux en curso</translation>
 <translation id="1244303850296295656">Error de extensión</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> se ha bloqueado porque está obsoleto</translation>
 <translation id="1251366534849411931">Falta una llave de apertura: <ph name="ERROR_LINE" /></translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">El administrador ha inhabilitado la sincronización.</translation>
 <translation id="2127372758936585790">Carga lenta</translation>
 <translation id="212862741129535676">Porcentaje de ocupación de estado de frecuencia</translation>
+<translation id="212876957201860463">Preparando la configuración de tu dispositivo móvil...</translation>
 <translation id="2129825002735785149">Actualizar complemento</translation>
 <translation id="2131077480075264">No se puede instalar la extensión "<ph name="APP_NAME" />" porque no tiene permiso de "<ph name="IMPORT_NAME" />".</translation>
 <translation id="21354425047973905">Ocultar PINs</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Se han cifrado los datos con tu contraseña de Google desde el
           <ph name="TIME" />. El cifrado no incluye los métodos de pago ni las direcciones de Google Pay.</translation>
 <translation id="2419706071571366386">Por motivos de seguridad, cierra la sesión cuando termines de utilizar tu ordenador.</translation>
+<translation id="2422125132043002186">Restauración de Linux cancelada</translation>
 <translation id="2423578206845792524">Guar&amp;dar imagen como...</translation>
 <translation id="2428510569851653187">Describe qué estabas haciendo cuando la pestaña se bloqueó</translation>
 <translation id="2431027948063157455">No se ha podido cargar el Asistente de Google. Comprueba tu conexión de red y vuelve a intentarlo.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Accediendo a la entrada de vídeo y audio</translation>
 <translation id="3090819949319990166">No se puede copiar el archivo crx externo en <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558"><ph name="DEVICE_NAME" /> vinculado</translation>
+<translation id="3092699946856346803">Inserta la tarjeta SIM y vuelve a intentarlo</translation>
 <translation id="3101709781009526431">Fecha y hora</translation>
 <translation id="310671807099593501">El sitio web está usando el Bluetooth</translation>
 <translation id="3115147772012638511">Esperando caché...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Archivos y programas que se pondrán en cuarentena:</translation>
 <translation id="3282568296779691940">Iniciar sesión en Chrome</translation>
 <translation id="3285322247471302225">Nueva &amp;pestaña</translation>
+<translation id="3286654161521615710">Se usa en el navegador Chrome y en el menú de aplicaciones de <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Consulta y elimina los datos de inicio de sesión almacenados en la llave de seguridad</translation>
 <translation id="3288047731229977326">Las extensiones que se ejecutan en modo de desarrollador pueden causar daños en el ordenador. Si no eres desarrollador, debes inhabilitar esas extensiones para mantener protegido tu ordenador.</translation>
 <translation id="3289856944988573801">Para comprobar si hay actualizaciones, utiliza una conexión Ethernet o Wi-Fi.</translation>
@@ -1873,6 +1878,7 @@
 <translation id="3775432569830822555">Certificado de servidor SSL</translation>
 <translation id="3775705724665058594">Enviar a tus dispositivos</translation>
 <translation id="3776796446459804932">Esta extensión infringe la política de Chrome Web Store.</translation>
+<translation id="3777483481409781352">No se ha podido activar el dispositivo móvil</translation>
 <translation id="3777806571986431400">Extensión activada</translation>
 <translation id="3778152852029592020">Se ha cancelado la descarga.</translation>
 <translation id="3778208826288864398">La llave de seguridad está bloqueada porque se ha introducido el PIN de forma incorrecta demasiadas veces. Tendrás que restablecer la llave de seguridad.</translation>
@@ -2135,6 +2141,7 @@
 <translation id="4131410914670010031">Blanco y negro</translation>
 <translation id="4136203100490971508">La luz nocturna se desactivará automáticamente al amanecer</translation>
 <translation id="4138267921960073861">Mostrar nombres de usuario y fotos en la pantalla de inicio de sesión</translation>
+<translation id="4142052906269098341">Desbloquea el <ph name="DEVICE_TYPE" /> con tu teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Disfruta de una mejor calidad de vídeo y ahorra batería. El vídeo se reproducirá solo en tu pantalla compatible con Google Cast.</translation>
 <translation id="4145922204387553806">Deja que el Asistente te muestre información relacionada con lo que aparece en la pantalla</translation>
 <translation id="4146026355784316281">Abrir siempre con el visor del sistema</translation>
@@ -2176,6 +2183,7 @@
 <translation id="42126664696688958">Exportar</translation>
 <translation id="42137655013211669">El servidor ha prohibido el acceso a este recurso.</translation>
 <translation id="4215350869199060536">¡Vaya! El nombre incluye símbolos que no están permitidos</translation>
+<translation id="4220648711404560261">Se ha producido un error durante la activación.</translation>
 <translation id="4225397296022057997">En todos los sitios web</translation>
 <translation id="4232375817808480934">Configurar Kerberos</translation>
 <translation id="4235200303672858594">Toda la pantalla</translation>
@@ -2324,6 +2332,7 @@
 <translation id="4470957202018033307">Preferencias de almacenamiento externo</translation>
 <translation id="447252321002412580">Ayudar a mejorar las funciones y el rendimiento de Chrome</translation>
 <translation id="4474155171896946103">Añadir todas las pestañas a marcadores...</translation>
+<translation id="4474461121892222090">La activación de los datos móviles puede tardar hasta 15 minutos en completarse.</translation>
 <translation id="4475552974751346499">Buscar descargas</translation>
 <translation id="4476590490540813026">Atleta</translation>
 <translation id="4477015793815781985">Incluye Ctrl, Alt o ⌘</translation>
@@ -2333,6 +2342,7 @@
 <translation id="4479877282574735775">Se está configurando la máquina virtual. Este proceso puede tardar unos minutos.</translation>
 <translation id="4480590691557335796">Chrome puede encontrar software dañino en tu ordenador y eliminarlo</translation>
 <translation id="4481530544597605423">Dispositivos desvinculados</translation>
+<translation id="4483579413421375386">Mostrar en este sitio</translation>
 <translation id="4495419450179050807">No mostrar en esta página</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ha fallado</translation>
 <translation id="450099669180426158">Icono de signo de exclamación</translation>
@@ -2436,6 +2446,7 @@
 <translation id="4647697156028544508">Introduce el PIN de "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Permisos insuficientes</translation>
 <translation id="4648499713050786492">Desbloquea tu perfil antes de añadir a un usuario.</translation>
+<translation id="4650591383426000695">Desconecta tu teléfono del <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">No se ha podido cargar el componente online con los recursos del modo de demostración.</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>
@@ -2737,6 +2748,7 @@
 <translation id="5115309401544567011">Enchufa tu <ph name="DEVICE_TYPE" /> a una fuente de alimentación.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">G&amp;uardar audio como...</translation>
+<translation id="5117139026559873716">Desconecta tu teléfono del <ph name="DEVICE_TYPE" />. Dejarán de conectarse automáticamente.</translation>
 <translation id="5117427536932535467">Temas y fondos de pantalla</translation>
 <translation id="5117625797180141189">Se ha impreso <ph name="DOCUMENT_NAME" /> correctamente</translation>
 <translation id="5117930984404104619">Controlar el comportamiento de otras extensiones, incluidas las URL visitadas</translation>
@@ -2966,6 +2978,7 @@
 <translation id="5463275305984126951">Índice de <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menú con marcadores ocultos</translation>
 <translation id="5464632865477611176">Ejecutar esta vez</translation>
+<translation id="5464660706533281090">Los usuarios menores de edad no pueden cambiar este ajuste.</translation>
 <translation id="5466374726908360271">Pe&amp;gar y buscar "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">¡Hola! Soy tu voz de la síntesis de voz.</translation>
 <translation id="5473333559083690127">Volver a introducir el nuevo PIN</translation>
@@ -3201,6 +3214,7 @@
 <translation id="5817918615728894473">Vincular</translation>
 <translation id="5821565227679781414">Crear acceso directo</translation>
 <translation id="5825412242012995131">Activado (opción recomendada)</translation>
+<translation id="5826395379250998812">Conecta tu <ph name="DEVICE_TYPE" /> al teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nombre común (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Imprimiendo...</translation>
@@ -3422,6 +3436,7 @@
 <translation id="6129691635767514872">Los datos seleccionados se han quitado de Chrome y de los dispositivos sincronizados. Es posible que tu cuenta de Google tenga otros tipos de historial de navegación, como búsquedas o actividad de otros servicios de Google, en la página <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Comentario del certificado de Netscape</translation>
 <translation id="6129953537138746214">Espacio</translation>
+<translation id="6130024555057767093">Actualmente están bloqueadas las notificaciones de todos los sitios web excepto las de los sitios que hayas permitido específicamente.</translation>
 <translation id="6136114942382973861">Cerrar barra de descargas</translation>
 <translation id="6137767437444130246">Certificado de usuario</translation>
 <translation id="6138680304137685902">Firma X9.62 ECDSA con SHA-384</translation>
@@ -3467,6 +3482,7 @@
 <translation id="620722923698527029">Abrir siempre este tipo de enlaces en la aplicación asociada</translation>
 <translation id="6207282396926186323">Instalar <ph name="APP_NAME" /> (aplicación de Linux)</translation>
 <translation id="6207937957461833379">País o región</translation>
+<translation id="6208521041562685716">Se están activando los datos móviles</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: la sincronización no funciona</translation>
 <translation id="6212039847102026977">Mostrar propiedades de red avanzadas</translation>
 <translation id="6212168817037875041">Apagar la pantalla</translation>
@@ -3828,6 +3844,7 @@
 <translation id="677965093459947883">Muy pequeño</translation>
 <translation id="6780439250949340171">administrar otras opciones.</translation>
 <translation id="6781284683813954823">Enlace del doodle</translation>
+<translation id="6781978626986383437">Copia de seguridad de Linux cancelada</translation>
 <translation id="6782111308708962316">Impedir que los sitios web de terceros guarden y consulten datos de cookies</translation>
 <translation id="6786747875388722282">Extensiones</translation>
 <translation id="6787839852456839824">Combinaciones de teclas</translation>
@@ -4115,6 +4132,7 @@
 <translation id="7197632491113152433">Hemos encontrado <ph name="NUMBER_OF_APPS" /> aplicaciones en tu cuenta que se pueden utilizar en este dispositivo.</translation>
 <translation id="7199158086730159431">Obtener a&amp;yuda</translation>
 <translation id="7200083590239651963">Seleccionar configuración</translation>
+<translation id="7201042526153088083">Instala aplicaciones y juegos de Google Play en tu <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Más información&lt;/a&gt;</translation>
 <translation id="720110658997053098">Mantener este dispositivo en modo kiosco de forma permanente</translation>
 <translation id="7201118060536064622">Se ha eliminado "<ph name="DELETED_ITEM_NAME" />"</translation>
 <translation id="7201420661433230412">Ver archivos</translation>
@@ -4139,6 +4157,7 @@
 <translation id="7229570126336867161">Es necesario el estándar EVDO.</translation>
 <translation id="7230787553283372882">Personalizar el tamaño del texto</translation>
 <translation id="7232750842195536390">No se ha podido cambiar el nombre</translation>
+<translation id="7234010996000898150">Cancelando restauración de Linux</translation>
 <translation id="7235716375204803342">Recuperando actividades...</translation>
 <translation id="7235737137505019098">Tu llave de seguridad no tiene suficiente espacio libre para más cuentas.</translation>
 <translation id="7238585580608191973">Huella digital SHA-256</translation>
@@ -4274,6 +4293,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Abrir todas en una &amp;nueva ventana}=1{Abrir en una &amp;nueva ventana}other{Abrir (#) en una &amp;nueva ventana}}</translation>
 <translation id="7434509671034404296">Opciones para desarrolladores</translation>
 <translation id="7436921188514130341">¡Vaya! No se ha podido cambiar el nombre.</translation>
+<translation id="7437427339141948518">Notificaciones desactivadas</translation>
 <translation id="7438976808740265764">Flash Player dejará de ser compatible a partir de diciembre del 2020.</translation>
 <translation id="7441736921018636843">Para cambiar este ajuste, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /> para eliminar tu frase de contraseña de sincronización</translation>
 <translation id="7441830548568730290">Otros usuarios</translation>
@@ -4403,6 +4423,7 @@
 <translation id="7643932971554933646">¿Quieres permitir que el sitio web vea los archivos?</translation>
 <translation id="7644543211198159466">Color y tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (propietario)</translation>
+<translation id="7645681574855902035">Cancelando la copia de seguridad de Linux</translation>
 <translation id="7647403192093989392">Ninguna actividad reciente</translation>
 <translation id="7648142322539582331">Conéctate a Internet para configurar el control parental</translation>
 <translation id="7648992873808071793">Almacenar archivos en este dispositivo</translation>
@@ -4854,6 +4875,7 @@
 <translation id="8256319818471787266">Perrito</translation>
 <translation id="8257950718085972371">Seguir bloqueando el acceso a la cámara</translation>
 <translation id="8259239505248583312">Adelante</translation>
+<translation id="8259556432390118667">Valor de color hexadecimal</translation>
 <translation id="8260126382462817229">Prueba a iniciar sesión de nuevo</translation>
 <translation id="8260864402787962391">Ratón</translation>
 <translation id="8261378640211443080">Esta extensión no aparece en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y se podría haber añadido sin tu conocimiento.</translation>
@@ -5106,6 +5128,7 @@
 <translation id="8662911384982557515">Cambiar página de inicio por: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome no puede establecer el fondo de pantalla.</translation>
 <translation id="8663099077749055505">Bloquear siempre varias descargas automáticas en <ph name="HOST" /></translation>
+<translation id="8663534996262079772">¿Quieres que se muestren las notificaciones de este sitio web?</translation>
 <translation id="8664389313780386848">&amp;Ver código fuente de la página</translation>
 <translation id="8665180165765946056">Copia de seguridad completada</translation>
 <translation id="866611985033792019">Confía en este certificado para identificar a usuarios de correo electrónico</translation>
@@ -5342,7 +5365,7 @@
 <translation id="8996526648899750015">Añadir cuenta...</translation>
 <translation id="899657321862108550">Tu Chrome, siempre contigo</translation>
 <translation id="899676909165543803">El sensor de huellas digitales está en la tecla de abajo a la derecha de tu teclado. Tócalo ligeramente con un dedo.</translation>
-<translation id="8999560016882908256">Error de sintaxis en una sección: <ph name="ERROR_LINE" /></translation>
+<translation id="8999560016882908256">Error de sintaxis de sección: <ph name="ERROR_LINE" /></translation>
 <translation id="9003647077635673607">Permitir en todos los sitios web</translation>
 <translation id="9003704114456258138">Frecuencia</translation>
 <translation id="9004952710076978168">Se ha recibido una notificación de una impresora desconocida.</translation>
@@ -5395,6 +5418,7 @@
 <translation id="9065203028668620118">Editar</translation>
 <translation id="9066773882585798925">Escuchar el texto leído en voz alta</translation>
 <translation id="9066782832737749352">Síntesis de voz</translation>
+<translation id="9068849894565669697">Seleccionar color</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Ratón USB conectado</translation>
@@ -5432,6 +5456,7 @@
 <translation id="9131487537093447019">Enviar y recibir mensajes desde dispositivos Bluetooth.</translation>
 <translation id="9134304429738380103">Sí, acepto.</translation>
 <translation id="9137013805542155359">Mostrar original</translation>
+<translation id="9137157311132182254">Buscador preferido</translation>
 <translation id="9137916601698928395">Abrir enlace como <ph name="USER" /></translation>
 <translation id="9138978632494473300">Añadir accesos directos a las siguientes ubicaciones:</translation>
 <translation id="9140067245205650184">Estás usando una marca de función no admitida (<ph name="BAD_FLAG" />), lo que afectará a la estabilidad y la seguridad.</translation>
@@ -5504,6 +5529,7 @@
 <translation id="962802172452141067">Árbol de la carpeta de marcadores</translation>
 <translation id="964286338916298286">Tu administrador de TI ha inhabilitado el contenido adicional de Chrome para tu dispositivo.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplicación}other{Aplicaciones}}</translation>
+<translation id="965211523698323809">Envía y recibe mensajes de texto con tu <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Se cerrará la sesión en tus cuentas de Google. Los cambios que hagas en tus marcadores, historial, contraseñas y otros ajustes no se sincronizarán con tu cuenta de Google. Sin embargo, tus datos actuales permanecerán almacenados en esa cuenta y se podrán administrar en el <ph name="BEGIN_LINK" />Panel de Control de Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Datos almacenados</translation>
 <translation id="968000525894980488">Activa los Servicios de Google Play.</translation>
@@ -5523,7 +5549,7 @@
 <translation id="988978206646512040">La frase de contraseña no puede estar vacía</translation>
 <translation id="992032470292211616">Las extensiones, las aplicaciones y los temas pueden dañar tu dispositivo. ¿Seguro que quieres continuar?</translation>
 <translation id="992592832486024913">Inhabilitar ChromeVox (mensajes de voz)</translation>
-<translation id="992778845837390402">Actualmente hay una copia de seguridad de Linux en curso</translation>
+<translation id="992778845837390402">Se está creando una copia de seguridad de Linux</translation>
 <translation id="993540765962421562">Instalación en curso</translation>
 <translation id="994289308992179865">&amp;Bucle</translation>
 <translation id="995782501881226248">YouTube</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 1e488351..b6267b98 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Lugemise või kirjutamise toimingut taotleti sobimatu nihkega seadmes „<ph name="DEVICE_NAME" />”.</translation>
 <translation id="1097658378307015415">Enne sisselogimist sisenege võrgu <ph name="NETWORK_ID" /> aktiveerimiseks külastajana</translation>
 <translation id="1103523840287552314">Tõlgi alati: <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Meil ei õnnestunud teie SIM-kaarti tuvastada</translation>
 <translation id="1108600514891325577">&amp;Peata</translation>
 <translation id="1110155001042129815">Oota</translation>
 <translation id="1112420131909513020">Taustal töötav rakendus kasutab Bluetoothi</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Administraator on sünkroonimise keelanud.</translation>
 <translation id="2127372758936585790">Väikese energiakuluga laadija</translation>
 <translation id="212862741129535676">Sageduse oleku protsent</translation>
+<translation id="212876957201860463">Mobiilseadme seadistamise ettevalmistamine …</translation>
 <translation id="2129825002735785149">Pistikprogrammi värskendamine</translation>
 <translation id="2131077480075264">Rakendust <ph name="APP_NAME" /> ei saa installida, sest <ph name="IMPORT_NAME" /> ei luba seda</translation>
 <translation id="21354425047973905">PIN-koodide peitmine</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Andmed krüpteeriti teie Google'i parooliga
           <ph name="TIME" />. See ei hõlma Google Pay makseviise ja aadresse.</translation>
 <translation id="2419706071571366386">Turvalisuse huvides logige välja, kui arvutit parajasti ei kasutata.</translation>
+<translation id="2422125132043002186">Linuxi taastamine tühistati</translation>
 <translation id="2423578206845792524">Sa&amp;lvesta pilt nimega...</translation>
 <translation id="2428510569851653187">Kirjeldage, mida te vahelehe kokkujooksmise ajal tegite</translation>
 <translation id="2431027948063157455">Google'i assistendi laadimine nurjus, kontrollige võrguühendust ja proovige uuesti.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Juurdepääs heli- ja videosisendile</translation>
 <translation id="3090819949319990166">Välist crx-faili ei saa faili <ph name="TEMP_CRX_FILE" /> kopeerida.</translation>
 <translation id="3090871774332213558">Seade „<ph name="DEVICE_NAME" />” on seotud</translation>
+<translation id="3092699946856346803">Sisestage SIM-kaart ja proovige uuesti</translation>
 <translation id="3101709781009526431">Kuupäev ja kellaaeg</translation>
 <translation id="310671807099593501">Sait kasutab Bluetoothi</translation>
 <translation id="3115147772012638511">Puhvri ootel...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Karantiini pandavad failid ja programmid:</translation>
 <translation id="3282568296779691940">Chrome'i sisselogimine</translation>
 <translation id="3285322247471302225">Uus &amp;vaheleht</translation>
+<translation id="3286654161521615710">Kasutab Chrome'i brauser ja seadme <ph name="DEVICE_TYPE" /> käivitaja</translation>
 <translation id="3286737518123001369">Vaadake ja kustutage turvavõtmele salvestatud sisselogimisandmeid</translation>
 <translation id="3288047731229977326">Arendaja režiimis töötavad laiendused võivad teie arvutit kahjustada. Kui te pole arendaja, peaksite turvalisuse säilitamiseks nende laienduste käitamise arendaja režiimis keelama.</translation>
 <translation id="3289856944988573801">Kasutage värskenduste otsimiseks Etherneti või WiFi-ühendust.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL-serveri sertifikaat</translation>
 <translation id="3775705724665058594">Saatmine teie seadmetesse</translation>
 <translation id="3776796446459804932">See laiendus rikub Chrome'i veebipoe eeskirju.</translation>
+<translation id="3777483481409781352">Mobiilseadet ei õnnestunud aktiveerida</translation>
 <translation id="3777806571986431400">Laiendus on lubatud</translation>
 <translation id="3778152852029592020">Allalaadimine tühistati.</translation>
 <translation id="3778208826288864398">Turvavõti lukustati, kuna vale PIN-kood sisestati liiga palju kordi. Peate turvavõtme lähtestama.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Mustvalge</translation>
 <translation id="4136203100490971508">Funktsioon Öövalgus lülitub automaatselt välja päikesetõusul</translation>
 <translation id="4138267921960073861">Kuva sisselogimisekraanil kasutajanimed ja fotod</translation>
+<translation id="4142052906269098341">Avage seade <ph name="DEVICE_TYPE" /> oma telefoniga. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Vaadake parema kvaliteediga videoid ja säästke aku tööiga. Videot esitatakse ainult Casti toega ekraanikuval.</translation>
 <translation id="4145922204387553806">Saate lubada assistendil esitada ekraanil kuvatavaga seotud teavet</translation>
 <translation id="4146026355784316281">Ava alati süsteemivaaturiga</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Eksportimine</translation>
 <translation id="42137655013211669">Server keelas juurdepääsu ressursile.</translation>
 <translation id="4215350869199060536">Kahjuks on nimes valed märgid.</translation>
+<translation id="4220648711404560261">Aktiveerimisel ilmnes viga.</translation>
 <translation id="4225397296022057997">Kõikidel saitidel</translation>
 <translation id="4232375817808480934">Kerberose seadistamine</translation>
 <translation id="4235200303672858594">Kogu ekraan</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Välise salvestusruumi eelistused</translation>
 <translation id="447252321002412580">Aidake täiustada Chrome'i funktsioone ja toimivust</translation>
 <translation id="4474155171896946103">Lisa kõik vahelehed järjehoidjatesse...</translation>
+<translation id="4474461121892222090">Mobiilse andmeside aktiveerimiseks võib kuluda kuni 15 minutit.</translation>
 <translation id="4475552974751346499">Otsi allalaadimisi</translation>
 <translation id="4476590490540813026">Sportlane</translation>
 <translation id="4477015793815781985">Kaasake Ctrl, Alt või ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Virtuaalseadme seadistamine. See võib võtta mitu minutit.</translation>
 <translation id="4480590691557335796">Chrome võib teie arvutist otsida kahjulikku tarkvara ja selle eemaldada</translation>
 <translation id="4481530544597605423">Sidumata seadmed</translation>
+<translation id="4483579413421375386">Kuva saidi puhul</translation>
 <translation id="4495419450179050807">Ära sellel lehel kuva</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> jooksis kokku</translation>
 <translation id="450099669180426158">Hüüumärgi ikoon</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Sisestage seadme „<ph name="DEVICE_NAME" />” PIN-kood:</translation>
 <translation id="4648491805942548247">Ebapiisav luba</translation>
 <translation id="4648499713050786492">Enne inimese lisamist avage oma profiil.</translation>
+<translation id="4650591383426000695">Katkestage telefoni ja seadme <ph name="DEVICE_TYPE" /> ühendus</translation>
 <translation id="4651484272688821107">Demorežiimi ressurssidega veebipõhist komponenti ei saanud laadida.</translation>
 <translation id="465878909996028221">Brauseri ümbersuunamiste puhul toetatakse ainult HTTP-d, HTTPS-i ja failiprotokolle.</translation>
 <translation id="4659077111144409915">Peamine konto</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Ühendage seade <ph name="DEVICE_TYPE" /> toiteallikaga.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sa&amp;lvesta heli nimega...</translation>
+<translation id="5117139026559873716">Katkestage telefoni ja seadme <ph name="DEVICE_TYPE" /> ühendus. Need ei loo edaspidi automaatselt ühendust.</translation>
 <translation id="5117427536932535467">Teemad ja taustapildid</translation>
 <translation id="5117625797180141189">Dokumendi <ph name="DOCUMENT_NAME" /> printimine õnnestus</translation>
 <translation id="5117930984404104619">Muude laienduste käitumise, sh külastatud URL-ide jälgimine</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> indeks</translation>
 <translation id="5463856536939868464">Menüü sisaldab peidetud järjehoidjaid</translation>
 <translation id="5464632865477611176">Käita see kord</translation>
+<translation id="5464660706533281090">Seda seadet ei saa lapskasutaja muuta.</translation>
 <translation id="5466374726908360271">Kleebi ja otsi üksust „<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Tere! Mina olen teie kõnesünteesi hääl.</translation>
 <translation id="5473333559083690127">Sisestage uus PIN-kood uuesti</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Seo</translation>
 <translation id="5821565227679781414">Loo otsetee</translation>
 <translation id="5825412242012995131">Sees (soovitatav)</translation>
+<translation id="5826395379250998812">Ühendage seade <ph name="DEVICE_TYPE" /> oma telefoniga. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Üldnimi (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Printimine ...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Valitud andmed eemaldati Chrome'ist ja sünkroonitud seadmetest. Aadressil <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> võib teie Google'i kontol olla muus vormis sirvimisajalugu, nt otsingud ja muudes Google'i teenustes toimunud tegevused.</translation>
 <translation id="6129938384427316298">Netscape'i sertifikaadi kommentaar</translation>
 <translation id="6129953537138746214">Tühik</translation>
+<translation id="6130024555057767093">Märguanded on praegu blokeeritud kõigi saitide puhul, v.a need, mille eraldi lubate.</translation>
 <translation id="6136114942382973861">Sule allalaadimiste riba</translation>
 <translation id="6137767437444130246">Kasutaja sertifikaat</translation>
 <translation id="6138680304137685902">X9.62 ECDSA allkiri SHA-384-ga</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Ava seda tüüpi lingid alati seotud rakenduses</translation>
 <translation id="6207282396926186323">Installi <ph name="APP_NAME" /> (Linuxi rakendus)</translation>
 <translation id="6207937957461833379">Riik/regioon</translation>
+<translation id="6208521041562685716">Mobiilne andmeside aktiveeritakse</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: sünkroonimine ei tööta</translation>
 <translation id="6212039847102026977">Kuva täpsemad võrguatribuudid</translation>
 <translation id="6212168817037875041">Lülita ekraan välja</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Väga väike</translation>
 <translation id="6780439250949340171">hallata muid seadeid</translation>
 <translation id="6781284683813954823">Doodle'i vigurlogo link</translation>
+<translation id="6781978626986383437">Linuxi varundamine tühistati</translation>
 <translation id="6782111308708962316">Keela kolmanda osapoole veebisaitidele küpsisefailide andmete salvestamine ja lugemine</translation>
 <translation id="6786747875388722282">Laiendused</translation>
 <translation id="6787839852456839824">Klaviatuuri otseteed</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Leidsime teie kontolt <ph name="NUMBER_OF_APPS" /> rakendust, mida saab selles seadmes kasutada.</translation>
 <translation id="7199158086730159431">A&amp;bi hankimine</translation>
 <translation id="7200083590239651963">Seadistuse valimine</translation>
+<translation id="7201042526153088083">Installige rakendused ja mängud Google Playst oma seadmesse <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Lisateave&lt;/a&gt;</translation>
 <translation id="720110658997053098">Jäta seade püsivalt kioskirežiimile.</translation>
 <translation id="7201118060536064622">Üksus „<ph name="DELETED_ITEM_NAME" />” kustutati</translation>
 <translation id="7201420661433230412">Kuva failid</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Vajalik EVDO</translation>
 <translation id="7230787553283372882">Teksti suuruse kohandamine</translation>
 <translation id="7232750842195536390">Ümbernimetamine ebaõnnestus</translation>
+<translation id="7234010996000898150">Linuxi taastamise tühistamine</translation>
 <translation id="7235716375204803342">Tegevuste toomine …</translation>
 <translation id="7235737137505019098">Teie turvavõtmel pole muude kontode jaoks piisavalt ruumi.</translation>
 <translation id="7238585580608191973">SHA-256 sõrmejälg</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Ava kõik &amp;uues aknas}=1{Ava &amp;uues aknas}other{Ava kõik (#) &amp;uues aknas}}</translation>
 <translation id="7434509671034404296">Arendaja</translation>
 <translation id="7436921188514130341">Ups, ebaõnn! Ümbernimetamisel ilmnes viga.</translation>
+<translation id="7437427339141948518">Märguanded on välja lülitatud</translation>
 <translation id="7438976808740265764">Flash Playerit pärast 2020. aasta detsembrit enam ei toetata.</translation>
 <translation id="7441736921018636843">Seade muutmiseks <ph name="BEGIN_LINK" />lähtestage sünkroonimine<ph name="END_LINK" />, et sünkroonimisparool eemaldada</translation>
 <translation id="7441830548568730290">Teised kasutajad</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Kas soovite lubada saidil faile vaadata?</translation>
 <translation id="7644543211198159466">Värv ja teema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (omanik)</translation>
+<translation id="7645681574855902035">Linuxi varundamise tühistamine</translation>
 <translation id="7647403192093989392">Hiljutised tegevused puuduvad</translation>
 <translation id="7648142322539582331">Vanemliku järelevalve seadistamiseks looge Interneti-ühendus</translation>
 <translation id="7648992873808071793">Salvestada failid sellesse seadmesse</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Muri</translation>
 <translation id="8257950718085972371">Blokeeri ka edaspidi juurdepääs kaamerale</translation>
 <translation id="8259239505248583312">Alustagem</translation>
+<translation id="8259556432390118667">Värvi kuueteistkümnendväärtus</translation>
 <translation id="8260126382462817229">Proovige uuesti sisse logida</translation>
 <translation id="8260864402787962391">Hiir</translation>
 <translation id="8261378640211443080">Seda laiendust ei leidu veebipoes <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ja te ei pruugi selle lisamisest teadlik olla.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Määrake avaleheks <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome ei saa taustapilti määrata.</translation>
 <translation id="8663099077749055505">Blokeeri alati mitu automaatset allalaadimist hosti <ph name="HOST" /> korral</translation>
+<translation id="8663534996262079772">Kas kuvada selle saidi puhul märguandeid?</translation>
 <translation id="8664389313780386848">Vaata lehekülje lähtekoodi</translation>
 <translation id="8665180165765946056">Varundamine jõudis lõpule</translation>
 <translation id="866611985033792019">Usalda seda sertifikaati meilikasutajate tuvastamiseks</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Muuda</translation>
 <translation id="9066773882585798925">Teksti ettelugemine</translation>
 <translation id="9066782832737749352">Kõnesüntees</translation>
+<translation id="9068849894565669697">Värvi valimine</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-hiir on ühendatud</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Bluetoothi seadmetele sõnumite saatmine ja nendelt sõnumite vastuvõtmine.</translation>
 <translation id="9134304429738380103">Jah, olen nõus.</translation>
 <translation id="9137013805542155359">Kuva originaal</translation>
+<translation id="9137157311132182254">Eelistatud otsingumootor</translation>
 <translation id="9137916601698928395">Ava link kasutajana <ph name="USER" /></translation>
 <translation id="9138978632494473300">Lisa otseteed järgmistele kohtadele:</translation>
 <translation id="9140067245205650184">Kasutate toeta funktsioonimärgistust: <ph name="BAD_FLAG" />. See vähendab stabiilsust ja turvalisust.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Järjehoidjate kausta puu</translation>
 <translation id="964286338916298286">IT-administraator on keelanud teie seadmes Chrome'i lisad.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Rakendus}other{Rakendused}}</translation>
+<translation id="965211523698323809">Saatke ja võtke seadmes <ph name="DEVICE_TYPE" /> vastu tekstsõnumeid. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">See logib teid teie Google'i kontodelt välja. Teie järjehoidjate, ajaloo, paroolide ja muude seadete muudatusi ei sünkroonita enam teie Google'i kontoga. Teie olemasolevad andmed jäävad aga teie Google'i kontole alles ja neid saab hallata <ph name="BEGIN_LINK" />Google'i juhtpaneelil<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Salvestatud andmete maht</translation>
 <translation id="968000525894980488">Lülitage sisse Google Play teenused.</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 1f8392a..e17935f 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">عملیات خواندن یا نوشتن با فاصله نامعتبری در این دستگاه درخواست شد: «<ph name="DEVICE_NAME" />».</translation>
 <translation id="1097658378307015415">قبل از ورود به سیستم، لطفاً جهت فعال کردن شبکه <ph name="NETWORK_ID" />، به‌عنوان مهمان وارد شوید</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> همیشه ترجمه شود</translation>
+<translation id="1104038495841596279">سیم‌کارت شناسایی نشد</translation>
 <translation id="1108600514891325577">&amp;توقف</translation>
 <translation id="1110155001042129815">انتظار</translation>
 <translation id="1112420131909513020">برگه پس‌زمینه درحال استفاده از بلوتوث است</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">همگام‌سازی توسط سرپرست شما غیرفعال شده است.</translation>
 <translation id="2127372758936585790">شارژر برق ضعیف</translation>
 <translation id="212862741129535676">درصد اشغال حالت فرکانس</translation>
+<translation id="212876957201860463">درحال آماده‌سازی برای راه‌اندازی دستگاه تلفن همراه...</translation>
 <translation id="2129825002735785149">به‌روزرسانی افزایه</translation>
 <translation id="2131077480075264">نصب «<ph name="APP_NAME" />» انجام نشد، زیرا «<ph name="IMPORT_NAME" />» آن را مجاز نکرده است</translation>
 <translation id="21354425047973905">پنهان کردن پین‌ها</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187">‏داده‌ها با گذرواژه Google شما از 
           <ph name="TIME" /> رمزگذاری شدند. این کار شامل روش‌های پرداخت و نشانی‌های موجود در Google Pay نمی‌شود.</translation>
 <translation id="2419706071571366386">برای حفظ امنیت، وقتی از رایانه استفاده نمی‌کنید از سیستم خارج شوید.</translation>
+<translation id="2422125132043002186">‏بازیابی Linux لغو شد</translation>
 <translation id="2423578206845792524">ذ&amp;خیره فایل تصویری به‌عنوان...</translation>
 <translation id="2428510569851653187">توضیح دهید وقتی برگه خراب شد مشغول انجام چه کاری بودید</translation>
 <translation id="2431027948063157455">‏«دستیار Google» بارگیری نشد. لطفاً اتصال شبکه را بررسی کرده و دوباره امتحان کنید.</translation>
@@ -1420,6 +1423,7 @@
 <translation id="3090193911106258841">در حال دسترسی به ورودی صوتی و ویدئویی</translation>
 <translation id="3090819949319990166">‏فایل خارجی crx در <ph name="TEMP_CRX_FILE" /> کپی نمی‌شود.</translation>
 <translation id="3090871774332213558">«<ph name="DEVICE_NAME" />» مرتبط شد</translation>
+<translation id="3092699946856346803">لطفاً سیم‌کارت را وارد کنید و دوباره امتحان کنید.</translation>
 <translation id="3101709781009526431">تاریخ و ساعت</translation>
 <translation id="310671807099593501">سایت درحال استفاده از بلوتوث شما است</translation>
 <translation id="3115147772012638511">منتظر حافظهٔ پنهان...</translation>
@@ -1527,6 +1531,7 @@
 <translation id="3281892622610078515">فایل‌ها و برنامه‌هایی که قرنطینه می‌شود:</translation>
 <translation id="3282568296779691940">‏ورود به Chrome</translation>
 <translation id="3285322247471302225">&amp;برگه جدید</translation>
+<translation id="3286654161521615710">‏مرورگر Chrome و راه‌انداز <ph name="DEVICE_TYPE" /> استفاده کرده‌اند</translation>
 <translation id="3286737518123001369">مشاهده و حذف داده‌های ورود به سیستم ذخیره‌شده در کلید امنیتی شما</translation>
 <translation id="3288047731229977326">افزونه‌هایی که در حالت برنامه‌نوبس اجرا می‌شوند می‌توانند به رایانه شما آسیب برسانند. اگر برنامه‌نویس نیستید، باید این برنامه‌های افزودنی را که در حالت برنامه‌نویس اجرا می‌شوند غیرفعال کنید تا ایمن بمانید.</translation>
 <translation id="3289856944988573801">‏برای بررسی موارد به‌روز لطفاً از کابل شبکه یا Wi-Fi استفاده کنید.</translation>
@@ -1871,6 +1876,7 @@
 <translation id="3775432569830822555">‏گواهی سرور SSL</translation>
 <translation id="3775705724665058594">ارسال به دستگاه‌هایتان</translation>
 <translation id="3776796446459804932">‏این برنامه افزودنی حریم خصوصی فروشگاه وب Chrome را نقض می‌کند.</translation>
+<translation id="3777483481409781352">دستگاه تلفن همراه فعال نشد</translation>
 <translation id="3777806571986431400">برنامه افزودنی فعال شد</translation>
 <translation id="3778152852029592020">بارگیری لغو شد.</translation>
 <translation id="3778208826288864398">چون چندین‌بار پین اشتباه وارد شده، کلید امنیتی قفل شده است. باید کلید امنیتی‌ را بازنشانی کنید.</translation>
@@ -2134,6 +2140,7 @@
 <translation id="4131410914670010031">سیاه و سفید</translation>
 <translation id="4136203100490971508">«نور شب» هنگام طلوع آفتاب به‌طور خودکار خاموش می‌شود</translation>
 <translation id="4138267921960073861">نمایش نام‌های کاربری و عکس‌ها در صفحه ورود به سیستم</translation>
+<translation id="4142052906269098341">قفل <ph name="DEVICE_TYPE" /> را با تلفنتان باز کنید. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">‏دریافت ویدیوی با کیفیت بهتر و افزایش ماندگاری شارژ باتری. ویدیو فقط در صفحه‌نمایش سازگار با Cast پخش خواهد شد.</translation>
 <translation id="4145922204387553806">به «دستیار» اجازه دهید اطلاعات مرتبط با آنچه روی صفحه است نشان دهد</translation>
 <translation id="4146026355784316281">همیشه با نظاره‌گر سیستم باز شود</translation>
@@ -2175,6 +2182,7 @@
 <translation id="42126664696688958">صادر کردن</translation>
 <translation id="42137655013211669">سرور، دسترسی به این منبع را ممنوع کرد.</translation>
 <translation id="4215350869199060536">اوووه، نماد‌های غیرقانونی در نام!</translation>
+<translation id="4220648711404560261">خطایی درحین فعال‌سازی روی داد.</translation>
 <translation id="4225397296022057997">در همه سایت‌ها</translation>
 <translation id="4232375817808480934">‏پیکربندی Kerberos</translation>
 <translation id="4235200303672858594">کل صفحه</translation>
@@ -2323,6 +2331,7 @@
 <translation id="4470957202018033307">تنظیمات برگزیده فضای ذخیره‌سازی خارجی</translation>
 <translation id="447252321002412580">‏کمک به بهبود ویژگی‌ها و عملکرد Chrome</translation>
 <translation id="4474155171896946103">نشانک‌گذاری همه برگه‌ها...</translation>
+<translation id="4474461121892222090">تکمیل فعال‌سازی داده تلفن همراه ممکن است حداکثر ۱۵ دقیقه طول بکشد.</translation>
 <translation id="4475552974751346499">جستجوی فایل‌های بارگیری‌شده</translation>
 <translation id="4476590490540813026">ورزشکار</translation>
 <translation id="4477015793815781985">‏باید شامل Ctrl، ‏Alt یا ⌘ باشد</translation>
@@ -2332,6 +2341,7 @@
 <translation id="4479877282574735775">درحال پیکربندی ماشین مجازی. ممکن است چند دقیقه طول بکشد.</translation>
 <translation id="4480590691557335796">‏Chrome می‌تواند نرم‌افزار مضر را در رایانه‌تان پیدا کرده و آن را حذف کند</translation>
 <translation id="4481530544597605423">دستگاه‌های لغو ارتباط‌شده</translation>
+<translation id="4483579413421375386">نمایش برای سایت</translation>
 <translation id="4495419450179050807">در این صفحه نشان داده نشود</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> خراب شده است</translation>
 <translation id="450099669180426158">نماد علامت تعجب</translation>
@@ -2435,6 +2445,7 @@
 <translation id="4647697156028544508">لطفاً پین را برای "<ph name="DEVICE_NAME" />" وارد کنید:</translation>
 <translation id="4648491805942548247">مجوزها کافی نیستند</translation>
 <translation id="4648499713050786492">لطفاً قبل از افزودن شخصی، قفل نمایه‌تان را باز کنید.</translation>
+<translation id="4650591383426000695">اتصال تلفنتان را از <ph name="DEVICE_TYPE" /> قطع کنید</translation>
 <translation id="4651484272688821107">بااستفاده از منابع حالت نمایشی، مؤلفه آنلاین بار نشد.</translation>
 <translation id="465878909996028221">‏فقط پروتکل‌های فایل، http و https برای ویژگی هدایت کردن مرورگر پشتیبانی می‌شوند.</translation>
 <translation id="4659077111144409915">حساب اصلی</translation>
@@ -2736,6 +2747,7 @@
 <translation id="5115309401544567011">لطفاً <ph name="DEVICE_TYPE" /> خود را به منبع نیرو وصل کنید.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">ذ&amp;خیره فایل صوتی به‌عنوان...</translation>
+<translation id="5117139026559873716">اتصال تلفن و <ph name="DEVICE_TYPE" /> قطع می‌شود و دیگر به‌طور خودکار به هم وصل نمی‌شوند.</translation>
 <translation id="5117427536932535467">طرح زمینه و کاغذ دیواری</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> با موفقیت چاپ شد</translation>
 <translation id="5117930984404104619">کنترل رفتار افزودنی‌های دیگر از جمله نشانی‌های وب بازدید شده</translation>
@@ -2965,6 +2977,7 @@
 <translation id="5463275305984126951">شاخص <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">منوی دارای نشانک‌های مخفی</translation>
 <translation id="5464632865477611176">این بار اجرا شود</translation>
+<translation id="5464660706533281090">کاربر کودک نمی‌تواند این تنظیم را تغییر دهد.</translation>
 <translation id="5466374726908360271">جای‌گذاری و جستجوی «<ph name="SEARCH_TERMS" />»</translation>
 <translation id="5471768120198416576">سلام! من صدای نوشتار به گفتار شما هستم.</translation>
 <translation id="5473333559083690127">پین جدید را دوباره وارد کنید</translation>
@@ -3200,6 +3213,7 @@
 <translation id="5817918615728894473">مرتبط‌سازی</translation>
 <translation id="5821565227679781414">ایجاد میان‌بر</translation>
 <translation id="5825412242012995131">روشن (توصیه می‌شود)</translation>
+<translation id="5826395379250998812"><ph name="DEVICE_TYPE" /> را به تلفنتان متصل کنید. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">‏نام مشترک (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">در حال چاپ...</translation>
@@ -3421,6 +3435,7 @@
 <translation id="6129691635767514872">‏داده‌های انتخاب‌شده از Chrome و دستگاه‌های همگام‌سازی‌شده برداشته شده‌اند. ممکن است حساب Google شما در <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> شکل‌های دیگری از سابقه مرور (مانند جستجوها و فعالیت از سایر سرویس‌های Google) داشته باشد.</translation>
 <translation id="6129938384427316298">‏نظر گواهی Netscape</translation>
 <translation id="6129953537138746214">فاصله</translation>
+<translation id="6130024555057767093">اعلان‌ها درحال‌حاضر برای همه سایت‌ها مسدود می‌شوند، به‌جز سایت‌هایی که به‌صورت جداگانه مجاز کرده‌اید.</translation>
 <translation id="6136114942382973861">بستن نوار بارگیری</translation>
 <translation id="6137767437444130246">گواهی کاربر</translation>
 <translation id="6138680304137685902">‏امضای X9.62 ECDSA با SHA-384</translation>
@@ -3466,6 +3481,7 @@
 <translation id="620722923698527029">همیشه این نوع پیوندها در برنامه مرتبط باز شوند</translation>
 <translation id="6207282396926186323">‏نصب<ph name="APP_NAME" /> (برنامه Linux)</translation>
 <translation id="6207937957461833379">کشور/منطقه</translation>
+<translation id="6208521041562685716">داده تلفن همراه درحال فعال شدن است</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: همگام‌سازی کار نمی‌کند</translation>
 <translation id="6212039847102026977">نمایش ویژگی‌های پیشرفته شبکه</translation>
 <translation id="6212168817037875041">خاموش کردن نمایشگر</translation>
@@ -3827,6 +3843,7 @@
 <translation id="677965093459947883">خیلی کوچک</translation>
 <translation id="6780439250949340171">مدیریت سایر تنظیمات</translation>
 <translation id="6781284683813954823">‏پیوند Doodle</translation>
+<translation id="6781978626986383437">‏پشتیبان‌گیری Linux لغو شد</translation>
 <translation id="6782111308708962316">جلوگیری از ذخیره کردن و خواندن داده‌های کوکی توسط وب‌سایت‌های شخص ثالث</translation>
 <translation id="6786747875388722282">افزونه‌ها</translation>
 <translation id="6787839852456839824">میان‌برهای صفحه‌کلید</translation>
@@ -4114,6 +4131,7 @@
 <translation id="7197632491113152433"><ph name="NUMBER_OF_APPS" /> برنامه از حسابتان پیدا کردیم که می‌توان در این دستگاه از آن‌ها استفاده کرد.</translation>
 <translation id="7199158086730159431">دریافت راهنمایی</translation>
 <translation id="7200083590239651963">انتخاب پیکربندی</translation>
+<translation id="7201042526153088083">‏برنامه‌ها و بازی‌ها را از Google Play در <ph name="DEVICE_TYPE" /> نصب کنید. &lt;a target="_blank" href="<ph name="URL" />"&gt;بیشتر بدانید&lt;/a&gt;</translation>
 <translation id="720110658997053098">این دستگاه همیشه در حالت کیوسک نگه داشته شود</translation>
 <translation id="7201118060536064622">«<ph name="DELETED_ITEM_NAME" />» حذف شد</translation>
 <translation id="7201420661433230412">مشاهده فایل‌ها</translation>
@@ -4138,6 +4156,7 @@
 <translation id="7229570126336867161">‏EVDO مورد نیاز است</translation>
 <translation id="7230787553283372882">سفارشی کردن اندازه نوشتار</translation>
 <translation id="7232750842195536390">تغییر نام انجام نشد</translation>
+<translation id="7234010996000898150">‏درحال لغو بازیابی Linux</translation>
 <translation id="7235716375204803342">درحال واکشی فعالیت‌ها…</translation>
 <translation id="7235737137505019098">کلید امنیتی‌تان فضای آزاد کافی برای حساب دیگری ندارد.</translation>
 <translation id="7238585580608191973">‏اثر انگشت SHA-256</translation>
@@ -4273,6 +4292,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{باز کردن همه در پنجره جدید}=1{باز کردن در پنجره جدید}one{باز کردن همه (#) در پنجره جدید}other{باز کردن همه (#) در پنجره جدید}}</translation>
 <translation id="7434509671034404296">برنامه‌نویس</translation>
 <translation id="7436921188514130341">اوه، نه! درحین تغییر نام خطایی رخ داد.</translation>
+<translation id="7437427339141948518">اعلان‌ها خاموش</translation>
 <translation id="7438976808740265764">‏Flash Player دیگر پس از دسامبر ۲۰۲۰ پشتیبانی نمی‌شود.</translation>
 <translation id="7441736921018636843">برای تغییر این تنظیم، <ph name="BEGIN_LINK" />همگام‌سازی را بازنشانی کنید<ph name="END_LINK" /> تا عبارت عبور همگام‌سازی حذف شود</translation>
 <translation id="7441830548568730290">کاربران دیگر</translation>
@@ -4402,6 +4422,7 @@
 <translation id="7643932971554933646">به سایت اجازه می‌دهید فایل‌ها را ببیند؟</translation>
 <translation id="7644543211198159466">رنگ و طرح زمینه</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (مالک)</translation>
+<translation id="7645681574855902035">‏درحال لغو پشتیبان‌گیری Linux</translation>
 <translation id="7647403192093989392">فعالیت اخیری وجود ندارد</translation>
 <translation id="7648142322539582331">برای راه‌اندازی «کنترل‌های والدین»، به اینترنت وصل شوید</translation>
 <translation id="7648992873808071793">ذخیره کردن فایل در این دستگاه</translation>
@@ -4853,6 +4874,7 @@
 <translation id="8256319818471787266">سرزنده</translation>
 <translation id="8257950718085972371">ادامه مسدود کردن دسترسی به دوربین</translation>
 <translation id="8259239505248583312">بیایید شروع کنیم</translation>
+<translation id="8259556432390118667">مقدار رنگ در مبنای شانزده</translation>
 <translation id="8260126382462817229">دوباره سعی کنید به سیستم وارد شوید</translation>
 <translation id="8260864402787962391">ماوس</translation>
 <translation id="8261378640211443080">این برنامه‌افزودنی در <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> فهرست نشده است و ممکن است بدون اطلاع شما اضافه شده باشد.</translation>
@@ -5105,6 +5127,7 @@
 <translation id="8662911384982557515">تغییر صفحه اصلی شما به: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">‏Chrome نمی‌تواند کاغذدیواری را تنظیم کند.</translation>
 <translation id="8663099077749055505">بارگیری خودکار چند مورد در <ph name="HOST" /> همیشه مسدود باشد</translation>
+<translation id="8663534996262079772">اعلان‌ها برای این سایت نشان داده شود؟</translation>
 <translation id="8664389313780386848">&amp;مشاهده منبع صفحه</translation>
 <translation id="8665180165765946056">پشتیبان‌گیری کامل شد</translation>
 <translation id="866611985033792019">برای شناسایی کاربران ایمیل، به این گواهی اطمینان شود</translation>
@@ -5394,6 +5417,7 @@
 <translation id="9065203028668620118">ویرایش</translation>
 <translation id="9066773882585798925">بلند خوانده شدن نوشتار</translation>
 <translation id="9066782832737749352">تبدیل نوشتار به‌ گفتار</translation>
+<translation id="9068849894565669697">انتخاب رنگ</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">بلوتوث</translation>
 <translation id="9074836595010225693">‏موشواره USB متصل شد</translation>
@@ -5431,6 +5455,7 @@
 <translation id="9131487537093447019">ارسال پیام‌ها به دستگاه‌های بلوتوث و دریافت پیام‌ها از آنها</translation>
 <translation id="9134304429738380103">بله، موافقم.</translation>
 <translation id="9137013805542155359">نمایش مورد اصلی</translation>
+<translation id="9137157311132182254">موتور جستجوی ترجیحی</translation>
 <translation id="9137916601698928395">بازکردن پیوند به‌عنوان <ph name="USER" /></translation>
 <translation id="9138978632494473300">افزودن میان‌بر به مکان‌های زیر:</translation>
 <translation id="9140067245205650184">از پرچم‌گذاری پیشتیبانی‌نشده ویژگی <ph name="BAD_FLAG" /> استفاده می‌کنید. ثبات و امنیت صدمه می‌بینند.</translation>
@@ -5503,6 +5528,7 @@
 <translation id="962802172452141067">درخت پوشه نشانک</translation>
 <translation id="964286338916298286">‏سرپرست IT شما Chrome Goodies را برای دستگاهتان غیرفعال کرده است.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{برنامه}one{برنامه}other{برنامه}}</translation>
+<translation id="965211523698323809">ارسال و دریافت پیامک از <ph name="DEVICE_TYPE" /> شما. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">‏با این کار از سیستم همه حساب‌های Google خارج می‌شوید. تغییرات ایجادشده در نشانک‌ها، سابقه، گذرواژه‌ها و سایر تنظیمات، دیگر با حساب Google شما همگام‌سازی نخواهد شد. بااین‌وجود، داده‌های کنونی در حساب Google شما باقی خواهد ماند و می‌توانید در <ph name="BEGIN_LINK" />داشبورد Google<ph name="END_LINK" /> آن‌ها را مدیریت کنید.</translation>
 <translation id="967624055006145463">داده ذخیره شد</translation>
 <translation id="968000525894980488">‏«خدمات Google Play» را روشن کنید.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 5ca6254..927f9d2 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Lukemis- tai kirjoittamistoimintoa pyydettiin virheellisellä poikkeamalla laitteella <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Aloita vierailijakäyttö ennen sisäänkirjautumista aktivoidaksesi verkon <ph name="NETWORK_ID" />.</translation>
 <translation id="1103523840287552314">Käännä <ph name="LANGUAGE" /> aina</translation>
+<translation id="1104038495841596279">SIM-korttia ei havaittu</translation>
 <translation id="1108600514891325577">Py&amp;säytä</translation>
 <translation id="1110155001042129815">Odota</translation>
 <translation id="1112420131909513020">Taustavälilehti käyttää Bluetoothia.</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Järjestelmänvalvoja on poistanut synkronoinnin käytöstä.</translation>
 <translation id="2127372758936585790">Pienitehoinen laturi</translation>
 <translation id="212862741129535676">Kellotaajuuden tilan käyttöprosentti</translation>
+<translation id="212876957201860463">Valmistellaan mobiililaitteen määritystä…</translation>
 <translation id="2129825002735785149">Päivitä laajennus</translation>
 <translation id="2131077480075264">Kohteen <ph name="APP_NAME" /> asentaminen ei onnistu, koska <ph name="IMPORT_NAME" /> ei salli sitä.</translation>
 <translation id="21354425047973905">Piilota PIN-koodit</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Data salattiin Google-salasanallasi
           <ph name="TIME" />. Tämä ei koske Google Payhin tallennettuja maksutapoja tai osoitteita.</translation>
 <translation id="2419706071571366386">Suosittelemme tietoturvasyistä, että kirjaudut ulos, kun tietokonettasi ei käytetä.</translation>
+<translation id="2422125132043002186">Linux-palautus peruutettu</translation>
 <translation id="2423578206845792524">T&amp;allenna kuva nimellä...</translation>
 <translation id="2428510569851653187">Kerro, mitä olit tekemässä juuri ennen kaatumista.</translation>
 <translation id="2431027948063157455">Google Assistantin lataaminen epäonnistui. Tarkista verkkoyhteys ja yritä uudelleen.</translation>
@@ -1425,6 +1428,7 @@
 <translation id="3090193911106258841">Ääni- ja videotuloa käytetään</translation>
 <translation id="3090819949319990166">Ulkoista crx-tiedostoa ei voi kopioida kohteeseen <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Laitepari muodostettu laitteen <ph name="DEVICE_NAME" /> kanssa</translation>
+<translation id="3092699946856346803">Aseta SIM-kortti laitteeseen ja yritä uudelleen</translation>
 <translation id="3101709781009526431">Aika ja päivämäärä</translation>
 <translation id="310671807099593501">Sivusto käyttää Bluetoothia</translation>
 <translation id="3115147772012638511">Odotetaan välimuistia...</translation>
@@ -1532,6 +1536,7 @@
 <translation id="3281892622610078515">Karanteeniin siirrettävät tiedostot ja ohjelmat:</translation>
 <translation id="3282568296779691940">Kirjaudu Chromeen</translation>
 <translation id="3285322247471302225">Uusi välileh&amp;ti</translation>
+<translation id="3286654161521615710">Käytössä Chrome-selaimessa ja käynnistysohjelmassa (<ph name="DEVICE_TYPE" />)</translation>
 <translation id="3286737518123001369">Katso ja poista suojausavaimeen tallennettua kirjautumisdataa</translation>
 <translation id="3288047731229977326">Kehittäjätilassa olevat laajennukset voivat vahingoittaa tietokonettasi. Jos et ole kehittäjä, poista kehittäjätilassa olevat laajennukset käytöstä varmuuden vuoksi.</translation>
 <translation id="3289856944988573801">Tarkista päivitykset Ethernetin tai Wi-Fin kautta.</translation>
@@ -1876,6 +1881,7 @@
 <translation id="3775432569830822555">SSL-palvelinvarmenne</translation>
 <translation id="3775705724665058594">Lähetä laitteillesi</translation>
 <translation id="3776796446459804932">Tämä laajennus loukkaa Chrome Web Storen käytäntöä.</translation>
+<translation id="3777483481409781352">Mobiililaitteen aktivointi epäonnistui</translation>
 <translation id="3777806571986431400">Laajennus otettu käyttöön</translation>
 <translation id="3778152852029592020">Lataus peruutettiin.</translation>
 <translation id="3778208826288864398">Suojausavain on lukittu, koska väärä PIN-koodi syötettiin liian monta kertaa. Suojausavain on nollattava.</translation>
@@ -2136,6 +2142,7 @@
 <translation id="4131410914670010031">Mustavalkoinen</translation>
 <translation id="4136203100490971508">Yövalo sammuu automaattisesti, kun aurinko nousee.</translation>
 <translation id="4138267921960073861">Näytä käyttäjänimet ja valokuvat kirjautumisruudulla</translation>
+<translation id="4142052906269098341">Avaa <ph name="DEVICE_TYPE" /> puhelimellasi. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Katso laadukkaampia videoita ja säästä akkua. Videoita toistetaan vain Cast-yhteensopivalla näytöllä.</translation>
 <translation id="4145922204387553806">Anna Assistantin näyttää tietoa näytön sisällöstä</translation>
 <translation id="4146026355784316281">Avaa aina järjestelmän katselusovelluksella</translation>
@@ -2177,6 +2184,7 @@
 <translation id="42126664696688958">Vie</translation>
 <translation id="42137655013211669">Palvelin kielsi tämän resurssin käytön.</translation>
 <translation id="4215350869199060536">Hups, nimessä on luvattomia merkkejä!</translation>
+<translation id="4220648711404560261">Aktivoinnin aikana tapahtui virhe.</translation>
 <translation id="4225397296022057997">Kaikilla sivustoilla</translation>
 <translation id="4232375817808480934">Määritä Kerberos</translation>
 <translation id="4235200303672858594">Koko ruutu</translation>
@@ -2325,6 +2333,7 @@
 <translation id="4470957202018033307">Ulkoisen tallennustilan asetukset</translation>
 <translation id="447252321002412580">Auta parantamaan Chromen ominaisuuksia ja suorituskykyä</translation>
 <translation id="4474155171896946103">Lisää kaikki välilehdet kirjanmerkkeihin...</translation>
+<translation id="4474461121892222090">Mobiilidatan aktivointi kestää enintään 15 minuuttia.</translation>
 <translation id="4475552974751346499">Haku latauksista</translation>
 <translation id="4476590490540813026">Urheilija</translation>
 <translation id="4477015793815781985">Sisällytä Ctrl, Alt tai ⌘</translation>
@@ -2334,6 +2343,7 @@
 <translation id="4479877282574735775">Määritetään virtuaalikonetta. Tämä voi kestää muutaman minuutin.</translation>
 <translation id="4480590691557335796">Chrome etsii haitallisia ohjelmia tietokoneestasi ja voi poistaa ne</translation>
 <translation id="4481530544597605423">Laitteet ilman paria</translation>
+<translation id="4483579413421375386">Näytä sivustolla</translation>
 <translation id="4495419450179050807">Älä näytä tällä sivulla</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> on kaatunut.</translation>
 <translation id="450099669180426158">Huutomerkkikuvake</translation>
@@ -2437,6 +2447,7 @@
 <translation id="4647697156028544508">Anna laitteen <ph name="DEVICE_NAME" /> PIN-koodi:</translation>
 <translation id="4648491805942548247">Käyttöluvat eivät riitä</translation>
 <translation id="4648499713050786492">Avaa profiilisi lukitus ennen henkilön lisäämistä.</translation>
+<translation id="4650591383426000695">Irrota <ph name="DEVICE_TYPE" /> puhelimesta</translation>
 <translation id="4651484272688821107">Verkkoelementtiä ei voitu ladata esittelytilan resursseilla.</translation>
 <translation id="465878909996028221">Selainten uudelleenohjaukset tukevat vain http-, https- ja tiedostoprotokollia.</translation>
 <translation id="4659077111144409915">Ensisijainen tili</translation>
@@ -2738,6 +2749,7 @@
 <translation id="5115309401544567011">Liitä <ph name="DEVICE_TYPE" /> virtalähteeseen.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">T&amp;allenna audiotiedosto nimellä...</translation>
+<translation id="5117139026559873716">Irrota <ph name="DEVICE_TYPE" /> puhelimesta. Niitä ei enää yhdistetä automaattisesti.</translation>
 <translation id="5117427536932535467">Teemat ja taustakuvat</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> tulostettu</translation>
 <translation id="5117930984404104619">Seuraa muiden laajennusten toimia, mukaan lukien käydyt URL-osoitteet</translation>
@@ -2967,6 +2979,7 @@
 <translation id="5463275305984126951">Sijainnin <ph name="LOCATION" /> hakemisto</translation>
 <translation id="5463856536939868464">Piilotetut kirjanmerkit sisältävä valikko</translation>
 <translation id="5464632865477611176">Suorita tällä kertaa</translation>
+<translation id="5464660706533281090">Lapsikäyttäjä ei voi muuttaa tätä asetusta.</translation>
 <translation id="5466374726908360271">Liitä ja tee haku <ph name="SEARCH_TERMS" /></translation>
 <translation id="5471768120198416576">Hei! Olen tekstistä puheeksi ‑äänesi.</translation>
 <translation id="5473333559083690127">Anna uusi PIN-koodi uudelleen</translation>
@@ -3202,6 +3215,7 @@
 <translation id="5817918615728894473">Muodosta laitepari</translation>
 <translation id="5821565227679781414">Luo pikakuvake</translation>
 <translation id="5825412242012995131">Käytössä (suositus)</translation>
+<translation id="5826395379250998812">Yhdistä <ph name="DEVICE_TYPE" /> puhelimeesi. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Yleinen nimi (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Tulostetaan...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">Valitut tiedot on poistettu Chromesta ja synkronoiduilta laitteilta. Google-tililläsi voi olla muita selaushistoriatietoja, esimerkiksi hakuja ja toimintaa muista Google-palveluista, osoitteessa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Netscape-varmenteen kommentti</translation>
 <translation id="6129953537138746214">Välilyönti</translation>
+<translation id="6130024555057767093">Ilmoitukset on tällä hetkellä estetty kaikilla sivustoilla paitsi niillä, joilla olet sallinut ilmoitukset yksitellen.</translation>
 <translation id="6136114942382973861">Sulje latauspalkki</translation>
 <translation id="6137767437444130246">Käyttäjävarmenne</translation>
 <translation id="6138680304137685902">X9.62 ECDSA ‑allekirjoitus, jossa on SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Avaa tällaiset linkit aina tässä sovelluksessa</translation>
 <translation id="6207282396926186323">Asenna <ph name="APP_NAME" /> (Linux-sovellus)</translation>
 <translation id="6207937957461833379">Maa/alue</translation>
+<translation id="6208521041562685716">Mobiilidataa aktivoidaan</translation>
 <translation id="6211495400987308581">Synkronointi ei toimi: <ph name="PROFILE_NAME" /></translation>
 <translation id="6212039847102026977">Näytä verkkoyhteyksien lisäasetukset</translation>
 <translation id="6212168817037875041">Sulje näyttö</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Hyvin pieni</translation>
 <translation id="6780439250949340171">hallinnoi muita asetuksia</translation>
 <translation id="6781284683813954823">Doodle-linkki</translation>
+<translation id="6781978626986383437">Linux-varmuuskopiointi peruutettu</translation>
 <translation id="6782111308708962316">Estä kolmannen osapuolen verkkosivustoja tallentamasta ja lukemasta evästetietoja</translation>
 <translation id="6786747875388722282">Laajennukset</translation>
 <translation id="6787839852456839824">Pikanäppäimet</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Löysimme tililtäsi <ph name="NUMBER_OF_APPS" /> sovellusta, joita voidaan käyttää tällä laitteella.</translation>
 <translation id="7199158086730159431">Pyydä ohj&amp;eita</translation>
 <translation id="7200083590239651963">Valitse konfiguraatio</translation>
+<translation id="7201042526153088083">Asenna sovelluksia ja pelejä Google Playsta (<ph name="DEVICE_TYPE" />). &lt;a target="_blank" href="<ph name="URL" />"&gt;Lue lisää&lt;/a&gt;</translation>
 <translation id="720110658997053098">Pidä tämä laite pysyvästi kioskitilassa</translation>
 <translation id="7201118060536064622"><ph name="DELETED_ITEM_NAME" /> poistettu</translation>
 <translation id="7201420661433230412">Näytä tiedostot</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">EVDO tarvitaan</translation>
 <translation id="7230787553283372882">Muokkaa tekstin kokoa</translation>
 <translation id="7232750842195536390">Uudelleennimeäminen epäonnistui</translation>
+<translation id="7234010996000898150">Linux-palautusta peruutetaan</translation>
 <translation id="7235716375204803342">Haetaan tapahtumia…</translation>
 <translation id="7235737137505019098">Suojausavaimessasi ei ole tarpeeksi vapaata tilaa uusille tileille.</translation>
 <translation id="7238585580608191973">SHA-256-tunnistetiedosto</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Avaa kaikki uudessa ikkunassa}=1{Avaa kaikki uudessa ikkunassa}other{Avaa kaikki # uudessa ikkunassa}}</translation>
 <translation id="7434509671034404296">Kehittäjille</translation>
 <translation id="7436921188514130341">Harmin paikka! Uudelleennimeämisen aikana tapahtui virhe.</translation>
+<translation id="7437427339141948518">Ilmoitukset pois</translation>
 <translation id="7438976808740265764">Flash Playeria ei enää tueta joulukuun 2020 jälkeen.</translation>
 <translation id="7441736921018636843">Jos haluat muuttaa tätä, <ph name="BEGIN_LINK" />nollaa synkronointi<ph name="END_LINK" /> poistaaksesi synkronoinnin tunnuslauseen</translation>
 <translation id="7441830548568730290">Muut käyttäjät</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Saako sivusto nähdä tiedostoja?</translation>
 <translation id="7644543211198159466">Väri ja teema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (omistaja)</translation>
+<translation id="7645681574855902035">Peruutetaan Linux-varmuuskopiota</translation>
 <translation id="7647403192093989392">Ei viimeaikaisia tapahtumia</translation>
 <translation id="7648142322539582331">Muodosta yhteys internetiin, niin voit määrittää lapsilukon</translation>
 <translation id="7648992873808071793">Tallentaa tiedostoja tälle laitteelle.</translation>
@@ -4856,6 +4877,7 @@
 <translation id="8256319818471787266">Musti</translation>
 <translation id="8257950718085972371">Estä edelleen kameran käyttö</translation>
 <translation id="8259239505248583312">Aloita</translation>
+<translation id="8259556432390118667">Värin heksadesimaaliarvo</translation>
 <translation id="8260126382462817229">Yritä kirjautua uudelleen sisään.</translation>
 <translation id="8260864402787962391">Hiiri</translation>
 <translation id="8261378640211443080">Tätä laajennusta ei löydy kohteesta <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, ja se on voitu lisätä ilman lupaasi.</translation>
@@ -5108,6 +5130,7 @@
 <translation id="8662911384982557515">Vaihda aloitussivuksi <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome ei voi asettaa tätä taustakuvaa.</translation>
 <translation id="8663099077749055505">Estä aina sivustoa <ph name="HOST" /> lataamasta useita tiedostoja automaattisesti</translation>
+<translation id="8663534996262079772">Näytetäänkö tällä sivustolla ilmoituksia?</translation>
 <translation id="8664389313780386848">&amp;Näytä sivun lähdekoodi</translation>
 <translation id="8665180165765946056">Varmuuskopiointi valmis</translation>
 <translation id="866611985033792019">Luota tähän varmenteeseen sähköpostin käyttäjiä tunnistettaessa.</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">Muokkaa</translation>
 <translation id="9066773882585798925">Tekstin lukeminen ääneen</translation>
 <translation id="9066782832737749352">Tekstistä puheeksi</translation>
+<translation id="9068849894565669697">Valitse väri</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-hiiri yhdistetty</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">Lähettää viestejä Bluetooth-laitteisiin ja vastaanottaa viestejä Bluetooth-laitteilta.</translation>
 <translation id="9134304429738380103">Kyllä</translation>
 <translation id="9137013805542155359">Näytä alkuperäinen</translation>
+<translation id="9137157311132182254">Ensisijainen hakukone</translation>
 <translation id="9137916601698928395">Avaa linkki käyttäjänä <ph name="USER" /></translation>
 <translation id="9138978632494473300">Lisää pikanäppäimiä seuraaviin kohtiin:</translation>
 <translation id="9140067245205650184">Käytät ominaisuusmerkintää, jota ei tueta: <ph name="BAD_FLAG" />. Vakaus ja suojaus kärsivät.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">Kirjanmerkkien kansiopuu</translation>
 <translation id="964286338916298286">IT-järjestelmänvalvojasi on poistanut Chrome Goodies ‑tarjoukset käytöstä laitteellasi.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Sovellus}other{Sovellukset}}</translation>
+<translation id="965211523698323809"><ph name="DEVICE_TYPE" /> voi lähettää ja vastaanottaa tekstiviestejä. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Kirjanmerkkeihin, historiaan, salasanoihin ja muihin asetuksiin tehtyjä muutoksia ei enää synkronoida Google-tilillesi. Nykyiset tietosi pysyvät kuitenkin Google-tilillä ja niitä voidaan ylläpitää <ph name="BEGIN_LINK" />Google Hallintapaneelissa<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Tallennettu data</translation>
 <translation id="968000525894980488">Ota Google Play Palvelut käyttöön.</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index fabe4c1..7798a5c 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -181,7 +181,7 @@
 <translation id="1244265436519979884">Kasalukuyang isinasagawa ang pag-restore ng Linux</translation>
 <translation id="1244303850296295656">Error sa extension</translation>
 <translation id="1249643471736608405">Na-block ang <ph name="PLUGIN_NAME" /> dahil hindi na ito ginagamit</translation>
-<translation id="1251366534849411931">Inaasahang nakabukas na curly brace: <ph name="ERROR_LINE" /></translation>
+<translation id="1251366534849411931">Inaasahang opening curly brace: <ph name="ERROR_LINE" /></translation>
 <translation id="1252987234827889034">Nagkaroon ng error sa profile</translation>
 <translation id="1254593899333212300">Direktang koneksyon ng Internet</translation>
 <translation id="1260240842868558614">Ipakita:</translation>
@@ -492,7 +492,7 @@
 <translation id="1709217939274742847">Pumili ng ticket para magamit sa pag-authenticate. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
 <translation id="1712349894969001173">Kunin ang password na ito sa iyong iPhone</translation>
 <translation id="1712552549805331520">Gusto ng <ph name="URL" /> na permanenteng mag-store ng data sa iyong lokal na computer</translation>
-<translation id="1716976638776486616">Baguhin ang larawan ng account</translation>
+<translation id="1716976638776486616">Palitan ang larawan ng account</translation>
 <translation id="1717218214683051432">Mga sensor ng paggalaw</translation>
 <translation id="1718835860248848330">Huling oras</translation>
 <translation id="1719312230114180055">Tandaan: Maaaring hindi gaanong ligtas ang iyong fingerprint kaysa sa isang mahirap hulaang password o PIN.</translation>
@@ -1333,7 +1333,7 @@
 <translation id="2948300991547862301">Pumunta sa <ph name="PAGE_TITLE" /></translation>
 <translation id="29488703364906173">Isang mabilis, simple at secure na web browser na ginawa para sa modernong web.</translation>
 <translation id="2949289451367477459">Gamitin ang lokasyon. Payagan ang mga app at serbisyong may pahintulot sa lokasyon na gamitin ang lokasyon ng device na ito. Ang Google ay maaaring pana-panahong mangolekta ng data ng lokasyon at gamitin ang data na ito nang anonymous para maging mas tumpak ang lokasyon at ang mga serbisyong batay sa lokasyon. <ph name="BEGIN_LINK1" />Matuto Pa<ph name="END_LINK1" /></translation>
-<translation id="2956070239128776395">Seksyong isinama sa grupo: <ph name="ERROR_LINE" /></translation>
+<translation id="2956070239128776395">Seksyong naka-nest sa grupo: <ph name="ERROR_LINE" /></translation>
 <translation id="2958721676848865875">Babala sa extension ng pack</translation>
 <translation id="2959842337402130152">Hindi ma-restore dahil kulang ang storage space. Magbakante ng <ph name="SPACE_REQUIRED" /> sa device at subukan ulit.</translation>
 <translation id="296026337010986570">Tapos na! Naalis na ang mapanganib na software. Para i-on muli ang mga extension, bisitahin ang &lt;a href="chrome://extensions"&gt;Mga Extension&lt;/a&gt;.</translation>
@@ -2796,7 +2796,7 @@
 <translation id="5213891612754844763">Ipakita ang mga setting ng proxy</translation>
 <translation id="5215502535566372932">Pumili ng bansa</translation>
 <translation id="521582610500777512">Na-discard ang larawan</translation>
-<translation id="5217313969810784338">Para i-charge, gumamit ng baterya mula sa gumawa ng iyong Chromebook.</translation>
+<translation id="5217313969810784338">Para mag-charge, gumamit ng baterya mula sa gumawa ng iyong Chromebook.</translation>
 <translation id="5222676887888702881">Mag-sign out</translation>
 <translation id="52232769093306234">Hindi nagtagumpay ang pag-pack.</translation>
 <translation id="5225324770654022472">Ipakita ang shortcut ng mga app</translation>
@@ -3219,7 +3219,7 @@
 <translation id="5838456317242088717">Kasalukuyang incognito na session</translation>
 <translation id="5842497610951477805">I-enable ang Bluetooth</translation>
 <translation id="5843250171025351504">Hindi na sumusunod ang iyong device sa minimum na bersyon ng client na tinukoy ng admin mo. Paki-update upang mag-log in.</translation>
-<translation id="5846200638699387931">Error sa syntax sa relation: <ph name="ERROR_LINE" /></translation>
+<translation id="5846200638699387931">Error sa syntax sa kaugnayan: <ph name="ERROR_LINE" /></translation>
 <translation id="5849212445710944278">Naidagdag na</translation>
 <translation id="5849570051105887917">Home provider code</translation>
 <translation id="5851868085455377790">Nagbigay</translation>
@@ -3965,7 +3965,7 @@
 <translation id="6979044105893951891">Ilunsad ang at lumabas sa mga pinapamahalaang session ng bisita</translation>
 <translation id="6979440798594660689">I-mute (default)</translation>
 <translation id="6979737339423435258">Lahat ng oras</translation>
-<translation id="6980969641756020642">Mga available na printer para ma-save</translation>
+<translation id="6980969641756020642">Mga printer na puwedeng i-save</translation>
 <translation id="6981982820502123353">Pagiging Accessible</translation>
 <translation id="6983783921975806247">Nakarehistrong OID</translation>
 <translation id="6984299437918708277">Pumili ng larawang ipapakita para sa iyong account sa screen ng pag-sign in</translation>
@@ -4040,7 +4040,7 @@
 <translation id="7078120482318506217">Lahat ng network</translation>
 <translation id="708060913198414444">K&amp;opyahin ang address ng audio</translation>
 <translation id="7081952801286122383">Incognito ka</translation>
-<translation id="7082772857801260480">Hindi sinusuportahan ang lahat ng feature sa dock na ito</translation>
+<translation id="7082772857801260480">Hindi lahat ng feature sa dock na ito ay sinusuportahan</translation>
 <translation id="708278670402572152">Idiskonekta upang i-enable ang pag-scan</translation>
 <translation id="7085389578340536476">Payagan ang Chrome na mag-record ng audio?</translation>
 <translation id="7088434364990739311">Nabigong magsimula ang pagsusuri ng update (code ng error na <ph name="ERROR" />).</translation>
@@ -4857,6 +4857,7 @@
 <translation id="8256319818471787266">Bantay</translation>
 <translation id="8257950718085972371">Ipagpatuloy ang pag-block ng access sa camera</translation>
 <translation id="8259239505248583312">Tara na</translation>
+<translation id="8259556432390118667">Value ng kulay ng hex</translation>
 <translation id="8260126382462817229">Subukang mag-sign in muli</translation>
 <translation id="8260864402787962391">Mouse</translation>
 <translation id="8261378640211443080">Hindi nakalista ang extension na ito sa <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> at maaaring naidagdag nang hindi mo nalalaman.</translation>
@@ -4939,7 +4940,7 @@
 <translation id="839736845446313156">Magparehistro</translation>
 <translation id="8398877366907290961">Magpatuloy</translation>
 <translation id="8400146488506985033">Pamahalaan ang mga tao</translation>
-<translation id="8405046151008197676">Kumuha ng mga highlight mula sa pinakabagong update</translation>
+<translation id="8405046151008197676">Kunin ang mga highlight mula sa pinakabagong update</translation>
 <translation id="8410775397654368139">Google Play</translation>
 <translation id="8413385045638830869">Magtanong muna (inirerekomenda)</translation>
 <translation id="8418445294933751433">&amp;Ipakita bilang tab</translation>
@@ -5400,6 +5401,7 @@
 <translation id="9065203028668620118">I-edit</translation>
 <translation id="9066773882585798925">Marinig na binabasa nang malakas ang text</translation>
 <translation id="9066782832737749352">Text-to-Speech</translation>
+<translation id="9068849894565669697">Pumili ng kulay</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Nakakonekta ang USB mouse</translation>
@@ -5528,7 +5530,7 @@
 <translation id="988978206646512040">Hindi pinapayagan ang passphrase na walang laman</translation>
 <translation id="992032470292211616">Maaaring mapinsala ng mga extension, apps at mga tema ang iyong device. Sigurado kang gusto mong magpatuloy?</translation>
 <translation id="992592832486024913">I-disable ang ChromeVox (pasalitang feedback)</translation>
-<translation id="992778845837390402">Kasalukuyang isinasagawa ang pag-backup ng Linux</translation>
+<translation id="992778845837390402">Kasalukuyang isinasagawa ang pag-back up ng Linux</translation>
 <translation id="993540765962421562">Ini-install</translation>
 <translation id="994289308992179865">&amp;Loop</translation>
 <translation id="995782501881226248">YouTube</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 93787d6..dd5eeab 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">L'opération de lecture ou d'écriture a été demandée avec un décalage incorrect sur l'appareil <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Avant de vous connecter, veuillez vous connecter en tant qu'invité afin d'activer le réseau <ph name="NETWORK_ID" />.</translation>
 <translation id="1103523840287552314">Toujours traduire les pages en <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Impossible de détecter votre carte SIM</translation>
 <translation id="1108600514891325577">&amp;Arrêter</translation>
 <translation id="1110155001042129815">Attendre</translation>
 <translation id="1112420131909513020">Le Bluetooth est utilisé par un onglet d'arrière-plan</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Votre administrateur a désactivé la synchronisation.</translation>
 <translation id="2127372758936585790">Chargeur de faible puissance</translation>
 <translation id="212862741129535676">Taux d'occupation des bandes de fréquence</translation>
+<translation id="212876957201860463">Préparation de la configuration de votre appareil mobile…</translation>
 <translation id="2129825002735785149">Mettre à jour le plug-in</translation>
 <translation id="2131077480075264">Impossible d'installer l'application "<ph name="APP_NAME" />", car elle n'est pas autorisée par "<ph name="IMPORT_NAME" />".</translation>
 <translation id="21354425047973905">Masquer les codes</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Les données ont été chiffrées avec votre mot de passe Google à la date suivante :
           <ph name="TIME" />. Ceci ne s'applique pas aux modes de paiement et adresses Google Pay.</translation>
 <translation id="2419706071571366386">Par sécurité, déconnectez-vous lorsque vous n'utilisez plus votre ordinateur.</translation>
+<translation id="2422125132043002186">Restauration de Linux annulée</translation>
 <translation id="2423578206845792524">En&amp;registrer l'image sous...</translation>
 <translation id="2428510569851653187">Décrivez ce que vous faisiez lorsque l'onglet a planté</translation>
 <translation id="2431027948063157455">Impossible de charger l'Assistant Google. Veuillez vérifier votre connexion réseau et réessayer.</translation>
@@ -977,7 +980,7 @@
 <translation id="2445484935443597917">Créer un profil</translation>
 <translation id="2446585455334014596"><ph name="APP_NAME" /> souhaite valider votre identité</translation>
 <translation id="2448312741937722512">Type</translation>
-<translation id="2450223707519584812">Vous ne pourrez pas ajouter d'utilisateurs, car des clés d'API Google sont manquantes. Pour en savoir plus, rendez-vous sur <ph name="DETAILS_URL" />.</translation>
+<translation id="2450223707519584812">Vous ne pourrez pas ajouter d'utilisateurs, car des clés API Google sont manquantes. Pour en savoir plus, rendez-vous sur <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Désactiver la synchronisation et se déconnecter ?</translation>
 <translation id="2450849356604136918">Aucune vue active</translation>
 <translation id="2451298179137331965">2x</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Accès à l'entrée audio et vidéo en cours…</translation>
 <translation id="3090819949319990166">Impossible de copier le fichier crx externe dans <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" associé.</translation>
+<translation id="3092699946856346803">Veuillez insérer votre carte SIM et réessayer</translation>
 <translation id="3101709781009526431">Date et heure</translation>
 <translation id="310671807099593501">Le site utilise le Bluetooth</translation>
 <translation id="3115147772012638511">En attente de l'affichage du cache</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Fichiers et programmes à placer en quarantaine :</translation>
 <translation id="3282568296779691940">Connectez-vous à Chrome</translation>
 <translation id="3285322247471302225">Nouvel ongle&amp;t</translation>
+<translation id="3286654161521615710">Utilisé par le navigateur Chrome et le lanceur d'applications <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Afficher et effacer les données de connexion stockées sur votre clé de sécurité</translation>
 <translation id="3288047731229977326">Les extensions exécutées en mode développeur peuvent nuire à votre ordinateur. Si vous n'êtes pas un développeur, nous vous recommandons de désactiver celles-ci afin d'assurer la sécurité de votre ordinateur.</translation>
 <translation id="3289856944988573801">Pour rechercher des mises à jour, veuillez utiliser une connexion Ethernet ou Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Certificat du serveur SSL</translation>
 <translation id="3775705724665058594">Envoyer à vos appareils</translation>
 <translation id="3776796446459804932">Cette extension ne respecte pas les règles du Chrome Web Store.</translation>
+<translation id="3777483481409781352">Impossible d'activer l'appareil mobile</translation>
 <translation id="3777806571986431400">Extension activée</translation>
 <translation id="3778152852029592020">Le téléchargement a été annulé.</translation>
 <translation id="3778208826288864398">La clé de sécurité est verrouillée, car vous avez saisi un code erroné trop de fois. Vous devez la réinitialiser.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Noir et blanc</translation>
 <translation id="4136203100490971508">L'éclairage nocturne sera désactivé automatiquement au lever du soleil</translation>
 <translation id="4138267921960073861">Afficher les noms d'utilisateurs et leur photo sur la page de connexion</translation>
+<translation id="4142052906269098341">Déverrouillez votre <ph name="DEVICE_TYPE" /> à l'aide de votre téléphone. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Bénéficiez d'une meilleure qualité et économisez de la batterie. La vidéo sera lue uniquement sur votre écran compatible Cast.</translation>
 <translation id="4145922204387553806">Autoriser l'Assistant à vous fournir des informations en lien avec le contenu affiché sur votre écran</translation>
 <translation id="4146026355784316281">Toujours ouvrir avec le lecteur système</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Exporter</translation>
 <translation id="42137655013211669">L'accès à cette ressource est interdit sur ce serveur.</translation>
 <translation id="4215350869199060536">Petit problème… Le nom contient des symboles non autorisés.</translation>
+<translation id="4220648711404560261">Une erreur s'est produite lors de l'activation.</translation>
 <translation id="4225397296022057997">Sur tous les sites</translation>
 <translation id="4232375817808480934">Configurer Kerberos</translation>
 <translation id="4235200303672858594">Plein écran</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Préférences de l'espace de stockage externe</translation>
 <translation id="447252321002412580">Contribuer à l'amélioration des fonctionnalités et des performances de Chrome</translation>
 <translation id="4474155171896946103">Ajouter tous les onglets aux favoris...</translation>
+<translation id="4474461121892222090">Le processus d'activation des données mobiles peut prendre jusqu'à 15 minutes.</translation>
 <translation id="4475552974751346499">Rechercher dans les téléchargements</translation>
 <translation id="4476590490540813026">Athlète</translation>
 <translation id="4477015793815781985">Incluez les touches Ctrl, Alt ou ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Configuration de la machine virtuelle… Cette opération peut prendre quelques minutes.</translation>
 <translation id="4480590691557335796">Chrome peut détecter et supprimer les logiciels malveillants sur votre ordinateur</translation>
 <translation id="4481530544597605423">Appareils dissociés</translation>
+<translation id="4483579413421375386">Afficher pour le site</translation>
 <translation id="4495419450179050807">Ne pas afficher sur cette page</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> a planté</translation>
 <translation id="450099669180426158">Icône représentant un point d'exclamation</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Saisissez le code d'accès de "<ph name="DEVICE_NAME" />" :</translation>
 <translation id="4648491805942548247">Autorisations insuffisantes.</translation>
 <translation id="4648499713050786492">Veuillez déverrouiller votre profil avant d'ajouter une personne.</translation>
+<translation id="4650591383426000695">Déconnecter votre téléphone de <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Impossible de charger le composant en ligne avec les ressources du mode de démonstration.</translation>
 <translation id="465878909996028221">Seuls les protocoles http et https, ainsi que les protocoles de fichiers, sont compatibles avec les redirections de navigateur.</translation>
 <translation id="4659077111144409915">Compte principal</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Veuillez brancher votre appareil <ph name="DEVICE_TYPE" /> à une source d'alimentation.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">En&amp;registrer le fichier audio sous...</translation>
+<translation id="5117139026559873716">Déconnectez votre téléphone de votre <ph name="DEVICE_TYPE" />. Ils ne se connecteront plus automatiquement.</translation>
 <translation id="5117427536932535467">Thèmes et fonds d'écran</translation>
 <translation id="5117625797180141189">"<ph name="DOCUMENT_NAME" />" a bien été imprimé</translation>
 <translation id="5117930984404104619">Surveiller le comportement des autres extensions, y compris des URL consultées</translation>
@@ -2796,7 +2808,7 @@
 <translation id="5213891612754844763">Afficher les paramètres de proxy</translation>
 <translation id="5215502535566372932">Sélectionnez un pays</translation>
 <translation id="521582610500777512">La photo a été supprimée.</translation>
-<translation id="5217313969810784338">Pour recharger votre appareil, utilisez une batterie du fabricant de votre Chromebook.</translation>
+<translation id="5217313969810784338">Pour recharger votre Chromebook, utilisez une batterie fournie par son fabricant.</translation>
 <translation id="5222676887888702881">Déconnexion</translation>
 <translation id="52232769093306234">Échec de la compression.</translation>
 <translation id="5225324770654022472">Afficher le raccourci des applications</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Index de <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu contenant des favoris masqués</translation>
 <translation id="5464632865477611176">Exécuter cette fois</translation>
+<translation id="5464660706533281090">Ce paramètre ne peut pas être modifié par un utilisateur mineur.</translation>
 <translation id="5466374726908360271">Coller et chercher "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Bonjour ! Je suis la voix de votre synthèse vocale.</translation>
 <translation id="5473333559083690127">Saisir encore le nouveau code</translation>
@@ -3205,6 +3218,7 @@
 <translation id="5817918615728894473">Associer</translation>
 <translation id="5821565227679781414">Créer un raccourci</translation>
 <translation id="5825412242012995131">Activé (recommandé)</translation>
+<translation id="5826395379250998812">Connectez votre <ph name="DEVICE_TYPE" /> à votre téléphone. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nom commun (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Impression...</translation>
@@ -3426,6 +3440,7 @@
 <translation id="6129691635767514872">Les données sélectionnées ont été supprimées de Chrome et des appareils synchronisés. Votre compte Google conserve peut-être d'autres formes d'historique de navigation, comme vos recherches ou vos activités via d'autres services Google sur la page <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Commentaire du certificat Netscape</translation>
 <translation id="6129953537138746214">Espace</translation>
+<translation id="6130024555057767093">Les notifications sont actuellement bloquées pour tous les sites, sauf pour ceux que vous autorisez de façon individuelle.</translation>
 <translation id="6136114942382973861">Fermer la barre de téléchargements</translation>
 <translation id="6137767437444130246">Certificat utilisateur</translation>
 <translation id="6138680304137685902">Signature X9.62 ECDSA avec SHA-384</translation>
@@ -3471,6 +3486,7 @@
 <translation id="620722923698527029">Toujours ouvrir ces types de liens dans l'application associée</translation>
 <translation id="6207282396926186323">Installer <ph name="APP_NAME" /> (application Linux)</translation>
 <translation id="6207937957461833379">Pays/Région</translation>
+<translation id="6208521041562685716">Activation des données mobiles…</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" /> : la synchronisation ne fonctionne pas</translation>
 <translation id="6212039847102026977">Afficher les propriétés de réseau avancées</translation>
 <translation id="6212168817037875041">Désactiver l'écran</translation>
@@ -3832,6 +3848,7 @@
 <translation id="677965093459947883">Très petite</translation>
 <translation id="6780439250949340171">Gérer d'autres paramètres</translation>
 <translation id="6781284683813954823">Lien vers le doodle</translation>
+<translation id="6781978626986383437">Sauvegarde Linux annulée</translation>
 <translation id="6782111308708962316">Empêcher les sites Web tiers d'enregistrer et de lire les données des cookies</translation>
 <translation id="6786747875388722282">Extensions</translation>
 <translation id="6787839852456839824">Raccourcis clavier</translation>
@@ -4119,6 +4136,7 @@
 <translation id="7197632491113152433">Vous avez la possibilité d'utiliser <ph name="NUMBER_OF_APPS" /> application(s) de votre compte sur cet appareil.</translation>
 <translation id="7199158086730159431">Obtenir de l'aid&amp;e</translation>
 <translation id="7200083590239651963">Sélectionner la configuration</translation>
+<translation id="7201042526153088083">Installez des applications et des jeux sur votre <ph name="DEVICE_TYPE" /> depuis Google Play. &lt;a target="_blank" href="<ph name="URL" />"&gt;En savoir plus&lt;/a&gt;</translation>
 <translation id="720110658997053098">Conserver cet appareil en mode Kiosque de manière permanente</translation>
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" supprimé</translation>
 <translation id="7201420661433230412">Afficher les fichiers</translation>
@@ -4143,6 +4161,7 @@
 <translation id="7229570126336867161">Technologie EvDo requise</translation>
 <translation id="7230787553283372882">Personnaliser la taille du texte</translation>
 <translation id="7232750842195536390">Échec du changement de nom</translation>
+<translation id="7234010996000898150">Annulation de la restauration de Linux…</translation>
 <translation id="7235716375204803342">Récupération des activités…</translation>
 <translation id="7235737137505019098">L'espace de stockage de votre clé de sécurité est insuffisant pour y enregistrer d'autres comptes.</translation>
 <translation id="7238585580608191973">Empreinte SHA-256</translation>
@@ -4278,6 +4297,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Tout ouvrir dans une &amp;nouvelle fenêtre}=1{Ouvrir dans une &amp;nouvelle fenêtre}one{Tout ouvrir (#) dans une &amp;nouvelle fenêtre}other{Tout ouvrir (#) dans une &amp;nouvelle fenêtre}}</translation>
 <translation id="7434509671034404296">Options pour les développeurs</translation>
 <translation id="7436921188514130341">Aïe, aïe, aïe ! Une erreur s'est produite lors du changement du nom.</translation>
+<translation id="7437427339141948518">Notifications désactivées</translation>
 <translation id="7438976808740265764">Flash Player ne sera plus accepté après décembre 2020.</translation>
 <translation id="7441736921018636843">Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" /> pour supprimer votre phrase secrète de synchronisation</translation>
 <translation id="7441830548568730290">Autres utilisateurs</translation>
@@ -4404,9 +4424,10 @@
 <translation id="764017888128728"><ph name="PASSWORD_MANAGER_BRAND" /> vous connecte automatiquement aux sites éligibles avec les mots de passe que vous avez enregistrés.</translation>
 <translation id="7642778300616172920">Masquer le contenu sensible</translation>
 <translation id="7643842463591647490">{0,plural, =1{# fenêtre ouverte}one{# fenêtre ouverte}other{# fenêtres ouvertes}}</translation>
-<translation id="7643932971554933646">Laisser le site afficher les fichiers ?</translation>
+<translation id="7643932971554933646">Autoriser le site à afficher les fichiers ?</translation>
 <translation id="7644543211198159466">Couleur et thème</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (propriétaire)</translation>
+<translation id="7645681574855902035">Annulation de la sauvegarde Linux…</translation>
 <translation id="7647403192093989392">Aucune activité récente.</translation>
 <translation id="7648142322539582331">Connectez-vous à Internet pour configurer le contrôle parental</translation>
 <translation id="7648992873808071793">Stocker les fichiers sur cet appareil</translation>
@@ -4858,6 +4879,7 @@
 <translation id="8256319818471787266">Médor</translation>
 <translation id="8257950718085972371">Continuer à bloquer l'accès à la caméra</translation>
 <translation id="8259239505248583312">Accéder</translation>
+<translation id="8259556432390118667">Valeur de couleur hexadécimale</translation>
 <translation id="8260126382462817229">Essayez de vous connecter de nouveau à votre compte.</translation>
 <translation id="8260864402787962391">Souris</translation>
 <translation id="8261378640211443080">Cette extension n'est pas répertoriée sur le <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> et a pu être ajoutée à votre insu.</translation>
@@ -5110,6 +5132,7 @@
 <translation id="8662911384982557515">Utiliser <ph name="HOME_PAGE" /> comme page d'accueil ?</translation>
 <translation id="8662978096466608964">Impossible d'utiliser ce fond d'écran avec Chrome.</translation>
 <translation id="8663099077749055505">Toujours bloquer les téléchargements automatiques de plusieurs fichiers sur <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Afficher les notifications pour ce site ?</translation>
 <translation id="8664389313780386848">&amp;Afficher le code source de la page</translation>
 <translation id="8665180165765946056">Sauvegarde terminée</translation>
 <translation id="866611985033792019">Considérer ce certificat comme fiable pour identifier les utilisateurs de messageries</translation>
@@ -5399,6 +5422,7 @@
 <translation id="9065203028668620118">Modifier</translation>
 <translation id="9066773882585798925">Écouter un texte lu à voix haute</translation>
 <translation id="9066782832737749352">Synthèse vocale</translation>
+<translation id="9068849894565669697">Sélectionner couleur</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Souris USB connectée.</translation>
@@ -5436,6 +5460,7 @@
 <translation id="9131487537093447019">Envoyer des messages à des appareils Bluetooth, et en recevoir de ces derniers</translation>
 <translation id="9134304429738380103">J'accepte.</translation>
 <translation id="9137013805542155359">Afficher l'original</translation>
+<translation id="9137157311132182254">Moteur de recherche préféré</translation>
 <translation id="9137916601698928395">Ouvrir le lien avec le compte <ph name="USER" /></translation>
 <translation id="9138978632494473300">Ajouter des raccourcis vers les emplacements suivants :</translation>
 <translation id="9140067245205650184">Vous utilisez un indicateur de fonctionnalité non pris en charge : <ph name="BAD_FLAG" />. La stabilité et la sécurité en seront affectées.</translation>
@@ -5508,6 +5533,7 @@
 <translation id="962802172452141067">Arborescence de dossiers des favoris</translation>
 <translation id="964286338916298286">Votre administrateur informatique a désactivé les bonus Chrome pour votre appareil.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Application}one{Application}other{Applications}}</translation>
+<translation id="965211523698323809">Envoyez et recevez des SMS depuis votre <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Vous serez déconnecté de vos comptes Google. Les modifications apportées à vos favoris, à votre historique, à vos mots de passe et à d'autres paramètres ne seront plus synchronisées avec votre compte Google. Cependant, les données déjà stockées sur votre compte Google y seront conservées et pourront être gérées dans <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Données stockées</translation>
 <translation id="968000525894980488">Activez les services Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 416a6a4..066fc40 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">આના પર અમાન્ય ઓફસેટ સાથે વાંચન અથવા લેખન ઓપરેશનની વિનંતી કરી હતી: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">સાઇન ઇન કરતા પહેલા, કૃપા કરીને નેટવર્ક <ph name="NETWORK_ID" /> ને સક્રિય કરવા માટે એક અતિથિ તરીકે દાખલ થાઓ</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> નો હંમેશાં અનુવાદ કરો</translation>
+<translation id="1104038495841596279">અમે તમારું સિમ કાર્ડ શોધી શક્યાં નથી</translation>
 <translation id="1108600514891325577">&amp;Stop</translation>
 <translation id="1110155001042129815">રાહ જુઓ</translation>
 <translation id="1112420131909513020">બૅકગ્રાઉન્ડ ટૅબ બ્લૂટૂથનો ઉપયોગ કરી રહ્યું છે</translation>
@@ -752,6 +753,7 @@
 <translation id="2126167708562367080">સમન્વયન, તમારા વ્યવસ્થાપક દ્વારા અક્ષમ કરવામાં આવ્યું છે.</translation>
 <translation id="2127372758936585790">નિમ્ન-પાવર ચાર્જર</translation>
 <translation id="212862741129535676">ફ્રીક્વેંસી સ્થિતિ અક્યુપન્સિ ટકા</translation>
+<translation id="212876957201860463">તમારા સેલ્યુલર ડિવાઇસને સેટઅપ માટે તૈયાર કરી રહ્યાં છીએ...</translation>
 <translation id="2129825002735785149">પ્લગ-ઇન અપડેટ કરો</translation>
 <translation id="2131077480075264">"<ph name="APP_NAME" />" ને ઇન્સ્ટોલ કરવામાં અસમર્થ કારણ કે "<ph name="IMPORT_NAME" />" દ્વારા તેની મંજૂરી નથી</translation>
 <translation id="21354425047973905">પિન છુપાવો</translation>
@@ -952,6 +954,7 @@
 <translation id="241727068219398187">ડેટા <ph name="TIME" />ના રોજ તમારા Google પાસવર્ડ સાથે એન્ક્રિપ્ટ કર્યો હતો.
           આમાં Google Payની ચુકવણી પદ્ધતિઓ અને ઍડ્રેસ સામેલ હોતા નથી.</translation>
 <translation id="2419706071571366386">સુરક્ષા માટે, તમારા કમ્પ્યુટરનો ઉપયોગ ન થતો હોય ત્યારે સાઇન આઉટ કરો.</translation>
+<translation id="2422125132043002186">Linux પાછું મેળવવાનું રદ કર્યું</translation>
 <translation id="2423578206845792524">છબીને આ રૂપે સા&amp;ચવો...</translation>
 <translation id="2428510569851653187">ટૅબ ક્રેશ થઈ ત્યારે તમે શું કરતા હતા તેનું વર્ણન કરો</translation>
 <translation id="2431027948063157455">Google સહાયક લોડ થવામાં અસમર્થ રહ્યું, કૃપા કરીને તમારું નેટવર્ક કનેક્શન તપાસો અને ફરી પ્રયાસ કરો.</translation>
@@ -1420,6 +1423,7 @@
 <translation id="3090193911106258841">ઑડિયો અને વીડિયો ઇનપુટને ઍક્સેસ કરી રહ્યાં છીએ</translation>
 <translation id="3090819949319990166">બાહ્ય crx ફાઇલને <ph name="TEMP_CRX_FILE" /> પર કૉપિ કરી શકતાં નથી.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />"થી જોડી બનાવી</translation>
+<translation id="3092699946856346803">કૃપા કરીને તમારું સિમ કાર્ડ નાખીને ફરી પ્રયાસ કરો</translation>
 <translation id="3101709781009526431">તારીખ અને સમય</translation>
 <translation id="310671807099593501">સાઇટ બ્લૂટૂથનો ઉપયોગ કરી રહી છે</translation>
 <translation id="3115147772012638511">કૅશ માટે રાહ જુએ છે...</translation>
@@ -1527,6 +1531,7 @@
 <translation id="3281892622610078515">ક્વારંટાઇન કરવા માટેની ફાઇલ અને પ્રોગ્રામ:</translation>
 <translation id="3282568296779691940">Chrome માં સાઇન ઇન કરો</translation>
 <translation id="3285322247471302225">નવું &amp;ટૅબ</translation>
+<translation id="3286654161521615710">Chrome બ્રાઉઝર અને <ph name="DEVICE_TYPE" /> લૉન્ચર દ્વારા ઉપયોગ થાય છે</translation>
 <translation id="3286737518123001369">તમારી સુરક્ષા કી પર સ્ટોર કરેલો સાઇન ઇન ડેટા જુઓ અને ડિલીટ કરો</translation>
 <translation id="3288047731229977326">ડેવલપર મોડમાં ચાલી રહેલા એક્સટેન્શન તમારા કમ્પ્યુટરને નુકસાન પહોંચાડી શકે છે. જો તમે ડેવલપર નથી, તો તમે સુરક્ષિત રહેવા માટે ડેવલપર મોડમાં ચાલી રહેલા આ એક્સ્ટેન્શનને બંધ કરવા જોઈએ.</translation>
 <translation id="3289856944988573801">અપડેટ તપાસવા માટે, કૃપા કરીને ઇથરનેટ અથવા વાઇ-ફાઇનો ઉપયોગ કરો.</translation>
@@ -1871,6 +1876,7 @@
 <translation id="3775432569830822555">SSL સર્વર પ્રમાણપત્ર</translation>
 <translation id="3775705724665058594">તમારા ડિવાઇસ પર મોકલો</translation>
 <translation id="3776796446459804932">આ એક્સટેન્શન Chrome વેબ દુકાન નીતિનું ઉલ્લંઘન કરે છે.</translation>
+<translation id="3777483481409781352">સેલ્યુલર ડિવાઇસને સક્રિય કરી શક્યાં નથી</translation>
 <translation id="3777806571986431400">એક્સ્ટેન્શન સક્ષમ કર્યું</translation>
 <translation id="3778152852029592020">ડાઉનલોડ રદ થયું હતું.</translation>
 <translation id="3778208826288864398">ઘણી બધી વખત ખોટો પિન દાખલ કર્યો હતો એટલા માટે સુરક્ષા કોડ લૉક કરેલો છે. તમને સુરક્ષા કોડનો ઉપયોગ કરવાની જરૂર પડશે.</translation>
@@ -2134,6 +2140,7 @@
 <translation id="4131410914670010031">કાળો અને સફેદ</translation>
 <translation id="4136203100490971508">રાત્રિ પ્રકાશ સૂર્યોદય સમયે આપમેળે બંધ થઈ જશે</translation>
 <translation id="4138267921960073861">સાઇન-ઇન સ્ક્રીન પર વપરાશકર્તા નામ અને ફોટો બતાવો</translation>
+<translation id="4142052906269098341">તમારા ફોન વડે તમારું <ph name="DEVICE_TYPE" /> અનલૉક કરો. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">બહેતર ક્વૉલિટીના વીડિઓ મેળવો અને બૅટરી આવરદા સાચવો. વીડિઓ માત્ર તમારી કાસ્ટ ચાલુ કરેલ હોય એવી સ્ક્રીન પર જ ચલાવવામાં આવશે.</translation>
 <translation id="4145922204387553806">તમારા આસિસ્ટંટને તમારી સ્ક્રીન પર જે છે તેનાથી સંબંધિત માહિતી તમને બતાવવા દો</translation>
 <translation id="4146026355784316281">હંમેશા સિસ્ટમ દર્શક સાથે ખોલો</translation>
@@ -2175,6 +2182,7 @@
 <translation id="42126664696688958">નિકાસ કરો</translation>
 <translation id="42137655013211669">સર્વર દ્વારા આ સંસાધનની અ‍ૅક્સેસ નિષિદ્ધ હતી.</translation>
 <translation id="4215350869199060536">ઉફ્ફ, નામમાં ગેરકાનૂની પ્રતીકો!</translation>
+<translation id="4220648711404560261">સક્રિયકરણ દરમ્યાન એક ભૂલ આવી.</translation>
 <translation id="4225397296022057997">બધી સાઇટ પર</translation>
 <translation id="4232375817808480934">Kerberosની ગોઠવણી કરો</translation>
 <translation id="4235200303672858594">સમગ્ર સ્ક્રીન</translation>
@@ -2323,6 +2331,7 @@
 <translation id="4470957202018033307">બાહ્ય સ્ટોરેજ માટેની પસંદગીઓ</translation>
 <translation id="447252321002412580">Chromeની સુવિધાઓ અને પ્રદર્શનને સુધારવામાં સહાય કરો</translation>
 <translation id="4474155171896946103">બધા ટૅબ્સ બુકમાર્ક  કરો...</translation>
+<translation id="4474461121892222090">તેને મોબાઇલ ડેટા સક્રિયકરણ પૂરું કરવામાં કદાચ 15 મિનિટ સુધીનો સમય લાગી શકે છે.</translation>
 <translation id="4475552974751346499">ડાઉનલોડ્સ શોધો</translation>
 <translation id="4476590490540813026">ઍથ્લીટ</translation>
 <translation id="4477015793815781985">Ctrl, Alt અથવા ⌘ શામેલ કરો</translation>
@@ -2332,6 +2341,7 @@
 <translation id="4479877282574735775">વર્ચ્યુઅલ મશીનની ગોઠવણી કરી રહ્યાં છીએ. આમાં થોડો સમય લાગી શકે છે.</translation>
 <translation id="4480590691557335796">Chrome તમારા કમ્પ્યુટરમાંથી નુકસાનકારક સૉફ્ટવેર શોધી અને તેને કાઢી નાખી શકે છે</translation>
 <translation id="4481530544597605423">જોડીથી અલગ કરેલા ઉપકરણો</translation>
+<translation id="4483579413421375386">સાઇટ માટે બતાવો</translation>
 <translation id="4495419450179050807">આ પૃષ્ઠ પર બતાવશો નહીં</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ક્રૅશ થયું છે</translation>
 <translation id="450099669180426158">ઉદ્ગાર ચિહ્નનું આયકન</translation>
@@ -2435,6 +2445,7 @@
 <translation id="4647697156028544508">કૃપા કરીને "<ph name="DEVICE_NAME" />" માટે પિન દાખલ કરો:</translation>
 <translation id="4648491805942548247">અપર્યાપ્ત પરવાનગીઓ</translation>
 <translation id="4648499713050786492">કોઇ વ્યક્તિને ઉમેરતા પહેલાં કૃપા કરીને તમારી પ્રોફાઇલ અનલૉક કરો.</translation>
+<translation id="4650591383426000695">તમારા ફોનને તમારા <ph name="DEVICE_TYPE" />થી ડિસ્કનેક્ટ કરો</translation>
 <translation id="4651484272688821107">ડેમો મોડ સંસાધનો ધરાવતું ઑનલાઇન ઘટક લોડ કરી શકાયું નહીં.</translation>
 <translation id="465878909996028221">બ્રાઉઝર રીડાયરેક્ટ માટે માત્ર http, https અને ફાઇલ પ્રોટોકૉલ સમર્થિત છે.</translation>
 <translation id="4659077111144409915">પ્રાથમિક એકાઉન્ટ</translation>
@@ -2736,6 +2747,7 @@
 <translation id="5115309401544567011">કૃપા કરીને તમારા <ph name="DEVICE_TYPE" />નો પ્લગ કોઈ પાવર સ્રોતમાં જોડો.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">ઑડિયો આ રૂપે સા&amp;ચવો...</translation>
+<translation id="5117139026559873716">તમારા ફોનને તમારા <ph name="DEVICE_TYPE" />થી ડિસ્કનેક્ટ કરો. તેઓ હવે ઑટોમૅટિક રીતે કનેક્ટ થશે નહીં.</translation>
 <translation id="5117427536932535467">થીમ્સ અને વૉલપેપર્સ</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> સફળતાપૂર્વક છાપ્યો</translation>
 <translation id="5117930984404104619">મુલાકાત લીધેલ URL સહિત, અન્ય એક્સ્ટેન્શન્સની વર્તણૂકનું નિરીક્ષણ કરો</translation>
@@ -2965,6 +2977,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" />ની અનુક્રમણિકા</translation>
 <translation id="5463856536939868464">મેનૂમાં છુપાયેલા બુકમાર્ક્સ છે</translation>
 <translation id="5464632865477611176">આ વખતે ચલાવો</translation>
+<translation id="5464660706533281090">બાળ વપરાશકર્તા આ સેટિંગમાં ફેરફાર કરી શકતા નથી.</translation>
 <translation id="5466374726908360271">“<ph name="SEARCH_TERMS" />” પે&amp;સ્ટ કરો અને શોધો</translation>
 <translation id="5471768120198416576">કેમ છો! હું તમારો ટેક્સ્ટ-ટુ-સ્પીચ વૉઇસ છું.</translation>
 <translation id="5473333559083690127">નવો PIN ફરીથી દાખલ કરો</translation>
@@ -3201,6 +3214,7 @@
 <translation id="5817918615728894473">જોડી કરો</translation>
 <translation id="5821565227679781414">શૉર્ટકટ બનાવો</translation>
 <translation id="5825412242012995131">ચાલુ કરો (સુઝાવ આપેલ)</translation>
+<translation id="5826395379250998812">તમારા <ph name="DEVICE_TYPE" />ને તમારા ફોન સાથે કનેક્ટ કરો. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">કોમન નેમ (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">છાપકામ...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">પસંદ કરેલો ડેટા Chrome અને તમારા સિંક કરેલ ડિવાઇસમાંથી ડિલીટ કરવામાં આવ્યો છે. તમારા Google એકાઉન્ટમાં બ્રાઉઝિંગ ઇતિહાસના બીજા સ્વરૂપો જેમ કે શોધ અને બીજા Google સેવાઓ પરની પ્રવૃત્તિઓ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> પર હોય શકે છે.</translation>
 <translation id="6129938384427316298">નેટસ્કેપ પ્રમાણપત્ર ટિપ્પણી</translation>
 <translation id="6129953537138746214">જગ્યા</translation>
+<translation id="6130024555057767093">તમે વ્યક્તિગત રીતે મંજૂરી આપતા હોય એ સાઇટ સિવાયની બધી સાઇટ માટે હાલમાં નોટિફિકેશન બ્લૉક કરેલાં છે.</translation>
 <translation id="6136114942382973861">ડાઉનલોડ બાર બંધ કરો</translation>
 <translation id="6137767437444130246">વપરાશકર્તા પ્રમાણપત્ર</translation>
 <translation id="6138680304137685902">SHA-384 સાથે X9.62 ECDSA સહી</translation>
@@ -3468,6 +3483,7 @@
 <translation id="620722923698527029">આ પ્રકારની લિંક હંમેશાં સંકળાયેલી ઍપમાં ખોલો</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux ઍપ) ઇન્સ્ટૉલ કરો</translation>
 <translation id="6207937957461833379">દેશ/પ્રદેશ</translation>
+<translation id="6208521041562685716">મોબાઇલ ડેટા સક્રિય કરવામાં આવી રહ્યો છે</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: સિંક કાર્ય કરી રહ્યું નથી</translation>
 <translation id="6212039847102026977">વિગતવાર નેટવર્ક ગુણધર્મો બતાવો</translation>
 <translation id="6212168817037875041">ડિસ્પ્લે બંધ કરો</translation>
@@ -3829,6 +3845,7 @@
 <translation id="677965093459947883">ખૂબ નાનું</translation>
 <translation id="6780439250949340171">અન્ય સેટિંગ્સનું સંચાલન કરો</translation>
 <translation id="6781284683813954823">ડૂડલ લિંક</translation>
+<translation id="6781978626986383437">Linuxનું બૅકઅપ રદ કર્યું</translation>
 <translation id="6782111308708962316">તૃતીય-પક્ષ વેબસાઇટને કુકી ડેટા સાચવવા અને વાંચવાથી અટકાવો</translation>
 <translation id="6786747875388722282">એક્સ્ટેન્શન્સ</translation>
 <translation id="6787839852456839824">કીબોર્ડ શોર્ટકટ્સ</translation>
@@ -4116,6 +4133,7 @@
 <translation id="7197632491113152433">અમને તમારા એકાઉન્ટમાંથી આ ડિવાઇસ પર ઉપયોગ કરી શકાય તેવી <ph name="NUMBER_OF_APPS" /> ઍપ મળી છે.</translation>
 <translation id="7199158086730159431">સહાય મેળવો</translation>
 <translation id="7200083590239651963">ગોઠવણી પસંદ કરો</translation>
+<translation id="7201042526153088083">Google Playમાંથી તમારા <ph name="DEVICE_TYPE" /> પર ઍપ અને ગેમ ઇન્સ્ટૉલ કરો. &lt;a target="_blank" href="<ph name="URL" />"&gt;વધુ જાણો&lt;/a&gt;</translation>
 <translation id="720110658997053098">આ ઉપકરણને કાયમ માટે કિઓસ્ક મોડમાં રાખો</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' ડિલીટ કર્યું</translation>
 <translation id="7201420661433230412">ફાઇલો જુઓ</translation>
@@ -4140,6 +4158,7 @@
 <translation id="7229570126336867161">EVDO ની જરૂર છે</translation>
 <translation id="7230787553283372882">તમારી ટેક્સ્ટના કદને કસ્ટમાઇઝ કરો</translation>
 <translation id="7232750842195536390">નામ બદલવામાં નિષ્ફળ થયાં</translation>
+<translation id="7234010996000898150">Linux પાછું મેળવવાનું રદ કરી રહ્યાં છીએ</translation>
 <translation id="7235716375204803342">પ્રવૃત્તિઓ લાવી રહ્યાં છીએ...</translation>
 <translation id="7235737137505019098">તમારા સુરક્ષા કોડમાં હવે વધુ એકાઉન્ટ માટે પર્યાપ્ત સ્પેસ ખાલી નથી.</translation>
 <translation id="7238585580608191973">SHA-256 ફિંગરપ્રિંટ</translation>
@@ -4275,6 +4294,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{તમામ URLને &amp;નવી વિંડોમાં ખોલો}=1{URLને &amp;નવી વિંડોમાં ખોલો}one{તમામ (#) URLને &amp;નવી વિંડોમાં ખોલો}other{તમામ (#) URLને &amp;નવી વિંડોમાં ખોલો}}</translation>
 <translation id="7434509671034404296">વિકાસકર્તા</translation>
 <translation id="7436921188514130341">અરેરે! નામ બદલતી વખતે એક ભૂલ આવી હતી.</translation>
+<translation id="7437427339141948518">નોટિફિકેશન બંધ છે</translation>
 <translation id="7438976808740265764">2020 ડિસેમ્બર પછી Flash Player ચાલશે નહીં.</translation>
 <translation id="7441736921018636843">આ સેટિંગ બદલવા, સિંક પાસફ્રેઝ કાઢી નાખવા માટે <ph name="BEGIN_LINK" />સિંક રીસેટ કરો<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">અન્ય વપરાશકર્તાઓ</translation>
@@ -4404,6 +4424,7 @@
 <translation id="7643932971554933646">સાઇટને ફાઇલો જોવાની મંજૂરી આપીએ?</translation>
 <translation id="7644543211198159466">રંગ અને થીમ</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (માલિક)</translation>
+<translation id="7645681574855902035">Linuxનું બૅકઅપ રદ કરી રહ્યાં છીએ</translation>
 <translation id="7647403192093989392">તાજેતરની કોઈ પ્રવૃત્તિ નથી</translation>
 <translation id="7648142322539582331">માતાપિતા યોગ્ય નિયંત્રણો સેટઅપ કરવા માટે ઇન્ટરનેટથી કનેક્ટ કરો</translation>
 <translation id="7648992873808071793">આ ઉપકરણ પર ફાઇલો સાચવો</translation>
@@ -4849,6 +4870,7 @@
 <translation id="8256319818471787266">સ્પાર્કી</translation>
 <translation id="8257950718085972371">કૅમેરાની ઍક્સેસને અવરોધિત કરવાનું ચાલુ રાખો</translation>
 <translation id="8259239505248583312">ચાલો જઈએ</translation>
+<translation id="8259556432390118667">રંગનું હેક્સ મૂલ્ય</translation>
 <translation id="8260126382462817229">ફરીથી સાઇન ઇન કરવાનો પ્રયાસ કરો</translation>
 <translation id="8260864402787962391">માઉસ</translation>
 <translation id="8261378640211443080">આ એક્સટેન્શન <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> માં સૂચિબદ્ધ નથી અને તમારી જાણ વિના ઉમેરવામાં આવ્યું હોઈ શકે છે.</translation>
@@ -5101,6 +5123,7 @@
 <translation id="8662911384982557515">તમારા હોમ પેજને આ પર બદલો: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome વોલપેપર સેટ કરી શકતું નથી.</translation>
 <translation id="8663099077749055505"><ph name="HOST" /> પર બહુવિધ આપમેળે ડાઉનલોડ્સને હંમેશા અવરોધિત કરો.</translation>
+<translation id="8663534996262079772">આ સાઇટ માટેનાં નોટિફિકેશન બતાવીએ?</translation>
 <translation id="8664389313780386848">પૃષ્ઠ સ્રોત &amp;જુઓ</translation>
 <translation id="8665180165765946056">બૅકઅપ પૂર્ણ થયું</translation>
 <translation id="866611985033792019">ઇમેઇલ વપરાશકર્તાઓને ઓળખવા માટે આ પ્રમાણપત્ર પર વિશ્વાસ કરો</translation>
@@ -5390,6 +5413,7 @@
 <translation id="9065203028668620118">ફેરફાર કરો</translation>
 <translation id="9066773882585798925">ટેક્સ્ટ મોટેથી વંચાતી સાંભળો</translation>
 <translation id="9066782832737749352">ટેક્સ્ટ-ટુ-સ્પીચ</translation>
+<translation id="9068849894565669697">રંગ પસંદ કરો</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB માઉસ કનેક્ટ કર્યું</translation>
@@ -5427,6 +5451,7 @@
 <translation id="9131487537093447019">Bluetooth ડિવાઇસ પર સંદેશા મોકલો અને ત્યાંથી પ્રાપ્ત કરો.</translation>
 <translation id="9134304429738380103">હા, હું સંમત છું.</translation>
 <translation id="9137013805542155359">મૂળ બતાવો</translation>
+<translation id="9137157311132182254">પસંદગીનું શોધ એન્જિન</translation>
 <translation id="9137916601698928395"><ph name="USER" /> તરીકે લિંક ખોલો</translation>
 <translation id="9138978632494473300">નીચેના સ્થાનોના શૉર્ટકટ્સ ઉમેરો:</translation>
 <translation id="9140067245205650184">તમે અસમર્થિત સુવિધા ફ્લૅગનો ઉપયોગ કરી રહ્યા છો: <ph name="BAD_FLAG" />. સ્થિરતા તથા સુરક્ષા જોખમાશે.</translation>
@@ -5499,6 +5524,7 @@
 <translation id="962802172452141067">બુકમાર્ક ફોલ્ડર વૃક્ષ</translation>
 <translation id="964286338916298286">તમારા IT વ્યવસ્થાપકે તમારા ઉપકરણ માટે Chrome ઑફરો બંધ કરેલી છે.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{ઍપ્લિકેશન}one{ઍપ્લિકેશનો}other{ઍપ્લિકેશનો}}</translation>
+<translation id="965211523698323809">તમારી <ph name="DEVICE_TYPE" />માંથી ટેક્સ્ટ સંદેશા મોકલો અને મેળવો. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">તમારા Google એકાઉન્ટમાંથી આ તમને સાઇન આઉટ કરશે. બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને અન્ય સેટિંગ પરના ફેરફારો અને અન્ય સેટિંગ, હવે તમારા Google એકાઉન્ટમાં સિંક કરેલ રહેશે નહીં. તેમ છતાં તમારો વર્તમાન ડેટા તમારા Google એકાઉન્ટમાં સંગ્રહિત રહેશે અને તે <ph name="BEGIN_LINK" />Google ડૅશબોર્ડ<ph name="END_LINK" /> પર મેનેજ કરવામાં આવી શકે છે.</translation>
 <translation id="967624055006145463">સ્ટોર કરેલ ડેટા</translation>
 <translation id="968000525894980488">Google Play સેવાઓ ચાલુ કરો.</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 69d9a3c..2ea9f54 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">पढ़ें या लिखें संचालन का अनुरोध किसी अमान्य ऑफ़सेट के साथ इस पर किया गया था: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">प्रवेश करने से पहले, कृपया <ph name="NETWORK_ID" /> नेटवर्क सक्रिय करने के लिए अतिथि के रूप में प्रविष्ट हों</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> का हमेशा अनुवाद करें</translation>
+<translation id="1104038495841596279">हमें आपका सिम कार्ड नहीं मिला</translation>
 <translation id="1108600514891325577">&amp;रोकें</translation>
 <translation id="1110155001042129815">प्रतीक्षा करें</translation>
 <translation id="1112420131909513020">बैकग्राउंड टैब ब्लूटूथ का इस्तेमाल कर रहा है</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">सिंक को आपके व्यवस्थापक ने अक्षम किया है.</translation>
 <translation id="2127372758936585790">कम-शक्ति वाला चार्जर</translation>
 <translation id="212862741129535676">आवृत्ति स्थिति उपयोग प्रतिशत</translation>
+<translation id="212876957201860463">आपका मोबाइल डिवाइस सेटअप किया जा रहा है...</translation>
 <translation id="2129825002735785149">प्‍लग इन अपडेट करें</translation>
 <translation id="2131077480075264">"<ph name="APP_NAME" />" इंस्‍टॉल करने में असमर्थ क्‍योंकि "<ph name="IMPORT_NAME" />" द्वारा इसकी अनुमति नहीं है</translation>
 <translation id="21354425047973905">पिन छिपाएं</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">आपका डेटा <ph name="TIME" /> से आपके Google पासवर्ड के साथ सुरक्षित किया गया था.
 इसमें Google Pay से भुगतान करने के तरीके और पते शामिल नहीं हैं.</translation>
 <translation id="2419706071571366386">सुरक्षा के लिए, आपका कंप्यूटर इस्तेमाल में नहीं होने पर साइन आउट कर दें.</translation>
+<translation id="2422125132043002186">Linux का डेटा बहाल करने की प्रक्रिया रद्द कर दी गई है</translation>
 <translation id="2423578206845792524">इमेज को इस रूप में सेव करें...</translation>
 <translation id="2428510569851653187">बताएं कि जब टैब क्रैश हुआ तब आप क्या कर रहे थे</translation>
 <translation id="2431027948063157455">Google Assistant को लोड नहीं किया जा सका, कृपया अपना नेटवर्क कनेक्शन जांच लें और फिर से कोशिश करें.</translation>
@@ -1132,7 +1135,7 @@
 <translation id="2662876636500006917">Chrome Web Store</translation>
 <translation id="2663302507110284145">भाषा</translation>
 <translation id="2665394472441560184">एक नया शब्द जोड़ें</translation>
-<translation id="2665647207431876759">समयसीमा खत्म हो गई</translation>
+<translation id="2665647207431876759">समय खत्म</translation>
 <translation id="2665717534925640469">यह पेज अब फ़ुल स्‍क्रीन है और आपका माउस कर्सर बंद कर दिया गया है.</translation>
 <translation id="2665919335226618153">हे भगवान! फ़ॉर्मेटिंग के दौरान गड़बड़ी आई.</translation>
 <translation id="2666990579225592931">मेहमान विंडो खोलें</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">ऑडियो और वीडियो इनपुट ऐक्सेस हो रहा है</translation>
 <translation id="3090819949319990166">बाहरी crx फ़ाइल की <ph name="TEMP_CRX_FILE" /> में कॉपी नहीं बनाई जा सकती.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" युग्मित किया गया</translation>
+<translation id="3092699946856346803">अपना सिम कार्ड डालें और फिर से कोशिश करें</translation>
 <translation id="3101709781009526431">तारीख और समय</translation>
 <translation id="310671807099593501">साइट ब्लूटूथ का इस्तेमाल कर रही है</translation>
 <translation id="3115147772012638511">कैश मेमोरी का इंतज़ार कर रहे हैं...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">क्वारंटाइन की जाने वाली फ़ाइलें और प्रोग्राम:</translation>
 <translation id="3282568296779691940">Chrome में साइन इन करें</translation>
 <translation id="3285322247471302225">नया &amp;टैब</translation>
+<translation id="3286654161521615710">Chrome ब्राउज़र और <ph name="DEVICE_TYPE" /> लॉन्चर इसका इस्तेमाल करते हैं</translation>
 <translation id="3286737518123001369">अपनी सुरक्षा कुंजी पर सेव किया गया साइन इन डेटा देखें और मिटाएं</translation>
 <translation id="3288047731229977326">डेवलपर मोड में चलने वाले एक्सटेंशन आपके कंप्यूटर को नुकसान पहुंचा सकते हैं. अगर आप डेवलपर नहीं हैं तो, सुरक्षित रहने के लिए आपको डेवलपर मोड मे चलने वाले इन एक्सटेंशन को बंद कर देना चाहिए.</translation>
 <translation id="3289856944988573801">अपडेट की जाँच करने के लिए, कृपया Ethernet या वाई-फ़ाई का उपयोग करें.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL सर्वर प्रमाणपत्र</translation>
 <translation id="3775705724665058594">अपने डिवाइस पर भेजें</translation>
 <translation id="3776796446459804932">यह एक्सटेंशन Chrome वेब स्टोर नीति का उल्लंघन करता है.</translation>
+<translation id="3777483481409781352">मोबाइल डिवाइस चालू नहीं किया जा सका</translation>
 <translation id="3777806571986431400">एक्सटेंशन सक्षम किया गया</translation>
 <translation id="3778152852029592020">डाउनलोड रद्द कर दिया गया था.</translation>
 <translation id="3778208826288864398">सुरक्षा कुंजी लॉक कर दी गई है क्योंकि गलत पिन कई बार डाला गया है. आपको सुरक्षा कुंजी रीसेट करनी होगी.</translation>
@@ -2137,6 +2143,7 @@
 <translation id="4131410914670010031">श्याम और श्वेत</translation>
 <translation id="4136203100490971508">सूर्योदय होने पर नाइट लाइट अपने आप बंद हो जाएगी</translation>
 <translation id="4138267921960073861">साइन इन स्‍क्रीन पर उपयोगकर्ता का नाम और फ़ोटो दिखाएं</translation>
+<translation id="4142052906269098341">अपने फ़ोन से <ph name="DEVICE_TYPE" /> को अनलॉक करें. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">बेहतर गुणवत्ता वाले वीडियो पाएं और बैटरी लाइफ़ बचाएं. वीडियो सिर्फ़ उस स्क्रीन पर चलेगा जिस पर आपने कास्ट करने की सुविधा चालू की है.</translation>
 <translation id="4145922204387553806">Assistant को अपनी स्क्रीन पर मौजूद सामग्री से जुड़ी जानकारी दिखाने दें</translation>
 <translation id="4146026355784316281">हमेशा सिस्‍टम व्‍यूअर से खोलें</translation>
@@ -2178,6 +2185,7 @@
 <translation id="42126664696688958">निर्यात करें</translation>
 <translation id="42137655013211669">इस संसाधन के लिए सर्वर ने ऐक्सेस नहीं दिया था.</translation>
 <translation id="4215350869199060536">ओह, नाम में अवैध प्रतीक हैं!</translation>
+<translation id="4220648711404560261">सेटअप पूरा करने के दौरान कुछ गड़बड़ी हुई.</translation>
 <translation id="4225397296022057997">सभी साइट पर</translation>
 <translation id="4232375817808480934">Kerberos कॉन्फ़िगर करें</translation>
 <translation id="4235200303672858594">संपूर्ण स्क्रीन</translation>
@@ -2326,6 +2334,7 @@
 <translation id="4470957202018033307">बाहरी मेमोरी प्राथमिकताएं</translation>
 <translation id="447252321002412580">Chrome के फ़ीचर और परफ़ॉर्मेंस को बेहतर बनाने में सहायता करें</translation>
 <translation id="4474155171896946103">सभी टैब बुकमार्क करें...</translation>
+<translation id="4474461121892222090">मोबाइल डेटा को चालू होने में 15 मिनट तक लग सकते हैं.</translation>
 <translation id="4475552974751346499">डाउनलोड खोजें</translation>
 <translation id="4476590490540813026">एथलीट</translation>
 <translation id="4477015793815781985">Ctrl, Alt या ⌘ को शामिल करें</translation>
@@ -2335,6 +2344,7 @@
 <translation id="4479877282574735775">वर्चुअल मशीन कॉन्फ़िगर हो रही है. इसमें कुछ मिनट लग सकते हैं.</translation>
 <translation id="4480590691557335796">Chrome आपके कंप्यूटर पर नुकसान पहुंचाने वाला सॉफ़्टवेयर ढूंढ सकता है और उसे हटा सकता है</translation>
 <translation id="4481530544597605423">अयुग्मित किए गए डिवाइस</translation>
+<translation id="4483579413421375386">साइट के लिए सूचनाएं दिखाएं</translation>
 <translation id="4495419450179050807">इस पेज पर न दिखाएं</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> बंद हो गया है</translation>
 <translation id="450099669180426158">'विस्मयादिबोधक चिह्न' आइकॉन</translation>
@@ -2438,6 +2448,7 @@
 <translation id="4647697156028544508">कृपया "<ph name="DEVICE_NAME" />" के लिए पिन दर्ज करें:</translation>
 <translation id="4648491805942548247">अपर्याप्त अनुमतियां</translation>
 <translation id="4648499713050786492">कृपया किसी व्यक्ति को जोड़ने से पहले अपनी प्रोफ़ाइल अनलॉक करें.</translation>
+<translation id="4650591383426000695">अपने फ़ोन को <ph name="DEVICE_TYPE" /> से डिसकनेक्ट करें</translation>
 <translation id="4651484272688821107">डेमो मोड संसाधनों के साथ ऑनलाइन हिस्से लोड नहीं किए जा सके.</translation>
 <translation id="465878909996028221">ब्राउज़र रीडायरेक्ट के लिए सिर्फ़ एचटीटीपी, एचटीटीपीएस और फ़ाइल प्रोटोकॉल काम करते हैं.</translation>
 <translation id="4659077111144409915">प्राथमिक खाता</translation>
@@ -2739,6 +2750,7 @@
 <translation id="5115309401544567011">कृपया अपने <ph name="DEVICE_TYPE" /> को पावर स्रोत में प्लग करें.</translation>
 <translation id="5115338116365931134">एसएसओ (SSO)</translation>
 <translation id="5116628073786783676">इस रूप में ऑडियो स&amp;हेजें...</translation>
+<translation id="5117139026559873716">अपने फ़ोन को <ph name="DEVICE_TYPE" /> से डिसकनेक्ट करें. अब वे अपने आप नहीं जुड़ेंगे.</translation>
 <translation id="5117427536932535467">थीम और वॉलपेपर</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> को सफलतापूर्वक प्रिंट किया गया</translation>
 <translation id="5117930984404104619">विज़िट किए गए यूआरएल के साथ-साथ दूसरे एक्सटेंशन के व्यवहार की निगरानी करें</translation>
@@ -2968,6 +2980,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> का इंडेक्स</translation>
 <translation id="5463856536939868464">मेन्यू में बुकमार्क छुपे हुए हैं</translation>
 <translation id="5464632865477611176">इस बार चलाएं</translation>
+<translation id="5464660706533281090">कोई भी बच्चा इस सेटिंग में बदलाव नहीं कर सकता.</translation>
 <translation id="5466374726908360271">“<ph name="SEARCH_TERMS" />” को चिपकाएं और खोजें</translation>
 <translation id="5471768120198416576">नमस्ते! मैं आपकी लिखाई को बोली में बदलने वाली आवाज़ हूं.</translation>
 <translation id="5473333559083690127">नया पिन फिर से डालें</translation>
@@ -3203,6 +3216,7 @@
 <translation id="5817918615728894473">युग्‍मित करें</translation>
 <translation id="5821565227679781414">शॉर्टकट बनाएं</translation>
 <translation id="5825412242012995131">चालू (सुुझाया गया)</translation>
+<translation id="5826395379250998812">अपने <ph name="DEVICE_TYPE" /> को फ़ोन से कनेक्ट करें. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">सामान्य नाम (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">प्रिंट हो रहा है...</translation>
@@ -3409,7 +3423,7 @@
 <translation id="6107012941649240045">इसको जारी</translation>
 <translation id="6112294629795967147">आकार बदलने के लिए छुएं</translation>
 <translation id="6112727384379533756">टिकट जोड़ें</translation>
-<translation id="6112931163620622315">अपना फ़ोन जांचें</translation>
+<translation id="6112931163620622315">अपने फ़ोन में देखें</translation>
 <translation id="6112952769866305444">व्यक्ति की जानकारी, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /> में बदलाव करें</translation>
 <translation id="6113942107547980621">Smart Lock इस्तेमाल करने के लिए, अपने डिवाइस के प्राथमिक उपयोगकर्ता की प्रोफ़ाइल पर स्विच करें</translation>
 <translation id="6116338172782435947">क्लिपबोर्ड पर कॉपी किए गए लेख और इमेज देखें</translation>
@@ -3424,6 +3438,7 @@
 <translation id="6129691635767514872">चुना गया डेटा Chrome और सिंक किए गए सभी डिवाइस से हटा दिया गया है. हो सकता है कि आपके Google खाते में खोजों और <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर अन्य Google सेवाओं की गतिविधि जैसे अन्य प्रकार के ब्राउज़िंग इतिहास मौजूद हों.</translation>
 <translation id="6129938384427316298">Netscape प्रमाणपत्र टिप्पणी</translation>
 <translation id="6129953537138746214">Space</translation>
+<translation id="6130024555057767093">जिन साइटों को आपने एक-एक करके खुद अनुमति दी है उनके अलावा, फ़िलहाल सभी साइटों के लिए सूचनाएं दिखाने की सुविधा बंद है.</translation>
 <translation id="6136114942382973861">डाउनलोड बार बंद करें</translation>
 <translation id="6137767437444130246">उपयोगकर्ता प्रमाणपत्र</translation>
 <translation id="6138680304137685902">SHA-384 के साथ X9.62 ECDSA हस्ताक्षर</translation>
@@ -3469,6 +3484,7 @@
 <translation id="620722923698527029">इस प्रकार के लिंक हमेशा उनसे जुड़े ऐप्लिकेशन में खोलें</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux ऐप्लिकेशन) इंस्टॉल करना</translation>
 <translation id="6207937957461833379">देश/क्षेत्र</translation>
+<translation id="6208521041562685716">मोबाइल डेटा चालू किया जा रहा है</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: सिंक सुविधा काम नहीं कर रही है</translation>
 <translation id="6212039847102026977">बेहतर नेटवर्क प्रॉपर्टी दिखाएं</translation>
 <translation id="6212168817037875041">डिसप्ले बंद करें</translation>
@@ -3830,6 +3846,7 @@
 <translation id="677965093459947883">बहुत छोटा</translation>
 <translation id="6780439250949340171">अन्य सेटिंग प्रबंधित करें</translation>
 <translation id="6781284683813954823">डूडल का लिंक</translation>
+<translation id="6781978626986383437">Linux का बैकअप रद्द कर दिया गया है</translation>
 <translation id="6782111308708962316">तृतीय पक्ष वेबसाइट को कुकी डेटा सहेजने और पढ़ने से रोकें</translation>
 <translation id="6786747875388722282">एक्‍सटेंशन</translation>
 <translation id="6787839852456839824">कीबोर्ड शॉर्टकट</translation>
@@ -4117,6 +4134,7 @@
 <translation id="7197632491113152433">हमें आपके खाते से ऐसे <ph name="NUMBER_OF_APPS" /> ऐप्लिकेशन मिले हैं जिनका इस्तेमाल इस डिवाइस पर किया जा सकता है.</translation>
 <translation id="7199158086730159431">स&amp;हायता पाएं</translation>
 <translation id="7200083590239651963">कॉन्फ़िगरेशन चुनें</translation>
+<translation id="7201042526153088083">अपने <ph name="DEVICE_TYPE" /> पर Google Play से ऐप्लिकेशन और गेम इंस्टॉल करें. &lt;a target="_blank" href="<ph name="URL" />"&gt;ज़्यादा जानें&lt;/a&gt;</translation>
 <translation id="720110658997053098">इस डिवाइस को हमेशा के लिए किओस्क मोड में रखें</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' मिटाया गया</translation>
 <translation id="7201420661433230412">फ़ाइलें देखें</translation>
@@ -4141,6 +4159,7 @@
 <translation id="7229570126336867161">EVDO की आवश्यकता है</translation>
 <translation id="7230787553283372882">अपने लेख के आकार को पसंद के मुताबिक बनाएं</translation>
 <translation id="7232750842195536390">नाम नहीं बदला जा सका</translation>
+<translation id="7234010996000898150">Linux का डेटा बहाल करने की प्रक्रिया रद्द की जा रही है</translation>
 <translation id="7235716375204803342">गतिविधियां लाई जा रही हैं...</translation>
 <translation id="7235737137505019098">आपकी सुरक्षा कुंजी में और खाते जोड़ने के लिए खाली जगह नहीं है.</translation>
 <translation id="7238585580608191973">SHA-256 फ़िंगरप्रिंट</translation>
@@ -4276,6 +4295,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{सभी को &amp;नई विंडो में खोलें}=1{&amp;नई विंडो में खोलें}one{सभी (#) को &amp;नई विंडो में खोलें}other{सभी (#) को &amp;नई विंडो में खोलें}}</translation>
 <translation id="7434509671034404296">डेवलपर</translation>
 <translation id="7436921188514130341">हे भगवान! नाम बदलने के दौरान गड़बड़ी हुई.</translation>
+<translation id="7437427339141948518">सूचनाएं बंद हैं</translation>
 <translation id="7438976808740265764">दिसंबर, 2020 के बाद Flash Player बंद कर दिया जाएगा.</translation>
 <translation id="7441736921018636843">यह सेटिंग बदलने के लिए, <ph name="BEGIN_LINK" />सिंक रीसेट करें<ph name="END_LINK" /> ताकि आपका सिंक करने का लंबा पासवर्ड हटाया जा सके</translation>
 <translation id="7441830548568730290">अन्य उपयोगकर्ता</translation>
@@ -4405,6 +4425,7 @@
 <translation id="7643932971554933646">साइट को फ़ाइलें देखने की अनुमति देना चाहते हैं?</translation>
 <translation id="7644543211198159466">रंग और थीम</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (मालिक)</translation>
+<translation id="7645681574855902035">Linux का बैकअप रद्द किया जा रहा है</translation>
 <translation id="7647403192093989392">कोई हाल की गतिविधि नहीं</translation>
 <translation id="7648142322539582331">'माता-पिता के नियंत्रण में' सुविधा सेट अप करने के लिए इंटरनेट से कनेक्ट करें</translation>
 <translation id="7648992873808071793">फ़ाइलों को इस डिवाइस पर संग्रहित करें</translation>
@@ -4855,6 +4876,7 @@
 <translation id="8256319818471787266">स्‍पार्की</translation>
 <translation id="8257950718085972371">कैमरे की ऐक्सेस ब्लॉक करना जारी रखें</translation>
 <translation id="8259239505248583312">आइए शुरू करें</translation>
+<translation id="8259556432390118667">हेक्स रंग मान</translation>
 <translation id="8260126382462817229">फिर से प्रवेश करके देखें</translation>
 <translation id="8260864402787962391">माउस</translation>
 <translation id="8261378640211443080">यह एक्सटेंशन <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> में सूचीबद्ध नहीं है और यह आपकी जानकारी के बिना जोड़ा गया हो सकता है.</translation>
@@ -5107,6 +5129,7 @@
 <translation id="8662911384982557515">अपना होम पेज: <ph name="HOME_PAGE" /> में बदलें</translation>
 <translation id="8662978096466608964">Chrome वॉलपेपर सेट नहीं कर सकता.</translation>
 <translation id="8663099077749055505"><ph name="HOST" /> पर एकाधिक स्वचालित डाउनलोड हमेशा ब्लॉक करें</translation>
+<translation id="8663534996262079772">क्या आप इस साइट के लिए सूचनाएं देखना चाहते हैं?</translation>
 <translation id="8664389313780386848">पेज का स्रोत &amp;देखें</translation>
 <translation id="8665180165765946056">बैकअप पूरा हुआ</translation>
 <translation id="866611985033792019">ईमेल उपयोगकर्ताओं की पहचान करने के लिए इस प्रमाणपत्र पर विश्वास करें</translation>
@@ -5396,6 +5419,7 @@
 <translation id="9065203028668620118">बदलाव करें</translation>
 <translation id="9066773882585798925">ज़ोर से पढ़ा गया लेख सुनें</translation>
 <translation id="9066782832737749352">लिखाई को बोली में बदलना</translation>
+<translation id="9068849894565669697">रंग चुनें</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">ब्लूटूथ</translation>
 <translation id="9074836595010225693">USB माउस कनेक्ट किया गया</translation>
@@ -5433,6 +5457,7 @@
 <translation id="9131487537093447019">ब्लूटूथ डिवाइस से मैसेज भेजें और मैसेज पाएं.</translation>
 <translation id="9134304429738380103">'हां, मैं सहमत हूं'.</translation>
 <translation id="9137013805542155359">मूल दिखाएं</translation>
+<translation id="9137157311132182254">पसंदीदा सर्च इंजन</translation>
 <translation id="9137916601698928395">लिंक को <ph name="USER" /> के रूप में खोलें</translation>
 <translation id="9138978632494473300">निम्न स्थानों के लिए शॉर्टकट जोड़ें:</translation>
 <translation id="9140067245205650184">आप एक काम नहीं करने वाले फ़ीचर फ़्लैग का उपयोग कर रहे हैं: <ph name="BAD_FLAG" />. स्थिरता और सुरक्षा पर इससे फ़र्क पड़ेगा.</translation>
@@ -5505,6 +5530,7 @@
 <translation id="962802172452141067">बुकमार्क फ़ोल्डर ट्री</translation>
 <translation id="964286338916298286">आपके आईटी एडमिन ने आपके डिवाइस के लिए 'Chrome के तोहफ़े' रीडीम करने की सुविधा बंद कर दी है.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{ऐप्लिकेशन}one{ऐप्लिकेशन}other{ऐप्लिकेशन}}</translation>
+<translation id="965211523698323809">अपने <ph name="DEVICE_TYPE" /> से मैसेज भेजें और पाएं. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">इससे आप अपने 'Google खातों' से साइन आउट हो जाएंगे. आपके बुकमार्क, इतिहास, पासवर्ड और दूसरी सेटिंग में किए गए बदलाव अब आपके 'Google खाते' से सिंक नहीं किए जाएंगे. हालांकि, आपका मौजूदा डेटा आपके 'Google खाते' में संग्रहित रहेगा और <ph name="BEGIN_LINK" />Google डैशबोर्ड<ph name="END_LINK" /> पर प्रबंधित किया जा सकेगा.</translation>
 <translation id="967624055006145463">डेटा संग्रहित किया गया</translation>
 <translation id="968000525894980488">Google Play सेवाएं चालू करें.</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index cea45cf..e714000 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Zatražena je operacija čitanja ili zapisivanja s nevažećim odstupanjem na uređaju: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Prije nego što se prijavite, uđite kao gost da biste aktivirali mrežu <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Uvijek prevedi <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Nismo uspjeli otkriti SIM karticu</translation>
 <translation id="1108600514891325577">&amp;Stop (Zaustavi)</translation>
 <translation id="1110155001042129815">Čekaj</translation>
 <translation id="1112420131909513020">Pozadinska kartica upotrebljava Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Administrator je onemogućio sinkronizaciju.</translation>
 <translation id="2127372758936585790">Punjač male snage</translation>
 <translation id="212862741129535676">Postotak zauzetosti u stanju učestalosti</translation>
+<translation id="212876957201860463">Priprema za postavljanje mobilnog uređaja...</translation>
 <translation id="2129825002735785149">Ažurirajte dodatak</translation>
 <translation id="2131077480075264">Nije moguće instalirati aplikaciju "<ph name="APP_NAME" />" jer je "<ph name="IMPORT_NAME" />" ne dopušta</translation>
 <translation id="21354425047973905">Skrivanje PIN-ova</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Podaci su kriptirani vašom Google zaporkom od
           <ph name="TIME" />. To ne uključuje načine plaćanja i adrese s Google Paya.</translation>
 <translation id="2419706071571366386">Iz sigurnosnih razloga odjavite se kad ne upotrebljavate računalo.</translation>
+<translation id="2422125132043002186">Otkazano je vraćanje Linuxa</translation>
 <translation id="2423578206845792524">Sp&amp;remi sliku kao...</translation>
 <translation id="2428510569851653187">Opišite što ste radili kada se kartica srušila</translation>
 <translation id="2431027948063157455">Učitavanje Google asistenta nije uspjelo, provjerite mrežnu vezu i pokušajte ponovo.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Pristupanje audio i videoulazu</translation>
 <translation id="3090819949319990166">Nije moguće kopiranje crx datoteke u <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Upareno: "<ph name="DEVICE_NAME" />"</translation>
+<translation id="3092699946856346803">Umetnite SIM karticu i pokušajte ponovo</translation>
 <translation id="3101709781009526431">Datum i vrijeme</translation>
 <translation id="310671807099593501">Web-lokacija upotrebljava Bluetooth</translation>
 <translation id="3115147772012638511">Čekanje predmemorije...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Datoteke i programi za karantenu:</translation>
 <translation id="3282568296779691940">Prijavite se u Chrome</translation>
 <translation id="3285322247471302225">Nova &amp;kartica</translation>
+<translation id="3286654161521615710">Upotrebljavaju je preglednik Chrome i pokretač uređaja <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Prikaz i brisanje podataka za prijavu pohranjenih na sigurnosnom ključu</translation>
 <translation id="3288047731229977326">Proširenja pokrenuta u načinu rada razvojnog programera mogu naštetiti vašem računalu. Ako niste razvojni programer, trebali biste onemogućiti proširenja koja su pokrenuta u načinu rada razvojnog programera radi svoje zaštite.</translation>
 <translation id="3289856944988573801">Da biste provjerili ima li ažuriranja, upotrijebite Ethernet ili Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Certifikat SSL poslužitelja</translation>
 <translation id="3775705724665058594">Pošaljite na svoje uređaje</translation>
 <translation id="3776796446459804932">To proširenje krši pravila Chrome web-trgovine.</translation>
+<translation id="3777483481409781352">Nije uspjela aktivacija mobilnog uređaja</translation>
 <translation id="3777806571986431400">Proširenje omogućeno</translation>
 <translation id="3778152852029592020">Preuzimanje je otkazano.</translation>
 <translation id="3778208826288864398">Sigurnosni je ključ zaključan jer je previše puta unesen pogrešan PIN. Morat ćete vratiti sigurnosni ključ na zadano.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Crno-bijelo</translation>
 <translation id="4136203100490971508">Noćno svjetlo automatski će se isključiti nakon izlaska sunca</translation>
 <translation id="4138267921960073861">Prikaži korisnička imena i fotografije na zaslonu za prijavu</translation>
+<translation id="4142052906269098341">Otključajte <ph name="DEVICE_TYPE" /> telefonom. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Gledajte videozapise u boljoj kvaliteti i štedite bateriju. Videozapisi će se reproducirati samo na zaslonu koji podržava Cast.</translation>
 <translation id="4145922204387553806">Dopustite Asistentu da vam prikaže informacije povezane sa sadržajem zaslona</translation>
 <translation id="4146026355784316281">Uvijek otvori u pregledniku sustava</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Izvezi</translation>
 <translation id="42137655013211669">Pristup tom resursu zabranio je poslužitelj.</translation>
 <translation id="4215350869199060536">Ups, nedopušteni simboli u imenu!</translation>
+<translation id="4220648711404560261">Došlo je do pogreške prilikom aktivacije.</translation>
 <translation id="4225397296022057997">Na svim web-lokacijama</translation>
 <translation id="4232375817808480934">Konfigurirajte Kerberos</translation>
 <translation id="4235200303672858594">Cijeli zaslon</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Postavke vanjske pohrane</translation>
 <translation id="447252321002412580">Pomozite poboljšati Chromeove značajke i izvedbu</translation>
 <translation id="4474155171896946103">Označi sve kartice...</translation>
+<translation id="4474461121892222090">Aktivacija mobilnih podataka može potrajati do 15 minuta.</translation>
 <translation id="4475552974751346499">Pretraži preuzimanja</translation>
 <translation id="4476590490540813026">Sportaš</translation>
 <translation id="4477015793815781985">Mora sadržavati Ctrl, Alt ili ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Konfigurira se virtualno računalo. To može potrajati nekoliko minuta.</translation>
 <translation id="4480590691557335796">Chrome može pronaći i ukloniti štetni softver na vašem računalu</translation>
 <translation id="4481530544597605423">Neupareni uređaji</translation>
+<translation id="4483579413421375386">Prikaži za web-lokaciju</translation>
 <translation id="4495419450179050807">Ne prikazuj na ovoj stranici</translation>
 <translation id="4500114933761911433">Srušio se dodatak <ph name="PLUGIN_NAME" /></translation>
 <translation id="450099669180426158">Ikona uskličnika</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Unesite PIN-a za uređaj "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Nedovoljne dozvole</translation>
 <translation id="4648499713050786492">Otključajte profil da biste mogli dodati osobu.</translation>
+<translation id="4650591383426000695">Prekinite vezu između svog telefona i uređaja <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Nije uspjelo učitavanje online komponente s resursima demo načina.</translation>
 <translation id="465878909996028221">Za preusmjeravanja preglednika podržani su samo protokoli http i https te datotečni protokoli.</translation>
 <translation id="4659077111144409915">Primarni račun</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Priključite uređaj <ph name="DEVICE_TYPE" /> u izvor napajanja.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sp&amp;remi zvučni zapis kao...</translation>
+<translation id="5117139026559873716">Prekinite vezu telefona s uređajem <ph name="DEVICE_TYPE" />. Više se neće povezivati automatski.</translation>
 <translation id="5117427536932535467">Teme i pozadinske slike</translation>
 <translation id="5117625797180141189">Dokument <ph name="DOCUMENT_NAME" /> uspješno je ispisan</translation>
 <translation id="5117930984404104619">nadzirati ponašanje drugih proširenja, uključujući posjećene URL-ove</translation>
@@ -2965,10 +2977,11 @@
 <translation id="5457599981699367932">Pregledavaj kao gost</translation>
 <translation id="5457991019809708398">Uključeno, bez roaminga</translation>
 <translation id="5458998536542739734">Bilješke na zaključanom zaslonu</translation>
-<translation id="5463231940765244860">Uđite</translation>
+<translation id="5463231940765244860">Unos PIN-a</translation>
 <translation id="5463275305984126951">Indeks za <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Izbornik koji sadrži skrivene oznake</translation>
 <translation id="5464632865477611176">Ovaj put pokreni</translation>
+<translation id="5464660706533281090">Tu postavku ne može promijeniti korisnik koji je dijete.</translation>
 <translation id="5466374726908360271">Za&amp;lijepi i traži pojam "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Bok! Ja sam vaš glas alata za pretvaranje teksta u govor.</translation>
 <translation id="5473333559083690127">Ponovo unesite novi PIN</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Upari</translation>
 <translation id="5821565227679781414">Stvori prečac</translation>
 <translation id="5825412242012995131">Uključeno (preporučeno)</translation>
+<translation id="5826395379250998812">Povežite <ph name="DEVICE_TYPE" /> s telefonom <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Uobičajeni naziv (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Ispis...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Odabrani podaci uklonjeni su iz Chromea i sa sinkroniziranih uređaja. Na Google računu možda postoje drugi oblici povijesti pregledavanja, primjerice pretraživanja i aktivnosti s drugih Googleovih usluga, na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Komentar Netscape certifikata</translation>
 <translation id="6129953537138746214">Razmak</translation>
+<translation id="6130024555057767093">Obavijesti su trenutačno blokirane za sve web-lokacije osim za one koje pojedinačno dopustite.</translation>
 <translation id="6136114942382973861">Zatvori traku preuzimanja</translation>
 <translation id="6137767437444130246">Korisnički certifikat</translation>
 <translation id="6138680304137685902">X9.62 ECDSA potpis uz SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Uvijek otvaraj tu vrstu veza u povezanoj aplikaciji</translation>
 <translation id="6207282396926186323">Instaliraj aplikaciju <ph name="APP_NAME" /> (Linux apl.)</translation>
 <translation id="6207937957461833379">Zemlja/regija</translation>
+<translation id="6208521041562685716">U tijeku je aktivacija mobilnih podataka</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: sinkronizacija ne funkcionira</translation>
 <translation id="6212039847102026977">Prikaži napredna svojstva mreže</translation>
 <translation id="6212168817037875041">Isključi zaslon</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Vrlo mali</translation>
 <translation id="6780439250949340171">upravljati ostalim postavkama</translation>
 <translation id="6781284683813954823">Veza za doodle logotip</translation>
+<translation id="6781978626986383437">Otkazano je sigurnosno kopiranje Linuxa</translation>
 <translation id="6782111308708962316">Onemogući web-lokacijama treće strane da spremaju i čitaju podatke kolačića.</translation>
 <translation id="6786747875388722282">Proširenja</translation>
 <translation id="6787839852456839824">Tipkovnički prečaci</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Pronašli smo <ph name="NUMBER_OF_APPS" /> aplik. s vašeg računa koje se mogu upotrebljavati na ovom uređaju.</translation>
 <translation id="7199158086730159431">P&amp;omoć</translation>
 <translation id="7200083590239651963">Odabir konfiguracije</translation>
+<translation id="7201042526153088083">Instalirajte aplikacije i igre s Google Playa na <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Saznajte više&lt;/a&gt;</translation>
 <translation id="720110658997053098">Trajno zadrži uređaj u načinu kioska</translation>
 <translation id="7201118060536064622">Izbrisana je stavka "<ph name="DELETED_ITEM_NAME" />"</translation>
 <translation id="7201420661433230412">Pregled datoteka</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Potreban je EVDO</translation>
 <translation id="7230787553283372882">Prilagodba veličine teksta</translation>
 <translation id="7232750842195536390">Preimenovanje nije uspjelo</translation>
+<translation id="7234010996000898150">Otkazivanje vraćanja Linuxa</translation>
 <translation id="7235716375204803342">Dohvaćanje aktivnosti...</translation>
 <translation id="7235737137505019098">Na sigurnosnom ključu nema dovoljno prostora za izradu novih računa.</translation>
 <translation id="7238585580608191973">SHA-256 otisak prsta</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Otvori sve u &amp;novom prozoru}=1{Otvori u &amp;novom prozoru}one{Otvori sve (#) u &amp;novom prozoru}few{Otvori sve (#) u &amp;novom prozoru}other{Otvori sve (#) u &amp;novom prozoru}}</translation>
 <translation id="7434509671034404296">Razvojni programer</translation>
 <translation id="7436921188514130341">O, ne! Došlo je do pogreške prilikom preimenovanja.</translation>
+<translation id="7437427339141948518">Obavijesti su isključene</translation>
 <translation id="7438976808740265764">Flash Player više neće biti podržan nakon prosinca 2020.</translation>
 <translation id="7441736921018636843">Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /> radi uklanjanja vaše šifre za sinkronizaciju</translation>
 <translation id="7441830548568730290">Ostali korisnici</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Želite li dopustiti web-lokaciji da pregleda datoteke?</translation>
 <translation id="7644543211198159466">Boja i tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (vlasnik)</translation>
+<translation id="7645681574855902035">Otkazivanje sigurnosnog kopiranja Linuxa</translation>
 <translation id="7647403192093989392">Nema nedavne aktivnosti</translation>
 <translation id="7648142322539582331">Povežite se s internetom da biste postavili Roditeljski nadzor</translation>
 <translation id="7648992873808071793">spremati datoteke na uređaj</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Bobi</translation>
 <translation id="8257950718085972371">Nastavi blokirati pristup kameri</translation>
 <translation id="8259239505248583312">Započnimo</translation>
+<translation id="8259556432390118667">Heksadecimalna vrijednost boje</translation>
 <translation id="8260126382462817229">Ponovo se pokušajte prijaviti</translation>
 <translation id="8260864402787962391">Miš</translation>
 <translation id="8261378640211443080">To proširenje nije navedeno u trgovini <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i možda je dodano bez vašeg znanja.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">promijeniti vašu početnu stranicu u: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome ne može postaviti pozadinu.</translation>
 <translation id="8663099077749055505">Uvijek blokiraj višestruka automatska preuzimanja na hostu <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Želite li da se prikazuju obavijesti za tu web-lokaciju?</translation>
 <translation id="8664389313780386848">&amp;Pogledaj izvor stranice</translation>
 <translation id="8665180165765946056">Dovršeno je sigurnosno kopiranje</translation>
 <translation id="866611985033792019">Vjeruj ovom certifikatu za identificiranje korisnika e-pošte</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Uredi</translation>
 <translation id="9066773882585798925">Slušanje teksta izgovorenog naglas</translation>
 <translation id="9066782832737749352">Pretvaranje teksta u govor</translation>
+<translation id="9068849894565669697">Odaberite boju</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB miš povezan</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">slati poruke na Bluetooth uređaje i primati poruke s njih</translation>
 <translation id="9134304429738380103">Da, pristajem.</translation>
 <translation id="9137013805542155359">Prikaži original</translation>
+<translation id="9137157311132182254">Željena tražilica</translation>
 <translation id="9137916601698928395">Otvori vezu kao <ph name="USER" /></translation>
 <translation id="9138978632494473300">Dodajte prečace na sljedećim mjestima:</translation>
 <translation id="9140067245205650184">Upotrebljavate nepodržanu oznaku značajke: <ph name="BAD_FLAG" />. Ugrožena je stabilnost i sigurnost.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Stablo mape oznaka</translation>
 <translation id="964286338916298286">Vaš IT administrator onemogućio je Chrome pogodnosti za vaš uređaj.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplikacija}one{Aplikacije}few{Aplikacije}other{Aplikacija}}</translation>
+<translation id="965211523698323809">Šaljite i primajte tekstne poruke na uređaju <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Time ćete se odjaviti s Google računa. Promjene oznaka, povijesti, zaporki i drugih postavki više se neće sinkronizirati s vašim Google računom. No vaši postojeći podaci ostat će pohranjeni na vašem Google računu i možete upravljati njima na <ph name="BEGIN_LINK" />Google nadzornoj ploči<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Pohranjeni podaci</translation>
 <translation id="968000525894980488">Uključite Google Play usluge.</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index f0a5d3f..012ba775 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Az olvasási vagy írási művelet érvénytelen eltolással lett kérve a következőn: „<ph name="DEVICE_NAME" />”.</translation>
 <translation id="1097658378307015415">Kérjük, bejelentkezés előtt a(z) <ph name="NETWORK_ID" /> hálózat aktiválásához lépjen be vendégként.</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> - mindig legyen lefordítva</translation>
+<translation id="1104038495841596279">Nem található a SIM-kártya</translation>
 <translation id="1108600514891325577">&amp;Leállítás</translation>
 <translation id="1110155001042129815">Várakozás</translation>
 <translation id="1112420131909513020">A háttérben futó lap Bluetooth-t használ</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">A szinkronizálást letiltotta a rendszergazda.</translation>
 <translation id="2127372758936585790">Kis teljesítményű töltő</translation>
 <translation id="212862741129535676">Órajel lefoglaltsága százalékban</translation>
+<translation id="212876957201860463">A mobileszköz beállításának előkészítése…</translation>
 <translation id="2129825002735785149">Beépülő modul frissítése</translation>
 <translation id="2131077480075264">A(z) „<ph name="APP_NAME" />” telepítése sikertelen, mivel azt a(z) „<ph name="IMPORT_NAME" />” nem engedélyezi.</translation>
 <translation id="21354425047973905">PIN-kódok elrejtése</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Az adatok titkosítva lettek Google-jelszavával ekkor:
           <ph name="TIME" />. Ez nem tartalmazza a Google Payben megadott fizetési módokat és címeket.</translation>
 <translation id="2419706071571366386">A biztonság érdekében jelentkezzen ki, amikor nem használja a számítógépet.</translation>
+<translation id="2422125132043002186">A Linux-visszaállítás megszakítva</translation>
 <translation id="2423578206845792524">Ké&amp;p mentése másként...</translation>
 <translation id="2428510569851653187">Írja le, hogy mit csinált a lap összeomlásakor</translation>
 <translation id="2431027948063157455">A Google Segéd betöltése sikertelen volt. Ellenőrizze a hálózati kapcsolatot, majd próbálja újra.</translation>
@@ -1425,6 +1428,7 @@
 <translation id="3090193911106258841">Hozzáférés a hang- és videobementhez</translation>
 <translation id="3090819949319990166">A külső crx-fájl nem másolható a következő helyre: <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">„<ph name="DEVICE_NAME" />” párosítva</translation>
+<translation id="3092699946856346803">Helyezze be a SIM-kártyát, és próbálja újra</translation>
 <translation id="3101709781009526431">Dátum és idő</translation>
 <translation id="310671807099593501">A webhely Bluetooth-t használ</translation>
 <translation id="3115147772012638511">Betöltés a gyorsítótárból folyamatban...</translation>
@@ -1532,6 +1536,7 @@
 <translation id="3281892622610078515">Karanténba helyezendő fájlok és programok:</translation>
 <translation id="3282568296779691940">Bejelentkezés a Chrome-ba</translation>
 <translation id="3285322247471302225">Új lap</translation>
+<translation id="3286654161521615710">A Chrome böngésző és a <ph name="DEVICE_TYPE" /> indítója használja</translation>
 <translation id="3286737518123001369">A biztonsági hardverkulcson tárolt bejelentkezési adatok megtekintése és törlése</translation>
 <translation id="3288047731229977326">A fejlesztői módban futó bővítmények kárt okozhatnak számítógépén. Ha Ön nem fejlesztő, akkor a biztonság kedvéért kapcsolja ki a fejlesztői módban futó bővítményeket.</translation>
 <translation id="3289856944988573801">Kérjük, frissítések kereséséhez Ethernetet vagy Wi-Fit használjon.</translation>
@@ -1876,6 +1881,7 @@
 <translation id="3775432569830822555">SSL-szerver tanúsítvány</translation>
 <translation id="3775705724665058594">Küldés a saját eszközökre</translation>
 <translation id="3776796446459804932">A bővítmény sérti a Chrome Internetes áruház irányelvét.</translation>
+<translation id="3777483481409781352">Nem sikerült a mobileszköz aktiválása</translation>
 <translation id="3777806571986431400">Bővítmény engedélyezve</translation>
 <translation id="3778152852029592020">Letöltés megszakítva.</translation>
 <translation id="3778208826288864398">A biztonsági hardverkulcs zárolva van, mert túl sokszor lett megadva helytelen PIN-kód. Vissza kell állítania a biztonsági hardverkulcsot.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Fekete-fehér</translation>
 <translation id="4136203100490971508">Az Éjszakai fény automatikusan kikapcsol napkeltekor</translation>
 <translation id="4138267921960073861">Felhasználónevek és képek megjelenítése a bejelentkezési oldalon</translation>
+<translation id="4142052906269098341">Feloldhatja <ph name="DEVICE_TYPE" /> eszközét telefonjával. <ph name="LINK_BEGIN" />További információ.<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Jobb videóminőséget és hosszabb akkumulátor-üzemidőt biztosít. A videókat csak a Cast-kompatibilis képernyőn játssza le a rendszer.</translation>
 <translation id="4145922204387553806">A Segéd a képernyő tartalmához kapcsolódó információkat jeleníthet meg</translation>
 <translation id="4146026355784316281">Megnyitás mindig a rendszer megtekintőjével</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Exportálás</translation>
 <translation id="42137655013211669">A szerver letiltotta a hozzáférést ehhez az erőforráshoz.</translation>
 <translation id="4215350869199060536">Hoppá! A név helytelen szimbólumokat tartalmaz.</translation>
+<translation id="4220648711404560261">Hiba történt az aktiválás során.</translation>
 <translation id="4225397296022057997">Az összes webhelyen</translation>
 <translation id="4232375817808480934">A Kerberos konfigurálása</translation>
 <translation id="4235200303672858594">Teljes képernyő</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Külső tárhely beállításai</translation>
 <translation id="447252321002412580">Segítség a Chrome funkcióinak és teljesítményének javítása érdekében</translation>
 <translation id="4474155171896946103">Összes lap hozzáadása a könyvjelzőkhöz...</translation>
+<translation id="4474461121892222090">A mobiladatok aktiválása akár 15 percet is igénybe vehet.</translation>
 <translation id="4475552974751346499">Letöltések keresése</translation>
 <translation id="4476590490540813026">Atléta</translation>
 <translation id="4477015793815781985">Használja a Ctrl, az Alt vagy a ⌘ billentyűk egyikét</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">A virtuális gép konfigurálása folyamatban van. Ez eltarthat néhány percig.</translation>
 <translation id="4480590691557335796">A Chrome képes a számítógépen lévő kártékony szoftverek megkeresésére és eltávolítására</translation>
 <translation id="4481530544597605423">Párosítatlan eszközök</translation>
+<translation id="4483579413421375386">Megjelenítés ennél a webhelynél</translation>
 <translation id="4495419450179050807">Ne jelenjen meg ezen az oldalon</translation>
 <translation id="4500114933761911433">A(z) <ph name="PLUGIN_NAME" /> összeomlott</translation>
 <translation id="450099669180426158">Felkiáltójel ikon</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Kérjük, adja meg a(z) "<ph name="DEVICE_NAME" />" PIN kódját:</translation>
 <translation id="4648491805942548247">Elégtelen engedélyek</translation>
 <translation id="4648499713050786492">Mielőtt hozzáadna valakit, oldja fel profilját.</translation>
+<translation id="4650591383426000695">A telefon leválasztása a következőről: <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Nem sikerült betölteni az online komponenst a demó mód forrásaival.</translation>
 <translation id="465878909996028221">A böngészőátirányítások esetén csak a http-, https- és fájlprotokollok támogatottak.</translation>
 <translation id="4659077111144409915">Elsődleges fiók</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Csatlakoztassa <ph name="DEVICE_TYPE" /> eszközét áramforráshoz.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">H&amp;ang mentése másként...</translation>
+<translation id="5117139026559873716">Telefon leválasztása a <ph name="DEVICE_TYPE" /> eszközről. Ezt követően nem kapcsolódnak majd egymáshoz automatikusan.</translation>
 <translation id="5117427536932535467">Témák és háttérképek</translation>
 <translation id="5117625797180141189">Sikerült a következő nyomtatása: <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Más bővítmények viselkedésének megfigyelése, beleértve a felkeresett URL-eket</translation>
@@ -2970,6 +2982,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> indexe</translation>
 <translation id="5463856536939868464">Rejtett könyvjelzőket tartalmazó menü</translation>
 <translation id="5464632865477611176">Futtatás most</translation>
+<translation id="5464660706533281090">Ezt a beállítást nem módosíthatja gyermek felhasználó.</translation>
 <translation id="5466374726908360271">„<ph name="SEARCH_TERMS" />” be&amp;illesztése és keresése</translation>
 <translation id="5471768120198416576">Üdvözlöm! A szövegfelolvasó az én hangomon szólal majd meg.</translation>
 <translation id="5473333559083690127">Írja be újra az új PIN-kódot</translation>
@@ -3206,6 +3219,7 @@
 <translation id="5817918615728894473">Párosítás</translation>
 <translation id="5821565227679781414">Parancsikon létrehozása</translation>
 <translation id="5825412242012995131">Be (javasolt)</translation>
+<translation id="5826395379250998812">Csatlakoztassa <ph name="DEVICE_TYPE" /> eszközét telefonjához. <ph name="LINK_BEGIN" />További információ.<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Név (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Nyomtatás...</translation>
@@ -3427,6 +3441,7 @@
 <translation id="6129691635767514872">A kiválasztott adatokat eltávolítottuk a Chrome-ból és a szinkronizált eszközökről. Előfordulhat, hogy Google-fiókjában (a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> címen) még szerepelnek a böngészési előzmények egyéb formái, például az egyéb Google-szolgáltatásokban végzett keresései és tevékenységei.</translation>
 <translation id="6129938384427316298">Netscape tanúsítvány - megjegyzés</translation>
 <translation id="6129953537138746214">Szóköz</translation>
+<translation id="6130024555057767093">Az értesítések jelenleg minden webhelynél le vannak tiltva, kivéve azoknál, amelyeket Ön külön engedélyez.</translation>
 <translation id="6136114942382973861">A letöltéssáv bezárása</translation>
 <translation id="6137767437444130246">Felhasználói tanúsítvány</translation>
 <translation id="6138680304137685902">X9.62 ECDSA aláírás a következővel: SHA-384</translation>
@@ -3472,6 +3487,7 @@
 <translation id="620722923698527029">Az ilyen típusú linkeket mindig a társított alkalmazás nyissa meg</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> telepítése (Linux-alkalmazás)</translation>
 <translation id="6207937957461833379">Ország/Régió</translation>
+<translation id="6208521041562685716">Mobiladatok aktiválása…</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: A szinkronizálás nem működik</translation>
 <translation id="6212039847102026977">Speciális hálózati tulajdonságok megjelenítése</translation>
 <translation id="6212168817037875041">A kijelző kikapcsol</translation>
@@ -3833,6 +3849,7 @@
 <translation id="677965093459947883">Nagyon kicsi</translation>
 <translation id="6780439250949340171">egyéb beállítások kezelése</translation>
 <translation id="6781284683813954823">Ünnepi embléma linkje</translation>
+<translation id="6781978626986383437">A Linux biztonsági mentése meg lett szakítva</translation>
 <translation id="6782111308708962316">Megakadályozza, hogy harmadik felek webhelyei mentsék és olvassák a cookie-adatokat.</translation>
 <translation id="6786747875388722282">Bővítmények</translation>
 <translation id="6787839852456839824">Billentyűkódok</translation>
@@ -4120,6 +4137,7 @@
 <translation id="7197632491113152433"><ph name="NUMBER_OF_APPS" /> olyan alkalmazást találtunk a fiókjában, amely használható ezen az eszközön.</translation>
 <translation id="7199158086730159431">Súgó</translation>
 <translation id="7200083590239651963">Konfiguráció kiválasztása</translation>
+<translation id="7201042526153088083">Alkalmazásokat és játékokat telepíthet a Google Playről <ph name="DEVICE_TYPE" /> eszközére. &lt;a target="_blank" href="<ph name="URL" />"&gt;További információ.&lt;/a&gt;</translation>
 <translation id="720110658997053098">Az eszköz állandó kioszk módban tartása</translation>
 <translation id="7201118060536064622">„<ph name="DELETED_ITEM_NAME" />” törölve</translation>
 <translation id="7201420661433230412">Fájlok megtekintése</translation>
@@ -4144,6 +4162,7 @@
 <translation id="7229570126336867161">EVDO szükséges</translation>
 <translation id="7230787553283372882">Szövegméret személyre szabása</translation>
 <translation id="7232750842195536390">Az átnevezés nem sikerült</translation>
+<translation id="7234010996000898150">A Linux-visszaállítás megszakítása…</translation>
 <translation id="7235716375204803342">Tevékenységek lekérése…</translation>
 <translation id="7235737137505019098">A biztonsági hardverkulcson nincs elég hely további fiókok számára.</translation>
 <translation id="7238585580608191973">SHA-256 ujjlenyomat</translation>
@@ -4279,6 +4298,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Összes meg&amp;nyitása új ablakban}=1{Meg&amp;nyitás új ablakban}other{Összes (#) meg&amp;nyitása új ablakban}}</translation>
 <translation id="7434509671034404296">Fejlesztőknek</translation>
 <translation id="7436921188514130341">Ajjaj! Hiba történt az átnevezés közben.</translation>
+<translation id="7437427339141948518">Értesítések kikapcsolva</translation>
 <translation id="7438976808740265764">A böngésző 2020 decembere után már nem támogatja a Flash Player használatát.</translation>
 <translation id="7441736921018636843">A beállítás módosításához <ph name="BEGIN_LINK" />állítsa alaphelyzetbe a szinkronizálást<ph name="END_LINK" />, hogy eltávolíthassa összetett szinkronizálási jelszavát.</translation>
 <translation id="7441830548568730290">Más felhasználók</translation>
@@ -4408,6 +4428,7 @@
 <translation id="7643932971554933646">Engedélyezi a webhelynek a fájlok megtekintését?</translation>
 <translation id="7644543211198159466">Szín és téma</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (tulajdonos)</translation>
+<translation id="7645681574855902035">A Linux biztonsági mentésének megszakítása…</translation>
 <translation id="7647403192093989392">Nem volt tevékenység mostanában</translation>
 <translation id="7648142322539582331">A Szülői felügyelet beállításához csatlakozzon az internethez</translation>
 <translation id="7648992873808071793">Fájlok tárolása ezen az eszközön</translation>
@@ -4859,6 +4880,7 @@
 <translation id="8256319818471787266">Bundi</translation>
 <translation id="8257950718085972371">Kamera-hozzáférés tiltásának fenntartása</translation>
 <translation id="8259239505248583312">Kezdjük</translation>
+<translation id="8259556432390118667">Hexadecimális színérték</translation>
 <translation id="8260126382462817229">Próbáljon meg újra bejelentkezni</translation>
 <translation id="8260864402787962391">Egér</translation>
 <translation id="8261378640211443080">A bővítmény nem a(z) <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> szolgáltatásból származik, és előfordulhat, hogy az Ön tudta nélkül lett telepítve.</translation>
@@ -5111,6 +5133,7 @@
 <translation id="8662911384982557515">Kezdőlap módosítása a következőre: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">A Chrome nem tud háttérképet beállítani.</translation>
 <translation id="8663099077749055505">Mindig blokkolja több fájl automatikus letöltését itt: <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Engedélyezi az értesítések megjelenítését ennél a webhelynél?</translation>
 <translation id="8664389313780386848">&amp;Oldal forrásának megtekintése</translation>
 <translation id="8665180165765946056">A biztonsági mentés befejeződött</translation>
 <translation id="866611985033792019">Bízzon meg ebben a tanúsítványban e-mail-felhasználók azonosításakor</translation>
@@ -5400,6 +5423,7 @@
 <translation id="9065203028668620118">Szerkesztés</translation>
 <translation id="9066773882585798925">Szöveg felolvastatása</translation>
 <translation id="9066782832737749352">Szövegfelolvasás</translation>
+<translation id="9068849894565669697">Szín kiválasztása</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-egér csatlakoztatva</translation>
@@ -5437,6 +5461,7 @@
 <translation id="9131487537093447019">Üzenetek küldése és fogadása Bluetooth-eszközöknek, illetve Bluetooth-eszközöktől.</translation>
 <translation id="9134304429738380103">Igen, elfogadom.</translation>
 <translation id="9137013805542155359">Eredeti megjelenítése</translation>
+<translation id="9137157311132182254">Elsődleges keresőmotor</translation>
 <translation id="9137916601698928395">Link megnyitása mint <ph name="USER" /></translation>
 <translation id="9138978632494473300">Parancsikonok hozzáadása a következő helyekhez:</translation>
 <translation id="9140067245205650184">Nem támogatott funkciókapcsolót használ: <ph name="BAD_FLAG" />. Ennek a stabilitás és a biztonság látja kárát.</translation>
@@ -5509,6 +5534,7 @@
 <translation id="962802172452141067">Könyvjelzők mapparendszere</translation>
 <translation id="964286338916298286">Rendszergazdája letiltotta a Chrome-ajánlatokat az Ön eszközén.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Alkalmazás}other{Alkalmazások}}</translation>
+<translation id="965211523698323809">SMS-t küldhet és fogadhat <ph name="DEVICE_TYPE" /> eszközével. <ph name="LINK_BEGIN" />További információ.<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Ezzel kijelentkezik Google-fiókjaiból. A könyvjelzők, előzmények, jelszavak és egyéb beállítások módosításai nem lesznek szinkronizálva Google-fiókjával. Meglévő adatait azonban továbbra is tárolja Google-fiókja, és ezeket az adatokat a <ph name="BEGIN_LINK" />Google Irányítópulton<ph name="END_LINK" /> kezelheti.</translation>
 <translation id="967624055006145463">Tárolt adatok</translation>
 <translation id="968000525894980488">Kapcsolja be a Google Play-szolgáltatásokat.</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index ecd89f14..d3fdb24e 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Operasi baca atau tulis diminta dengan offset yang tidak valid di: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Sebelum masuk, masuklah sebagai Tamu untuk mengaktifkan jaringan <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Selalu terjemahkan <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Kami tidak dapat mendeteksi kartu SIM Anda</translation>
 <translation id="1108600514891325577">&amp;Berhenti</translation>
 <translation id="1110155001042129815">Tunggu</translation>
 <translation id="1112420131909513020">Tab background menggunakan bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Sinkronisasi dinonaktifkan oleh administrator Anda.</translation>
 <translation id="2127372758936585790">Pengisi daya rendah</translation>
 <translation id="212862741129535676">Persentase Pemakaian Status Frekuensi</translation>
+<translation id="212876957201860463">Menyiapkan perangkat seluler...</translation>
 <translation id="2129825002735785149">Perbarui plugin</translation>
 <translation id="2131077480075264">Tidak dapat memasang "<ph name="APP_NAME" />" karena tidak diizinkan oleh "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Sembunyikan PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Data dienkripsi dengan sandi Google Anda mulai tanggal
 <ph name="TIME" />. Data ini tidak mencakup alamat dan metode pembayaran dari Google Pay.</translation>
 <translation id="2419706071571366386">Untuk keamanan, logout jika komputer tidak digunakan.</translation>
+<translation id="2422125132043002186">Pemulihan Linux dibatalkan</translation>
 <translation id="2423578206845792524">Sim&amp;pan gambar sebagai...</translation>
 <translation id="2428510569851653187">Jelaskan yang Anda lakukan saat tab error</translation>
 <translation id="2431027948063157455">Asisten Google tidak dapat dimuat, periksa sambungan internet dan coba lagi.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Mengakses masukan audio dan video</translation>
 <translation id="3090819949319990166">Tidak dapat menyalin file crx eksternal ke <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" disandingkan</translation>
+<translation id="3092699946856346803">Masukkan SIM Anda dan coba lagi</translation>
 <translation id="3101709781009526431">Tanggal dan waktu</translation>
 <translation id="310671807099593501">Situs sedang menggunakan bluetooth</translation>
 <translation id="3115147772012638511">Menunggu cache...</translation>
@@ -1529,6 +1533,7 @@
 <translation id="3281892622610078515">File dan program yang akan dikarantina:</translation>
 <translation id="3282568296779691940">Login ke Chrome</translation>
 <translation id="3285322247471302225">&amp;Tab Baru</translation>
+<translation id="3286654161521615710">Digunakan oleh browser Chrome dan peluncur <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Lihat dan hapus data login yang disimpan di kunci keamanan Anda</translation>
 <translation id="3288047731229977326">Ekstensi yang berjalan dalam mode pengembang dapat membahayakan komputer Anda. Jika Anda bukan pengembang, Anda sebaiknya menonaktifkan ekstensi yang berjalan dalam mode pengembang ini agar tetap aman.</translation>
 <translation id="3289856944988573801">Untuk memeriksa pembaruan, gunakan Ethernet atau Wi-Fi.</translation>
@@ -1873,6 +1878,7 @@
 <translation id="3775432569830822555">Sertifikat Server SSL</translation>
 <translation id="3775705724665058594">Kirim ke perangkat Anda</translation>
 <translation id="3776796446459804932">Ekstensi ini melanggar kebijakan Chrome Webstore.</translation>
+<translation id="3777483481409781352">Tidak dapat mengaktifkan perangkat seluler</translation>
 <translation id="3777806571986431400">Ekstensi Diaktifkan</translation>
 <translation id="3778152852029592020">Download dibatalkan.</translation>
 <translation id="3778208826288864398">Kunci keamanan dikunci karena Anda terlalu sering memasukkan PIN yang salah. Anda harus menyetel ulang kunci keamanan.</translation>
@@ -2136,6 +2142,7 @@
 <translation id="4131410914670010031">Hitam dan putih</translation>
 <translation id="4136203100490971508">Fitur Cahaya Malam akan otomatis dinonaktifkan saat matahari terbit</translation>
 <translation id="4138267921960073861">Tampilkan nama pengguna dan foto pada layar masuk</translation>
+<translation id="4142052906269098341">Buka kunci <ph name="DEVICE_TYPE" /> Anda dengan ponsel. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Dapatkan video yang berkualitas lebih baik dan hemat baterai. Video hanya akan diputar di layar yang kompatibel untuk Cast.</translation>
 <translation id="4145922204387553806">Biarkan Asisten menampilkan info yang berkaitan dengan apa yang ditampilkan di layar</translation>
 <translation id="4146026355784316281">Selalu Buka Dengan Penampil Sistem</translation>
@@ -2177,6 +2184,7 @@
 <translation id="42126664696688958">Ekspor</translation>
 <translation id="42137655013211669">Akses ke sumber daya ini tidak diizinkan oleh server.</translation>
 <translation id="4215350869199060536">Ups! Ada simbol ilegal dalam nama.</translation>
+<translation id="4220648711404560261">Terjadi error selama aktivasi.</translation>
 <translation id="4225397296022057997">Di semua situs</translation>
 <translation id="4232375817808480934">Konfigurasikan Kerberos</translation>
 <translation id="4235200303672858594">Seluruh layar</translation>
@@ -2321,10 +2329,11 @@
 <translation id="4459169140545916303">Aktif <ph name="DEVICE_LAST_ACTIVATED_TIME" /> hari lalu</translation>
 <translation id="4462159676511157176">Server nama khusus</translation>
 <translation id="4469477701382819144">Diblokir di situs yang menampilkan iklan yang mengganggu atau menyesatkan</translation>
-<translation id="4469943624506685059">Untuk menghindari masalah pengisian daya atau performa, gunakan adaptor daya USB Type-C atau adaptor dari pembuat Chromebook.</translation>
+<translation id="4469943624506685059">Untuk menghindari masalah pengisian daya atau performa, gunakan adaptor daya USB Type-C atau adaptor dari produsen Chromebook.</translation>
 <translation id="4470957202018033307">Preferensi penyimpanan eksternal</translation>
 <translation id="447252321002412580">Bantu sempurnakan fitur dan performa Chrome</translation>
 <translation id="4474155171896946103">Bookmark semua tab...</translation>
+<translation id="4474461121892222090">Mungkin memerlukan 15 menit untuk menyelesaikan aktivasi data seluler.</translation>
 <translation id="4475552974751346499">Telusuri download</translation>
 <translation id="4476590490540813026">Atlet</translation>
 <translation id="4477015793815781985">Sertakan Ctrl, Alt, atau ⌘</translation>
@@ -2334,6 +2343,7 @@
 <translation id="4479877282574735775">Mengonfigurasi mesin virtual. Proses ini mungkin memerlukan waktu beberapa menit.</translation>
 <translation id="4480590691557335796">Chrome dapat menemukan software berbahaya di komputer dan menghapusnya</translation>
 <translation id="4481530544597605423">Perangkat tidak tersambung</translation>
+<translation id="4483579413421375386">Tampilkan situs</translation>
 <translation id="4495419450179050807">Jangan tampilkan pada halaman ini</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> telah error</translation>
 <translation id="450099669180426158">Ikon tanda seru</translation>
@@ -2437,6 +2447,7 @@
 <translation id="4647697156028544508">Masukkan PIN untuk "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Izin tidak mencukupi</translation>
 <translation id="4648499713050786492">Buka kunci profil sebelum menambahkan orang.</translation>
+<translation id="4650591383426000695">Memutuskan sambungan ponsel Anda dari <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Tidak dapat memuat komponen online dengan resource mode demo.</translation>
 <translation id="465878909996028221">Hanya protokol file, http, dan https yang didukung untuk pengalihan browser.</translation>
 <translation id="4659077111144409915">Akun utama</translation>
@@ -2738,6 +2749,7 @@
 <translation id="5115309401544567011">Harap colokkan perangkat <ph name="DEVICE_TYPE" /> ke sumber listrik.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sim&amp;pan Audio Sebagai...</translation>
+<translation id="5117139026559873716">Putuskan hubungan ponsel Anda dari <ph name="DEVICE_TYPE" />. Keduanya tidak akan lagi terhubung secara otomatis.</translation>
 <translation id="5117427536932535467">Tema &amp; Wallpaper</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> berhasil dicetak</translation>
 <translation id="5117930984404104619">Memantau perilaku ekstensi lain, termasuk URL yang dikunjungi</translation>
@@ -2794,7 +2806,7 @@
 <translation id="5213891612754844763">Tampilkan setelan proxy</translation>
 <translation id="5215502535566372932">Pilih negara</translation>
 <translation id="521582610500777512">Foto dibuang</translation>
-<translation id="5217313969810784338">Untuk mengisi daya, gunakan baterai dari pembuat Chromebook Anda.</translation>
+<translation id="5217313969810784338">Untuk mengisi daya, gunakan baterai dari produsen Chromebook Anda.</translation>
 <translation id="5222676887888702881">Logout</translation>
 <translation id="52232769093306234">Pengemasan gagal.</translation>
 <translation id="5225324770654022472">Tampilkan pintasan aplikasi</translation>
@@ -2967,6 +2979,7 @@
 <translation id="5463275305984126951">Pengindeksan <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu yang berisi bookmark tersembunyi</translation>
 <translation id="5464632865477611176">Jalankan saat ini</translation>
+<translation id="5464660706533281090">Setelan ini tidak dapat diubah oleh pengguna turunan.</translation>
 <translation id="5466374726908360271">Tempel dan telusuri “<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Halo! Saya suara text to speech Anda.</translation>
 <translation id="5473333559083690127">Masukkan lagi PIN baru</translation>
@@ -3202,6 +3215,7 @@
 <translation id="5817918615728894473">Sandingkan</translation>
 <translation id="5821565227679781414">Buat Pintasan</translation>
 <translation id="5825412242012995131">Aktif (Direkomendasikan)</translation>
+<translation id="5826395379250998812">Hubungkan <ph name="DEVICE_TYPE" /> Anda dengan ponsel. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Common Name (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Mencetak...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">Data yang dipilih telah dihapus dari Chrome dan perangkat yang disinkronkan. Akun Google Anda mungkin memiliki bentuk histori penjelajahan lain seperti penelusuran dan aktivitas dari layanan Google lainnya di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Netscape Certificate Comment</translation>
 <translation id="6129953537138746214">Spasi</translation>
+<translation id="6130024555057767093">Notifikasi saat ini diblokir untuk semua situs kecuali situs yang diizinkan secara individual bagi Anda.</translation>
 <translation id="6136114942382973861">Tutup kotak download</translation>
 <translation id="6137767437444130246">Sertifikat pengguna</translation>
 <translation id="6138680304137685902">Tanda tangan X9.62 ECDSA dengan SHA-384</translation>
@@ -3468,6 +3483,7 @@
 <translation id="620722923698527029">Selalu buka jenis link ini di aplikasi yang terkait</translation>
 <translation id="6207282396926186323">Instal <ph name="APP_NAME" /> (Aplikasi Linux)</translation>
 <translation id="6207937957461833379">Negara/Wilayah</translation>
+<translation id="6208521041562685716">Data seluler sedang diaktifkan</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Sinkronisasi tidak berfungsi</translation>
 <translation id="6212039847102026977">Tampilkan properti jaringan lanjutan</translation>
 <translation id="6212168817037875041">Matikan layar</translation>
@@ -3829,6 +3845,7 @@
 <translation id="677965093459947883">Sangat kecil</translation>
 <translation id="6780439250949340171">kelola setelan lain</translation>
 <translation id="6781284683813954823">Link Doodle</translation>
+<translation id="6781978626986383437">Backup Linux dibatalkan</translation>
 <translation id="6782111308708962316">Cegah situs web pihak ketiga agar tidak menyimpan dan membaca data cookie</translation>
 <translation id="6786747875388722282">Ekstensi</translation>
 <translation id="6787839852456839824">Pintasan keyboard</translation>
@@ -4116,6 +4133,7 @@
 <translation id="7197632491113152433">Kami menemukan <ph name="NUMBER_OF_APPS" /> aplikasi dari akun Anda yang dapat digunakan di perangkat ini.</translation>
 <translation id="7199158086730159431">Dapatkan Bantuan</translation>
 <translation id="7200083590239651963">Pilih konfigurasi</translation>
+<translation id="7201042526153088083">Instal aplikasi dan game dari Google Play di <ph name="DEVICE_TYPE" /> Anda. &lt;a target="_blank" href="<ph name="URL" />"&gt;Pelajari lebih lanjut&lt;/a&gt;</translation>
 <translation id="720110658997053098">Simpan perangkat ini dalam mode kios secara permanen</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' dihapus</translation>
 <translation id="7201420661433230412">Lihat file</translation>
@@ -4140,6 +4158,7 @@
 <translation id="7229570126336867161">Memerlukan EVDO</translation>
 <translation id="7230787553283372882">Menyesuaikan ukuran teks</translation>
 <translation id="7232750842195536390">Gagal mengganti nama</translation>
+<translation id="7234010996000898150">Membatalkan pemulihan Linux</translation>
 <translation id="7235716375204803342">Mengambil aktivitas...</translation>
 <translation id="7235737137505019098">Kunci keamanan Anda tidak memiliki ruang penyimpanan yang cukup untuk akun lainnya.</translation>
 <translation id="7238585580608191973">SHA-256 Fingerprint</translation>
@@ -4275,6 +4294,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Buka Semua di &amp;Jendela Baru}=1{Buka di &amp;Jendela Baru}other{Buka Semua (#) di &amp;Jendela Baru}}</translation>
 <translation id="7434509671034404296">Pengembang</translation>
 <translation id="7436921188514130341">Maaf. Terjadi error saat mengganti nama.</translation>
+<translation id="7437427339141948518">Notifikasi dimatikan</translation>
 <translation id="7438976808740265764">Flash Player tidak akan didukung lagi setelah bulan Desember 2020.</translation>
 <translation id="7441736921018636843">Untuk mengubah setelan ini, <ph name="BEGIN_LINK" />setel ulang sinkronisasi<ph name="END_LINK" /> untuk menghapus frasa sandi sinkronisasi</translation>
 <translation id="7441830548568730290">Pengguna lainnya</translation>
@@ -4404,6 +4424,7 @@
 <translation id="7643932971554933646">Izinkan situs melihat file?</translation>
 <translation id="7644543211198159466">Warna dan tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (pemilik)</translation>
+<translation id="7645681574855902035">Membatalkan backup Linux</translation>
 <translation id="7647403192093989392">Tidak ada aktivitas terbaru</translation>
 <translation id="7648142322539582331">Sambungkan ke Internet untuk menyiapkan Kontrol Orang Tua</translation>
 <translation id="7648992873808071793">Menyimpan file pada perangkat ini</translation>
@@ -4855,6 +4876,7 @@
 <translation id="8256319818471787266">Bleki</translation>
 <translation id="8257950718085972371">Terus blokir akses kamera</translation>
 <translation id="8259239505248583312">Ayo mulai!</translation>
+<translation id="8259556432390118667">Nilai warna hex</translation>
 <translation id="8260126382462817229">Coba masuk lagi</translation>
 <translation id="8260864402787962391">Mouse</translation>
 <translation id="8261378640211443080">Ekstensi ini tidak tercantum dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa sepengetahuan Anda.</translation>
@@ -5107,6 +5129,7 @@
 <translation id="8662911384982557515">Ubah halaman beranda Anda menjadi: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome tidak dapat menyetel wallpaper.</translation>
 <translation id="8663099077749055505">Selalu blokir download otomatis beberapa file di <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Tampilkan notifikasi untuk situs ini?</translation>
 <translation id="8664389313780386848">&amp;Lihat sumber halaman</translation>
 <translation id="8665180165765946056">Backup selesai</translation>
 <translation id="866611985033792019">Percayai sertifikat ini untuk mengidentifikasi pengguna email</translation>
@@ -5396,6 +5419,7 @@
 <translation id="9065203028668620118">Edit</translation>
 <translation id="9066773882585798925">Mendengar teks dibacakan dengan keras</translation>
 <translation id="9066782832737749352">Text-to-Speech</translation>
+<translation id="9068849894565669697">Pilih warna</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB tersambung</translation>
@@ -5433,6 +5457,7 @@
 <translation id="9131487537093447019">Kirim pesan ke dan terima pesan dari perangkat Bluetooth.</translation>
 <translation id="9134304429738380103">Ya, saya setuju.</translation>
 <translation id="9137013805542155359">Perlihatkan halaman asli</translation>
+<translation id="9137157311132182254">Mesin telusur pilihan</translation>
 <translation id="9137916601698928395">Buka link sebagai <ph name="USER" /></translation>
 <translation id="9138978632494473300">Tambahkan pintasan ke tempat berikut:</translation>
 <translation id="9140067245205650184">Anda menggunakan tanda fitur yang tidak didukung: <ph name="BAD_FLAG" />. Stabilitas dan keamanan akan terganggu.</translation>
@@ -5505,6 +5530,7 @@
 <translation id="962802172452141067">Cabang folder bookmark</translation>
 <translation id="964286338916298286">Administrator IT telah menonaktifkan Chrome Goodies untuk perangkat Anda.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplikasi}other{Aplikasi}}</translation>
+<translation id="965211523698323809">Mengirim dan menerima SMS dari <ph name="DEVICE_TYPE" /> Anda. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Tindakan ini akan membuat Anda logout dari akun Google. Perubahan pada bookmark, histori, sandi, dan setelan lainnya tidak akan disinkronkan lagi dengan Akun Google Anda. Namun, data yang sudah ada akan tetap disimpan di Akun Google dan dapat dikelola di <ph name="BEGIN_LINK" />Google Dasbor<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Data disimpan</translation>
 <translation id="968000525894980488">Aktifkan layanan Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 858c1fb..602bf9e 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">L'operazione di lettura o scrittura è stata richiesta con un offset non valido su: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Prima di accedere, entra come Ospite per attivare la rete <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Traduci sempre <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Impossibile rilevare la tua scheda SIM</translation>
 <translation id="1108600514891325577">&amp;Interrompi</translation>
 <translation id="1110155001042129815">Attendi</translation>
 <translation id="1112420131909513020">Una scheda in secondo piano sta usando il Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">La sincronizzazione è stata disattivata dall'amministratore.</translation>
 <translation id="2127372758936585790">Caricabatterie a basso consumo</translation>
 <translation id="212862741129535676">Percentuale di occupazione dello stato di frequenza</translation>
+<translation id="212876957201860463">Preparazione per la configurazione del dispositivo cellulare…</translation>
 <translation id="2129825002735785149">Aggiorna il plug-in</translation>
 <translation id="2131077480075264">Impossibile installare "<ph name="APP_NAME" />" perché non è consentita da "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Nascondi i codici PIN</translation>
@@ -955,6 +957,7 @@
 <translation id="2413749388954403953">Modifica dell'interfaccia utente dei Preferiti</translation>
 <translation id="241727068219398187">I dati sono stati criptati con la tua password Google dal giorno <ph name="TIME" />. Non sono inclusi i metodi di pagamento e gli indirizzi di Google Pay.</translation>
 <translation id="2419706071571366386">Per sicurezza, disconnettiti quando non utilizzi il tuo computer.</translation>
+<translation id="2422125132043002186">Ripristino di Linux annullato</translation>
 <translation id="2423578206845792524">Sa&amp;lva immagine con nome...</translation>
 <translation id="2428510569851653187">Descrivi cosa stavi facendo quando la scheda si è arrestata in modo anomalo</translation>
 <translation id="2431027948063157455">Impossibile caricare l'Assistente Google, controlla la connessione di rete e riprova.</translation>
@@ -1422,6 +1425,7 @@
 <translation id="3090193911106258841">Accesso all'input audio e video in corso</translation>
 <translation id="3090819949319990166">Impossibile copiare il file crx esterno su <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" accoppiato</translation>
+<translation id="3092699946856346803">Inserisci la SIM e riprova</translation>
 <translation id="3101709781009526431">Data e ora</translation>
 <translation id="310671807099593501">Il sito sta usando il Bluetooth</translation>
 <translation id="3115147772012638511">In attesa di elaborazione cache...</translation>
@@ -1529,6 +1533,7 @@
 <translation id="3281892622610078515">File e programmi che saranno messi in quarantena:</translation>
 <translation id="3282568296779691940">Accedi a Chrome</translation>
 <translation id="3285322247471302225">Nuova &amp;scheda</translation>
+<translation id="3286654161521615710">Usato dal browser Chrome e da Avvio app del dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Visualizza ed elimina i dati di accesso memorizzati sul token di sicurezza</translation>
 <translation id="3288047731229977326">Le estensioni in esecuzione in modalità sviluppatore potrebbero danneggiare il computer. Se non sei uno sviluppatore, dovresti disattivare queste estensioni per la tua sicurezza.</translation>
 <translation id="3289856944988573801">Per verificare la disponibilità di aggiornamenti, utilizza una rete Ethernet o Wi-Fi.</translation>
@@ -1871,6 +1876,7 @@
 <translation id="3775432569830822555">Certificato server SSL</translation>
 <translation id="3775705724665058594">Invia ai tuoi dispositivi</translation>
 <translation id="3776796446459804932">Questa estensione vìola le norme del Chrome Web Store.</translation>
+<translation id="3777483481409781352">Impossibile attivare il dispositivo cellulare</translation>
 <translation id="3777806571986431400">Estensione attivata</translation>
 <translation id="3778152852029592020">Il download è stato annullato.</translation>
 <translation id="3778208826288864398">Il token di sicurezza è stato bloccato perché è stato inserito troppe volte il PIN errato. Dovrai reimpostare il token di sicurezza.</translation>
@@ -2134,6 +2140,7 @@
 <translation id="4131410914670010031">In bianco e nero</translation>
 <translation id="4136203100490971508">La funzione Luminosità notturna verrà disattivata automaticamente all'alba</translation>
 <translation id="4138267921960073861">Visualizza nomi e foto dell'utente sulla schermata di accesso</translation>
+<translation id="4142052906269098341">Sblocca il dispositivo <ph name="DEVICE_TYPE" /> con il telefono. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Migliora la qualità dei video e fai durare di più la batteria. I video verranno riprodotti soltanto sullo schermo compatibile con Google Cast.</translation>
 <translation id="4145922204387553806">Permetti all'assistente di mostrarti informazioni basate sui contenuti dello schermo</translation>
 <translation id="4146026355784316281">Apri sempre con visualizzatore di sistema</translation>
@@ -2175,6 +2182,7 @@
 <translation id="42126664696688958">Esporta</translation>
 <translation id="42137655013211669">L'accesso a questa risorsa è vietato dal server.</translation>
 <translation id="4215350869199060536">Spiacenti, simboli non validi nel nome.</translation>
+<translation id="4220648711404560261">Si è verificato un errore durante l'attivazione.</translation>
 <translation id="4225397296022057997">Su tutti i siti</translation>
 <translation id="4232375817808480934">Configura Kerberos</translation>
 <translation id="4235200303672858594">Schermo intero</translation>
@@ -2319,10 +2327,11 @@
 <translation id="4459169140545916303">Attivo <ph name="DEVICE_LAST_ACTIVATED_TIME" /> giorni fa</translation>
 <translation id="4462159676511157176">Assegna nomi personalizzati a server</translation>
 <translation id="4469477701382819144">Bloccati sui siti che mostrano annunci invasivi o fuorvianti</translation>
-<translation id="4469943624506685059">Per evitare problemi di ricarica o prestazioni, usa un adattatore o alimentatore USB Type-C dello stesso produttore del Chromebook.</translation>
+<translation id="4469943624506685059">Per evitare problemi di ricarica o prestazioni, usa un alimentatore USB Type-C o un alimentatore dello stesso produttore del Chromebook.</translation>
 <translation id="4470957202018033307">Preferenze dello spazio di archiviazione esterno</translation>
 <translation id="447252321002412580">Contribuisci a migliorare le funzioni e le prestazioni di Chrome</translation>
 <translation id="4474155171896946103">Aggiungi tutte le schede ai Preferiti...</translation>
+<translation id="4474461121892222090">Potrebbero essere necessari fino a 15 minuti per completare l'attivazione dei dati mobili.</translation>
 <translation id="4475552974751346499">Cerca tra i file scaricati</translation>
 <translation id="4476590490540813026">Atleta</translation>
 <translation id="4477015793815781985">Includi CTRL, ALT o ⌘</translation>
@@ -2332,6 +2341,7 @@
 <translation id="4479877282574735775">Configurazione della macchina virtuale. Questa operazione potrebbe richiedere alcuni minuti.</translation>
 <translation id="4480590691557335796">Chrome può trovare software dannoso sul computer e rimuoverlo</translation>
 <translation id="4481530544597605423">Dispositivi disaccoppiati</translation>
+<translation id="4483579413421375386">Mostra per il sito</translation>
 <translation id="4495419450179050807">Non visualizzare in questa pagina</translation>
 <translation id="4500114933761911433">Arresto anomalo di <ph name="PLUGIN_NAME" /></translation>
 <translation id="450099669180426158">Icona punto esclamativo</translation>
@@ -2435,6 +2445,7 @@
 <translation id="4647697156028544508">Inserisci il codice PIN per "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Autorizzazioni insufficienti</translation>
 <translation id="4648499713050786492">Sblocca il tuo profilo prima di aggiungere una persona.</translation>
+<translation id="4650591383426000695">Disconnetti il telefono dal dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Impossibile caricare il componente online con le risorse della modalità demo.</translation>
 <translation id="465878909996028221">Per i reindirizzamenti del browser sono supportati solo http, https e i protocolli di file.</translation>
 <translation id="4659077111144409915">Account principale</translation>
@@ -2736,6 +2747,7 @@
 <translation id="5115309401544567011">Collega il dispositivo <ph name="DEVICE_TYPE" /> a una fonte di alimentazione.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sal&amp;va audio come...</translation>
+<translation id="5117139026559873716">Disconnetti il telefono dal dispositivo <ph name="DEVICE_TYPE" />. I due dispositivi non si connetteranno più automaticamente.</translation>
 <translation id="5117427536932535467">Temi e sfondi</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> stampato</translation>
 <translation id="5117930984404104619">Monitoraggio del comportamento di altre estensioni, compresi gli URL visitati</translation>
@@ -2965,6 +2977,7 @@
 <translation id="5463275305984126951">Indice di <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu contenente i Preferiti nascosti</translation>
 <translation id="5464632865477611176">Eseguilo questa volta</translation>
+<translation id="5464660706533281090">Questa impostazione non può essere cambiata da un utente minorenne.</translation>
 <translation id="5466374726908360271">I&amp;ncolla e cerca "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Ciao! Sono la voce della sintesi locale.</translation>
 <translation id="5473333559083690127">Inserisci ancora il nuovo PIN</translation>
@@ -3200,6 +3213,7 @@
 <translation id="5817918615728894473">Accoppia</translation>
 <translation id="5821565227679781414">Crea scorciatoia</translation>
 <translation id="5825412242012995131">On (opzione consigliata)</translation>
+<translation id="5826395379250998812">Connetti il dispositivo <ph name="DEVICE_TYPE" /> con il telefono. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nome comune (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Stampa in corso...</translation>
@@ -3421,6 +3435,7 @@
 <translation id="6129691635767514872">I dati selezionati sono stati rimossi da Chrome e dai dispositivi sincronizzati. Il tuo Account Google potrebbe avere altre forme di cronologia di navigazione, ad esempio ricerche e attività, di altri servizi Google all'indirizzo <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Commento certificato Netscape</translation>
 <translation id="6129953537138746214">Spazio</translation>
+<translation id="6130024555057767093">Le notifiche sono attualmente bloccate per tutti i siti, ad eccezione di quelli che consenti singolarmente.</translation>
 <translation id="6136114942382973861">Chiudi la barra dei download</translation>
 <translation id="6137767437444130246">Certificato utente</translation>
 <translation id="6138680304137685902">Firma X9.62 ECDSA con SHA-384</translation>
@@ -3466,6 +3481,7 @@
 <translation id="620722923698527029">Apri sempre questo tipo di link nell'app associata</translation>
 <translation id="6207282396926186323">Installazione di <ph name="APP_NAME" /> (app Linux)</translation>
 <translation id="6207937957461833379">Paese/Regione</translation>
+<translation id="6208521041562685716">Attivazione dei dati mobili in corso</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: la sincronizzazione non funziona</translation>
 <translation id="6212039847102026977">Mostra proprietà di rete avanzate</translation>
 <translation id="6212168817037875041">Disattiva lo schermo</translation>
@@ -3827,6 +3843,7 @@
 <translation id="677965093459947883">Molto piccole</translation>
 <translation id="6780439250949340171">gestire altre impostazioni</translation>
 <translation id="6781284683813954823">Link del doodle</translation>
+<translation id="6781978626986383437">Backup di Linux annullato</translation>
 <translation id="6782111308708962316">Impedisci ai siti web di terze parti di salvare e leggere i dati dei cookie</translation>
 <translation id="6786747875388722282">Estensioni</translation>
 <translation id="6787839852456839824">Scorciatoie da tastiera</translation>
@@ -4114,6 +4131,7 @@
 <translation id="7197632491113152433">Nel tuo account abbiamo trovato <ph name="NUMBER_OF_APPS" /> app che possono essere utilizzate su questo dispositivo.</translation>
 <translation id="7199158086730159431">Ricevi assistenza</translation>
 <translation id="7200083590239651963">Seleziona configurazione</translation>
+<translation id="7201042526153088083">Installa app e giochi di Google Play sul dispositivo <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Ulteriori informazioni&lt;/a&gt;</translation>
 <translation id="720110658997053098">Mantieni definitivamente questo dispositivo in modalità kiosk</translation>
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" eliminato</translation>
 <translation id="7201420661433230412">Visualizza i file</translation>
@@ -4138,6 +4156,7 @@
 <translation id="7229570126336867161">Occorre EVDO</translation>
 <translation id="7230787553283372882">Personalizza la dimensione del testo</translation>
 <translation id="7232750842195536390">Ridenominazione non riuscita</translation>
+<translation id="7234010996000898150">Annullamento del ripristino di Linux</translation>
 <translation id="7235716375204803342">Recupero delle attività in corso...</translation>
 <translation id="7235737137505019098">Sul token di sicurezza non c'è spazio a sufficienza per altri account.</translation>
 <translation id="7238585580608191973">Impronta digitale SHA-256</translation>
@@ -4273,6 +4292,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Apri tutti in &amp;un'altra finestra}=1{Apri in &amp;un'altra finestra}other{Apri tutti (#) in &amp;un'altra finestra}}</translation>
 <translation id="7434509671034404296">Opzioni per sviluppatori</translation>
 <translation id="7436921188514130341">Uffa! Si è verificato un errore durante la ridenominazione.</translation>
+<translation id="7437427339141948518">Notifiche disattivate</translation>
 <translation id="7438976808740265764">Flash Player non sarà più supportato dopo dicembre 2020.</translation>
 <translation id="7441736921018636843">Per modificare questa impostazione, <ph name="BEGIN_LINK" />reimposta la sincronizzazione<ph name="END_LINK" /> per rimuovere la passphrase di sincronizzazione.</translation>
 <translation id="7441830548568730290">Altri utenti</translation>
@@ -4400,6 +4420,7 @@
 <translation id="7643932971554933646">Vuoi consentire al sito di visualizzare i file?</translation>
 <translation id="7644543211198159466">Colore e tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (proprietario)</translation>
+<translation id="7645681574855902035">Annullamento del backup di Linux</translation>
 <translation id="7647403192093989392">Nessuna attività recente</translation>
 <translation id="7648142322539582331">Connettiti a Internet per configurare il Controllo genitori</translation>
 <translation id="7648992873808071793">Memorizzare file sul dispositivo</translation>
@@ -4850,6 +4871,7 @@
 <translation id="8256319818471787266">Fido</translation>
 <translation id="8257950718085972371">Continua a impedire l'accesso alla webcam</translation>
 <translation id="8259239505248583312">Iniziamo</translation>
+<translation id="8259556432390118667">Valore del colore esadecimale</translation>
 <translation id="8260126382462817229">Prova ad accedere nuovamente</translation>
 <translation id="8260864402787962391">Mouse</translation>
 <translation id="8261378640211443080">Questa estensione non è elencata nel <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e potrebbe essere stata aggiunta a tua insaputa.</translation>
@@ -5102,6 +5124,7 @@
 <translation id="8662911384982557515">Cambio della pagina iniziale con: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome non può impostare lo sfondo.</translation>
 <translation id="8663099077749055505">Blocca sempre più download automatici su <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Vuoi mostrare le notifiche per questo sito?</translation>
 <translation id="8664389313780386848">&amp;Visualizza sorgente pagina</translation>
 <translation id="8665180165765946056">Backup completato</translation>
 <translation id="866611985033792019">Considera attendibile questo certificato per l'identificazione degli utenti email</translation>
@@ -5391,6 +5414,7 @@
 <translation id="9065203028668620118">Modifica</translation>
 <translation id="9066773882585798925">Attiva la lettura ad alta voce del testo</translation>
 <translation id="9066782832737749352">Sintesi vocale</translation>
+<translation id="9068849894565669697">Seleziona colore</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB collegato</translation>
@@ -5428,6 +5452,7 @@
 <translation id="9131487537093447019">Inviare e ricevere messaggi a/da dispositivi Bluetooth.</translation>
 <translation id="9134304429738380103">Sì, accetto.</translation>
 <translation id="9137013805542155359">Mostra originale</translation>
+<translation id="9137157311132182254">Motore di ricerca preferito</translation>
 <translation id="9137916601698928395">Apri link come <ph name="USER" /></translation>
 <translation id="9138978632494473300">Aggiungi scorciatoie per le seguenti posizioni:</translation>
 <translation id="9140067245205650184">Stai utilizzando un flag di funzione non supportato: <ph name="BAD_FLAG" />. Stabilità e sicurezza ne risentiranno.</translation>
@@ -5500,6 +5525,7 @@
 <translation id="962802172452141067">Struttura ad albero della cartella dei preferiti</translation>
 <translation id="964286338916298286">Il tuo amministratore IT ha disattivato i vantaggi offerti da Chrome per il tuo dispositivo.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Applicazione}other{Applicazioni}}</translation>
+<translation id="965211523698323809">Invia e ricevi SMS dal dispositivo <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">I tuoi Account Google verranno disconnessi. Le modifiche apportate ai preferiti, alla cronologia, alle password e ad altre impostazioni non verranno più sincronizzate con il tuo Account Google. I dati esistenti rimarranno invece memorizzati nel tuo Account Google e potranno essere gestiti su <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Dati memorizzati</translation>
 <translation id="968000525894980488">Attiva Google Play Services.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 296d8da..4589f60 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -4853,6 +4853,7 @@
 <translation id="8256319818471787266">נבחן</translation>
 <translation id="8257950718085972371">המשך לחסום גישה למצלמה</translation>
 <translation id="8259239505248583312">קדימה, מתחילים!</translation>
+<translation id="8259556432390118667">ערך צבע הקסדצימלי</translation>
 <translation id="8260126382462817229">נסה להיכנס שוב</translation>
 <translation id="8260864402787962391">עכבר</translation>
 <translation id="8261378640211443080">התוסף הזה לא רשום ב<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> וייתכן שנוסף ללא ידיעתך.</translation>
@@ -5394,6 +5395,7 @@
 <translation id="9065203028668620118">עריכה</translation>
 <translation id="9066773882585798925">הקראת טקסט בקול רם</translation>
 <translation id="9066782832737749352">טקסט לדיבור</translation>
+<translation id="9068849894565669697">בחירת צבע</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">‏עכבר USB מחובר</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index bc6bdbc6..f41195a4 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">「<ph name="DEVICE_NAME" />」で、無効なオフセットでの読み取りまたは書き込み操作がリクエストされました。</translation>
 <translation id="1097658378307015415">ログインする前に、ゲスト セッションを開始して <ph name="NETWORK_ID" /> ネットワークを有効にしてください</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" />を常に翻訳</translation>
+<translation id="1104038495841596279">SIM カードを検出できませんでした</translation>
 <translation id="1108600514891325577">停止(&amp;S)</translation>
 <translation id="1110155001042129815">待機</translation>
 <translation id="1112420131909513020">バックグラウンドのタブで Bluetooth が使用されています</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">同期は管理者により無効にされています。</translation>
 <translation id="2127372758936585790">低電力の充電器</translation>
 <translation id="212862741129535676">周波数状態の占有率(%)</translation>
+<translation id="212876957201860463">モバイル デバイスのセットアップ準備中...</translation>
 <translation id="2129825002735785149">プラグインを更新</translation>
 <translation id="2131077480075264">「<ph name="APP_NAME" />」は「<ph name="IMPORT_NAME" />」で許可されていないためインストールできません</translation>
 <translation id="21354425047973905">PIN を非表示</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187"><ph name="TIME" />時点の Google パスワードでデータを暗号化しました。
           なお、Google Pay のお支払い方法と住所はこれには含まれていません。</translation>
 <translation id="2419706071571366386">セキュリティ確保のため、パソコンが使用されていないときにはログアウトします。</translation>
+<translation id="2422125132043002186">Linux の復元がキャンセルされました</translation>
 <translation id="2423578206845792524">名前を付けて画像を保存(&amp;V)...</translation>
 <translation id="2428510569851653187">タブのクラッシュ時に行っていた操作をご説明ください</translation>
 <translation id="2431027948063157455">Google アシスタントを読み込めませんでした。ネットワーク接続を確認してから、もう一度お試しください。</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">音声 / ビデオ入力にアクセスしています</translation>
 <translation id="3090819949319990166">外部の crx ファイルは <ph name="TEMP_CRX_FILE" /> にコピーできません。</translation>
 <translation id="3090871774332213558">「<ph name="DEVICE_NAME" />」がペア設定されました</translation>
+<translation id="3092699946856346803">SIM を挿入してもう一度お試しください</translation>
 <translation id="3101709781009526431">日時</translation>
 <translation id="310671807099593501">サイトで Bluetooth が使用されています</translation>
 <translation id="3115147772012638511">キャッシュを待機しています...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">隔離対象のファイルとプログラム:</translation>
 <translation id="3282568296779691940">Chrome にログイン</translation>
 <translation id="3285322247471302225">新しいタブ(&amp;T)</translation>
+<translation id="3286654161521615710">Chrome ブラウザと <ph name="DEVICE_TYPE" /> ランチャーで使用されます</translation>
 <translation id="3286737518123001369">セキュリティ キーに保存されているログインデータを確認したうえで削除できます</translation>
 <translation id="3288047731229977326">デベロッパー モードで実行される拡張機能はパソコンにダメージを与える恐れがあります。デベロッパーでない場合は、安全のため、デベロッパー モードで実行されているこれらの拡張機能を無効にしてください。</translation>
 <translation id="3289856944988573801">アップデートの有無を確認するには、イーサネットまたは Wi-Fi を使用してください。</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL サーバー証明書</translation>
 <translation id="3775705724665058594">お使いのデバイスに送信</translation>
 <translation id="3776796446459804932">この拡張機能は Chrome ウェブストアのポリシーに違反しています。</translation>
+<translation id="3777483481409781352">モバイル デバイスを有効化できませんでした</translation>
 <translation id="3777806571986431400">有効化された拡張機能</translation>
 <translation id="3778152852029592020">ダウンロードがキャンセルされました。</translation>
 <translation id="3778208826288864398">PIN の入力間違いが許容回数を超えたため、セキュリティ キーがロックされています。セキュリティ キーをリセットする必要があります。</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">白黒</translation>
 <translation id="4136203100490971508">夜間モードは日の出時刻に自動的にオフになります</translation>
 <translation id="4138267921960073861">ログイン ページにユーザー名と写真を表示する</translation>
+<translation id="4142052906269098341">スマートフォンを使って <ph name="DEVICE_TYPE" /> のロックを解除します。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">動画の品質を向上させ、バッテリー消費を抑えます。動画はキャスト対応のスクリーンでのみ再生されます。</translation>
 <translation id="4145922204387553806">アシスタントが画面上のアイテムに関連した情報を表示できるようにします</translation>
 <translation id="4146026355784316281">常にシステム ビューアで開く</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">エクスポート</translation>
 <translation id="42137655013211669">このリソースへのアクセスはサーバーにより禁止されています。</translation>
 <translation id="4215350869199060536">名前に間違った記号が含まれています。</translation>
+<translation id="4220648711404560261">有効化中にエラーが発生しました。</translation>
 <translation id="4225397296022057997">すべてのサイト</translation>
 <translation id="4232375817808480934">Kerberos の設定</translation>
 <translation id="4235200303672858594">画面全体</translation>
@@ -2323,10 +2331,11 @@
 <translation id="4459169140545916303">最終同期: <ph name="DEVICE_LAST_ACTIVATED_TIME" /> 日前</translation>
 <translation id="4462159676511157176">カスタム ネーム サーバー</translation>
 <translation id="4469477701382819144">煩わしい広告や誤解を招く広告が表示されるサイトでブロックされています</translation>
-<translation id="4469943624506685059">充電やパフォーマンスに関する問題を回避するには、USB Type-C の電源アダプターまたは Chromebook の製造元が提供するアダプターを使用してください。</translation>
+<translation id="4469943624506685059">充電やパフォーマンスに関する問題を回避するには、USB Type-C の電源アダプターまたは Chromebook の製造元が提供する純正アダプターを使用してください。</translation>
 <translation id="4470957202018033307">外部ストレージの設定</translation>
 <translation id="447252321002412580">Chrome の機能と動作の改善に協力する</translation>
 <translation id="4474155171896946103">すべてのタブをブックマークに追加...</translation>
+<translation id="4474461121892222090">モバイルデータの有効化が完了するまでには最大 15 分かかります。</translation>
 <translation id="4475552974751346499">ダウンロード検索</translation>
 <translation id="4476590490540813026">競技選手</translation>
 <translation id="4477015793815781985">Ctrl キー、Alt キー、⌘ キーのいずれかが必要です</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">仮想マシンを設定しています。この処理には数分かかることがあります。</translation>
 <translation id="4480590691557335796">Chrome で、パソコン上の有害なソフトウェアを探して削除することができます</translation>
 <translation id="4481530544597605423">ペア設定されていないデバイス</translation>
+<translation id="4483579413421375386">サイトの通知を表示</translation>
 <translation id="4495419450179050807">このページに表示しない</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> で問題が発生しました</translation>
 <translation id="450099669180426158">感嘆符アイコン</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">「<ph name="DEVICE_NAME" />」の PIN を入力してください:</translation>
 <translation id="4648491805942548247">十分な権限がありません</translation>
 <translation id="4648499713050786492">ユーザーを追加するにはまずプロフィールのロックを解除してください。</translation>
+<translation id="4650591383426000695">スマートフォンを <ph name="DEVICE_TYPE" /> から切断します</translation>
 <translation id="4651484272688821107">デモモード リソースでオンライン コンポーネントを読み込めませんでした。</translation>
 <translation id="465878909996028221">ブラウザのリダイレクトでは、http、https、file プロトコルのみサポートされています。</translation>
 <translation id="4659077111144409915">メイン アカウント</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011"><ph name="DEVICE_TYPE" /> を電源に接続してください。</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">名前を付けてオーディオを保存(&amp;V)...</translation>
+<translation id="5117139026559873716"><ph name="DEVICE_TYPE" /> からスマートフォンを切断します。以降、自動接続は行われなくなります。</translation>
 <translation id="5117427536932535467">テーマと壁紙</translation>
 <translation id="5117625797180141189">「<ph name="DOCUMENT_NAME" />」の印刷が正常に完了しました</translation>
 <translation id="5117930984404104619">他の拡張機能の動作を監視(アクセスした URL を含む)</translation>
@@ -2796,7 +2808,7 @@
 <translation id="5213891612754844763">プロキシ設定を表示</translation>
 <translation id="5215502535566372932">国を選択</translation>
 <translation id="521582610500777512">写真を破棄しました</translation>
-<translation id="5217313969810784338">充電するには、Chromebook の製造元が提供するバッテリーを使用してください。</translation>
+<translation id="5217313969810784338">充電するには、Chromebook の製造元が提供する純正バッテリーを使用してください。</translation>
 <translation id="5222676887888702881">ログアウト</translation>
 <translation id="52232769093306234">圧縮できませんでした。</translation>
 <translation id="5225324770654022472">アプリのショートカットを表示</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> のインデックス</translation>
 <translation id="5463856536939868464">非表示のブックマークを含むメニュー</translation>
 <translation id="5464632865477611176">今回は実行する</translation>
+<translation id="5464660706533281090">子ユーザーはこの設定を変更できません。</translation>
 <translation id="5466374726908360271">「<ph name="SEARCH_TERMS" />」を貼り付けて検索</translation>
 <translation id="5471768120198416576">こんにちは。テキスト読み上げの音声です。</translation>
 <translation id="5473333559083690127">新しい PIN を再入力</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">ペア設定</translation>
 <translation id="5821565227679781414">ショートカットを作成</translation>
 <translation id="5825412242012995131">オン(推奨)</translation>
+<translation id="5826395379250998812"><ph name="DEVICE_TYPE" /> をスマートフォンと接続します。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">一般名(CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">印刷中...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">選択したデータが Chrome から削除され、同期されたデバイスからも削除されました。他の Google サービスでの検索や操作など、Google アカウントの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> に残ることがあります。</translation>
 <translation id="6129938384427316298">Netscape 証明書コメント</translation>
 <translation id="6129953537138746214">Space</translation>
+<translation id="6130024555057767093">現在、個々に許可したサイトを除くすべてのサイトの通知がブロックされています。</translation>
 <translation id="6136114942382973861">ダウンロード バーを閉じる</translation>
 <translation id="6137767437444130246">ユーザー証明書</translation>
 <translation id="6138680304137685902">X9.62 ECDSA 署名(SHA-384)</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">このタイプのリンクは常に関連付けられたアプリで開く</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" />(Linux アプリ)のインストール</translation>
 <translation id="6207937957461833379">国/地域</translation>
+<translation id="6208521041562685716">モバイルデータを有効化しています</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: 同期が機能していません</translation>
 <translation id="6212039847102026977">ネットワークの詳細プロパティを表示</translation>
 <translation id="6212168817037875041">画面をオフにする</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">極小</translation>
 <translation id="6780439250949340171">その他の設定を管理する</translation>
 <translation id="6781284683813954823">Doodle リンク</translation>
+<translation id="6781978626986383437">Linux のバックアップがキャンセルされました</translation>
 <translation id="6782111308708962316">サードパーティのウェブサイトが Cookie データを保存したり読み取ったりできないようにします</translation>
 <translation id="6786747875388722282">拡張機能</translation>
 <translation id="6787839852456839824">キーボード ショートカット</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">お使いのアカウントから、このデバイスで使用できるアプリが <ph name="NUMBER_OF_APPS" /> 個見つかりました。</translation>
 <translation id="7199158086730159431">ヘルプ(&amp;E)</translation>
 <translation id="7200083590239651963">設定の選択</translation>
+<translation id="7201042526153088083">Google Play のアプリとゲームを <ph name="DEVICE_TYPE" /> にインストールします。&lt;a target="_blank" href="<ph name="URL" />"&gt;詳細&lt;/a&gt;</translation>
 <translation id="720110658997053098">このデバイスをキオスクモードに固定する</translation>
 <translation id="7201118060536064622">「<ph name="DELETED_ITEM_NAME" />」が削除されました</translation>
 <translation id="7201420661433230412">ファイルを表示する</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">EVDO が必要です</translation>
 <translation id="7230787553283372882">テキストサイズをカスタマイズします</translation>
 <translation id="7232750842195536390">名前を変更できませんでした</translation>
+<translation id="7234010996000898150">Linux の復元をキャンセルしています</translation>
 <translation id="7235716375204803342">アクティビティを取得しています...</translation>
 <translation id="7235737137505019098">セキュリティ キーに空き容量がないため、これ以上アカウントを追加できません。</translation>
 <translation id="7238585580608191973">SHA-256 指紋</translation>
@@ -4278,6 +4297,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{すべてを新しいウィンドウで開く(&amp;N)}=1{新しいウィンドウで開く(&amp;N)}other{すべて(# 件)を新しいウィンドウで開く(&amp;N)}}</translation>
 <translation id="7434509671034404296">開発 / 管理</translation>
 <translation id="7436921188514130341">名前の変更中にエラーが発生しました。</translation>
+<translation id="7437427339141948518">通知オフ</translation>
 <translation id="7438976808740265764">Flash Player のサポートは 2020 年 12 月で終了します。</translation>
 <translation id="7441736921018636843">この設定を変更するには、<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />して同期パスフレーズを削除します</translation>
 <translation id="7441830548568730290">他のユーザー</translation>
@@ -4407,6 +4427,7 @@
 <translation id="7643932971554933646">サイトにファイルの読み取りを許可しますか?</translation>
 <translation id="7644543211198159466">色とテーマ</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" />(所有者)</translation>
+<translation id="7645681574855902035">Linux のバックアップをキャンセルしています</translation>
 <translation id="7647403192093989392">最近のアクティビティはありません</translation>
 <translation id="7648142322539582331">保護者による使用制限を設定するにはインターネットに接続してください</translation>
 <translation id="7648992873808071793">このデバイスのファイルの保存</translation>
@@ -4858,6 +4879,7 @@
 <translation id="8256319818471787266">スパーキー</translation>
 <translation id="8257950718085972371">カメラへのアクセスを引き続きブロックする</translation>
 <translation id="8259239505248583312">続行</translation>
+<translation id="8259556432390118667">16 進数色コード</translation>
 <translation id="8260126382462817229">もう一度ログインしてみてください</translation>
 <translation id="8260864402787962391">マウス</translation>
 <translation id="8261378640211443080">この拡張機能は <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />で提供されていません。知らないうちに追加された可能性があります。</translation>
@@ -5110,6 +5132,7 @@
 <translation id="8662911384982557515">ホームページを次に変更: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">壁紙は設定できません。</translation>
 <translation id="8663099077749055505"><ph name="HOST" /> 上での複数ファイルの自動ダウンロードを常にブロックする</translation>
+<translation id="8663534996262079772">このサイトの通知を表示しますか?</translation>
 <translation id="8664389313780386848">ページのソースを表示(&amp;V)</translation>
 <translation id="8665180165765946056">バックアップが完了しました</translation>
 <translation id="866611985033792019">メールユーザーの識別でこの証明書を信頼します</translation>
@@ -5399,6 +5422,7 @@
 <translation id="9065203028668620118">編集</translation>
 <translation id="9066773882585798925">テキストを読み上げます</translation>
 <translation id="9066782832737749352">テキスト読み上げ</translation>
+<translation id="9068849894565669697">色の選択</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB マウスが接続されました</translation>
@@ -5436,6 +5460,7 @@
 <translation id="9131487537093447019">Bluetooth デバイスとのメッセージの送受信。</translation>
 <translation id="9134304429738380103">利用する</translation>
 <translation id="9137013805542155359">原文のページを表示</translation>
+<translation id="9137157311132182254">優先する検索エンジン</translation>
 <translation id="9137916601698928395"><ph name="USER" /> としてリンクを開く</translation>
 <translation id="9138978632494473300">ショートカットを次の場所に追加:</translation>
 <translation id="9140067245205650184">サポートされていない機能フラグ <ph name="BAD_FLAG" /> が使用されています。これにより、安全性とセキュリティが損なわれます。</translation>
@@ -5508,6 +5533,7 @@
 <translation id="962802172452141067">ブックマーク フォルダ ツリー</translation>
 <translation id="964286338916298286">お使いのデバイスの Chrome 特典は IT 管理者によって無効にされています。</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{アプリケーション}other{アプリケーション}}</translation>
+<translation id="965211523698323809"><ph name="DEVICE_TYPE" /> でテキスト メッセージを送受信します。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">この操作を行うと Google アカウントからログアウトします。ブックマーク、履歴、パスワードなどの設定に行った変更は Google アカウントと同期されなくなります。ただし、既存のデータは Google アカウントに保存されたまま残り、<ph name="BEGIN_LINK" />Google ダッシュボード<ph name="END_LINK" />で管理できます。</translation>
 <translation id="967624055006145463">保存データ</translation>
 <translation id="968000525894980488">Google Play 開発者サービスを有効にします。</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 3defd02b..09f8473d2 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">ಇದರಲ್ಲಿ ಅಮಾನ್ಯವಾದ ಆಫ್‌ಸೆಟ್ ಜೊತೆಗೆ ಓದುವ ಅಥವಾ ಬರೆಯುವ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ವಿನಂತಿಸಲಾಗಿದೆ: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">ಸೈನ್ ಇನ್ ಮಾಡುವ ಮುನ್ನ, <ph name="NETWORK_ID" /> ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಅತಿಥಿಯಾಗಿ ಪ್ರವೇಶಿಸಿ</translation>
 <translation id="1103523840287552314">ಯಾವಾಗಲೂ ಅನುವಾದಿಸಿ <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">ನಿಮ್ಮ ಸಿಮ್ ಕಾರ್ಡ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ನಮಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="1108600514891325577">&amp;ನಿಲ್ಲಿಸು</translation>
 <translation id="1110155001042129815">ಕಾಯಿರಿ</translation>
 <translation id="1112420131909513020">ಹಿನ್ನೆಲೆ ಟ್ಯಾಬ್ ಬ್ಲೂಟೂತ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation>
@@ -757,6 +758,7 @@
 <translation id="2126167708562367080">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸಿಂಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ.</translation>
 <translation id="2127372758936585790">ಕಡಿಮೆ ವಿದ್ಯುತ್ ಚಾರ್ಜರ್</translation>
 <translation id="212862741129535676">ಆವರ್ತನ ಸ್ಥಿತಿಯ ನೆಲೆಸುವಿಕೆಯ ಪ್ರತಿಶತ</translation>
+<translation id="212876957201860463">ನಿಮ್ಮ ಸೆಲ್ಯುಲಾರ್ ಸಾಧನವನ್ನು ಸೆಟಪ್ ಮಾಡಲು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="2129825002735785149">ಪ್ಲಗ್‌ಇನ್ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ</translation>
 <translation id="2131077480075264">"<ph name="APP_NAME" />" ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ ಏಕೆಂದರೆ ಇದನ್ನು "<ph name="IMPORT_NAME" />" ರಿಂದ ಅನುಮತಿಸಲಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="21354425047973905">ಪಿನ್‌ಗಳನ್ನು ಮರೆಮಾಡಿ</translation>
@@ -956,6 +958,7 @@
 <translation id="2413749388954403953">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳ ಬಳಕೆದಾರರ ಇಂಟರ್ಫೇಸ್ ಬದಲಾಯಿಸಿ</translation>
 <translation id="241727068219398187"><ph name="TIME" /> ರಂದು ಬಳಕೆಯಲ್ಲಿದ್ದ ನಿಮ್ಮ Google ಪಾಸ್‌ವರ್ಡ್‌ ಬಳಸಿಕೊಂಡು ಡೇಟಾವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇದು Google Pay ನಿಂದ ಪಾವತಿ ವಿಧಾನಗಳು ಮತ್ತು ವಿಳಾಸಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ.</translation>
 <translation id="2419706071571366386">ಸುರಕ್ಷತೆಗಾಗಿ, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಬಳಕೆಯಾಗದೆ ಇದ್ದಾಗ ಸೈನ್ ಔಟ್ ಮಾಡಿ.</translation>
+<translation id="2422125132043002186">Linux ಮರುಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="2423578206845792524">ಇದರಂತೆ ಇಮೇಜ್ ಅನ್ನು ಉ&amp;ಳಿಸಿ...</translation>
 <translation id="2428510569851653187">ಟ್ಯಾಬ್ ಕ್ರ್ಯಾಶ್ ಆದಾಗ ನೀವೇನು ಮಾಡುತ್ತಿದ್ದಿರಿ ಎಂಬುದನ್ನು ವಿವರಿಸಿ</translation>
 <translation id="2431027948063157455">Google ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊ ಇನ್‌ಪುಟ್ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="3090819949319990166">ಬಾಹ್ಯ crx ಫೈಲ್ ಅನ್ನು <ph name="TEMP_CRX_FILE" /> ಗೆ ನಕಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" ಜೋಡಿಸಲಾಗಿದೆ</translation>
+<translation id="3092699946856346803">ನಿಮ್ಮ ಸಿಮ್ ಅನ್ನು ಸೇರಿಸಿ, ಪುನಃ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="3101709781009526431">ದಿನಾಂಕ  ಮತ್ತು  ಸಮಯ</translation>
 <translation id="310671807099593501">ಸೈಟ್‌ ಬ್ಲೂಟೂತ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation>
 <translation id="3115147772012638511">ಕ್ಯಾಶ್‌ಗಾಗಿ ನಿರೀಕ್ಷಿಸುತ್ತಿದೆ...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">ಕ್ವಾರಂಟೈನ್ ಫೋಲ್ಡರ್‌ಗೆ ಸರಿಸಲಾಗುವ ಫೈಲ್‍ಗಳು ಮತ್ತು ಪ್ರೋಗ್ರಾಂಗಳು:</translation>
 <translation id="3282568296779691940">Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="3285322247471302225">ಹೊಸ &amp;ಟ್ಯಾಬ್</translation>
+<translation id="3286654161521615710">Chrome ಬ್ರೌಸರ್ ಹಾಗೂ <ph name="DEVICE_TYPE" /> ಲಾಂಚರ್‌ನಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ</translation>
 <translation id="3286737518123001369">ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಿರುವ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅಳಿಸಿ</translation>
 <translation id="3288047731229977326">ಡೆವಲಪರ್ ಮೋಡ್‌ನಲ್ಲಿ ಚಾಲನೆಯಾಗುವ ವಿಸ್ತರಣೆಗಳು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗೆ ಹಾನಿಮಾಡಬಹುದು. ನೀವು ಡೆವಲಪರ್ ಆಗಿರದಿದ್ದರೇ, ಸುರಕ್ಷಿತವಾಗಿರಲು ಡೆವಲಪರ್ ಮೋಡ್‌ನಲ್ಲಿ ಈ ವಿಸ್ತರಣೆಗಳ ಚಾಲನೆಯನ್ನು ನೀವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕು.</translation>
 <translation id="3289856944988573801">ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಲು, ದಯವಿಟ್ಟು Ethernet ಅಥವಾ ವೈ-ಫೈ ಬಳಸಿ.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರ</translation>
 <translation id="3775705724665058594">ನಿಮ್ಮ ಸಾಧನಗಳಿಗೆ ಕಳುಹಿಸಿ</translation>
 <translation id="3776796446459804932">ಈ ವಿಸ್ತರಣೆಯು Chrome ವೆಬ್‌ ಅಂಗಡಿಯ ನೀತಿಯನ್ನು ಉಲ್ಲಂಘಿಸುತ್ತದೆ.</translation>
+<translation id="3777483481409781352">ಸೆಲ್ಯುಲಾರ್ ಸಾಧನವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="3777806571986431400">ವಿಸ್ತರಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="3778152852029592020">ಡೌನ್‌ಲೋಡ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ.</translation>
 <translation id="3778208826288864398">ತಪ್ಪಾದ ಪಿನ್ ಸಂಖ್ಯೆಯನ್ನು ಹಲವಾರು ಬಾರಿ ನಮೂದಿಸಿರುವ ಕಾರಣದಿಂದಾಗಿ, ಭದ್ರತೆ ಕೀ ಅನ್ನು ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ನೀವು ಭದ್ರತೆ ಕೀ ಅನ್ನು ಮರುಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">ಕಪ್ಪು ಮತ್ತು ಬಿಳುಪು</translation>
 <translation id="4136203100490971508">ನೈಟ್ ಲೈಟ್ ಸೂರ್ಯೋದಯದ ಸಮಯದಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆಫ್ ಆಗುತ್ತದೆ</translation>
 <translation id="4138267921960073861">ಬಳಕೆದಾರಹೆಸರುಗಳು ಮತ್ತು ಫೋಟೋಗಳನ್ನು ಸೈನ್-ಇನ್ ಪರದೆಯಲ್ಲಿ ತೋರಿಸು</translation>
+<translation id="4142052906269098341">ನಿಮ್ಮ ಫೋನ್‌ನ ಮೂಲಕ, ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">ಉತ್ತಮ ಗುಣಮಟ್ಟದ ವೀಡಿಯೊ ಪಡೆಯಿರಿ ಮತ್ತು ಬ್ಯಾಟರಿ ಅವಧಿಯನ್ನು ಉಳಿಸಿ. ವೀಡಿಯೊ, ನಿಮ್ಮ Cast-ಸಕ್ರಿಯಗೊಂಡ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಮಾತ್ರ ಪ್ಲೇ ಆಗುತ್ತದೆ.</translation>
 <translation id="4145922204387553806">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಏನಿದೆ ಎಂಬುದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಮಾಹಿತಿಯನ್ನು ನಿಮಗೆ ತೋರಿಸಲು ಅಸಿಸ್ಟೆಂಟ್‌ಗೆ ಅನುಮತಿಸಿ</translation>
 <translation id="4146026355784316281">ಯಾವಾಗಲೂ ಸಿಸ್ಟಂ ವೀಕ್ಷಕದ ಜೊತೆಗೆ ತೆರೆಯಿರಿ</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">ರಫ್ತು</translation>
 <translation id="42137655013211669">ಈ ಸಂಪನ್ಮೂಲಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಸರ್ವರ್‌ ಮೂಲಕ ನಿಷೇಧಿಸಲಾಗಿದೆ.</translation>
 <translation id="4215350869199060536">ಓಹ್, ಹೆಸರಿನಲ್ಲಿ ಅಕ್ರಮ ಸಂಕೇತಗಳಿವೆ!</translation>
+<translation id="4220648711404560261">ಸಕ್ರಿಯಗೊಳಿಸುವಾಗ, ದೋಷ ಸಂಭವಿಸಿದೆ.</translation>
 <translation id="4225397296022057997">ಎಲ್ಲಾ ಸೈಟ್‌ಗಳಲ್ಲಿ</translation>
 <translation id="4232375817808480934">Kerberos ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</translation>
 <translation id="4235200303672858594">ಸಂಪೂರ್ಣ ಪರದೆ</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ ಆದ್ಯತೆಗಳು</translation>
 <translation id="447252321002412580">Chrome ನ ವೈಶಿಷ್ಟ್ಯಗಳು ಹಾಗೂ ಕೆಲಸ ನಿರ್ವಹಣೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation>
 <translation id="4474155171896946103">ಎಲ್ಲಾ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಬುಕ್‌ಮಾರ್ಕ್ ಮಾಡು...</translation>
+<translation id="4474461121892222090">ಮೊಬೈಲ್ ಡೇಟಾ ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು 15 ನಿಮಿಷಗಳಷ್ಟು ಕಾಲಾವಕಾಶ ಬೇಕಾಗಬಹುದು.</translation>
 <translation id="4475552974751346499">ಡೌನ್‌ಲೋಡ್‌ಗಳು ಹುಡುಕಿ</translation>
 <translation id="4476590490540813026">ಕ್ರೀಡಾಪಟು</translation>
 <translation id="4477015793815781985">Ctrl, Alt, ಅಥವಾ ⌘ ಸೇರಿಸಿ</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗುತ್ತಿದೆ. ಇದು ಕೆಲವು ನಿಮಿಷಗಳ ಕಾಲಾವಕಾಶವನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು.</translation>
 <translation id="4480590691557335796">Chrome, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ಕಂಡುಹಿಡಿಯಬಲ್ಲುದು ಮತ್ತು ಅದನ್ನು ತೆಗೆದುಹಾಕಬಲ್ಲುದು</translation>
 <translation id="4481530544597605423">ಜೋಡಿಯಾಗಿರದ ಸಾಧನಗಳು</translation>
+<translation id="4483579413421375386">ಈ ಸೈಟ್‌ನ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="4495419450179050807">ಈ ಪುಟದಲ್ಲಿ ತೋರಿಸಬೇಡ</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ಕ್ರ್ಯಾಶ್ ಆಗಿದೆ</translation>
 <translation id="450099669180426158">ಆಶ್ಚರ್ಯಕರ ಚಿಹ್ನೆಯ ಐಕಾನ್</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">ದಯವಿಟ್ಟು "<ph name="DEVICE_NAME" />" ಗಾಗಿ PIN ಅನ್ನು ನಮೂದಿಸಿ:</translation>
 <translation id="4648491805942548247">ಸಾಕಷ್ಟಿಲ್ಲದ ಅನುಮತಿಗಳು</translation>
 <translation id="4648499713050786492">ವ್ಯಕ್ತಿಯನ್ನು ಸೇರಿಸುವ ಮೊದಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಪ್ರೊಫೈಲ್‌ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ.</translation>
+<translation id="4650591383426000695">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಿಂದ ನಿಮ್ಮ ಫೋನ್‌ನ ಸಂಪರ್ಕವನ್ನು ಕಡಿತಗೊಳಿಸಿ</translation>
 <translation id="4651484272688821107">ಡೆಮೊ ಮೋಡ್ ಸಂಪನ್ಮೂಲಗಳೊಂದಿಗೆ ಆನ್‌ಲೈನ್ ಘಟಕವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ.</translation>
 <translation id="465878909996028221">http, https ಮತ್ತು ಫೈಲ್ ಪ್ರೊಟೊಕಾಲ್‌ಗಳು ಮಾತ್ರವೇ ಬ್ರೌಸರ್ ಮರುನಿರ್ದೇಶನಗಳಿಗೆ ಬೆಂಬಲಿತವಾಗಿವೆ.</translation>
 <translation id="4659077111144409915">ಪ್ರಾಥಮಿಕ ಖಾತೆ</translation>
@@ -2730,7 +2741,7 @@
 <translation id="5097002363526479830">'<ph name="NAME" />' ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ವಿಫಲವಾಗಿದೆ: <ph name="DETAILS" /></translation>
 <translation id="5101042277149003567">ಎಲ್ಲಾ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="5101839224773798795">ಕರ್ಸರ್ ನಿಂತಾಗ, ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕ್ಲಿಕ್ ಮಾಡಿ</translation>
-<translation id="5102007300153090427">ಫೈಲ್‌ಗಳನ್ನು ಉಳಿಸಲು ಈ ಪುಟವು ಅನುಮತಿಯನ್ನು ಹೊಂದಿದೆ.</translation>
+<translation id="5102007300153090427">ಈ ಪುಟವನ್ನು ಫೈಲ್‍ಗಳಲ್ಲಿ ಉಳಿಸುವುದಕ್ಕಾಗಿ ಅನುಮತಿಯನ್ನು ನೀಡಲಾಗಿದೆ.</translation>
 <translation id="5108967062857032718">ಸೆಟ್ಟಿಂಗ್‌ಗಳು - Android ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
 <translation id="5109044022078737958">ಮಿಯಾ</translation>
 <translation id="5111646998522066203">ಅದೃಶ್ಯ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
@@ -2741,6 +2752,7 @@
 <translation id="5115309401544567011">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ವಿದ್ಯುತ್ ಸಂಪರ್ಕಕ್ಕೆ ಪ್ಲಗ್ ಮಾಡಿ.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">ಇದರಂತೆ ಆಡಿಯೋ ಉ&amp;ಳಿಸಿ...</translation>
+<translation id="5117139026559873716">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಿಂದ ನಿಮ್ಮ ಫೋನ್‌ನ ಸಂಪರ್ಕವನ್ನು ಕಡಿತಗೊಳಿಸಿ. ಇನ್ನು ಮುಂದೆ ಅವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕ ಹೊಂದುವುದಿಲ್ಲ.</translation>
 <translation id="5117427536932535467">ಥೀಮ್‌ಗಳು ಮತ್ತು ವಾಲ್‌ಪೇಪರ್‌ಗಳು</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಮುದ್ರಿಸಲಾಗಿದೆ</translation>
 <translation id="5117930984404104619">ಭೇಟಿ ನೀಡಿದ URL ಗಳು ಸೇರಿದಂತೆ, ಇತರ ವಿಸ್ತರಣೆಗಳ ವರ್ತನೆಯ ಮೇಲೆ ನಿಗಾವಹಿಸಿ</translation>
@@ -2970,6 +2982,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> ನ ಸೂಚಿಕೆ</translation>
 <translation id="5463856536939868464">ಮರೆಮಾಡಿದ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಹೊಂದಿರುವ ಮೆನು</translation>
 <translation id="5464632865477611176">ಈ ಸಮಯದಲ್ಲಿ ಚಾಲನೆ ನೀಡಿ</translation>
+<translation id="5464660706533281090">ಬಳಕೆದಾರರು ಮಕ್ಕಳಾಗಿದ್ದರೆ, ಅವರು ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸುವಂತಿಲ್ಲ.</translation>
 <translation id="5466374726908360271">ಅಂ&amp;ಟಿಸಿ ಮತ್ತು “<ph name="SEARCH_TERMS" />” ಗಾಗಿ ಹುಡುಕಿ</translation>
 <translation id="5471768120198416576">ನಮಸ್ಕಾರ! ನಾನು ನಿಮ್ಮ ಪಠ್ಯದಿಂದ ಧ್ವನಿಯ ಧ್ವನಿ.</translation>
 <translation id="5473333559083690127">ಹೊಸ ಪಿನ್ ಮರು-ನಮೂದಿಸಿ</translation>
@@ -3206,6 +3219,7 @@
 <translation id="5817918615728894473">ಜೋಡಿಸು</translation>
 <translation id="5821565227679781414">ಶಾರ್ಟ್‌ಕಟ್ ರಚಿಸಿ</translation>
 <translation id="5825412242012995131">ಆನ್‌ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
+<translation id="5826395379250998812">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು, ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">ಸಾಮಾನ್ಯ ಹೆಸರು (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">ಮುದ್ರಿಸಲಾಗುತ್ತಿದೆ...</translation>
@@ -3427,6 +3441,7 @@
 <translation id="6129691635767514872">ಆಯ್ಕೆಮಾಡಲಾದ ಡೇಟಾವನ್ನು Chrome ಮತ್ತು ಸಿಂಕ್ ಮಾಡಲ್ಪಟ್ಟ ಸಾಧನಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ. ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />ನಲ್ಲಿನ ಇತರ Google ಸೇವೆಗಳಲ್ಲಿ ಹುಡುಕಾಟಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಯಂತಹ ಬ್ರೌಸಿಂಗ್ ಹುಡುಕಾಟಗಳ ಇತರ ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿರಬಹುದು.</translation>
 <translation id="6129938384427316298">Netscape ಪ್ರಮಾಣಪತ್ರ ಕಾಮೆಂಟ್</translation>
 <translation id="6129953537138746214">ಸ್ಪೇಸ್</translation>
+<translation id="6130024555057767093">ಪ್ರಸ್ತುತ, ನೀವು ಪ್ರತ್ಯೇಕವಾಗಿ ಅನುಮತಿಸುವ ಸೈಟ್‌ಗಳನ್ನು ಬಿಟ್ಟು, ಉಳಿದ ಎಲ್ಲಾ ಸೈಟ್‌ಗಳ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
 <translation id="6136114942382973861">ಡೌನ್‌ಲೋಡ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಮುಚ್ಚಿ</translation>
 <translation id="6137767437444130246">ಬಳಕೆದಾರರ ಪ್ರಮಾಣಪತ್ರ</translation>
 <translation id="6138680304137685902">SHA-384 ಜೊತೆಗೆ X9.62 ECDSA ಸಹಿ</translation>
@@ -3472,6 +3487,7 @@
 <translation id="620722923698527029">ಸಂಬಂಧಿತ ಅಪ್ಲಿಕೇಶನ್‍ನಲ್ಲಿ ಈ ಪ್ರಕಾರದ ಲಿಂಕ್‍ಗಳನ್ನು ಯಾವಾಗಲೂ ತೆರೆಯಿರಿ</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux ಆ್ಯಪ್) ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ</translation>
 <translation id="6207937957461833379">ರಾಷ್ಟ್ರ/ಪ್ರದೇಶ</translation>
+<translation id="6208521041562685716">ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: ಸಿಂಕ್ ಕೆಲಸ ಮಾಡುತ್ತಿಲ್ಲ</translation>
 <translation id="6212039847102026977">ಸುಧಾರಿತ ನೆಟ್‌ವರ್ಕ್ ಗುಣಲಕ್ಷಣಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="6212168817037875041">ಡಿಸ್‌ಪ್ಲೇ ಅನ್ನು ಆಫ್‌ ಮಾಡಿ</translation>
@@ -3833,6 +3849,7 @@
 <translation id="677965093459947883">ತುಂಬಾ ಚಿಕ್ಕದು</translation>
 <translation id="6780439250949340171">ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="6781284683813954823">ಡೂಡಲ್ ಲಿಂಕ್</translation>
+<translation id="6781978626986383437">Linux ಬ್ಯಾಕಪ್ ಅನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="6782111308708962316">ಕುಕೀ ಡೇಟಾವನ್ನು ಮೂರನೇ ವ್ಯಕ್ತಿ ವೆಬ್‌ಸೈಟ್‌ಗಳು ಉಳಿಸದಂತೆ ಮತ್ತು 
 ಓದದಂತೆ ತಡೆಯಿರಿ.</translation>
 <translation id="6786747875388722282">ವಿಸ್ತರಣೆಗಳು</translation>
@@ -4122,6 +4139,7 @@
 <translation id="7197632491113152433">ಈ ಸಾಧನದಲ್ಲಿ ಬಳಸಬಹುದಾದ <ph name="NUMBER_OF_APPS" /> ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ನಿಮ್ಮ ಖಾತೆಯಲ್ಲಿವೆ ಎಂಬುದನ್ನು ನಾವು ಕಂಡುಕೊಂಡಿದ್ದೇವೆ.</translation>
 <translation id="7199158086730159431">ಸಹಾಯ ಪಡೆಯಿರಿ</translation>
 <translation id="7200083590239651963">ಕಾನ್ಫಿಗರೇಶನ್ ಆಯ್ಕೆ ಮಾಡಿ</translation>
+<translation id="7201042526153088083">Google Play ನಿಂದ ಆ್ಯಪ್‌ಗಳು ಹಾಗೂ ಗೇಮ್‌ಗಳನ್ನು ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ. &lt;a target="_blank" href="<ph name="URL" />"&gt;ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ&lt;/a&gt;</translation>
 <translation id="720110658997053098">ಈ ಸಾಧನವನ್ನು ಕಿಯೋಸ್ಕ್-ಮೋಡ್‌ನಲ್ಲಿ ಶಾಶ್ವತವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation>
 <translation id="7201420661433230412">ಫೈಲ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ</translation>
@@ -4146,6 +4164,7 @@
 <translation id="7229570126336867161">EVDO ಅಗತ್ಯವಿದೆ</translation>
 <translation id="7230787553283372882">ನಿಮ್ಮ ಪಠ್ಯ ಗಾತ್ರ ಗ್ರಾಹಕೀಯಗೊಳಿಸಿ</translation>
 <translation id="7232750842195536390">ಮರುಹೆಸರಿಸುವಿಕೆ ವಿಫಲವಾಗಿದೆ</translation>
+<translation id="7234010996000898150">Linux ಮರುಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="7235716375204803342">ಚಟುವಟಿಕೆಗಳನ್ನು ಪಡೆಯಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="7235737137505019098">ಇನ್ನು ಯಾವುದೇ ಖಾತೆಗಳಿಗಾಗಿ ನಿಮ್ಮ ಭದ್ರತೆಯ ಕೀ ಸಾಕಷ್ಟು ಸ್ಥಳಾವಕಾಶವನ್ನು ಹೊಂದಿಲ್ಲ.</translation>
 <translation id="7238585580608191973">SHA-256 ಬೆರಳಚ್ಚು</translation>
@@ -4281,6 +4300,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{&amp;ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲವನ್ನೂ ತೆರೆಯಿರಿ}=1{&amp;ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ}one{&amp;ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲಾ (#) ಅನ್ನು ತೆರೆಯಿರಿ}other{&amp;ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲಾ (#) ಅನ್ನು ತೆರೆಯಿರಿ}}</translation>
 <translation id="7434509671034404296">ಡೆವಲಪರ್</translation>
 <translation id="7436921188514130341">ಓಹ್, ಹೋಯ್ತು! ಮರುಹೆಸರಿಸುವ ಸಂದರ್ಭದಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ.</translation>
+<translation id="7437427339141948518">ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="7438976808740265764">ಡಿಸೆಂಬರ್ 2020 ರ ಬಳಿಕ ಫ್ಲ್ಯಾಶ್ ಪ್ಲೇಯರ್‌ಗೆ ಬೆಂಬಲವಿರುವುದಿಲ್ಲ.</translation>
 <translation id="7441736921018636843">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು, ನಿಮ್ಮ ಸಿಂಕ್ ಪಾಸ್‌ಫ್ರೇಸ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಮರುಹೊಂದಿಸಿ<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">ಇತರ ಬಳಕೆದಾರರು</translation>
@@ -4410,6 +4430,7 @@
 <translation id="7643932971554933646">ಫೈಲ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಸೈಟ್‌ಗೆ ಅನುಮತಿ ನೀಡಬೇಕೇ?</translation>
 <translation id="7644543211198159466">ಬಣ್ಣ ಮತ್ತು ಥೀಮ್</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (ಮಾಲೀಕರು)</translation>
+<translation id="7645681574855902035">Linux ಬ್ಯಾಕಪ್ ಅನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="7647403192093989392">ಯಾವುದೇ ಇತ್ತೀಚಿನ ಚಟುವಟಿಕೆಗಳಿಲ್ಲ</translation>
 <translation id="7648142322539582331">ಪೋಷಕ ನಿಯಂತ್ರಣಗಳನ್ನು ಹೊಂದಿಸಲು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕ ಹೊಂದಿರಿ</translation>
 <translation id="7648992873808071793">ಈ ಸಾಧನದಲ್ಲಿ ಫೈಲ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಿ</translation>
@@ -4858,6 +4879,7 @@
 <translation id="8256319818471787266">ಸ್ಪಾರ್ಕಿ</translation>
 <translation id="8257950718085972371">ಕ್ಯಾಮರಾ ಪ್ರವೇಶ ನಿರ್ಬಂಧಿಸುವುದನ್ನು ಮುಂದುವರಿಸಿ</translation>
 <translation id="8259239505248583312">ಪ್ರಾರಂಭಿಸೋಣ</translation>
+<translation id="8259556432390118667">ಹೆಕ್ಸ್ ಬಣ್ಣ ಮೌಲ್ಯ</translation>
 <translation id="8260126382462817229">ಮತ್ತೊಮ್ಮೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="8260864402787962391">ಮೌಸ್</translation>
 <translation id="8261378640211443080">ಈ ವಿಸ್ತರಣೆಯನ್ನು <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ನಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾಗಿಲ್ಲ ಮತ್ತು ಇದು ನಿಮಗೆ ಅರಿವಿಲ್ಲದಂತೆ ಸೇರಿಸಿರಬಹುದು.</translation>
@@ -5112,6 +5134,7 @@
 <translation id="8662911384982557515">ನಿಮ್ಮ ಮುಖ ಪುಟವನ್ನು ಇದಕ್ಕೆ ಬದಲಾಯಿಸಿ: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome ಗೆ ವಾಲ್‌ಪೇಪರ್ ಅನ್ನು ಹೊಂದಿಸಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="8663099077749055505"><ph name="HOST" /> ರಲ್ಲಿ ಯಾವಾಗಲೂ ಬಹು ಸ್ವಯಂಚಾಲಿತ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸು</translation>
+<translation id="8663534996262079772">ಈ ಸೈಟ್‌ನ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಬೇಕೇ?</translation>
 <translation id="8664389313780386848">ಫ್ರೇಮ್ ಮೂಲವನ್ನು &amp;ವೀಕ್ಷಿಸಿ</translation>
 <translation id="8665180165765946056">ಬ್ಯಾಕಪ್ ಪೂರ್ಣಗೊಂಡಿದೆ</translation>
 <translation id="866611985033792019">ಇಮೇಲ್ ಬಳಕೆದಾರರನ್ನು ಗುರುತಿಸುವುದಕ್ಕಾಗಿ ಈ ಪ್ರಮಾಣಪತ್ರದ ಮೇಲೆ ವಿಶ್ವಾಸವಿಡಿ</translation>
@@ -5401,6 +5424,7 @@
 <translation id="9065203028668620118">ಎಡಿಟ್</translation>
 <translation id="9066773882585798925">ಪಠ್ಯವನ್ನು ಗಟ್ಟಿಯಾಗಿ ಓದುವುದನ್ನು ಆಲಿಸಿ</translation>
 <translation id="9066782832737749352">ಪಠ್ಯದಿಂದ ಧ್ವನಿ</translation>
+<translation id="9068849894565669697">ಬಣ್ಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">ಬ್ಲೂಟೂತ್‌</translation>
 <translation id="9074836595010225693">USB ಮೌಸ್ ಸಂಪರ್ಕಗೊಂಡಿದೆ</translation>
@@ -5438,6 +5462,7 @@
 <translation id="9131487537093447019">ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳಿಗೆ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಿ ಮತ್ತು ಸ್ವೀಕರಿಸಿ.</translation>
 <translation id="9134304429738380103">ಹೌದು, ನಾನು ಒಪ್ಪುತ್ತೇನೆ.</translation>
 <translation id="9137013805542155359">ಮೂಲವನ್ನು ತೋರಿಸಿ</translation>
+<translation id="9137157311132182254">ಆದ್ಯತೆಯ ಹುಡುಕಾಟ ಎಂಜಿನ್</translation>
 <translation id="9137916601698928395">ಲಿಂಕ್ ಅನ್ನು <ph name="USER" /> ರಂತೆ ತೆರೆಯಿರಿ</translation>
 <translation id="9138978632494473300">ಕೆಳಗೆ ಸ್ಥಳಗಳಿಗೆ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳನ್ನು ಸೇರಿಸಿ:</translation>
 <translation id="9140067245205650184">ನೀವು ಬೆಂಬಲಿತವಲ್ಲದ ವೈಶಿಷ್ಟ್ಯ ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಬಳಸುತ್ತಿದ್ದೀರಿ: <ph name="BAD_FLAG" />. ಸ್ಥಿರತೆ ಮತ್ತು ಸುರಕ್ಷತೆಯು ಹಾನಿಯಾಗುತ್ತದೆ.</translation>
@@ -5511,6 +5536,7 @@
 <translation id="962802172452141067">ಬುಕ್‌ಮಾರ್ಕ್ ಫೋಲ್ಡರ್ ಟ್ರೀ</translation>
 <translation id="964286338916298286">ನಿಮ್ಮ ಐಟಿ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ Chrome ನ ಗುಡೀಸ್‌ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{ಅಪ್ಲಿಕೇಶನ್}one{ಅಪ್ಲಿಕೇಶನ್‌ಗಳು}other{ಅಪ್ಲಿಕೇಶನ್‌ಗಳು}}</translation>
+<translation id="965211523698323809">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಿಂದ ಪಠ್ಯ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಿ ಮತ್ತು ಸ್ವೀಕರಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">ಇದು ನಿಮ್ಮ Google ಖಾತೆಗಳಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುತ್ತದೆ. ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಮಾಡಲಾಗುವ ಬದಲಾವಣೆಗಳನ್ನು ಇನ್ನು ಮುಂದೆ Google ಖಾತೆಗೆ ಸಿಂಕ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಆದಾಗ್ಯೂ, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಡೇಟಾ ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿಯೇ ಇರುತ್ತದೆ ಮತ್ತು ಅದನ್ನು <ph name="BEGIN_LINK" />Google ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌‌ನಲ್ಲಿ<ph name="END_LINK" /> ನಿರ್ವಹಿಸಬಹುದಾಗಿದೆ.</translation>
 <translation id="967624055006145463">ಸಂಗ್ರಹಣೆ ಮಾಡಿರುವ ಡೇಟಾ</translation>
 <translation id="968000525894980488">Google Play ಸೇವೆಗಳನ್ನು ಆನ್ ಮಾಡಿ.</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 558d754..506cb5e 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">기기(<ph name="DEVICE_NAME" />)에서 잘못된 오프셋으로 읽기 또는 쓰기 작업을 요청했습니다.</translation>
 <translation id="1097658378307015415">로그인하기 전에 게스트로 로그인하여 <ph name="NETWORK_ID" /> 네트워크를 활성화하세요.</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> 항상 번역</translation>
+<translation id="1104038495841596279">SIM 카드를 감지할 수 없음</translation>
 <translation id="1108600514891325577">중지(&amp;S)</translation>
 <translation id="1110155001042129815">대기</translation>
 <translation id="1112420131909513020">배경 탭에서 블루투스를 사용 중입니다.</translation>
@@ -338,7 +339,7 @@
 <translation id="1503394326855300303">이 소유자 계정이 멀티 로그인 세션에서 처음으로 로그인하는 계정이 되어야 합니다.</translation>
 <translation id="150411034776756821"><ph name="SITE" /> 삭제</translation>
 <translation id="1506061864768559482">검색엔진</translation>
-<translation id="1507049466468737452"><ph name="ORIGIN" />이(가) 다음 폴더에 있는 모든 파일을 볼 수 있습니다.</translation>
+<translation id="1507049466468737452"><ph name="ORIGIN" />은(는) 다음 폴더에 있는 모든 파일을 볼 수 있습니다.</translation>
 <translation id="1507170440449692343">카메라 액세스가 차단된 페이지입니다.</translation>
 <translation id="1507246803636407672">삭제(&amp;D)</translation>
 <translation id="1508491105858779599">지문 센서에 손가락을 갖다 대 기기를 잠금 해제합니다.</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">관리자가 동기화를 사용 중지했습니다.</translation>
 <translation id="2127372758936585790">저출력 충전기</translation>
 <translation id="212862741129535676">주파수 상태 점유율</translation>
+<translation id="212876957201860463">휴대기기 설정 준비 중...</translation>
 <translation id="2129825002735785149">플러그인 업데이트</translation>
 <translation id="2131077480075264"><ph name="IMPORT_NAME" />에서 허용하지 않으므로 '<ph name="APP_NAME" />'을(를) 설치할 수 없습니다.</translation>
 <translation id="21354425047973905">PIN 숨기기</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187"><ph name="TIME" />에 데이터가 Google 비밀번호로 암호화되었습니다.
           Google Pay의 결제 수단 및 주소는 암호화되지 않습니다.</translation>
 <translation id="2419706071571366386">보안을 위해 컴퓨터를 사용하지 않을 때는 로그아웃하세요.</translation>
+<translation id="2422125132043002186">Linux 복원이 취소됨</translation>
 <translation id="2423578206845792524">이미지를 다른 이름으로 저장(&amp;V)...</translation>
 <translation id="2428510569851653187">탭이 다운되었을 때 무엇을 하고 계셨는지 설명해 주세요.</translation>
 <translation id="2431027948063157455">Google 어시스턴트를 로드할 수 없습니다. 네트워크 연결 상태를 확인하고 다시 시도해 보세요.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">오디오 및 비디오 입력 장치에 액세스</translation>
 <translation id="3090819949319990166">외부 crx 파일을 <ph name="TEMP_CRX_FILE" />에 복사할 수 없습니다.</translation>
 <translation id="3090871774332213558">'<ph name="DEVICE_NAME" />' 페어링됨</translation>
+<translation id="3092699946856346803">SIM을 삽입하고 다시 시도해 주세요.</translation>
 <translation id="3101709781009526431">날짜 및 시간</translation>
 <translation id="310671807099593501">사이트에서 블루투스를 사용하고 있습니다.</translation>
 <translation id="3115147772012638511">캐시를 기다리는 중...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">스팸 격리 저장소에 보관할 파일 및 프로그램:</translation>
 <translation id="3282568296779691940">Chrome에 로그인</translation>
 <translation id="3285322247471302225">새 탭(&amp;T)</translation>
+<translation id="3286654161521615710">Chrome 브라우저 및 <ph name="DEVICE_TYPE" /> 런처에서 사용됩니다.</translation>
 <translation id="3286737518123001369">보안 키에 저장된 로그인 데이터를 보고 삭제합니다.</translation>
 <translation id="3288047731229977326">개발자 모드로 실행 중인 확장 프로그램은 컴퓨터에 해를 줄 수 있습니다. 개발자가 아닌 경우 컴퓨터를 안전하게 사용하려면 개발자 모드로 실행 중인 확장 프로그램을 사용 중지해야 합니다.</translation>
 <translation id="3289856944988573801">업데이트를 확인하려면 이더넷 또는 Wi-Fi를 사용하세요.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL 서버 인증서</translation>
 <translation id="3775705724665058594">기기로 전송</translation>
 <translation id="3776796446459804932">이 확장 프로그램은 Chrome 웹 스토어 정책을 위반합니다.</translation>
+<translation id="3777483481409781352">모바일 기기를 활성화하지 못함</translation>
 <translation id="3777806571986431400">확장 프로그램을 사용하도록 설정됨</translation>
 <translation id="3778152852029592020">다운로드가 취소되었습니다.</translation>
 <translation id="3778208826288864398">잘못된 PIN을 너무 여러 번 입력하여 보안 키가 잠겼습니다. 보안 키를 재설정해야 합니다.</translation>
@@ -2136,6 +2142,7 @@
 <translation id="4131410914670010031">흑백</translation>
 <translation id="4136203100490971508">일출 시 야간 조명이 자동으로 꺼짐</translation>
 <translation id="4138267921960073861">로그인 화면에 사용자 이름과 사진 표시</translation>
+<translation id="4142052906269098341">휴대전화를 사용해 <ph name="DEVICE_TYPE" />을(를) 잠금 해제하세요. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">우수한 화질의 동영상을 감상하고 배터리를 더 오래 사용하세요. 동영상은 Cast가 지원되는 화면에서만 재생됩니다.</translation>
 <translation id="4145922204387553806">어시스턴트가 화면에 표시된 내용과 관련된 정보를 표시하도록 허용합니다.</translation>
 <translation id="4146026355784316281">항상 시스템 뷰어로 열기</translation>
@@ -2177,6 +2184,7 @@
 <translation id="42126664696688958">내보내기</translation>
 <translation id="42137655013211669">서버에서 이 리소스에 대한 액세스를 금지했습니다.</translation>
 <translation id="4215350869199060536">이름에 사용할 수 없는 기호가 포함되어 있습니다.</translation>
+<translation id="4220648711404560261">활성화 중 오류가 발생했습니다.</translation>
 <translation id="4225397296022057997">모든 사이트에서</translation>
 <translation id="4232375817808480934">Kerberos 설정</translation>
 <translation id="4235200303672858594">전체 화면</translation>
@@ -2325,6 +2333,7 @@
 <translation id="4470957202018033307">외부 저장소 환경설정</translation>
 <translation id="447252321002412580">Chrome의 기능 및 성능 개선에 참여</translation>
 <translation id="4474155171896946103">모든 탭 북마크...</translation>
+<translation id="4474461121892222090">모바일 데이터 활성화를 완료하는 데 최대 15분이 걸릴 수 있습니다.</translation>
 <translation id="4475552974751346499">다운로드 검색</translation>
 <translation id="4476590490540813026">운동선수</translation>
 <translation id="4477015793815781985">Ctrl, Alt 또는 ⌘ 키를 포함하세요</translation>
@@ -2334,6 +2343,7 @@
 <translation id="4479877282574735775">가상 머신을 구성하고 있습니다. 몇 분 정도 소요될 수 있습니다.</translation>
 <translation id="4480590691557335796">Chrome이 컴퓨터에서 유해한 소프트웨어를 찾아 삭제할 수 있습니다.</translation>
 <translation id="4481530544597605423">페어링 해제된 기기</translation>
+<translation id="4483579413421375386">사이트에서 표시</translation>
 <translation id="4495419450179050807">이 페이지에 표시하지 않음</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" />이(가) 다운되었습니다</translation>
 <translation id="450099669180426158">느낌표 아이콘</translation>
@@ -2437,6 +2447,7 @@
 <translation id="4647697156028544508">'<ph name="DEVICE_NAME" />'의 PIN을 입력하세요:</translation>
 <translation id="4648491805942548247">권한 부족</translation>
 <translation id="4648499713050786492">프로필을 잠금 해제한 다음 사용자를 추가하세요.</translation>
+<translation id="4650591383426000695"><ph name="DEVICE_TYPE" />에서 휴대전화 연결 해제</translation>
 <translation id="4651484272688821107">데모 모드 리소스로 온라인 구성요소를 로드하지 못했습니다.</translation>
 <translation id="465878909996028221">http, https 및 파일 프로토콜에만 브라우저 리디렉션이 지원됩니다.</translation>
 <translation id="4659077111144409915">기본 계정</translation>
@@ -2738,6 +2749,7 @@
 <translation id="5115309401544567011"><ph name="DEVICE_TYPE" />을(를) 전원에 연결하세요.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">오디오를 다른 이름으로 저장(&amp;V)...</translation>
+<translation id="5117139026559873716"><ph name="DEVICE_TYPE" />에서 휴대전화를 연결 해제합니다. 더 이상 자동으로 연결되지 않습니다.</translation>
 <translation id="5117427536932535467">테마와 배경화면</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> 인쇄 완료</translation>
 <translation id="5117930984404104619">방문한 URL을 포함하여 다른 확장 프로그램의 동작을 모니터링합니다.</translation>
@@ -2901,7 +2913,7 @@
 <translation id="5370819323174483825">새로고침(&amp;R)</translation>
 <translation id="5372529912055771682">제공된 등록 모드는 해당 버전의 운영 체제에서 지원되지 않습니다. 최신 버전을 실행하고 있는지 확인한 뒤 다시 시도하세요.</translation>
 <translation id="5374359983950678924">사진 변경</translation>
-<translation id="5375793835576008230"><ph name="ORIGIN" />에서 <ph name="FOLDERNAME" />에 있는 파일에 변경사항을 직접 저장할 수 있게 됩니다. 이 사이트는 사용자가 탭을 닫을 때까지 변경사항을 저장할 수 있습니다.</translation>
+<translation id="5375793835576008230"><ph name="ORIGIN" />이(가) <ph name="FOLDERNAME" />에 있는 파일에 변경사항을 직접 저장할 수 있게 됩니다. 이 사이트는 사용자가 탭을 닫을 때까지 변경사항을 저장할 수 있습니다.</translation>
 <translation id="5376169624176189338">클릭하면 이전 페이지로 가고 누르고 있으면 방문 기록이 나타납니다.</translation>
 <translation id="5376931455988532197">파일이 너무 큼</translation>
 <translation id="537813040452600081">이 창에서 보는 페이지는 브라우저 기록에 나타나지 않으며 로그아웃한 후에도 컴퓨터에 쿠키와 같은 다른 흔적을 남기지 않습니다. 다운로드한 파일과 생성한 북마크는 보관되지 않습니다.</translation>
@@ -2967,6 +2979,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" />의 색인</translation>
 <translation id="5463856536939868464">숨은 북마크를 포함하는 메뉴</translation>
 <translation id="5464632865477611176">이번만 실행</translation>
+<translation id="5464660706533281090">이 설정은 자녀 사용자가 변경할 수 없습니다.</translation>
 <translation id="5466374726908360271">'<ph name="SEARCH_TERMS" />' 붙여넣기 및 검색(&amp;S)</translation>
 <translation id="5471768120198416576">안녕하세요. 텍스트 음성 변환의 음성입니다.</translation>
 <translation id="5473333559083690127">새 PIN 다시 입력</translation>
@@ -3202,6 +3215,7 @@
 <translation id="5817918615728894473">페어링</translation>
 <translation id="5821565227679781414">바로가기 만들기</translation>
 <translation id="5825412242012995131">사용(권장)</translation>
+<translation id="5826395379250998812">휴대전화와 <ph name="DEVICE_TYPE" />을(를) 연결하세요. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">일반 이름(CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">인쇄 중...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">선택한 데이터가 Chrome 및 동기화된 기기에서 삭제되었습니다. <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />에서 검색이나 기타 Google 서비스에서의 활동 등 내 Google 계정에 있는 다른 형식의 탐색 기록을 확인할 수 있습니다.</translation>
 <translation id="6129938384427316298">Netscape Certificate Comment</translation>
 <translation id="6129953537138746214">공백</translation>
+<translation id="6130024555057767093">개별적으로 허용한 사이트를 제외한 모든 사이트의 알림이 현재 차단되어 있습니다.</translation>
 <translation id="6136114942382973861">다운로드바 닫기</translation>
 <translation id="6137767437444130246">사용자 인증서</translation>
 <translation id="6138680304137685902">SHA-384를 포함한 X9.62 ECDSA 서명</translation>
@@ -3468,6 +3483,7 @@
 <translation id="620722923698527029">항상 이러한 유형의 링크를 연결된 앱에서 열기</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" />(Linux 앱) 설치</translation>
 <translation id="6207937957461833379">국가/지역</translation>
+<translation id="6208521041562685716">모바일 데이터가 활성화됨</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: 동기화가 작동하지 않음</translation>
 <translation id="6212039847102026977">고급 네트워크 속성 표시</translation>
 <translation id="6212168817037875041">디스플레이 사용 중지</translation>
@@ -3829,6 +3845,7 @@
 <translation id="677965093459947883">아주 작게</translation>
 <translation id="6780439250949340171">기타 설정 관리</translation>
 <translation id="6781284683813954823">기념일 로고 링크</translation>
+<translation id="6781978626986383437">Linux 백업이 취소됨</translation>
 <translation id="6782111308708962316">타사 웹사이트에서 쿠키 데이터를 저장하거나 읽을 수 없도록 방지</translation>
 <translation id="6786747875388722282">확장 프로그램</translation>
 <translation id="6787839852456839824">단축키</translation>
@@ -3890,7 +3907,7 @@
 <translation id="6865313869410766144">양식 데이터 자동 완성</translation>
 <translation id="6865708901122695652">WebRTC 이벤트 로그(<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation>
 <translation id="686664946474413495">색상 온도</translation>
-<translation id="6868139415119881457"><ph name="ORIGIN" />이(가) 다음 파일 및 폴더를 보고 변경사항을 직접 저장할 수 있습니다.</translation>
+<translation id="6868139415119881457"><ph name="ORIGIN" />은(는) 다음 파일 및 폴더를 보고 변경사항을 직접 저장할 수 있습니다.</translation>
 <translation id="6870888490422746447">공유할 앱 선택:</translation>
 <translation id="6871644448911473373">OCSP 응답자: <ph name="LOCATION" /></translation>
 <translation id="6872781471649843364">입력한 비밀번호가 서버에 의해 거부되었습니다.</translation>
@@ -4116,6 +4133,7 @@
 <translation id="7197632491113152433">이 기기에서 사용할 수 있는 앱을 계정에서 <ph name="NUMBER_OF_APPS" />개 찾았습니다.</translation>
 <translation id="7199158086730159431">도움말 보기</translation>
 <translation id="7200083590239651963">설정 선택</translation>
+<translation id="7201042526153088083"><ph name="DEVICE_TYPE" />에서 Google Play 앱 및 게임을 설치하세요. &lt;a target="_blank" href="<ph name="URL" />"&gt;자세히 알아보기&lt;/a&gt;</translation>
 <translation id="720110658997053098">이 기기를 키오스크 모드로 영구 고정</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' 삭제됨</translation>
 <translation id="7201420661433230412">파일 보기</translation>
@@ -4140,6 +4158,7 @@
 <translation id="7229570126336867161">EVDO가 필요합니다.</translation>
 <translation id="7230787553283372882">텍스트 크기 맞춤설정</translation>
 <translation id="7232750842195536390">이름 변경 실패</translation>
+<translation id="7234010996000898150">Linux 복원 취소 중</translation>
 <translation id="7235716375204803342">활동을 가져오는 중...</translation>
 <translation id="7235737137505019098">보안 키에 계정을 추가할 공간이 충분하지 않습니다.</translation>
 <translation id="7238585580608191973">SHA-256 지문</translation>
@@ -4275,6 +4294,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{모두 새 창에서 열기(N)}=1{새 창에서 열기(N)}other{#개 모두 새 창에서 열기(N)}}</translation>
 <translation id="7434509671034404296">개발자 정보</translation>
 <translation id="7436921188514130341">이름 변경 중에 오류가 발생했습니다.</translation>
+<translation id="7437427339141948518">알림 사용 중지</translation>
 <translation id="7438976808740265764">Flash Player는 2020년 12월 이후 더 이상 지원되지 않습니다.</translation>
 <translation id="7441736921018636843">이 설정을 변경하려면 <ph name="BEGIN_LINK" />동기화를 재설정<ph name="END_LINK" />하여 동기화 암호를 삭제하세요.</translation>
 <translation id="7441830548568730290">다른 사용자</translation>
@@ -4404,6 +4424,7 @@
 <translation id="7643932971554933646">사이트가 파일을 보도록 허용하시겠습니까?</translation>
 <translation id="7644543211198159466">색상 및 테마</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" />(소유자)</translation>
+<translation id="7645681574855902035">Linux 백업 취소 중</translation>
 <translation id="7647403192093989392">최근 활동이 없음</translation>
 <translation id="7648142322539582331">자녀 보호 기능을 설정하려면 인터넷에 연결하세요.</translation>
 <translation id="7648992873808071793">이 기기에 파일 저장</translation>
@@ -4855,6 +4876,7 @@
 <translation id="8256319818471787266">멍멍이</translation>
 <translation id="8257950718085972371">카메라 액세스 계속 차단</translation>
 <translation id="8259239505248583312">시작하기</translation>
+<translation id="8259556432390118667">16진수 색상 값</translation>
 <translation id="8260126382462817229">다시 로그인해 주세요.</translation>
 <translation id="8260864402787962391">마우스</translation>
 <translation id="8261378640211443080">이 확장 프로그램은 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />에 표시되지 않으며 사용자 모르게 추가되었을 수 있습니다.</translation>
@@ -5107,6 +5129,7 @@
 <translation id="8662911384982557515">다음으로 홈페이지 변경: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome에서 배경화면을 설정할 수 없습니다.</translation>
 <translation id="8663099077749055505"><ph name="HOST" />에서 여러 항목을 자동으로 다운로드하지 않도록 항상 차단</translation>
+<translation id="8663534996262079772">이 사이트의 알림을 표시하시겠습니까?</translation>
 <translation id="8664389313780386848">페이지 소스 보기(&amp;V)</translation>
 <translation id="8665180165765946056">백업 완료</translation>
 <translation id="866611985033792019">이메일 사용자를 식별하기 위해 이 인증서 신뢰</translation>
@@ -5396,6 +5419,7 @@
 <translation id="9065203028668620118">수정</translation>
 <translation id="9066773882585798925">소리 내어 읽은 텍스트 듣기</translation>
 <translation id="9066782832737749352">텍스트 음성 변환</translation>
+<translation id="9068849894565669697">색상 선택</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">블루투스</translation>
 <translation id="9074836595010225693">USB 마우스 연결됨</translation>
@@ -5433,6 +5457,7 @@
 <translation id="9131487537093447019">블루투스 기기와 메시지를 주고받습니다.</translation>
 <translation id="9134304429738380103">예, 동의합니다.</translation>
 <translation id="9137013805542155359">원본 보기</translation>
+<translation id="9137157311132182254">기본 검색엔진</translation>
 <translation id="9137916601698928395"><ph name="USER" />(으)로 링크 열기</translation>
 <translation id="9138978632494473300">다음 위치에 바로가기 추가:</translation>
 <translation id="9140067245205650184">지원되지 않는 기능 플래그(<ph name="BAD_FLAG" />)를 사용 중이므로 안정성과 보안에 문제가 발생합니다.</translation>
@@ -5505,6 +5530,7 @@
 <translation id="962802172452141067">북마크 폴더 구조</translation>
 <translation id="964286338916298286">IT 관리자가 내 기기에서 Chrome Goodies를 이용할 수 없도록 설정했습니다.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{애플리케이션}other{애플리케이션}}</translation>
+<translation id="965211523698323809"><ph name="DEVICE_TYPE" />에서 SMS를 보내고 받으세요. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Google 계정에서 로그아웃됩니다. 북마크, 방문 기록, 비밀번호, 기타 설정이 더 이상 Google 계정에 동기화되지 않습니다. 하지만 기존 데이터는 Google 계정에 계속 저장되며 <ph name="BEGIN_LINK" />Google 대시보드<ph name="END_LINK" />에서 관리할 수 있습니다.</translation>
 <translation id="967624055006145463">저장된 데이터</translation>
 <translation id="968000525894980488">Google Play 서비스를 사용 설정합니다.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index a62acdde..56a692e 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Buvo pateikta skaitymo arba rašymo operacijos užklausa su netinkamu poslinkiu įrenginyje „<ph name="DEVICE_NAME" />“.</translation>
 <translation id="1097658378307015415">Prieš prisijungdami įeikite kaip svečias, kad suaktyvintumėte tinklą <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Visada versti <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Nepavyko aptikti SIM kortelės</translation>
 <translation id="1108600514891325577">&amp;Sustabdyti</translation>
 <translation id="1110155001042129815">Palaukti</translation>
 <translation id="1112420131909513020">Fone veikiančiame skirtuke naudojamas „Bluetooth“</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Sinchronizavimą išjungė jūsų administratorius.</translation>
 <translation id="2127372758936585790">Mažos galios įkroviklis</translation>
 <translation id="212862741129535676">Dažnumo būsenos užėmimo procentas</translation>
+<translation id="212876957201860463">Ruošiamasi nustatyti mobiliojo ryšio įrenginį...</translation>
 <translation id="2129825002735785149">Atnaujinti papildinį</translation>
 <translation id="2131077480075264">Nepavyko įdiegti „<ph name="APP_NAME" />“, nes to neleidžia „<ph name="IMPORT_NAME" />“</translation>
 <translation id="21354425047973905">Slėpti PIN kodus</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Nuo <ph name="TIME" /> duomenys užšifruoti naudojant „Google“
           slaptažodį. Neįtraukiami mokėjimo metodai ir adresai iš „Google Pay“.</translation>
 <translation id="2419706071571366386">Saugos sumetimais baigę naudoti kompiuterį atsijunkite.</translation>
+<translation id="2422125132043002186">„Linux“ atkūrimas atšauktas</translation>
 <translation id="2423578206845792524">Iš&amp;saugoti paveikslėlį kaip...</translation>
 <translation id="2428510569851653187">Apibūdinkite, ką darėte, kai skirtukas užstrigo</translation>
 <translation id="2431027948063157455">Nepavyko įkelti „Google“ padėjėjo, patikrinkite tinklo ryšį ir bandykite dar kartą.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Pasiekiama garso ir vaizdo įrašų įvestis</translation>
 <translation id="3090819949319990166">Nepavyko nukopijuoti išorinio CRX failo į „<ph name="TEMP_CRX_FILE" />“.</translation>
 <translation id="3090871774332213558">Įrenginys „<ph name="DEVICE_NAME" />“ susietas</translation>
+<translation id="3092699946856346803">Įdėkite SIM kortelę ir bandykite dar kartą</translation>
 <translation id="3101709781009526431">Data ir laikas</translation>
 <translation id="310671807099593501">Svetainė naudoja „Bluetooth“</translation>
 <translation id="3115147772012638511">Laukiama talpyklos...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Failas ir programos, kurie bus izoliuoti:</translation>
 <translation id="3282568296779691940">Prisijungti prie „Chrome“</translation>
 <translation id="3285322247471302225">Naujas &amp;skirtukas</translation>
+<translation id="3286654161521615710">Naudojama naršyklėje „Chrome“ ir „<ph name="DEVICE_TYPE" />“ paleidimo priemonėje</translation>
 <translation id="3286737518123001369">Peržiūrėkite ir ištrinkite prisijungimo duomenis, saugomus saugos rakte</translation>
 <translation id="3288047731229977326">Kūrėjo režimu veikiantys plėtiniai gali padaryti žalos kompiuteryje. Jei nesate kūrėjai, turėtumėte išjungti šių plėtinių veikimą kūrėjo režimu, kad išliktumėte saugūs.</translation>
 <translation id="3289856944988573801">Jei norite tikrinti, ar nėra naujinių, naudokite eternetą arba „Wi-Fi“.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL serverio sertifikatas</translation>
 <translation id="3775705724665058594">Išsiųsta į jūsų įrenginius</translation>
 <translation id="3776796446459804932">Šis plėtinys pažeidžia „Chrome“ internetinės parduotuvės politiką.</translation>
+<translation id="3777483481409781352">Nepavyko aktyvinti mobiliojo ryšio įrenginio</translation>
 <translation id="3777806571986431400">Plėtinys įgalintas</translation>
 <translation id="3778152852029592020">Atsisiuntimas atšauktas.</translation>
 <translation id="3778208826288864398">Saugos raktas užblokuotas, nes per daug kartų įvestas neteisingas PIN kodas. Turėsite nustatyti saugos raktą iš naujo.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Nespalvotai</translation>
 <translation id="4136203100490971508">Nakties šviesa bus išjungta automatiškai saulei tekant</translation>
 <translation id="4138267921960073861">Rodyti naudotojų vardus ir nuotraukas prisijungimo ekrane</translation>
+<translation id="4142052906269098341">Atrakinkite „<ph name="DEVICE_TYPE" />“ naudodami telefoną <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Gaukite kokybiškesnį vaizdo įrašą ir tausokite akumuliatoriaus energiją. Vaizdo įrašas bus leidžiamas tik su „Cast“ suderinamame įrenginyje.</translation>
 <translation id="4145922204387553806">Leiskite Padėjėjui parodyti jums informaciją apie tai, kas vyksta ekrane</translation>
 <translation id="4146026355784316281">Visada atidaryti naudojant sistemos peržiūros priemonę</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Eksportuoti</translation>
 <translation id="42137655013211669">Prieigą prie šio ištekliaus uždraudė serveris.</translation>
 <translation id="4215350869199060536">Oi, pavadinime yra netinkamų simbolių.</translation>
+<translation id="4220648711404560261">Aktyvinant įvyko klaida.</translation>
 <translation id="4225397296022057997">Visose svetainėse</translation>
 <translation id="4232375817808480934">Konfigūruoti „Kerberos“</translation>
 <translation id="4235200303672858594">Visas ekranas</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Išorinės saugyklos nuostatos</translation>
 <translation id="447252321002412580">Padėti tobulinti „Chrome“ funkcijas ir našumą</translation>
 <translation id="4474155171896946103">Pažymėti visus skirtukus...</translation>
+<translation id="4474461121892222090">Mobiliojo ryšio duomenų aktyvinimas gali užtrukti iki 15 min.</translation>
 <translation id="4475552974751346499">Ieškoti tarp atsisiustų elementų</translation>
 <translation id="4476590490540813026">Sportininkas</translation>
 <translation id="4477015793815781985">Naudokite „Ctrl“, „Alt“ arba ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Konfigūruojamas virtualus įrenginys. Tai gali užtrukti kelias minutes.</translation>
 <translation id="4480590691557335796">„Chrome“ gali rasti kenkėjišką programinę įrangą jūsų kompiuteryje ir ją pašalinti</translation>
 <translation id="4481530544597605423">Atsieti įrenginiai</translation>
+<translation id="4483579413421375386">Rodyti svetainėje</translation>
 <translation id="4495419450179050807">Nerodyti šiame puslapyje</translation>
 <translation id="4500114933761911433">Papildinys „<ph name="PLUGIN_NAME" />“ užstrigo</translation>
 <translation id="450099669180426158">Šauktuko piktograma</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Įveskite „<ph name="DEVICE_NAME" />“ PIN kodą:</translation>
 <translation id="4648491805942548247">Nepakankami leidimai</translation>
 <translation id="4648499713050786492">Prieš pridėdami asmenį atrakinkite savo profilį.</translation>
+<translation id="4650591383426000695">Atjunkite telefoną nuo „<ph name="DEVICE_TYPE" />“</translation>
 <translation id="4651484272688821107">Nepavyko įkelti prisijungus pasiekiamo komponento naudojant demonstracinio režimo šaltinius.</translation>
 <translation id="465878909996028221">Į kitą naršyklę galima peradresuoti tik „http“, „https“ ir failų protokolus.</translation>
 <translation id="4659077111144409915">Pagrindinė paskyra</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Prijunkite „<ph name="DEVICE_TYPE" />“ prie maitinimo šaltinio.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Iš&amp;saugoti garso įrašą kaip...</translation>
+<translation id="5117139026559873716">Atjunkite telefoną nuo „<ph name="DEVICE_TYPE" />“. Įrenginiai nebebus susiejami automatiškai.</translation>
 <translation id="5117427536932535467">Temos ir ekrano fonai</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> sėkmingai išspausdintas</translation>
 <translation id="5117930984404104619">Stebėti kitų plėtinių veikimą, įskaitant aplankytus URL</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Turinys iš <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Meniu su paslėptomis žymėmis</translation>
 <translation id="5464632865477611176">Paleisti šį kartą</translation>
+<translation id="5464660706533281090">Šio nustatymo negalima pakeisti, jei naudotojas yra vaikas.</translation>
 <translation id="5466374726908360271">Įk&amp;klijuoti ir ieškoti „<ph name="SEARCH_TERMS" />“</translation>
 <translation id="5471768120198416576">Sveiki, tai – jūsų teksto į kalbą balsas.</translation>
 <translation id="5473333559083690127">Iš naujo įveskite naują PIN kodą</translation>
@@ -3205,6 +3218,7 @@
 <translation id="5817918615728894473">Susieti</translation>
 <translation id="5821565227679781414">Sukurti šaukinį</translation>
 <translation id="5825412242012995131">Įjungta (rekomenduojama)</translation>
+<translation id="5826395379250998812">Susiekite „<ph name="DEVICE_TYPE" />“ su telefonu <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Bendrasis vardas (angl. „Common Name“) (CN)</translation>
 <translation id="5827266244928330802">„Safari“</translation>
 <translation id="5828633471261496623">Spausdinama...</translation>
@@ -3426,6 +3440,7 @@
 <translation id="6129691635767514872">Pasirinkti duomenys pašalinti iš „Chrome“ ir sinchronizuojamų įrenginių. „Google“ paskyroje galite būti kitų formų naršymo istorijos, pvz., paieškų ir veiklos iš kitų „Google“ paslaugų, kuri pasiekiama adresu <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">„Netscape“ sertifikato komentaras</translation>
 <translation id="6129953537138746214">Tarpas</translation>
+<translation id="6130024555057767093">Šiuo metu pranešimai blokuojami visose svetainėse, išskyrus svetaines, kuriose atskirai leidžiate juos rodyti.</translation>
 <translation id="6136114942382973861">Uždaryti atsisiuntimų juostą</translation>
 <translation id="6137767437444130246">Naudotojo sertifikatas</translation>
 <translation id="6138680304137685902">X9.62 ECDSA parašas naudojant SHA-384</translation>
@@ -3471,6 +3486,7 @@
 <translation id="620722923698527029">Visada atidaryti šių tipų nuorodas susietoje programoje</translation>
 <translation id="6207282396926186323">Įdiegti programą „<ph name="APP_NAME" />“ („Linux“ programa)</translation>
 <translation id="6207937957461833379">Šalis / regionas</translation>
+<translation id="6208521041562685716">Aktyvinami mobilieji duomenys</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: sinchronizavimas neveikia</translation>
 <translation id="6212039847102026977">Rodyti išplėstines tinklo nuosavybes</translation>
 <translation id="6212168817037875041">Išjungti ekraną</translation>
@@ -3832,6 +3848,7 @@
 <translation id="677965093459947883">Labai mažas</translation>
 <translation id="6780439250949340171">valdyti kitus nustatymus</translation>
 <translation id="6781284683813954823">Papuošto logotipo nuoroda</translation>
+<translation id="6781978626986383437">„Linux“ atsarginės kopijos kūrimas atšauktas</translation>
 <translation id="6782111308708962316">Neleisti trečiosios šalies svetainėms išsaugoti ir skaityti slapukų duomenų</translation>
 <translation id="6786747875388722282">Plėtiniai</translation>
 <translation id="6787839852456839824">Spartieji klavišai</translation>
@@ -4119,6 +4136,7 @@
 <translation id="7197632491113152433">Radome <ph name="NUMBER_OF_APPS" /> progr. iš jūsų paskyros, kurias galima naudoti šiame įrenginyje.</translation>
 <translation id="7199158086730159431">Gauti pagalbos</translation>
 <translation id="7200083590239651963">Konfigūracijos pasirinkimas</translation>
+<translation id="7201042526153088083">Diekite programas ir žaidimus iš „Google Play“ įrenginyje „<ph name="DEVICE_TYPE" />“. &lt;a target="_blank" href="<ph name="URL" />"&gt;Sužinokite daugiau&lt;/a&gt;</translation>
 <translation id="720110658997053098">Įgalinti nuolatinį šio įrenginio veikimą viešojo terminalo režimu</translation>
 <translation id="7201118060536064622">„<ph name="DELETED_ITEM_NAME" />“ ištrintas (-a)</translation>
 <translation id="7201420661433230412">Peržiūrėti failus</translation>
@@ -4143,6 +4161,7 @@
 <translation id="7229570126336867161">Reikia EVDO</translation>
 <translation id="7230787553283372882">Tinkinkite teksto dydį</translation>
 <translation id="7232750842195536390">Nepavyko pervardyti</translation>
+<translation id="7234010996000898150">Atšaukiamas „Linux“ atkūrimas</translation>
 <translation id="7235716375204803342">Renkamos veiklos...</translation>
 <translation id="7235737137505019098">Saugos rakte nepakanka vietos jokioms kitoms paskyroms.</translation>
 <translation id="7238585580608191973">SHA-256 piršto antspaudas</translation>
@@ -4278,6 +4297,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Atidaryti viską &amp;naujame lange}=1{Atidaryti &amp;naujame lange}one{Atidaryti viską (#) &amp;naujame lange}few{Atidaryti viską (#) &amp;naujame lange}many{Atidaryti viską (#) &amp;naujame lange}other{Atidaryti viską (#) &amp;naujame lange}}</translation>
 <translation id="7434509671034404296">Vykdymo programa</translation>
 <translation id="7436921188514130341">Oi, pervardijant įvyko klaida.</translation>
+<translation id="7437427339141948518">Pranešimai išjungti</translation>
 <translation id="7438976808740265764">Nuo 2020 m. gruodžio „Flash Player“ nebebus palaikoma.</translation>
 <translation id="7441736921018636843">Jei norite pakeisti šį nustatymą, <ph name="BEGIN_LINK" />nustatykite sinchronizavimą iš naujo<ph name="END_LINK" />, kad pašalintumėte sinchronizavimo slaptafrazę</translation>
 <translation id="7441830548568730290">Kiti naudotojai</translation>
@@ -4407,6 +4427,7 @@
 <translation id="7643932971554933646">Leisti svetainei peržiūrėti failus?</translation>
 <translation id="7644543211198159466">Spalva ir tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (savininkas)</translation>
+<translation id="7645681574855902035">Atšaukiamas „Linux“ atsarginės kopijos kūrimas</translation>
 <translation id="7647403192093989392">Nėra naujausios veiklos</translation>
 <translation id="7648142322539582331">Prisijunkite prie interneto, kad galėtumėte nustatyti tėvų kontrolę</translation>
 <translation id="7648992873808071793">Saugoti failus šiame įrenginyje</translation>
@@ -4858,6 +4879,7 @@
 <translation id="8256319818471787266">Žaismingasis</translation>
 <translation id="8257950718085972371">Ir toliau blokuoti prieigą prie fotoaparato</translation>
 <translation id="8259239505248583312">Pradėti</translation>
+<translation id="8259556432390118667">Šešioliktainės spalvos vertė</translation>
 <translation id="8260126382462817229">Bandykite prisijungti dar kartą</translation>
 <translation id="8260864402787962391">Pelė</translation>
 <translation id="8261378640211443080">Šio plėtinio nėra „<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />“ sąraše. Jis galėjo būti pridėtas be jūsų žinios.</translation>
@@ -5110,6 +5132,7 @@
 <translation id="8662911384982557515">Pakeisti pagrindinį puslapį į: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">„Chrome“ negali nustatyti darbalaukio fono.</translation>
 <translation id="8663099077749055505">Visada blokuoti kelis automatinius atsisiuntimus <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Rodyti šios svetainės pranešimus?</translation>
 <translation id="8664389313780386848">&amp;Rodyti puslapio šaltinį</translation>
 <translation id="8665180165765946056">Atsarginė kopija sukurta</translation>
 <translation id="866611985033792019">Pasitikėti šiuo sertifikatu nustatant el. pašto naudotojus</translation>
@@ -5399,6 +5422,7 @@
 <translation id="9065203028668620118">Redaguoti</translation>
 <translation id="9066773882585798925">Balsu skaitomo teksto klausymas</translation>
 <translation id="9066782832737749352">Tekstas į kalbą</translation>
+<translation id="9068849894565669697">Pasirinkite spalvą</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB pelė prijungta</translation>
@@ -5436,6 +5460,7 @@
 <translation id="9131487537093447019">Siųsti pranešimus į „Bluetooth“ įrenginius ir gauti pranešimus iš jų.</translation>
 <translation id="9134304429738380103">Taip, sutinku.</translation>
 <translation id="9137013805542155359">Rodyti originalą</translation>
+<translation id="9137157311132182254">Pageidaujamas paieškos variklis</translation>
 <translation id="9137916601698928395">Atidaryti nuorodą kaip <ph name="USER" /></translation>
 <translation id="9138978632494473300">Pridėti sparčiųjų klavišų nurodytose vietose:</translation>
 <translation id="9140067245205650184">Naudojate nepalaikomą funkcijos žymą: „<ph name="BAD_FLAG" />“. Tai neigiamai paveiks stabilumą ir saugą.</translation>
@@ -5508,6 +5533,7 @@
 <translation id="962802172452141067">Žymių aplanko medis</translation>
 <translation id="964286338916298286">IT administratorius jūsų įrenginyje išjungė naudingas „Chrome“ funkcijas.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Programa}one{Programos}few{Programos}many{Programos}other{Programos}}</translation>
+<translation id="965211523698323809">Siųskite ir gaukite teksto pranešimus naudodami „<ph name="DEVICE_TYPE" />“. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Būsite atjungti nuo „Google“ paskyrų. Žymių, istorijos, slaptažodžių ir kitų nustatymų pakeitimai nebebus sinchronizuojami su „Google“ paskyra. Tačiau esami duomenys toliau bus saugomi „Google“ paskyroje ir juos bus galima tvarkyti <ph name="BEGIN_LINK" />„Google“ informacijos suvestinėje<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Saugomi duomenys</translation>
 <translation id="968000525894980488">Įjunkite „Google Play“ paslaugas.</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 9f1e81c..3a81b2e 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Tālāk minētajā ierīcē tika pieprasīta lasīšanas vai rakstīšanas darbība ar nederīgu nobīdi: “<ph name="DEVICE_NAME" />”.</translation>
 <translation id="1097658378307015415">Pirms pierakstāties, uzsāciet viesa sesiju, lai aktivizētu tīklu <ph name="NETWORK_ID" />.</translation>
 <translation id="1103523840287552314">Vienmēr tulkot <ph name="LANGUAGE" /> valodas saturu</translation>
+<translation id="1104038495841596279">Nevarēja noteikt SIM karti</translation>
 <translation id="1108600514891325577">&amp;Apturēt</translation>
 <translation id="1110155001042129815">Uzgaidiet</translation>
 <translation id="1112420131909513020">Fona cilne izmanto Bluetooth savienojumu.</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Administrators ir atspējojis sinhronizēšanu.</translation>
 <translation id="2127372758936585790">Lādētājs ar mazu strāvas padevi</translation>
 <translation id="212862741129535676">Frekvences stāvoklis — noslogojuma procentuālais daudzums</translation>
+<translation id="212876957201860463">Notiek gatavošanās mobilās ierīces iestatīšanai...</translation>
 <translation id="2129825002735785149">Atjaunināt spraudni</translation>
 <translation id="2131077480075264">Nevar instalēt lietotni “<ph name="APP_NAME" />”, jo to neatļauj “<ph name="IMPORT_NAME" />”.</translation>
 <translation id="21354425047973905">Paslēpt PIN kodus</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Dati tika šifrēti, izmantojot jūsu Google paroli (sinhronizācijas laiks:
           <ph name="TIME" />). Tajā nav iekļauti maksājumu veidi un adreses no pakalpojuma Google Pay.</translation>
 <translation id="2419706071571366386">Drošības nolūkos izrakstieties no datora, kad esat beidzis to lietot.</translation>
+<translation id="2422125132043002186">Linux atjaunošana atcelta</translation>
 <translation id="2423578206845792524">Saglabāt attēlu kā ...</translation>
 <translation id="2428510569851653187">Norādiet, ko darījāt, kad cilne avarēja</translation>
 <translation id="2431027948063157455">Nevarēja ielādēt Google asistentu, lūdzu, pārbaudiet tīkla savienojumu un pēc tam mēģiniet vēlreiz.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Notiek piekļūšana audio un video ievadei</translation>
 <translation id="3090819949319990166">Ārējo .crx failu nevar kopēt uz failu <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Izveidots savienojums pārī ar ierīci “<ph name="DEVICE_NAME" />”.</translation>
+<translation id="3092699946856346803">Lūdzu, ievietojiet SIM karti un mēģiniet vēlreiz</translation>
 <translation id="3101709781009526431">Datums un laiks</translation>
 <translation id="310671807099593501">Vietne izmanto Bluetooth savienojumu.</translation>
 <translation id="3115147772012638511">Gaida krtuvi...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Faili un programmas, kas jāievieto karantīnā:</translation>
 <translation id="3282568296779691940">Pierakstīties pārlūkā Chrome</translation>
 <translation id="3285322247471302225">Jauna &amp;cilne</translation>
+<translation id="3286654161521615710">Tiek izmantots Chrome pārlūkā un <ph name="DEVICE_TYPE" /> palaidējā</translation>
 <translation id="3286737518123001369">Skatīt un dzēst drošības atslēgā saglabātos pierakstīšanās datus</translation>
 <translation id="3288047731229977326">Paplašinājumi, kas darbojas izstrādātāja režīmā, var kaitēt jūsu datoram. Ja neesat izstrādātājs, drošības nolūkos atspējojiet šos paplašinājumus, kas darbojas izstrādātāja režīmā.</translation>
 <translation id="3289856944988573801">Lai pārbaudītu, vai ir pieejami atjauninājumi, lūdzu, izmantojiet tīklu Ethernet vai Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL servera sertifikāts</translation>
 <translation id="3775705724665058594">Sūtīšana uz jūsu ierīcēm</translation>
 <translation id="3776796446459804932">Šis paplašinājums pārkāpj Chrome interneta veikala politiku.</translation>
+<translation id="3777483481409781352">Nevarēja aktivizēt mobilo ierīci</translation>
 <translation id="3777806571986431400">Paplašinājums iespējots</translation>
 <translation id="3778152852029592020">Lejupielāde tika atcelta.</translation>
 <translation id="3778208826288864398">Šī drošības atslēga ir bloķēta, jo pārāk daudz reižu ievadīts nepareizs PIN. Jums būs jāatiestata drošības atslēga.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Melnbaltā</translation>
 <translation id="4136203100490971508">Nakts režīms tiks automātiski izslēgts saullēktā.</translation>
 <translation id="4138267921960073861">Rādīt lietotājvārdus un fotoattēlus pierakstīšanās ekrānā</translation>
+<translation id="4142052906269098341">Atbloķējiet <ph name="DEVICE_TYPE" /> ierīci ar tālruni <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Iegūstiet labāku videoklipu kvalitāti un paildziniet akumulatora darbības laiku. Videoklipi tiks atskaņoti tikai Cast iespējotā ekrānā.</translation>
 <translation id="4145922204387553806">Ļaujiet Asistentam rādīt informāciju par ekrānā redzamo saturu</translation>
 <translation id="4146026355784316281">Vienmēr atvērt, izmantojot sistēmas skatītāju</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Eksportēt</translation>
 <translation id="42137655013211669">Serveris neatļāva piekļūt šim resursam.</translation>
 <translation id="4215350869199060536">Diemžēl nosaukumā ir ietverti neatļauti simboli.</translation>
+<translation id="4220648711404560261">Aktivizēšanas laikā radās kļūda.</translation>
 <translation id="4225397296022057997">Visās vietnēs</translation>
 <translation id="4232375817808480934">Kerberos konfigurēšana</translation>
 <translation id="4235200303672858594">Viss ekrāns</translation>
@@ -2281,7 +2289,7 @@
 <translation id="4389091756366370506">Lietotājs <ph name="VALUE" /></translation>
 <translation id="4390000551125140321">{0,plural, =1{Inkognito režīms}zero{# atvērti inkognito režīma logi}one{# atvērts inkognito režīma logs}other{# atvērti inkognito režīma logi}}</translation>
 <translation id="439266289085815679">Bluetooth konfigurāciju kontrolē <ph name="USER_EMAIL" />.</translation>
-<translation id="4392896746540753732">Rediģējiet konfigurācijas failu</translation>
+<translation id="4392896746540753732">Rediģēt konfigurācijas failu</translation>
 <translation id="4394049700291259645">Atspējot</translation>
 <translation id="4400367121200150367">Šeit tiks parādītas vietnes, kurās nekad netiek saglabātas paroles.</translation>
 <translation id="4400632832271803360">Turiet palaišanas programmas taustiņu, lai pārslēgtu augšējās rindas taustiņu funkcijas.</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Ārējās atmiņas preferences</translation>
 <translation id="447252321002412580">Palīdzēt uzlabot Chrome funkcijas un veiktspēju</translation>
 <translation id="4474155171896946103">Saglabāt visas cilnes kā grāmatzīmes...</translation>
+<translation id="4474461121892222090">Lai pabeigtu mobilo datu aktivizēšanu, būs nepieciešamas ne vairāk kā 15 minūtes.</translation>
 <translation id="4475552974751346499">Meklēt lejupielādes</translation>
 <translation id="4476590490540813026">Sportiste</translation>
 <translation id="4477015793815781985">Iekļaujiet taustiņu Ctrl, Alt vai ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Notiek virtuālās mašīnas konfigurēšana. Tas var ilgt dažas minūtes.</translation>
 <translation id="4480590691557335796">Pārlūks Chrome jūsu datorā var atrast kaitīgu programmatūru un noņemt to.</translation>
 <translation id="4481530544597605423">Pārī nesavienotās ierīces</translation>
+<translation id="4483579413421375386">Rādīt vietnē</translation>
 <translation id="4495419450179050807">Nerādīt šajā lapā</translation>
 <translation id="4500114933761911433">Spraudnis <ph name="PLUGIN_NAME" /> avarēja.</translation>
 <translation id="450099669180426158">Izsaukuma zīmes ikona</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Ievadiet PIN ierīcei <ph name="DEVICE_NAME" />:</translation>
 <translation id="4648491805942548247">Nav pietiekamu atļauju.</translation>
 <translation id="4648499713050786492">Pirms kādas personas pievienošanas, lūdzu, atbloķējiet savu profilu.</translation>
+<translation id="4650591383426000695">Atvienot tālruni no <ph name="DEVICE_TYPE" /> ierīces</translation>
 <translation id="4651484272688821107">Neizdevās ielādēt bezsaistes komponentu ar demonstrācijas režīma resursiem.</translation>
 <translation id="465878909996028221">Pārlūkprogrammas novirzīšanai tiek atbalstīti tikai http, https un failu protokoli.</translation>
 <translation id="4659077111144409915">Primārais konts</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Lūdzu, pievienojiet savu <ph name="DEVICE_TYPE" /> ierīci strāvas avotam.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sag&amp;labāt audio kā...</translation>
+<translation id="5117139026559873716">Atvienojiet tālruni no <ph name="DEVICE_TYPE" /> ierīces. Ierīces vairs netiks automātiski savienotas.</translation>
 <translation id="5117427536932535467">Motīvi un fona tapetes</translation>
 <translation id="5117625797180141189">Dokuments “<ph name="DOCUMENT_NAME" />” ir sekmīgi izdrukāts</translation>
 <translation id="5117930984404104619">Pārraudzīt citu paplašinājumu, tostarp apmeklēto vietrāžu URL, darbību</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Indekss <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Izvēlne ar paslēptām grāmatzīmēm</translation>
 <translation id="5464632865477611176">Izpildīt šajā reizē</translation>
+<translation id="5464660706533281090">Bērns šo iestatījumu nevar mainīt.</translation>
 <translation id="5466374726908360271">Ielīmēt un meklēt “<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Sveiki! Šī ir balss jūsu teksta pārvēršanai runā.</translation>
 <translation id="5473333559083690127">Atkārtoti ievadiet jauno PIN.</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Savienot pārī</translation>
 <translation id="5821565227679781414">Izveidot saīsni</translation>
 <translation id="5825412242012995131">Ieslēgts (ieteicams)</translation>
+<translation id="5826395379250998812">Savienojiet <ph name="DEVICE_TYPE" /> ierīci ar tālruni. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Kopējais nosaukums (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Notiek drukāšana...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Atlasītie dati ir noņemti no pārlūka Chrome un sinhronizētajām ierīcēm. Jūsu Google kontam vietnē <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> var būt cita veida pārlūkošanas vēstures dati, piemēram, meklēšanas vaicājumi un darbības citos Google pakalpojumos.</translation>
 <translation id="6129938384427316298">Netscape sertifikāta komentārs</translation>
 <translation id="6129953537138746214">Atstarpe</translation>
+<translation id="6130024555057767093">Pašlaik paziņojumi tiek bloķēti visās vietnēs, izņemot vietnes, kurās jūs individuāli piešķirat atļauju.</translation>
 <translation id="6136114942382973861">Aizvērt lejupielāžu joslu</translation>
 <translation id="6137767437444130246">Lietotāja sertifikāts</translation>
 <translation id="6138680304137685902">X9.62 ECDSA paraksts ar SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Vienmēr atvērt šo veidu saites saistītajā lietotnē</translation>
 <translation id="6207282396926186323">Linux lietotnes <ph name="APP_NAME" /> instalēšana</translation>
 <translation id="6207937957461833379">Valsts/reģions</translation>
+<translation id="6208521041562685716">Tiek aktivizēti mobilie dati</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: sinhronizācija nedarbojas</translation>
 <translation id="6212039847102026977">Rādīt tīkla papildu rekvizītus</translation>
 <translation id="6212168817037875041">Izslēgt displeju</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Ļoti mazs</translation>
 <translation id="6780439250949340171">pārvaldīt citus iestatījumus.</translation>
 <translation id="6781284683813954823">Saite uz svētku logotipu</translation>
+<translation id="6781978626986383437">Linux dublējums atcelts</translation>
 <translation id="6782111308708962316">Neļaut trešo pušu vietnēm saglabāt un nolasīt sīkfailu datus</translation>
 <translation id="6786747875388722282">Paplašinājumi</translation>
 <translation id="6787839852456839824">Īsinājumtaustiņi</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Mēs atradām <ph name="NUMBER_OF_APPS" /> lietotni(-es) jūsu kontā, ko var izmantot šajā ierīcē.</translation>
 <translation id="7199158086730159431">Saņemt p&amp;alīdzību</translation>
 <translation id="7200083590239651963">Konfigurācijas atlasīšana</translation>
+<translation id="7201042526153088083">Instalējiet lietotnes un spēles no pakalpojuma Google Play <ph name="DEVICE_TYPE" /> ierīcē. &lt;a target="_blank" href="<ph name="URL" />"&gt;Uzzināt vairāk&lt;/a&gt;</translation>
 <translation id="720110658997053098">Pastāvīgi turēt ierīcei ieslēgtu kioska režīmu</translation>
 <translation id="7201118060536064622">Vienums “<ph name="DELETED_ITEM_NAME" />” ir izdzēsts.</translation>
 <translation id="7201420661433230412">Skatīt failus</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Nepieciešams EVDO</translation>
 <translation id="7230787553283372882">Pielāgojiet teksta lielumu.</translation>
 <translation id="7232750842195536390">Pārdēvēšana neizdevās</translation>
+<translation id="7234010996000898150">Notiek Linux atjaunošanas atcelšana</translation>
 <translation id="7235716375204803342">Notiek darbību iegūšana...</translation>
 <translation id="7235737137505019098">Jūsu drošības atslēgai nav pietiekami daudz brīvas vietas papildu kontiem.</translation>
 <translation id="7238585580608191973">SHA-256 pirkstu nospiedums</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Atvērt visas jaunā logā}=1{Atvērt jaunā logā}zero{Atvērt visas (#) jaunā logā}one{Atvērt visas (#) jaunā logā}other{Atvērt visas (#) jaunā logā}}</translation>
 <translation id="7434509671034404296">Izstrādātājs</translation>
 <translation id="7436921188514130341">Diemžēl pārdēvēšanas laikā radās kļūda.</translation>
+<translation id="7437427339141948518">Paziņojumi izslēgti</translation>
 <translation id="7438976808740265764">Flash Player vairs netiks atbalstīts no 2020. gada decembra.</translation>
 <translation id="7441736921018636843">Lai mainītu šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" />, lai noņemtu sinhronizācijas ieejas frāzi.</translation>
 <translation id="7441830548568730290">Citi lietotāji</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Vai atļaut vietnei skatīt failus?</translation>
 <translation id="7644543211198159466">Krāsa un motīvs</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (īpašnieks)</translation>
+<translation id="7645681574855902035">Linux dublējuma atcelšana</translation>
 <translation id="7647403192093989392">Nav nesen veiktu darbību</translation>
 <translation id="7648142322539582331">Lai iestatītu vecāku kontroli, izveidojiet savienojumu ar internetu</translation>
 <translation id="7648992873808071793">saglabāt failus šajā ierīcē</translation>
@@ -4856,6 +4877,7 @@
 <translation id="8256319818471787266">Džeris</translation>
 <translation id="8257950718085972371">Turpināt piekļuves bloķēšanu kamerai</translation>
 <translation id="8259239505248583312">Aiziet!</translation>
+<translation id="8259556432390118667">Heksadecimāla krāsas vērtība</translation>
 <translation id="8260126382462817229">Mēģiniet pierakstīties vēlreiz</translation>
 <translation id="8260864402787962391">Pele</translation>
 <translation id="8261378640211443080">Šis paplašinājums nav norādīts vietnē <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> un, iespējams, tika pievienots, jums nezinot.</translation>
@@ -5108,6 +5130,7 @@
 <translation id="8662911384982557515">Mainiet savu sākumlapu uz šo: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome nevar iestatīt fona tapeti.</translation>
 <translation id="8663099077749055505">Vienmēr bloķēt vairākas automātiskas lejupielādes vietnē <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Vai rādīt šīs vietnes paziņojumus?</translation>
 <translation id="8664389313780386848">Skatīt lapas avotu</translation>
 <translation id="8665180165765946056">Dublēšana ir pabeigta</translation>
 <translation id="866611985033792019">Uzticēties šim sertifikātam, lai identificētu e-pasta lietotājus</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">Labot</translation>
 <translation id="9066773882585798925">Noklausīties tekstu</translation>
 <translation id="9066782832737749352">Teksta pārvēršana runā</translation>
+<translation id="9068849894565669697">Krāsas izvēle</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB pele ir pievienota.</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">Sūtīt ziņojumus uz Bluetooth ierīcēm un saņemt ziņojumus no tām.</translation>
 <translation id="9134304429738380103">Jā, piekrītu.</translation>
 <translation id="9137013805542155359">Rādīt oriģinālo</translation>
+<translation id="9137157311132182254">Vēlamā meklētājprogramma</translation>
 <translation id="9137916601698928395">Atvērt saiti ar lietotāja <ph name="USER" /> kontu</translation>
 <translation id="9138978632494473300">Pievienot saīsnes šādās vietās:</translation>
 <translation id="9140067245205650184">Jūs izmantojat neatbalstītu funkcijas karodziņu: <ph name="BAD_FLAG" />. Tas negatīvi ietekmē darbības stabilitāti un drošību.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">Grāmatzīmju mapju koks</translation>
 <translation id="964286338916298286">IT administrators ir atspējojis Chrome piedāvājumus jūsu ierīcei.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Lietojumprogramma}zero{Lietojumprogrammas}one{Lietojumprogrammas}other{Lietojumprogrammas}}</translation>
+<translation id="965211523698323809">Izmantojiet <ph name="DEVICE_TYPE" /> ierīci, lai sūtītu un saņemtu īsziņas. <ph name="LINK_BEGIN" />Uzzināt vairāk<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Šādi tiksiet izrakstīts no jūsu Google kontiem. Grāmatzīmju, vēstures, paroļu un citu iestatījumu izmaiņas vairs netiks sinhronizētas jūsu Google kontā. Tomēr esošie dati joprojām tiks glabāti jūsu Google kontā un tos varēsiet pārvaldīt <ph name="BEGIN_LINK" />Google informācijas panelī<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Dati saglabāti</translation>
 <translation id="968000525894980488">Ieslēdziet Google Play pakalpojumus.</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 4e6fe08..86a6444 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">അസാധുവായ ഒരു ഓഫ്‌‌സെറ്റ് ഉപയോഗിച്ചാണ് എഴുതുക അല്ലെങ്കിൽ വായിക്കുക പ്രവർത്തനം അഭ്യർത്ഥിച്ചത്: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">സൈൻ ഇൻ ചെയ്യുന്നതിന് മുമ്പ്, <ph name="NETWORK_ID" /> സജീവമാക്കാൻ അതിഥിയായി പ്രവേശിക്കുക</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> എല്ലായ്പ്പോഴും വിവര്‍ത്തനം ചെയ്യുക </translation>
+<translation id="1104038495841596279">ഞങ്ങൾക്ക് നിങ്ങളുടെ സിം കാർഡ് കണ്ടെത്താനായില്ല</translation>
 <translation id="1108600514891325577">&amp;നിറുത്തുക</translation>
 <translation id="1110155001042129815">കാത്തിരിക്കുക</translation>
 <translation id="1112420131909513020">പശ്ചാത്തല ടാബ് bluetooth ഉപയോഗിക്കുന്നു</translation>
@@ -129,7 +130,7 @@
 <translation id="1177138678118607465">തിരയൽ, പരസ്യങ്ങൾ, മറ്റ് Google സേവനങ്ങൾ എന്നിവ വ്യക്തിപരമാക്കാൻ, നിങ്ങളുടെ ബ്രൗസിംഗ് ചരിത്രം Google ഉപയോഗിച്ചേക്കാം. ഏത് സമയത്തും നിങ്ങൾക്ക് ഇത് myaccount.google.com/activitycontrols/search സന്ദർശിച്ച് മാറ്റാവുന്നതാണ്</translation>
 <translation id="1177863135347784049">ഇഷ്ടാനുസൃതം</translation>
 <translation id="1178581264944972037">അല്പംനിര്‍ത്തൂ</translation>
-<translation id="117916940443676133">നിങ്ങളുടെ സുരക്ഷാ കീ പിൻ ഉപയോഗിച്ച് പരിരക്ഷിച്ചിട്ടില്ല. സൈൻ ഇൻ ഡാറ്റ മാനേജ് ചെയ്യാൻ, ആദ്യം ഒരു പിൻ സൃഷ്‌ടിക്കുക.</translation>
+<translation id="117916940443676133">പിൻ ഉപയോഗിച്ച് നിങ്ങളുടെ സുരക്ഷാ കീ പരിരക്ഷിച്ചിട്ടില്ല. സൈൻ ഇൻ ഡാറ്റ മാനേജ് ചെയ്യാൻ, ആദ്യം ഒരു പിൻ സൃഷ്‌ടിക്കുക.</translation>
 <translation id="1181037720776840403">നീക്കംചെയ്യൂ</translation>
 <translation id="1183237619868651138">പ്രാദേശിക കാഷെയിൽ <ph name="EXTERNAL_CRX_FILE" /> ഇൻസ്റ്റാൾ ചെയ്യാനാവില്ല.</translation>
 <translation id="1185924365081634987">ഈ നെറ്റ്‌വർക്ക് പിശക് പരിഹരിക്കാൻ നിങ്ങൾക്ക് <ph name="GUEST_SIGNIN_LINK_START" />അതിഥിയായി ബ്രൗസ് ചെയ്യുന്നതിന്<ph name="GUEST_SIGNIN_LINK_END" /> പരീക്ഷിക്കാം.</translation>
@@ -347,7 +348,7 @@
 <translation id="1510030919967934016">നിങ്ങളുടെ സ്ഥാനം ട്രാക്കുചെയ്യുന്നതില്‍‌ നിന്നും ഈ പേജിനെ തടഞ്ഞു.</translation>
 <translation id="1510238584712386396">ലോഞ്ചർ</translation>
 <translation id="1510785804673676069">നിങ്ങൾ ഒരു പ്രോക്‌സി സെർവർ  ഉപയോഗിക്കുകയാണെങ്കിൽ, പ്രോക്‌സി സെർവർ പ്രവർത്തനക്ഷമമാണെന്ന് ഉറപ്പുവരുത്തുന്നതിന് നിങ്ങളുടെ പ്രോക്‌സി ക്രമീകരണങ്ങൾ പരിശോധിക്കുകയോ നിങ്ങളുടെ നെറ്റ്‌വർക്ക് അഡ്‌മിനിസ്‌ട്രേറ്ററെ ബന്ധപ്പെടുകയോ ചെയ്യുക. നിങ്ങൾ ഉപയോഗിക്കുന്നത് ഒരു പ്രോക്‌സി സെർവറാണെന്ന് കരുതുന്നില്ലെങ്കിൽ, നിങ്ങളുടെ <ph name="LINK_START" />പ്രോക്‌സി ക്രമീകരണങ്ങൾ<ph name="LINK_END" /> ക്രമീകരിക്കുക.</translation>
-<translation id="1511997356770098059">ഈ സുരക്ഷാ കീയ്‌ക്ക് സൈൻ ഇൻ ഡാറ്റയൊന്നും സംഭരിക്കാനായില്ല</translation>
+<translation id="1511997356770098059">ഈ സുരക്ഷാ കീയ്‌ക്ക് സൈൻ ഇൻ ഡാറ്റയൊന്നും സംഭരിക്കാനാവില്ല</translation>
 <translation id="1512210426710821809"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> വീണ്ടും ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ മാത്രമേ ഇത് പഴയപടിയാക്കാനാകൂ</translation>
 <translation id="151501797353681931">Safari യില്‍‌ നിന്നും ഇറക്കുമതി ചെയ്‌തത്</translation>
 <translation id="1515163294334130951">ലോഞ്ച്</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ സമന്വയം പ്രവർത്തനരഹിതമാക്കി.</translation>
 <translation id="2127372758936585790">കുറഞ്ഞ തോതിൽ വൈദ്യുതി പ്രവഹിക്കുന്ന ചാർജർ</translation>
 <translation id="212862741129535676">ആവൃത്തി നില ഒക്യുപ്പെൻസി ശതമാനം</translation>
+<translation id="212876957201860463">നിങ്ങളുടെ സെല്ലുലാർ ഉപകരണം സജ്ജീകരിക്കാൻ തയ്യാറെടുക്കുന്നു...</translation>
 <translation id="2129825002735785149">പ്ലഗിൻ അപ്ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="2131077480075264">"<ph name="IMPORT_NAME" />", അനുവദിക്കാത്തതിനാൽ "<ph name="APP_NAME" />" ഇൻസ്‌റ്റാളുചെയ്യാനാവില്ല</translation>
 <translation id="21354425047973905">പിന്നുകൾ മറയ്‌ക്കുക</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187"><ph name="TIME" /> മുതലുള്ള ഡാറ്റ നിങ്ങളുടെ Google പാസ്‌വേഡ് ഉപയോഗിച്ച് എൻക്രി‌പ്‌റ്റ് ചെയ്‌തു.
           ഇതിൽ Google Pay-ൽ നിന്നുള്ള പേയ്മെന്‍റ് രീതികളും വിലാസങ്ങളും അടങ്ങുന്നില്ല.</translation>
 <translation id="2419706071571366386">സുരക്ഷയ്ക്കായി, നിങ്ങളുടെ കമ്പ്യൂട്ടർ ഉപയോഗിക്കാത്തപ്പോൾ സൈൻ ഔട്ട് ചെയ്യുക.</translation>
+<translation id="2422125132043002186">Linux പുനഃസ്ഥാപിക്കൽ റദ്ദാക്കി</translation>
 <translation id="2423578206845792524">ചിത്രം ഇതായി സം&amp;രക്ഷിക്കുക...</translation>
 <translation id="2428510569851653187">ടാബ് ക്രാഷാകുമ്പോൾ നിങ്ങൾ എന്താണ് ചെയ്‌തിരുന്നതെന്ന് വിവരിക്കുക</translation>
 <translation id="2431027948063157455">Google Assistant-ന് ലോഡ് ചെയ്യാനായില്ല, നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.</translation>
@@ -1421,6 +1424,7 @@
 <translation id="3090193911106258841">ഓഡിയോ, വീഡിയോ ഇൻപുട്ട് ആക്‌സസ് ചെയ്യുന്നു</translation>
 <translation id="3090819949319990166"><ph name="TEMP_CRX_FILE" /> എന്നതിലേക്ക് ബാഹ്യ crx ഫയൽ പകർത്താനാവില്ല.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" ജോടിയാക്കി</translation>
+<translation id="3092699946856346803">നിങ്ങളുടെ സിം കാർഡ് ഇട്ട ശേഷം വീണ്ടും ശ്രമിക്കുക</translation>
 <translation id="3101709781009526431">തീയതിയും സമയവും</translation>
 <translation id="310671807099593501">സൈറ്റ്, bluetooth ഉപയോഗിക്കുന്നു</translation>
 <translation id="3115147772012638511">കാഷെയ്ക്കായി കാത്തിരിക്കുന്നു...</translation>
@@ -1528,6 +1532,7 @@
 <translation id="3281892622610078515">ഫയലുകളും പ്രോഗ്രാമുകളും യഥാർത്ഥ ലൊക്കേഷനിൽ നിന്ന് നീക്കി ക്വാരന്‍റൈൻ ഫോൾഡറിൽ ആർക്കൈവ് ചെയ്യേണ്ടതാണ്:</translation>
 <translation id="3282568296779691940">Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="3285322247471302225">പുതിയ &amp;ടാബ്</translation>
+<translation id="3286654161521615710">Chrome ബ്രൗസറും <ph name="DEVICE_TYPE" /> ലോഞ്ചറും ഉപയോഗിക്കുന്നത്</translation>
 <translation id="3286737518123001369">നിങ്ങളുടെ സുരക്ഷാ കീയിൽ സംഭരിച്ചിരിക്കുന്ന സൈൻ ഇൻ ഡാറ്റ കാണുക, ഇല്ലാതാക്കുക</translation>
 <translation id="3288047731229977326">ഡവലപ്പർ മോഡിൽ പ്രവർത്തിക്കുന്ന വിപുലീകരണങ്ങൾ നിങ്ങളുടെ കമ്പ്യൂട്ടർ കേടുവരുത്താനിടയുണ്ട്. നിങ്ങൾ ഒരു ഡവലപ്പർ അല്ലെങ്കിൽ, സുരക്ഷിതമായി തുടരാൻ ഡവലപ്പർ മോഡിൽ പ്രവർത്തിക്കുന്ന ഈ വിപുലീകരണങ്ങൾ പ്രവർത്തനരഹിതമാക്കണം.</translation>
 <translation id="3289856944988573801">അപ്‌ഡേറ്റുകൾക്കായി പരിശോധിക്കാൻ, ഇതർനെറ്റ് അല്ലെങ്കിൽ Wi-Fi ഉപയോഗിക്കുക.</translation>
@@ -1872,6 +1877,7 @@
 <translation id="3775432569830822555">SSL സെര്‍വര്‍ സര്‍‌ട്ടിഫിക്കറ്റ്</translation>
 <translation id="3775705724665058594">നിങ്ങളുടെ ഉപകരണങ്ങളിലേക്ക് അയയ്‌ക്കുക</translation>
 <translation id="3776796446459804932">ഈ വിപുലീകരണം Chrome വെബ് സ്റ്റോർ നയം ലംഘിക്കുന്നു.</translation>
+<translation id="3777483481409781352">സെല്ലുലാർ ഉപകരണം ഓണാക്കാനായില്ല</translation>
 <translation id="3777806571986431400">വിപുലീകരണം പ്രാപ്‌തമാക്കി</translation>
 <translation id="3778152852029592020">ഡൗൺലോഡ് റദ്ദാക്കി.</translation>
 <translation id="3778208826288864398">തെറ്റായ പിൻ നിരവധി തവണ നൽകിയതിനാൽ സുരക്ഷാ കീ ലോക്ക് ചെയ്‌തിരിക്കുന്നു. സുരക്ഷാ കീ പുനഃസജ്ജീകരിക്കേണ്ടി വരും.</translation>
@@ -2134,6 +2140,7 @@
 <translation id="4131410914670010031">കറുപ്പും വെള്ളയും</translation>
 <translation id="4136203100490971508">സൂര്യോദയ സമയത്ത് നൈറ്റ് ലൈറ്റ് സ്വമേധയാ ഓഫാകും</translation>
 <translation id="4138267921960073861">പ്രവേശന സ്ക്രീനില്‍ ഫോട്ടോകളും ഉപയോക്തൃനാമങ്ങളും  കാണിക്കുക</translation>
+<translation id="4142052906269098341">നിങ്ങളുടെ ഫോൺ ഉപയോഗിച്ച് <ph name="DEVICE_TYPE" /> അൺലോക്ക് ചെയ്യുക. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">മികച്ച ഗുണമേന്മയുള്ള വീഡിയോ നേടുകയും ബാറ്ററി ലൈഫ് കൂട്ടുകയും ചെയ്യുക. നിങ്ങളുടെ Cast ചെയ്യാൻ പ്രാപ്തിയുള്ള സ്ക്രീനിൽ മാത്രം വീഡിയോ പ്ലേ ചെയ്യും.</translation>
 <translation id="4145922204387553806">നിങ്ങളുടെ സ്ക്രീനിൽ എന്താണുള്ളതെന്നതുമായി ബന്ധപ്പെട്ട വിവരം കാണിക്കാൻ അസിസ്‌റ്റന്‍റിനെ അനുവദിക്കുക</translation>
 <translation id="4146026355784316281">എപ്പോഴും സിസ്‌റ്റം വ്യൂവറിൽ തുറക്കുക</translation>
@@ -2175,6 +2182,7 @@
 <translation id="42126664696688958">എക്‌സ്‌പോർട്ടുചെയ്യുക</translation>
 <translation id="42137655013211669">ഈ ഉറവിടത്തിലേക്കുള്ള ആക്‌സസ് സെർവർ തടഞ്ഞു.</translation>
 <translation id="4215350869199060536">ക്ഷമിക്കണം, പേരിൽ നിയമവിരുദ്ധ ചിഹ്നങ്ങളുണ്ട്!</translation>
+<translation id="4220648711404560261">സജീവമാക്കുന്നതിനിടെ ഒരു പിശകുണ്ടായി.</translation>
 <translation id="4225397296022057997">എല്ലാ സൈറ്റുകളിലും</translation>
 <translation id="4232375817808480934">Kerberos കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="4235200303672858594">പൂർണ്ണ സ്‌ക്രീൻ</translation>
@@ -2323,6 +2331,7 @@
 <translation id="4470957202018033307">ബാഹ്യ സ്‌റ്റോറേജ് മുൻഗണനകൾ</translation>
 <translation id="447252321002412580">Chrome-ന്റെ ഫീച്ചറുകളും പ്രകടനവും മെച്ചപ്പെടുത്താൻ സഹായിക്കുക</translation>
 <translation id="4474155171896946103">എല്ലാ ടാബുകളും ബുക്ക്‌മാര്‍‌ക്ക് ചെയ്യുക...</translation>
+<translation id="4474461121892222090">മൊബൈൽ ഡാറ്റ സജീവമാക്കുന്നത് പൂർത്തിയാക്കാൻ 15 മിനിറ്റ് വരെ സമയമെടുത്തേക്കാം.</translation>
 <translation id="4475552974751346499">ഡൌണ്‍ലോഡുകള്‍ തിരയുക</translation>
 <translation id="4476590490540813026">അത്‌ലറ്റ്</translation>
 <translation id="4477015793815781985">Ctrl, Alt, അല്ലെങ്കിൽ ⌘ ഉൾപ്പെടുത്തുക</translation>
@@ -2332,6 +2341,7 @@
 <translation id="4479877282574735775">വെർച്വൽ മെഷീൻ കോണ്‍ഫിഗര്‍ ചെയ്യുന്നു. ഇതിന് കുറച്ച് സമയമെടുത്തേക്കാം.</translation>
 <translation id="4480590691557335796">Chrome-ന് നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ ദോഷകരമായ സോഫ്‌റ്റ്‌വെയർ കണ്ടെത്താനും അത് നീക്കം ചെയ്യാനുമാവും.</translation>
 <translation id="4481530544597605423">ജോടി മാറ്റിയ ഉപകരണങ്ങൾ</translation>
+<translation id="4483579413421375386">സൈറ്റിന് അറിയിപ്പുകൾ കാണിക്കുക</translation>
 <translation id="4495419450179050807">ഈ പേജില്‍ കാണിക്കരുത്</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ക്രാഷ് ചെയ്തിരിക്കുന്നു</translation>
 <translation id="450099669180426158">ആശ്ചര്യചിഹ്നത്തിന്റെ ഐക്കൺ</translation>
@@ -2435,6 +2445,7 @@
 <translation id="4647697156028544508">"<ph name="DEVICE_NAME" />" എന്നതിനായി PIN നൽകുക:</translation>
 <translation id="4648491805942548247">അപര്യാപ്‌തമായ അനുമതികൾ</translation>
 <translation id="4648499713050786492">ഒരാളെ ചേർക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ പ്രൊഫൈൽ അൺലോക്ക് ചെയ്യുക.</translation>
+<translation id="4650591383426000695"><ph name="DEVICE_TYPE" />-ൽ നിന്ന് നിങ്ങളുടെ ഫോൺ വിച്‌ഛേദിക്കുക</translation>
 <translation id="4651484272688821107">ഡെമോ മോഡ് ഉറവിടങ്ങൾ ഉപയോഗിച്ച് ഓൺലൈൻ ഘടകം ലോഡ് ചെയ്യാനായില്ല.</translation>
 <translation id="465878909996028221">http, https എന്നിവയും ഫയൽ പ്രോട്ടോകോളുകളും മാത്രമേ ബ്രൗസർ റീഡയറക്റ്റുകളിൽ പിന്തുണയ്ക്കൂ.</translation>
 <translation id="4659077111144409915">പ്രാഥമിക അക്കൗണ്ട്</translation>
@@ -2736,6 +2747,7 @@
 <translation id="5115309401544567011">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> പവർ ഉറവിടത്തിൽ പ്ലഗ് ചെയ്യുക.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">ഓഡിയോ ഇതായി സംരക്ഷി&amp;ക്കുക...</translation>
+<translation id="5117139026559873716"><ph name="DEVICE_TYPE" />-ൽ നിന്ന് നിങ്ങളുടെ ഫോൺ വിച്‌ഛേദിക്കുക. അവ ഇനി സ്വയമേവ കണക്‌റ്റ് ചെയ്യില്ല.</translation>
 <translation id="5117427536932535467">തീമുകളും വാൾപേപ്പറുകളും</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> എന്ന ഡോക്യുമെന്റ് അച്ചടിച്ചു</translation>
 <translation id="5117930984404104619">സന്ദർശിച്ച URL-കൾ അടക്കം വിപുലീകരണങ്ങളുടെ പ്രവർത്തനരീതി നിരീക്ഷിക്കുക</translation>
@@ -2965,6 +2977,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> ന്റെ സൂചിക</translation>
 <translation id="5463856536939868464">മെനുവില്‍‌ മറച്ച ബുക്ക്‌മാര്‍‌ക്കുകള്‍‌ അടങ്ങിയിരിക്കുന്നു</translation>
 <translation id="5464632865477611176">ഈ സമയം പ്രവര്‍ത്തിപ്പിക്കുക</translation>
+<translation id="5464660706533281090">ഈ ക്രമീകരണം ഒരു കുട്ടി ഉപയോക്താവിന് മാറ്റാനാവില്ല.</translation>
 <translation id="5466374726908360271">ഒട്ടിച്ച്, “<ph name="SEARCH_TERMS" />” എന്നതിനായി തിരയുക</translation>
 <translation id="5471768120198416576">അവിടെയുണ്ടോ! ഞാനാണ് നിങ്ങളുടെ ടെക്‌സ്റ്റ്-ടു-സ്‌പീച്ച് വോയ്‌സ്.</translation>
 <translation id="5473333559083690127">പുതിയ പിൻ വീണ്ടും നൽകുക</translation>
@@ -3201,6 +3214,7 @@
 <translation id="5817918615728894473">ജോടിയാക്കുക</translation>
 <translation id="5821565227679781414">കുറുക്കുവഴി സൃഷ്‌ടിക്കുക</translation>
 <translation id="5825412242012995131">ഓണാക്കുക (ശുപാർശചെയ്‌തത്)</translation>
+<translation id="5826395379250998812">നിങ്ങളുടെ ഫോണുമായി <ph name="DEVICE_TYPE" /> കണക്‌റ്റ് ചെയ്യുക. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">പൊതുവായ പേര് (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">പ്രിന്‍റ് ചെയ്യുന്നു...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">തിരഞ്ഞെടുത്ത ഡാറ്റയെ Chrome-ൽ നിന്നും സമന്വയിപ്പിച്ച ഉപകരണങ്ങളിൽ നിന്നും നീക്കം ചെയ്‌തു. നിങ്ങളുടെ Google അക്കൗണ്ടിന്, <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> എന്നതിൽ, മറ്റ് Google സേവനങ്ങളിൽ നിന്നുള്ള തിരയലുകളും ആക്‌റ്റിവിറ്റിയും എന്നിങ്ങനെ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രമുണ്ടായിരിക്കാം.</translation>
 <translation id="6129938384427316298">നെറ്റ്‌സ്‌കേപ്പ് സര്‍‌ട്ടിഫിക്കറ്റ് അഭിപ്രായം</translation>
 <translation id="6129953537138746214">സ്പെയ്സ്</translation>
+<translation id="6130024555057767093">നിങ്ങൾ വ്യക്തിഗതമായി അനുവദിച്ച സൈറ്റുകൾക്ക് ഒഴികെ മറ്റ് എല്ലാ സൈറ്റുകൾക്കും നിലവിൽ അറിയിപ്പുകൾ ബ്ലോക്ക് ചെയ്‌തിരിക്കുകയാണ്.</translation>
 <translation id="6136114942382973861">ഡൗണ്‍ലോഡ് വിവരങ്ങളുടെ ബാര്‍ അടയ്‌ക്കുക</translation>
 <translation id="6137767437444130246">ഉപയോക്തൃ സർട്ടിഫിക്കറ്റ്</translation>
 <translation id="6138680304137685902">SHA-384 ഉള്ള X9.62 ECDSA സിഗ്നേച്ചർ</translation>
@@ -3468,6 +3483,7 @@
 <translation id="620722923698527029">ഇത്തരം ലിങ്കുകൾ എപ്പോഴും ബന്ധപ്പെട്ട ആപ്പിൽ തുറക്കുക</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux ആപ്പ്) ഇൻസ്‌റ്റാൾ ചെയ്യൂ</translation>
 <translation id="6207937957461833379">രാജ്യം/പ്രവിശ്യ</translation>
+<translation id="6208521041562685716">മൊബൈൽ ഡാറ്റ സജീവമാക്കുന്നു</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: സമന്വയം പ്രവർത്തിക്കുന്നില്ല</translation>
 <translation id="6212039847102026977">വിപുലമായ നെറ്റ്‌വർക്ക് പ്രോപ്പർട്ടികൾ കാണിക്കുക</translation>
 <translation id="6212168817037875041">ഡിസ്പ്ലേ ഓഫാക്കുക</translation>
@@ -3829,6 +3845,7 @@
 <translation id="677965093459947883">വളരെ ചെറുത്</translation>
 <translation id="6780439250949340171">മറ്റ് ക്രമീകരണങ്ങൾ നിയന്ത്രിക്കുക</translation>
 <translation id="6781284683813954823">ഡൂഡ്ല്‍ ലിങ്ക്</translation>
+<translation id="6781978626986383437">Linux ബാക്കപ്പ് റദ്ദാക്കി</translation>
 <translation id="6782111308708962316">കുക്കി വിവരം സംരക്ഷിക്കുകയും വായിക്കുകയും ചെയ്യുന്നതിൽ നിന്ന് മൂന്നാംകക്ഷി വെബ്‌സൈറ്റുകളെ തടയുക</translation>
 <translation id="6786747875388722282">വിപുലീകരണങ്ങള്‍</translation>
 <translation id="6787839852456839824">കീബോർഡ് കുറുക്കുവഴികൾ</translation>
@@ -4116,6 +4133,7 @@
 <translation id="7197632491113152433">ഈ ഉപകരണത്തിൽ ഉപയോഗിക്കാവുന്ന <ph name="NUMBER_OF_APPS" /> ആപ്പുകൾ നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്ന് കണ്ടെത്തി.</translation>
 <translation id="7199158086730159431">സ&amp;ഹായം നേടുക</translation>
 <translation id="7200083590239651963">കോൺഫിഗറേഷൻ തിരഞ്ഞെടുക്കുക</translation>
+<translation id="7201042526153088083">Google Play-യിൽ നിന്ന് നിങ്ങളുടെ <ph name="DEVICE_TYPE" />-ൽ ആപ്പുകളും ഗെയിമുകളും ഇൻസ്‌റ്റാൾ ചെയ്യുക. &lt;a target="_blank" href="<ph name="URL" />"&gt;കൂടുതലറിയുക&lt;/a&gt;</translation>
 <translation id="720110658997053098">ഈ ഉപകരണം ശാശ്വതമായി കിയോസ്‍ക് മോഡിൽ നിലനിർത്തുക</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' ഇല്ലാതാക്കി</translation>
 <translation id="7201420661433230412">ഫയലുകൾ കാണുക</translation>
@@ -4140,6 +4158,7 @@
 <translation id="7229570126336867161">EVDO ആവശ്യമുണ്ട്</translation>
 <translation id="7230787553283372882">നിങ്ങളുടെ ടെക്‌സ്‌‌റ്റ് വലുപ്പം ഇഷ്‌ടാനുസൃതമാക്കുക</translation>
 <translation id="7232750842195536390">പേരുമാറ്റൽ പരാജയപ്പെട്ടു</translation>
+<translation id="7234010996000898150">Linux പുനഃസ്ഥാപിക്കൽ റദ്ദാക്കുന്നു</translation>
 <translation id="7235716375204803342">ആക്റ്റിവിറ്റികൾ ലഭ്യമാക്കുന്നു...</translation>
 <translation id="7235737137505019098">കൂടുതൽ അക്കൗണ്ടുകൾ സൃഷ്‌ടിക്കാൻ ആവശ്യമായ സ്‌പെയ്‌സ് നിങ്ങളുടെ സുരക്ഷാ കീയിൽ ഇല്ല.</translation>
 <translation id="7238585580608191973">SHA-256 ഫിംഗര്‍പ്രിന്‍റ്</translation>
@@ -4275,6 +4294,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{എല്ലാം &amp;പുതിയ വിൻഡോയിൽ തുറക്കുക}=1{&amp;പുതിയ വിന്‍‌ഡോയില്‍‌ തുറക്കുക}other{എല്ലാം (#) &amp;പുതിയ വിൻഡോയിൽ തുറക്കുക}}</translation>
 <translation id="7434509671034404296">ഡെവലപ്പർ</translation>
 <translation id="7436921188514130341">ക്ഷമിക്കണം! പേരുമാറ്റുന്നതിനിടെ ഒരു പിശകുണ്ടായി.</translation>
+<translation id="7437427339141948518">അറിയിപ്പുകൾ ഓഫാണ്</translation>
 <translation id="7438976808740265764">2020 ഡിസംബറിന് ശേഷം Flash Player പിന്തുണയ്‌ക്കില്ല.</translation>
 <translation id="7441736921018636843">ഈ ക്രമീകരണം മാറ്റാന്‍, നിങ്ങളുടെ സമന്വയ പാസ്‌ഫ്രെയ്‌സ് നീക്കം ചെയ്യുന്നതിന് <ph name="BEGIN_LINK" />സമന്വയം പുനഃസജ്ജീകരിക്കുക<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">മറ്റ് ഉപയോക്താക്കൾ</translation>
@@ -4404,6 +4424,7 @@
 <translation id="7643932971554933646">ഫയലുകൾ കാണാൻ സൈറ്റിനെ അനുവദിക്കണോ?</translation>
 <translation id="7644543211198159466">വർണ്ണവും തീമും</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (ഉടമ)</translation>
+<translation id="7645681574855902035">Linux ബാക്കപ്പ് റദ്ദാക്കുന്നു</translation>
 <translation id="7647403192093989392">സമീപകാല പ്രവര്‍‌ത്തനങ്ങളൊന്നുമില്ല</translation>
 <translation id="7648142322539582331">രക്ഷാകർതൃ നിയന്ത്രണങ്ങൾ സജ്ജീകരിക്കാൻ ഇൻ്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്യുക</translation>
 <translation id="7648992873808071793">ഈ ഉപകരണത്തിൽ ഫയലുകൾ സംഭരിക്കുക</translation>
@@ -4855,6 +4876,7 @@
 <translation id="8256319818471787266">സ്‌പാർക്കി</translation>
 <translation id="8257950718085972371">ക്യാമറ ആക്‌സസ് തടയുന്നത് തുടരുക</translation>
 <translation id="8259239505248583312">നമുക്ക് ആരംഭിക്കാം</translation>
+<translation id="8259556432390118667">ഹെക്‌സ് വർണ മൂല്യം</translation>
 <translation id="8260126382462817229">വീണ്ടും സൈൻ ഇൻ ചെയ്യാൻ ശ്രമിക്കുക</translation>
 <translation id="8260864402787962391">മൗസ്</translation>
 <translation id="8261378640211443080">ഈ വിപുലീകരണം <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റ് ചെയ്‌തിട്ടില്ല, ഇത് നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation>
@@ -5107,6 +5129,7 @@
 <translation id="8662911384982557515">നിങ്ങളുടെ ഹോം പേജ് ഇതായി മാറ്റുക: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome-ന് വാൾപേപ്പർ സജ്ജമാക്കാൻ കഴിയില്ല.</translation>
 <translation id="8663099077749055505"><ph name="HOST" />-ൽ എല്ലായ്‌പ്പോഴും ഒന്നിലേറെ യാന്ത്രിക ഡൗൺലോഡുകൾ തടയുക</translation>
+<translation id="8663534996262079772">ഈ സൈറ്റിന് അറിയിപ്പുകൾ കാണിക്കണോ?</translation>
 <translation id="8664389313780386848">&amp;പേജ് ഉറവിടം കാണുക</translation>
 <translation id="8665180165765946056">ബാക്കപ്പെടുക്കൽ പൂർത്തിയായി</translation>
 <translation id="866611985033792019">ഇമെയില്‍ ഉപയോക്താക്കളെ തിരിച്ചറിയുന്നതിന് ഈ സര്‍ട്ടിഫിക്കറ്റിനെ വിശ്വസിക്കുക</translation>
@@ -5395,6 +5418,7 @@
 <translation id="9065203028668620118">എഡിറ്റുചെയ്യുക</translation>
 <translation id="9066773882585798925">ടെക്‌സ്‌റ്റ് ഉച്ചത്തിൽ വായിച്ച് കേൾപ്പിക്കുക</translation>
 <translation id="9066782832737749352">ടെക്‌സ്‌റ്റ്-ടു-സ്‌പീച്ച്</translation>
+<translation id="9068849894565669697">വർണ്ണം തിരഞ്ഞെടുക്കുക</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB മൗസ് കണക്‌റ്റ് ചെയ്‌തു</translation>
@@ -5432,6 +5456,7 @@
 <translation id="9131487537093447019">Bluetooth ഉപകരണങ്ങളിലേക്ക് സന്ദേശങ്ങൾ അയയ്ക്കുകയും സ്വീകരിക്കുകയും ചെയ്യുക.</translation>
 <translation id="9134304429738380103">അതെ, ഞാൻ തയ്യാറാണ്.</translation>
 <translation id="9137013805542155359">യഥാര്‍ത്ഥമായത് കാണിക്കുക</translation>
+<translation id="9137157311132182254">തിരഞ്ഞെടുത്ത തിരയൽ യന്ത്രം</translation>
 <translation id="9137916601698928395">ലിങ്ക് <ph name="USER" /> എന്നതായി തുറക്കുക</translation>
 <translation id="9138978632494473300">ഇനിപ്പറയുന്ന സ്ഥലങ്ങളിലേക്ക് കുറുക്കുവഴികൾ ചേർക്കുക:</translation>
 <translation id="9140067245205650184">നിങ്ങള്‍ ഒരു പിന്തുണയ്ക്കാത്ത ഫീച്ചർ ഫ്ലാഗ് ഉപയോഗിക്കുന്നു: <ph name="BAD_FLAG" />. സ്ഥിരതയെയും സുരക്ഷയെയും ബാധിക്കും.</translation>
@@ -5504,6 +5529,7 @@
 <translation id="962802172452141067">ഫോൾഡർ ട്രീ ബുക്ക്‌മാർക്ക് ചെയ്യുക</translation>
 <translation id="964286338916298286">ഐടി അഡ്‌മിൻ നിങ്ങളുടെ ഉപകരണത്തിനായുള്ള Chrome ഗുഡി പ്രവർത്തനരഹിതമാക്കി.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{അപ്ലിക്കേഷൻ}other{അപ്ലിക്കേഷനുകൾ}}</translation>
+<translation id="965211523698323809">നിങ്ങളുടെ <ph name="DEVICE_TYPE" />-ൽ നിന്ന് ടെക്‌സ്‌റ്റ് മെസേജുകൾ അയയ്‌ക്കുകയും സ്വീകരിക്കുകയും ചെയ്യുക. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">ഇത് നിങ്ങളുടെ Google അക്കൗണ്ടുകളിൽ നിന്ന് നിങ്ങളെ സൈൻ ഔട്ട് ചെയ്യിക്കും. ബുക്ക്‌മാർക്കുകൾ, ചരിത്രം, പാസ്‌വേഡുകൾ, മറ്റ് ക്രമീകരണം എന്നിവയിലുള്ള മാറ്റങ്ങളെ ഇനി നിങ്ങളുടെ Google അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കില്ല. എന്നിരുന്നാലും, നിലവിലുള്ള വിവരങ്ങളെ Google അക്കൗണ്ടിൽ തുടർന്നും നിലനിർത്തും, അവ <ph name="BEGIN_LINK" />Google ഡാഷ്‌ബോർഡിൽ<ph name="END_LINK" /> മാനേജ് ചെയ്യാം.</translation>
 <translation id="967624055006145463">ഡാറ്റ സംഭരിച്ചു</translation>
 <translation id="968000525894980488">Google Play സേവനങ്ങൾ ഓണാക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 757df83f..cae9c202 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">चुकीच्या ऑफसेटसह वाचा किंवा लिहा ऑपरेशनची यावर विनंती केली: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">साइन इन करण्‍यापूर्वी, <ph name="NETWORK_ID" /> नेटवर्क सक्रिय करण्‍यासाठी कृपया अतिथी म्हणून प्रवेश करा.</translation>
 <translation id="1103523840287552314">नेहमी भाषांतर करा <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">आम्ही तुमचे सिम कार्ड डिटेक्ट करू शकलो नाही</translation>
 <translation id="1108600514891325577">&amp;थांबा</translation>
 <translation id="1110155001042129815">प्रतीक्षा करा</translation>
 <translation id="1112420131909513020">बॅकग्राउंड टॅब ब्लूटूथ वापरत आहे</translation>
@@ -755,6 +756,7 @@
 <translation id="2126167708562367080">तुमच्या अॅडमिनिस्ट्रेटरने सिंक अक्षम केले आहे.</translation>
 <translation id="2127372758936585790">निम्न-उर्जेचे चार्जर</translation>
 <translation id="212862741129535676">फ्रिक्वेन्सी स्थिती कब्जा टक्केवारी</translation>
+<translation id="212876957201860463">तुमचे मोबाइल डिव्हाइस सेट करण्यास तयार करत आहे…</translation>
 <translation id="2129825002735785149">प्लगिन अपडेट करा</translation>
 <translation id="2131077480075264">"<ph name="IMPORT_NAME" />" द्वारे "<ph name="APP_NAME" />" ला अनुमती नसल्‍याने तो स्‍थापित करण्‍यात अक्षम</translation>
 <translation id="21354425047973905">पिन लपवा</translation>
@@ -955,6 +957,7 @@
 <translation id="241727068219398187">डेटा <ph name="TIME" /> पर्यंत तुमच्या Google पासवर्डसह एंक्रिप्ट केला होता.
           यामध्ये Google Pay वरील पेमेंट पद्धतींचा आणि पत्त्यांचा समावेश नसतो.</translation>
 <translation id="2419706071571366386">सुरक्षिततेसाठी, तुमचा काँप्युटर वापरला जात नसताना साइन आउट करा.</translation>
+<translation id="2422125132043002186">Linux रिस्टोअर रद्द केले</translation>
 <translation id="2423578206845792524">म्हणून इमेज ज&amp;तन करा...</translation>
 <translation id="2428510569851653187">टॅब क्रॅश झाला तेव्हा तुम्ही नेमके काय करत होता ते सांगा</translation>
 <translation id="2431027948063157455">Google Assistant लोड होऊ शकले नाही, कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">ऑडिओ आणि व्हिडिओ इनपुटमध्‍ये प्रवेश करत आहे</translation>
 <translation id="3090819949319990166">बाह्य crx फाइल <ph name="TEMP_CRX_FILE" /> वर कॉपी करू शकत नाही.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" जोडले</translation>
+<translation id="3092699946856346803">कृपया तुमचे सिम घाला आणि पुन्हा प्रयत्न करा</translation>
 <translation id="3101709781009526431">तारीख आणि वेळ</translation>
 <translation id="310671807099593501">साइट ब्लूटूथ वापरत आहे</translation>
 <translation id="3115147772012638511">कॅशेसाठी प्रतीक्षा करत आहे...</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">क्वारंटाइन करण्यासाठी फाइल आणि प्रोग्राम:</translation>
 <translation id="3282568296779691940">Chrome वर साइन इन करा</translation>
 <translation id="3285322247471302225">नवीन &amp;टॅब</translation>
+<translation id="3286654161521615710">Chrome ब्राउझर आणि <ph name="DEVICE_TYPE" /> लाँचर वापरले जाते</translation>
 <translation id="3286737518123001369">तुमच्या सिक्युरिटी कीवर स्टोअर केलेला साइन इन डेटा पाहा आणि हटवा</translation>
 <translation id="3288047731229977326">डेव्हलपर मोडमध्‍ये चालणारी एक्स्टेंशन तुमच्या कॉंप्युटरला हानी पोहचवू शकतात. तुम्ही डेव्हलपर नसल्‍यास, सुरक्षित राहाण्‍यासाठी डेव्हलपर मोडमध्‍ये चालणारे हे एक्स्टेंशन तुम्ही अक्षम करावे.</translation>
 <translation id="3289856944988573801">अपडेट तपासण्यासाठी, कृपया इथरनेट किंवा वाय-फाय वापरा.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL सर्व्हर प्रमाणप‍त्र</translation>
 <translation id="3775705724665058594">तुमच्या डिव्हाइसवर पाठवा</translation>
 <translation id="3776796446459804932">हे एक्स्टेंशन Chrome वेब स्टोअर धोरणाचे उल्लंघन करते.</translation>
+<translation id="3777483481409781352">मोबाइल डिव्हाइस अॅक्टिव्हेट करू शकलो नाही</translation>
 <translation id="3777806571986431400">एक्स्टेंशन सुरू करा</translation>
 <translation id="3778152852029592020">डाउनलोड रद्द झाले.</translation>
 <translation id="3778208826288864398">चुकीचा पिन बऱ्याच वेळा एंटर केल्यामुळे, सिक्युरिटी की लॉक झाली आहे. तुम्हाला सिक्युरिटी की रीसेट करण्याची आवश्यकता असेल</translation>
@@ -2137,6 +2143,7 @@
 <translation id="4131410914670010031">कृष्ण धवल</translation>
 <translation id="4136203100490971508">सूर्योदयाच्या वेळी रात्रीचा प्रकाश आपोआप बंद होईल</translation>
 <translation id="4138267921960073861">साइन-इन स्क्रीनवर वापरकर्ता नावे आणि फोटो दर्शवा</translation>
+<translation id="4142052906269098341">तुमच्या फोनसह <ph name="DEVICE_TYPE" /> अनलॉक करा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">आणखी चांगल्या दर्जाचे व्हिडिओ मिळवा आणि बॅटरी लाइफ वाचवा. व्हिडिओ फक्त तुमच्या Cast सुरू केलेल्या स्क्रीनवर प्ले होईल.</translation>
 <translation id="4145922204387553806">तुमच्या स्क्रीनवर काय आहे यासंबंधित माहिती असिस्टंटला दर्शवू द्या</translation>
 <translation id="4146026355784316281">नेहमी सिस्टम दर्शकासह उघडा</translation>
@@ -2178,6 +2185,7 @@
 <translation id="42126664696688958">एक्सपोर्ट</translation>
 <translation id="42137655013211669">सर्व्हरद्वारे या स्त्रोताचा अॅक्सेस निषिद्ध केला होता.</translation>
 <translation id="4215350869199060536">अरेरे, नावात बेकायदेशीर चिन्हे आहेत!</translation>
+<translation id="4220648711404560261">अॅक्टिव्हेट करताना एरर आली.</translation>
 <translation id="4225397296022057997">सर्व साइटवर</translation>
 <translation id="4232375817808480934">Kerberos कॉन्फिगर करा</translation>
 <translation id="4235200303672858594">संपूर्ण स्क्रीन</translation>
@@ -2326,6 +2334,7 @@
 <translation id="4470957202018033307">बाह्य स्टोरेज प्राधान्ये</translation>
 <translation id="447252321002412580">Chrome ची वैशिष्ट्ये आणि परफॉर्मन्स सुधारण्यात मदत करा</translation>
 <translation id="4474155171896946103">सर्व टॅब बुकमार्क करा...</translation>
+<translation id="4474461121892222090">मोबाइल डेटा अॅक्टिव्हेशन पूर्ण होण्यास याला सुमारे १५ मिनिटे लागू शकतात.</translation>
 <translation id="4475552974751346499">डाउनलोड शोधा</translation>
 <translation id="4476590490540813026">व्यायामपटू</translation>
 <translation id="4477015793815781985">Ctrl, Alt किंवा ⌘ चा समावेश करा</translation>
@@ -2335,6 +2344,7 @@
 <translation id="4479877282574735775">व्हर्च्युअल मशीन कॉन्फिगर करत आहे. यासाठी काही मिनिटे लागू शकतात.</translation>
 <translation id="4480590691557335796">Chrome तुमच्या काँप्युटरवरील नुकसानकारक सॉफ्टवेअर शोधू शकते आणि ते काढू शकते</translation>
 <translation id="4481530544597605423">जोडणी वेगळी केलेली डिव्हाइस</translation>
+<translation id="4483579413421375386">साइटसाठी दाखवा</translation>
 <translation id="4495419450179050807">या पेजवर दर्शवू नका</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> क्रॅश झाले आहे</translation>
 <translation id="450099669180426158">उद्गारवाचक चिन्हाचा आयकन</translation>
@@ -2438,6 +2448,7 @@
 <translation id="4647697156028544508">कृपया "<ph name="DEVICE_NAME" />" साठी पिन प्रविष्‍ट करा:</translation>
 <translation id="4648491805942548247">अपुर्‍या परवानग्या</translation>
 <translation id="4648499713050786492">कृपया एखाद्या व्यक्तीस जोडण्यापूर्वी तुमचे प्रोफाईल अनलॉक करा.</translation>
+<translation id="4650591383426000695">तुमचा फोन <ph name="DEVICE_TYPE" /> वरून डिस्कनेक्ट करा</translation>
 <translation id="4651484272688821107">डेमो मोड स्रोतांनी ऑनलाइन घटक लोड करता आला नाही.</translation>
 <translation id="465878909996028221">फक्त http, https आणि फाइल प्रोटोकॉलना ब्राउझर रीडिरेक्‍टला सपोर्ट करते.</translation>
 <translation id="4659077111144409915">प्राथमिक खाते</translation>
@@ -2739,6 +2750,7 @@
 <translation id="5115309401544567011">कृपया तुमचा <ph name="DEVICE_TYPE" /> उर्जा स्रोताशी जोडा.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">म्हणून ऑडिओ ज&amp;तन करा...</translation>
+<translation id="5117139026559873716">तुमचा फोन तुमच्या <ph name="DEVICE_TYPE" /> वरून डिस्कनेक्ट करा. ते यापुढे आपोआप कनेक्ट होणार नाहीत.</translation>
 <translation id="5117427536932535467">थीम आणि वॉलपेपर</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> यशस्वीरित्या प्रिंट केला</translation>
 <translation id="5117930984404104619">भेट दिलेल्या URL सह, अन्य विस्तारांच्या वर्तनाचे परीक्षण करा</translation>
@@ -2968,6 +2980,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> ची अनुक्रमणिका</translation>
 <translation id="5463856536939868464">मेनूमध्ये लपलेले बुकमार्क आहेत</translation>
 <translation id="5464632865477611176">यावेळी रन करा</translation>
+<translation id="5464660706533281090">ही सेटिंग लहान मूल वापरकर्ता बदलू शकत नाही.</translation>
 <translation id="5466374726908360271">पेस्ट करा आणि “<ph name="SEARCH_TERMS" />” शोधा</translation>
 <translation id="5471768120198416576">हाय! मी तुमचा टेक्‍स्‍ट टू स्‍पीच व्हॉइस आहे.</translation>
 <translation id="5473333559083690127">नवीन पिन पुन्हा प्रविष्‍ट करा</translation>
@@ -3203,6 +3216,7 @@
 <translation id="5817918615728894473">जोडा</translation>
 <translation id="5821565227679781414">शॉर्टकट तयार करा</translation>
 <translation id="5825412242012995131">सुरू आहे (शिफारस केलेले)</translation>
+<translation id="5826395379250998812">तुमचे <ph name="DEVICE_TYPE" /> तुमच्या फोनसह कनेक्ट करा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">सामान्य नाव (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">प्रिंट करत आहे...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">निवडलेला डेटा Chrome आणि सिंक केलेल्या डिव्हाइसमधून काढला गेला आहे. तुमच्‍या Google खात्यामध्ये Google च्या इतर सेवांमधील शोध आणि अॅक्टिव्हिटी यासारख्या ब्राउझिंग इतिहासाची इतर स्वरूपे <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर असू शकतात.</translation>
 <translation id="6129938384427316298">Netscape सर्टिफिकेट टिप्पणी</translation>
 <translation id="6129953537138746214">जागा</translation>
+<translation id="6130024555057767093">तुम्ही वैयक्तिकरीत्या परवानगी देत असलेल्या साइट वगळता सर्व साइटसाठी सूचना सध्या ब्लॉक केल्या आहेत.</translation>
 <translation id="6136114942382973861">डाउनलोड बार बंद करा</translation>
 <translation id="6137767437444130246">वापरकर्ता सर्टिफिकेट</translation>
 <translation id="6138680304137685902">SHA-384 सह X9.62 ECDSA स्वाक्षरी</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">या प्रकारच्या लिंक नेहमी संबद्ध अ‍ॅपमध्ये उघडा</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> इंस्टॉल करा (Linux अ‍ॅप)</translation>
 <translation id="6207937957461833379">देश/प्रदेश</translation>
+<translation id="6208521041562685716">मोबाइल डेटा अॅक्टिव्हेट करत आहे</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: सिंक काम करत नाही</translation>
 <translation id="6212039847102026977">प्रगत नेटवर्क वैशिष्ट्ये दर्शवा</translation>
 <translation id="6212168817037875041">डिस्प्ले बंद करा</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">खूप लहान</translation>
 <translation id="6780439250949340171">अन्य सेटिंग्ज व्यवस्थापित करा</translation>
 <translation id="6781284683813954823">डूडल लिंक</translation>
+<translation id="6781978626986383437">Linux बॅकअप रद्द केले</translation>
 <translation id="6782111308708962316">तृतीय-पक्ष वेबसाइटना कुकी डेटा सेव्ह करण्यास आणि वाचण्यास प्रतिबंधित करा</translation>
 <translation id="6786747875388722282">विस्तार</translation>
 <translation id="6787839852456839824">कीबोर्ड शॉर्टकट</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">आम्हाला या डिव्हाइसवर वापरता येतील अशी <ph name="NUMBER_OF_APPS" /> ॲप्स तुमच्या खात्यात सापडली आहेत.</translation>
 <translation id="7199158086730159431">म&amp;दत मिळवा</translation>
 <translation id="7200083590239651963">काँफिगरेशन निवडा</translation>
+<translation id="7201042526153088083">तुमच्या <ph name="DEVICE_TYPE" /> वर Google Play मधून अॅप्स आणि गेम इंस्टॉल करा. &lt;a target="_blank" href="<ph name="URL" />"&gt;अधिक जाणून घ्या&lt;/a&gt;</translation>
 <translation id="720110658997053098">हे डिव्हाइस कायमचे कियोस्क मोडमध्ये ठेवा</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' हटवले</translation>
 <translation id="7201420661433230412">फायली पहा</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">EVDO आवश्यक आहे</translation>
 <translation id="7230787553283372882">आपला मजकूर आकार कस्टमाइझ करा</translation>
 <translation id="7232750842195536390">नाव बदलण्यात अयशस्वी</translation>
+<translation id="7234010996000898150">Linux रिस्टोअर रद्द करत आहे</translation>
 <translation id="7235716375204803342">ॲक्टिव्हिटी प्राप्त करत आहे...</translation>
 <translation id="7235737137505019098">तुमच्या सिक्युरिटी कीमध्ये कोणत्याही आणखी खात्यांसाठी पुरेशी जागा नाही.</translation>
 <translation id="7238585580608191973">SHA-256 बोटाचा ठसा</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{सर्व नवीन विंडोमध्ये उघडा}=1{ नवीन विंडोमध्ये उघडा}other{सर्व (#) नवीन विंडोमध्ये उघडा}}</translation>
 <translation id="7434509671034404296">डेव्हलपर</translation>
 <translation id="7436921188514130341">ओहो! नाव बदलताना एक एरर आली होती.</translation>
+<translation id="7437427339141948518">सूचना बंद</translation>
 <translation id="7438976808740265764">डिसेंबर २०२० नंतर Flash Player ला सपोर्ट केले जाणार नाही.</translation>
 <translation id="7441736921018636843">हे सेटिंग बदलण्यासाठी, तुमची सिंक पासफ्रेझ काढून टाकण्यासाठी <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">इतर वापरकर्ते</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">साइटला फाइल वाचू द्यायच्या का?</translation>
 <translation id="7644543211198159466">रंग आणि थीम</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (मालक)</translation>
+<translation id="7645681574855902035">Linux बॅकअप रद्द करत आहे</translation>
 <translation id="7647403192093989392">कोणत्याही अलीकडील ॲक्टिव्हिटी नाहीत</translation>
 <translation id="7648142322539582331">पालक नियंत्रणे सेट करण्यासाठी इंटरनेटशी कनेक्ट करा</translation>
 <translation id="7648992873808071793">या डिव्हाइसवर फायली संचयित करा</translation>
@@ -4855,6 +4876,7 @@
 <translation id="8256319818471787266">चमचमते</translation>
 <translation id="8257950718085972371">कॅमेरा अॅक्सेस ब्लॉक करणे सुरू ठेवा</translation>
 <translation id="8259239505248583312">चला जाऊ या</translation>
+<translation id="8259556432390118667">हेक्स रंग मूल्य</translation>
 <translation id="8260126382462817229">पुन्हा साइन इन करण्याचा प्रयत्न करा</translation>
 <translation id="8260864402787962391">माउस</translation>
 <translation id="8261378640211443080"><ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्ये हे एक्स्टेंशन सूचीबद्ध केले नाही आणि कदाचित तुमच्या माहिती शिवाय जोडले गेले आहे.</translation>
@@ -5107,6 +5129,7 @@
 <translation id="8662911384982557515">तुमचे होम पेज यावर बदला: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome वॉलपेपर सेट करू शकत नाही.</translation>
 <translation id="8663099077749055505"><ph name="HOST" /> वरील एकाधिक स्वयंचलित डाउनलोड नेहमी अवरोधित करा</translation>
+<translation id="8663534996262079772">या साइटसाठी सूचना दाखवायच्या का?</translation>
 <translation id="8664389313780386848">पृष्ठ स्रोत &amp;पहा</translation>
 <translation id="8665180165765946056">बॅकअप पूर्ण झाला</translation>
 <translation id="866611985033792019">ईमेल वापरकर्त्यांना ओळखण्यासाठी या सर्टिफिकेटवर विश्वास ठेवा</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">संपादन</translation>
 <translation id="9066773882585798925">मोठ्याने वाचलेला मजकूर ऐका</translation>
 <translation id="9066782832737749352">टेक्स्ट टू स्पीच</translation>
+<translation id="9068849894565669697">रंग निवडा</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">ब्लूटूथ</translation>
 <translation id="9074836595010225693">USB माउस कनेक्ट केला</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">ब्लूटूथ डिव्हाइस वर मेसेज पाठवा आणि त्यावरून मिळवा.</translation>
 <translation id="9134304429738380103">होय, मला मान्य आहे.</translation>
 <translation id="9137013805542155359">मूळ दर्शवा</translation>
+<translation id="9137157311132182254">प्राधान्य असलेले शोध इंजीन</translation>
 <translation id="9137916601698928395"><ph name="USER" /> म्हणून लिंक उघडा</translation>
 <translation id="9138978632494473300">खालील ठिकाणी शॉर्टकट जोडा:</translation>
 <translation id="9140067245205650184">तुम्ही एक सपोर्ट नसलेला वैशिष्ट्य फ्लॅग वापरत आहात: <ph name="BAD_FLAG" />. स्थिरता आणि सुरक्षा प्रभावित होईल.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">फोल्डर ट्री बुकमार्क करा</translation>
 <translation id="964286338916298286">तुमच्या IT अॅडमिनिस्ट्रेटरने तुमच्या डिव्हाइसाठी Chrome Goodies बंद केले आहे.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{ॲप्लिकेशन}other{ॲप्लिकेशन}}</translation>
+<translation id="965211523698323809">तुमच्या <ph name="DEVICE_TYPE" /> वरून एसएमएस पाठवा आणि मिळवा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">हे तुम्हाला तुमच्या Google खात्यांवरून साइन आउट करेल. तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्जमध्ये केलेले बदल तुमच्या Google खात्याशी सिंक केले जाणार नाहीत. मात्र तुमचा सद्य डेटा तुमच्या Google खात्यामध्ये स्टोअर केलेला राहील आणि तो <ph name="BEGIN_LINK" />Google डॅशबोर्ड<ph name="END_LINK" /> वर व्यवस्थापित करता येईल.</translation>
 <translation id="967624055006145463">डेटा स्टोअर केला</translation>
 <translation id="968000525894980488">Google Play सेवा चालू करा.</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index d10aae6..766d2d6 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Pengendalian baca atau tulis diminta dengan ofset tidak sah pada: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Sebelum log masuk, sila masuk sebagai Tetamu untuk mengaktifkan rangkaian <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Sentiasa terjemahkan <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Kami tidak dapat mengesan kad SIM anda</translation>
 <translation id="1108600514891325577">&amp;Berhenti</translation>
 <translation id="1110155001042129815">Tunggu</translation>
 <translation id="1112420131909513020">Tab latar belakang menggunakan Bluetooth</translation>
@@ -338,7 +339,7 @@
 <translation id="1503394326855300303">Akaun pemilik ini perlu menjadi akaun dilog masuk yang pertama dalam sesi berbilang log masuk.</translation>
 <translation id="150411034776756821">Alih keluar <ph name="SITE" /></translation>
 <translation id="1506061864768559482">Enjin carian</translation>
-<translation id="1507049466468737452"><ph name="ORIGIN" /> boleh melihat semua fail dalam folder berikut.</translation>
+<translation id="1507049466468737452"><ph name="ORIGIN" /> boleh melihat semua fail dalam folder berikut</translation>
 <translation id="1507170440449692343">Halaman ini telah disekat daripada mengakses kamera anda.</translation>
 <translation id="1507246803636407672">&amp;Buang</translation>
 <translation id="1508491105858779599">Letakkan jari anda pada penderia cap jari untuk membuka kunci peranti.</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Penyegerakan dilumpuhkan oleh pentadbir anda.</translation>
 <translation id="2127372758936585790">Pengecas berkuasa rendah</translation>
 <translation id="212862741129535676">Peratusan Penggunaan Keadaan Kekerapan</translation>
+<translation id="212876957201860463">Bersedia untuk menyediakan peranti selular anda...</translation>
 <translation id="2129825002735785149">Kemas kini pemalam</translation>
 <translation id="2131077480075264">Tidak dapat memasang "<ph name="APP_NAME" />" kerana tidak dibenarkan oleh "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Sembunyikan PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Data telah disulitkan dengan kata laluan Google anda bermula dari
           <ph name="TIME" />. Penyulitan ini tidak termasuk kaedah pembayaran dan alamat daripada Google Pay.</translation>
 <translation id="2419706071571366386">Demi keselamatan, log keluar apabila komputer anda tidak digunakan.</translation>
+<translation id="2422125132043002186">Pemulihan Linux dibatalkan</translation>
 <translation id="2423578206845792524">Si&amp;mpan imej sebagai...</translation>
 <translation id="2428510569851653187">Terangkan perkara yang sedang anda lakukan semasa ranap tab berlaku</translation>
 <translation id="2431027948063157455">Google Assistant tidak dapat dimuatkan, sila periksa sambungan rangkaian anda, kemudian cuba semula.</translation>
@@ -1410,7 +1413,7 @@
 <translation id="3071624960923923138">Anda boleh klik di sini untuk membuka tab baharu</translation>
 <translation id="3075874217500066906">Mula semula perlu dilakukan untuk memulakan proses Powerwash. Selepas memulakan semula, anda akan diminta mengesahkan bahawa anda ingin meneruskan.</translation>
 <translation id="3076909148546628648"><ph name="DOWNLOAD_RECEIVED" />/<ph name="DOWNLOAD_TOTAL" /></translation>
-<translation id="3076977359333237641">Data log masuk anda telah dipadamkan.</translation>
+<translation id="3076977359333237641">Data log masuk anda telah dipadamkan</translation>
 <translation id="3082374807674020857"><ph name="PAGE_TITLE" /> - <ph name="PAGE_URL" /></translation>
 <translation id="308268297242056490">URI</translation>
 <translation id="3082780749197361769">Tab ini menggunakan kamera atau mikrofon anda.</translation>
@@ -1425,6 +1428,7 @@
 <translation id="3090193911106258841">Mengakses input audio dan video</translation>
 <translation id="3090819949319990166">Tidak dapat menyalin fail crx luar ke <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" digandingkan</translation>
+<translation id="3092699946856346803">Sila masukkan SIM anda dan cuba lagi</translation>
 <translation id="3101709781009526431">Tarikh dan masa</translation>
 <translation id="310671807099593501">Tapak sedang menggunakan bluetooth</translation>
 <translation id="3115147772012638511">Menunggu cache...</translation>
@@ -1532,6 +1536,7 @@
 <translation id="3281892622610078515">Fail dan program yang akan dikuarantin:</translation>
 <translation id="3282568296779691940">Log masuk ke Chrome</translation>
 <translation id="3285322247471302225">&amp;Tab Baharu</translation>
+<translation id="3286654161521615710">Digunakan oleh penyemak imbas Chrome dan pelancar <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Lihat dan padamkan data log masuk yang disimpan pada kunci keselamatan anda</translation>
 <translation id="3288047731229977326">Sambungan yang dijalankan dalam mod pembangun boleh membahayakan komputer anda. Jika anda bukan pembangun, anda harus melumpuhkan sambungan yang dijalankan dalam mod pembangun ini supaya kekal selamat.</translation>
 <translation id="3289856944988573801">Untuk menyemak kemas kini, sila gunakan Ethernet atau Wi-Fi.</translation>
@@ -1876,6 +1881,7 @@
 <translation id="3775432569830822555">Sijil Pelayan SSL</translation>
 <translation id="3775705724665058594">Hantar ke peranti anda</translation>
 <translation id="3776796446459804932">Sambungan ini melanggar dasar Kedai Web Chrome.</translation>
+<translation id="3777483481409781352">Tidak dapat mengaktifkan peranti selular</translation>
 <translation id="3777806571986431400">Sambungan Didayakan</translation>
 <translation id="3778152852029592020">Muat turun telah dibatalkan.</translation>
 <translation id="3778208826288864398">Kunci keselamatan dikunci kerana PIN yang salah dimasukkan terlalu banyak kali. Anda perlu menetapkan semula kunci keselamatan itu.</translation>
@@ -2139,6 +2145,7 @@
 <translation id="4131410914670010031">Hitam putih</translation>
 <translation id="4136203100490971508">Cahaya Malam akan dimatikan secara automatik pada waktu matahari terbit</translation>
 <translation id="4138267921960073861">Paparkan nama pengguna dan foto pada skrin log masuk</translation>
+<translation id="4142052906269098341">Buka kunci <ph name="DEVICE_TYPE" /> anda dengan telefon anda. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Dapatkan video berkualiti lebih baik dan jimatkan hayat bateri. Video akan dimainkan hanya pada skrin yang berdaya Cast.</translation>
 <translation id="4145922204387553806">Benarkan Assistant menunjukkan maklumat yang berkaitan dengan paparan skrin anda</translation>
 <translation id="4146026355784316281">Sentiasa Buka dengan Alat Lihat Sistem</translation>
@@ -2180,6 +2187,7 @@
 <translation id="42126664696688958">Eksport</translation>
 <translation id="42137655013211669">Akses kepada sumber ini dilarang oleh pelayan.</translation>
 <translation id="4215350869199060536">Alamak, simbol tidak sah terdapat dalam nama!</translation>
+<translation id="4220648711404560261">Ralat berlaku semasa pengaktifan.</translation>
 <translation id="4225397296022057997">Di semua tapak</translation>
 <translation id="4232375817808480934">Konfigurasikan Kerberos</translation>
 <translation id="4235200303672858594">Keseluruhan skrin</translation>
@@ -2328,6 +2336,7 @@
 <translation id="4470957202018033307">Pilihan storan luar</translation>
 <translation id="447252321002412580">Bantu meningkatkan ciri dan prestasi Chrome</translation>
 <translation id="4474155171896946103">Tanda halaman semua tab...</translation>
+<translation id="4474461121892222090">Proses melengkapkan pengaktifan data mudah alih mungkin mengambil masa sehingga 15 minit.</translation>
 <translation id="4475552974751346499">Cari muat turun</translation>
 <translation id="4476590490540813026">Atlet</translation>
 <translation id="4477015793815781985">Sertakan Ctrl, Alt atau ⌘</translation>
@@ -2337,6 +2346,7 @@
 <translation id="4479877282574735775">Mengkonfigurasikan mesin maya. Proses ini mungkin mengambil masa beberapa minit.</translation>
 <translation id="4480590691557335796">Chrome boleh mencari perisian yang berbahaya pada komputer anda dan mengalih keluar perisian tersebut</translation>
 <translation id="4481530544597605423">Peranti dinyahganding</translation>
+<translation id="4483579413421375386">Tunjukkan untuk tapak</translation>
 <translation id="4495419450179050807">Jangan paparkan pada halaman ini</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> telah ranap</translation>
 <translation id="450099669180426158">Ikon tanda seru</translation>
@@ -2440,6 +2450,7 @@
 <translation id="4647697156028544508">Sila masukkan PIN untuk "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Kebenaran tidak mencukupi</translation>
 <translation id="4648499713050786492">Sila buka kunci profil anda sebelum menambahkan seseorang.</translation>
+<translation id="4650591383426000695">Putuskan sambungan telefon anda daripada <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Tidak dapat memuatkan komponen dalam talian dengan sumber mod tunjuk cara.</translation>
 <translation id="465878909996028221">Hanya http, https dan protokol fail disokong untuk pengubahan hala penyemak imbas.</translation>
 <translation id="4659077111144409915">Akaun utama</translation>
@@ -2741,6 +2752,7 @@
 <translation id="5115309401544567011">Sila palamkan <ph name="DEVICE_TYPE" /> anda pada sumber kuasa.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Si&amp;mpan Audio Sebagai...</translation>
+<translation id="5117139026559873716">Putuskan sambungan telefon anda daripada <ph name="DEVICE_TYPE" />. Kedua-dua peranti ini tidak akan menyambung secara automatik lagi.</translation>
 <translation id="5117427536932535467">Tema &amp; Kertas Dinding</translation>
 <translation id="5117625797180141189">Berjaya mencetak <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Pantau gelagat sambungan lain, termasuk URL yang dilawati</translation>
@@ -2970,6 +2982,7 @@
 <translation id="5463275305984126951">Indeks bagi <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu mengandungi penanda halaman tersembunyi</translation>
 <translation id="5464632865477611176">Jalankan pada masa ini</translation>
+<translation id="5464660706533281090">Tetapan ini tidak boleh ditukar oleh pengguna kanak-kanak.</translation>
 <translation id="5466374726908360271">Ta&amp;mpal dan cari “<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Hai! Saya ialah suara teks ke pertuturan anda.</translation>
 <translation id="5473333559083690127">Masukkan semula PIN baharu</translation>
@@ -3205,6 +3218,7 @@
 <translation id="5817918615728894473">Gandingkan</translation>
 <translation id="5821565227679781414">Cipta Pintasan</translation>
 <translation id="5825412242012995131">Hidup (Disyorkan)</translation>
+<translation id="5826395379250998812">Sambungkan <ph name="DEVICE_TYPE" /> anda dengan telefon anda. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nama Biasa (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Mencetak...</translation>
@@ -3332,7 +3346,7 @@
 <translation id="6010869025736512584">Mengakses input video</translation>
 <translation id="6011193465932186973">Cap jari</translation>
 <translation id="6011449291337289699">Kosongkan data tapak</translation>
-<translation id="6013505829696424563">Untuk melihat data log masuk, masukkan PIN untuk kunci keselamatan anda. Jika anda tidak tahu PINnya, anda perlu menetapkan semula kunci keselamatan itu.</translation>
+<translation id="6013505829696424563">Untuk melihat data log masuk, masukkan PIN untuk kunci keselamatan anda. Jika anda tidak tahu nombor PIN, anda perlu menetapkan semula kunci keselamatan itu.</translation>
 <translation id="6015266928248016057">PUK tidak sah. Baki cubaan semula: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Tahun</translation>
 <translation id="6016551720757758985">Sahkan Powerwash dengan kembali ke versi terdahulu</translation>
@@ -3426,6 +3440,7 @@
 <translation id="6129691635767514872">Data yang dipilih telah dialih keluar daripada Chrome dan peranti yang disegerakkan. Akaun Google anda mungkin mempunyai sejarah penyemakan imbas dalam bentuk lain seperti carian dan aktiviti daripada perkhidmatan Google yang lain di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Komen Sijil Netscape</translation>
 <translation id="6129953537138746214">Ruang</translation>
+<translation id="6130024555057767093">Pemberitahuan disekat untuk semua tapak pada masa ini kecuali tapak yang anda benarkan secara berasingan.</translation>
 <translation id="6136114942382973861">Tutup bar muat turun</translation>
 <translation id="6137767437444130246">Sijil pengguna</translation>
 <translation id="6138680304137685902">Tandatangan X9.62 ECDSA dengan SHA-384</translation>
@@ -3471,6 +3486,7 @@
 <translation id="620722923698527029">Sentiasa buka jenis pautan ini dalam apl yang berkaitan</translation>
 <translation id="6207282396926186323">Pasang <ph name="APP_NAME" /> (Apl Linux)</translation>
 <translation id="6207937957461833379">Negara/Rantau</translation>
+<translation id="6208521041562685716">Data mudah alih sedang diaktifkan</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Penyegerakan tidak berfungsi</translation>
 <translation id="6212039847102026977">Tunjukkan sifat rangkaian terperinci</translation>
 <translation id="6212168817037875041">Matikan paparan</translation>
@@ -3832,6 +3848,7 @@
 <translation id="677965093459947883">Sangat kecil</translation>
 <translation id="6780439250949340171">uruskan tetapan lain</translation>
 <translation id="6781284683813954823">Pautan Coretan</translation>
+<translation id="6781978626986383437">Sandaran Linux dibatalkan</translation>
 <translation id="6782111308708962316">Halang tapak web pihak ketiga daripada menyimpan dan membaca data kuki</translation>
 <translation id="6786747875388722282">Pelanjutan</translation>
 <translation id="6787839852456839824">Pintasan papan kekunci</translation>
@@ -4119,6 +4136,7 @@
 <translation id="7197632491113152433">Kami menemui <ph name="NUMBER_OF_APPS" /> apl daripada akaun anda yang boleh digunakan pada peranti ini.</translation>
 <translation id="7199158086730159431">Dapatkan B&amp;antuan</translation>
 <translation id="7200083590239651963">Pilih konfigurasi</translation>
+<translation id="7201042526153088083">Pasang apl dan permainan daripada Google Play pada <ph name="DEVICE_TYPE" /> anda. &lt;a target="_blank" href="<ph name="URL" />"&gt;Ketahui lebih lanjut&lt;/a&gt;</translation>
 <translation id="720110658997053098">Pastikan peranti ini kekal dalam mod kios</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' dipadamkan</translation>
 <translation id="7201420661433230412">Lihat fail</translation>
@@ -4143,6 +4161,7 @@
 <translation id="7229570126336867161">Perlukan EVDO</translation>
 <translation id="7230787553283372882">Sesuaikan saiz teks anda</translation>
 <translation id="7232750842195536390">Penamaan semula gagal</translation>
+<translation id="7234010996000898150">Membatakan pemulihan Linux</translation>
 <translation id="7235716375204803342">Mengambil aktiviti...</translation>
 <translation id="7235737137505019098">Kunci keselamatan anda tiada ruang yang mencukupi untuk menambahkan sebarang akaun lagi.</translation>
 <translation id="7238585580608191973">Cap jari SHA-256</translation>
@@ -4278,6 +4297,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Buka Semua dalam Tetingkap &amp;Baharu}=1{Buka dalam Tetingkap &amp;Baharu}other{Buka Semua (#) dalam Tetingkap &amp;Baharu}}</translation>
 <translation id="7434509671034404296">Pembangun</translation>
 <translation id="7436921188514130341">Oh, Tidak! Ralat berlaku semasa penamaan semula.</translation>
+<translation id="7437427339141948518">Pemberitahuan dimatikan</translation>
 <translation id="7438976808740265764">Flash Player tidak akan disokong lagi selepas bulan Disember 2020.</translation>
 <translation id="7441736921018636843">Untuk menukar tetapan ini, <ph name="BEGIN_LINK" />tetapkan semula penyegerakan<ph name="END_LINK" /> untuk mengalih keluar ungkapan laluan penyegerakan anda</translation>
 <translation id="7441830548568730290">Pengguna lain</translation>
@@ -4407,6 +4427,7 @@
 <translation id="7643932971554933646">Benarkan tapak membaca fail?</translation>
 <translation id="7644543211198159466">Warna dan tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (pemilik)</translation>
+<translation id="7645681574855902035">Membatalkan sandaran Linux</translation>
 <translation id="7647403192093989392">Tiada aktiviti baru-baru ini</translation>
 <translation id="7648142322539582331">Sambung ke Internet untuk menyediakan Kawalan Ibu Bapa</translation>
 <translation id="7648992873808071793">Simpan fail pada peranti ini</translation>
@@ -4858,6 +4879,7 @@
 <translation id="8256319818471787266">Sparky</translation>
 <translation id="8257950718085972371">Teruskan menyekat akses kamera</translation>
 <translation id="8259239505248583312">Mari mulakan</translation>
+<translation id="8259556432390118667">Nilai warna perenambelasan</translation>
 <translation id="8260126382462817229">Cuba log masuk semula</translation>
 <translation id="8260864402787962391">Tetikus</translation>
 <translation id="8261378640211443080">Sambungan ini tidak disenaraikan dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa pengetahuan anda.</translation>
@@ -5111,6 +5133,7 @@
 <translation id="8662911384982557515">Tukar halaman utama anda kepada: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome tidak boleh menetapkan kertas dinding.</translation>
 <translation id="8663099077749055505">Sentiasa halang muat turun automatik berbilang pada <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Tunjukkan pemberitahuan untuk tapak ini?</translation>
 <translation id="8664389313780386848">&amp;Lihat sumber halaman</translation>
 <translation id="8665180165765946056">Sandaran selesai</translation>
 <translation id="866611985033792019">Percayakan sijil ini untuk mengenal pasti pengguna e-mel</translation>
@@ -5400,6 +5423,7 @@
 <translation id="9065203028668620118">Edit</translation>
 <translation id="9066773882585798925">Dengar teks dibaca dengan lantang</translation>
 <translation id="9066782832737749352">Teks kepada Pertuturan</translation>
+<translation id="9068849894565669697">Pilih warna</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Tetikus USB disambungkan</translation>
@@ -5437,6 +5461,7 @@
 <translation id="9131487537093447019">Hantar mesej kepada dan terima mesej daripada peranti Bluetooth.</translation>
 <translation id="9134304429738380103">Ya, saya ikut serta.</translation>
 <translation id="9137013805542155359">Paparkan asal</translation>
+<translation id="9137157311132182254">Enjin carian pilihan</translation>
 <translation id="9137916601698928395">Buka pautan sebagai <ph name="USER" /></translation>
 <translation id="9138978632494473300">Tambahkan pintasan ke tempat berikut:</translation>
 <translation id="9140067245205650184">Anda menggunakan bendera ciri yang tidak disokong: <ph name="BAD_FLAG" />. Kestabilan dan keselamatan akan terjejas.</translation>
@@ -5509,6 +5534,7 @@
 <translation id="962802172452141067">Pohon folder penanda halaman</translation>
 <translation id="964286338916298286">Pentadbir IT anda telah melumpuhkan Chrome Goodies untuk peranti anda.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplikasi}other{Aplikasi}}</translation>
+<translation id="965211523698323809">Hantar dan terima mesej teks daripada <ph name="DEVICE_TYPE" /> anda. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Ini akan melog anda keluar daripada akaun Google anda. Perubahan kepada penanda halaman, sejarah, kata laluan dan tetapan anda yang lain tidak akan disegerakkan ke Akaun Google anda lagi. Walau bagaimanapun, data sedia ada akan kekal disimpan dalam Akaun Google anda dan boleh diuruskan di <ph name="BEGIN_LINK" />Papan Pemuka Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Data disimpan</translation>
 <translation id="968000525894980488">Hidupkan perkhidmatan Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 5352446..763ce97 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Lees- of schrijfbewerking is aangevraagd met een ongeldige verschuiving op: <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Voordat je inlogt, log je eerst in als gast om het netwerk <ph name="NETWORK_ID" /> te activeren.</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> altijd vertalen</translation>
+<translation id="1104038495841596279">Je simkaart kan niet worden gedetecteerd</translation>
 <translation id="1108600514891325577">&amp;Stop</translation>
 <translation id="1110155001042129815">Wachten</translation>
 <translation id="1112420131909513020">Achtergrondtabblad gebruikt Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Synchronisatie is uitgeschakeld door je beheerder.</translation>
 <translation id="2127372758936585790">Laag-vermogen-lader</translation>
 <translation id="212862741129535676">Bezettingspercentage van frequentiestatus</translation>
+<translation id="212876957201860463">Voorbereiden om je mobiele apparaat in te stellen…</translation>
 <translation id="2129825002735785149">Plug-in updaten</translation>
 <translation id="2131077480075264">Kan <ph name="APP_NAME" /> niet installeren, omdat dit niet wordt toegestaan door <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Pincodes verbergen</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Je gegevens zijn vanaf <ph name="TIME" /> versleuteld met je Google-wachtwoord.
           Hieronder vallen geen betaalmethoden en adressen van Google Pay.</translation>
 <translation id="2419706071571366386">Log om veiligheidsredenen uit wanneer je computer niet wordt gebruikt.</translation>
+<translation id="2422125132043002186">Linux herstellen geannuleerd</translation>
 <translation id="2423578206845792524">Af&amp;beelding opslaan als...</translation>
 <translation id="2428510569851653187">Beschrijf wat je aan het doen was toen het tabblad crashte</translation>
 <translation id="2431027948063157455">De Google Assistent kan niet worden geladen. Controleer de netwerkverbinding en probeer het opnieuw.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Audio- en video-invoer openen</translation>
 <translation id="3090819949319990166">Kan extern crx-bestand niet kopiëren naar <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">'<ph name="DEVICE_NAME" />' gekoppeld</translation>
+<translation id="3092699946856346803">Plaats je simkaart en probeer het opnieuw</translation>
 <translation id="3101709781009526431">Datum en tijd</translation>
 <translation id="310671807099593501">Site gebruikt Bluetooth</translation>
 <translation id="3115147772012638511">Wachten op cache...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Bestanden en programma's die in quarantaine worden gezet:</translation>
 <translation id="3282568296779691940">Inloggen bij Chrome</translation>
 <translation id="3285322247471302225">Nieuw &amp;tabblad</translation>
+<translation id="3286654161521615710">Gebruikt door Chrome-browser en <ph name="DEVICE_TYPE" />-launcher</translation>
 <translation id="3286737518123001369">De inloggegevens bekijken en verwijderen die op je beveiligingssleutel zijn opgeslagen</translation>
 <translation id="3288047731229977326">Extensies die in de ontwikkelaarmodus worden uitgevoerd, kunnen je computer beschadigen. Als je geen ontwikkelaar bent, moet je deze extensies uitschakelen, die in de ontwikkelaarsmodus worden uitgevoerd, om beveiligd te blijven.</translation>
 <translation id="3289856944988573801">Gebruik Ethernet of wifi om op updates te controleren.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL-servercertificaat</translation>
 <translation id="3775705724665058594">Verzenden naar je apparaten</translation>
 <translation id="3776796446459804932">Deze extensie schendt het beleid voor de Chrome Web Store.</translation>
+<translation id="3777483481409781352">Kan mobiel apparaat niet activeren</translation>
 <translation id="3777806571986431400">Extensie ingeschakeld</translation>
 <translation id="3778152852029592020">Downloaden is geannuleerd.</translation>
 <translation id="3778208826288864398">De beveiligingssleutel is vergrendeld omdat je te vaak een onjuiste pincode hebt ingevoerd. De beveiligingssleutel moet worden gereset.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Zwart/wit</translation>
 <translation id="4136203100490971508">Nachtverlichting wordt automatisch uitgeschakeld bij zonsopgang</translation>
 <translation id="4138267921960073861">Gebruikersnamen en foto's weergeven in het inlogscherm</translation>
+<translation id="4142052906269098341">Ontgrendel je <ph name="DEVICE_TYPE" /> met je telefoon. <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Ontvang video van betere kwaliteit en spaar de batterij. De video wordt alleen afgespeeld op je scherm dat werkt met Cast.</translation>
 <translation id="4145922204387553806">Laat de Assistent je scherm lezen om gerelateerde informatie op te zoeken</translation>
 <translation id="4146026355784316281">Altijd openen met systeemviewer</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Exporteren</translation>
 <translation id="42137655013211669">De toegang tot deze bron is verboden door de server.</translation>
 <translation id="4215350869199060536">Er staan niet-toegestane gegevens in de naam.</translation>
+<translation id="4220648711404560261">Er is een fout opgetreden bij de activering.</translation>
 <translation id="4225397296022057997">Op alle sites</translation>
 <translation id="4232375817808480934">Kerberos configureren</translation>
 <translation id="4235200303672858594">Volledig scherm</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Voorkeuren voor externe opslag</translation>
 <translation id="447252321002412580">Help de functies en prestaties van Chrome verbeteren</translation>
 <translation id="4474155171896946103">Bladwijzer toevoegen aan alle tabbladen...</translation>
+<translation id="4474461121892222090">Het kan maximaal vijftien minuten duren voordat mobiele data is geactiveerd.</translation>
 <translation id="4475552974751346499">Zoek in downloads</translation>
 <translation id="4476590490540813026">Atlete</translation>
 <translation id="4477015793815781985">Neem Ctrl, Alt of ⌘ op</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">De virtuele machine wordt geconfigureerd. Dit kan enkele minuten duren.</translation>
 <translation id="4480590691557335796">Chrome kan schadelijke software op je computer vinden en verwijderen</translation>
 <translation id="4481530544597605423">Ontkoppelde apparaten</translation>
+<translation id="4483579413421375386">Weergeven voor site</translation>
 <translation id="4495419450179050807">Niet op deze pagina weergeven</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> is gecrasht</translation>
 <translation id="450099669180426158">Uitroeptekenpictogram</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Geef de pincode op voor '<ph name="DEVICE_NAME" />':</translation>
 <translation id="4648491805942548247">Onvoldoende rechten</translation>
 <translation id="4648499713050786492">Ontgrendel je profiel voordat je een persoon toevoegt.</translation>
+<translation id="4650591383426000695">Je telefoon ontkoppelen van je <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Kan online component niet laden met bronnen van demomodus.</translation>
 <translation id="465878909996028221">Alleen http- en https-bestandsprotocollen worden ondersteund voor browseromleidingen.</translation>
 <translation id="4659077111144409915">Primair account</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Sluit je <ph name="DEVICE_TYPE" /> aan op een voedingsbron.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Audio op&amp;slaan als...</translation>
+<translation id="5117139026559873716">Ontkoppel je telefoon van je <ph name="DEVICE_TYPE" />. Je apparaten maken dan niet meer automatisch verbinding.</translation>
 <translation id="5117427536932535467">Thema's en achtergronden</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> is afgedrukt</translation>
 <translation id="5117930984404104619">Het gedrag van andere extensies controleren, waaronder bezochte URL's</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Index van <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu met verborgen bladwijzers</translation>
 <translation id="5464632865477611176">Eenmalig uitvoeren</translation>
+<translation id="5464660706533281090">Deze instelling kan niet worden gewijzigd door gebruikers met een kinderaccount.</translation>
 <translation id="5466374726908360271">Pl&amp;akken en zoeken naar '<ph name="SEARCH_TERMS" />'</translation>
 <translation id="5471768120198416576">Hallo. Ik ben je stem voor tekst-naar-spraak.</translation>
 <translation id="5473333559083690127">Pincode opnieuw opgeven</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Koppelen</translation>
 <translation id="5821565227679781414">Snelle link maken</translation>
 <translation id="5825412242012995131">Aan (aanbevolen)</translation>
+<translation id="5826395379250998812">Koppel je <ph name="DEVICE_TYPE" /> aan je telefoon <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Algemene naam (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Bezig met afdrukken....</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">De geselecteerde gegevens zijn verwijderd uit Chrome en van gesynchroniseerde apparaten. Voor je Google-account kunnen andere vormen van browsegeschiedenis (zoals zoekopdrachten en activiteit uit andere Google-services) beschikbaar zijn via <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Opmerking van Netscape-certificaat</translation>
 <translation id="6129953537138746214">Spatie</translation>
+<translation id="6130024555057767093">Momenteel worden meldingen geblokkeerd voor alle sites behalve sites waarvoor je dit specifiek toestaat.</translation>
 <translation id="6136114942382973861">Downloadbalk sluiten</translation>
 <translation id="6137767437444130246">Gebruikerscertificaat</translation>
 <translation id="6138680304137685902">X9.62 ECDSA-handtekening met SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Deze typen links altijd openen in de bijbehorende app</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux-app) installeren</translation>
 <translation id="6207937957461833379">Land/regio</translation>
+<translation id="6208521041562685716">Mobiele data wordt geactiveerd</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: synchronisatie werkt niet</translation>
 <translation id="6212039847102026977">Geavanceerde netwerkeigenschappen weergeven</translation>
 <translation id="6212168817037875041">Scherm uitschakelen</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Zeer klein</translation>
 <translation id="6780439250949340171">andere instellingen beheren</translation>
 <translation id="6781284683813954823">Link naar doodle</translation>
+<translation id="6781978626986383437">Back-up voor Linux geannuleerd</translation>
 <translation id="6782111308708962316">Voorkomen dat websites van derden cookiegegevens opslaan en lezen</translation>
 <translation id="6786747875388722282">Extensies</translation>
 <translation id="6787839852456839824">Sneltoetsen</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">We hebben in je account <ph name="NUMBER_OF_APPS" /> apps gevonden die op dit apparaat kunnen worden gebruikt.</translation>
 <translation id="7199158086730159431">H&amp;ulp vragen</translation>
 <translation id="7200083590239651963">Configuratie selecteren</translation>
+<translation id="7201042526153088083">Apps en games van Google Play installeren op je <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Meer informatie&lt;/a&gt;</translation>
 <translation id="720110658997053098">Dit apparaat permanent in kioskmodus houden</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' verwijderd</translation>
 <translation id="7201420661433230412">Bestanden weergeven</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">EVDO vereist</translation>
 <translation id="7230787553283372882">Tekstgrootte aanpassen</translation>
 <translation id="7232750842195536390">Kan naam niet wijzigen</translation>
+<translation id="7234010996000898150">Linux herstellen wordt geannuleerd</translation>
 <translation id="7235716375204803342">Activiteiten ophalen...</translation>
 <translation id="7235737137505019098">Je beveiligingssleutel heeft niet voldoende ruimte voor meer accounts.</translation>
 <translation id="7238585580608191973">SHA-256-vingerafdruk</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Alles openen in &amp;nieuw venster}=1{Openen in &amp;nieuw venster}other{Alles (#) openen in &amp;nieuw venster}}</translation>
 <translation id="7434509671034404296">Ontwikkelaar</translation>
 <translation id="7436921188514130341">Er is een fout opgetreden tijdens het wijzigen van de naam.</translation>
+<translation id="7437427339141948518">Meldingen uit</translation>
 <translation id="7438976808740265764">Flash Player wordt na december 2020 niet meer ondersteund.</translation>
 <translation id="7441736921018636843">Als je deze instelling wilt wijzigen, moet je de <ph name="BEGIN_LINK" />synchronisatie resetten<ph name="END_LINK" /> om de wachtwoordzin voor synchronisatie te verwijderen</translation>
 <translation id="7441830548568730290">Andere gebruikers.</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Site toestemming geven deze bestanden te bekijken?</translation>
 <translation id="7644543211198159466">Kleur en thema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (eigenaar)</translation>
+<translation id="7645681574855902035">Back-up voor Linux annuleren</translation>
 <translation id="7647403192093989392">Geen recente activiteiten</translation>
 <translation id="7648142322539582331">Maak verbinding met internet om ouderlijk toezicht in te stellen</translation>
 <translation id="7648992873808071793">Bestanden op dit apparaat bewaren</translation>
@@ -4856,6 +4877,7 @@
 <translation id="8256319818471787266">Bello</translation>
 <translation id="8257950718085972371">Cameratoegang blijven blokkeren</translation>
 <translation id="8259239505248583312">Aan de slag</translation>
+<translation id="8259556432390118667">Hex-kleurwaarde</translation>
 <translation id="8260126382462817229">Probeer opnieuw in te loggen</translation>
 <translation id="8260864402787962391">Muis</translation>
 <translation id="8261378640211443080">Deze extensie wordt niet vermeld in de <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> en is mogelijk zonder je medeweten toegevoegd.</translation>
@@ -5108,6 +5130,7 @@
 <translation id="8662911384982557515">Je homepage wijzigen in: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome kan de achtergrond niet instellen.</translation>
 <translation id="8663099077749055505">Meerdere automatische downloads altijd blokkeren op <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Meldingen weergeven voor deze site?</translation>
 <translation id="8664389313780386848">Paginabron &amp;weergeven</translation>
 <translation id="8665180165765946056">Back-up voltooid</translation>
 <translation id="866611985033792019">Dit certificaat vertrouwen voor het identificeren van e-mailgebruikers</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Bewerken</translation>
 <translation id="9066773882585798925">Tekst hardop voorlezen</translation>
 <translation id="9066782832737749352">Tekst-naar-spraak</translation>
+<translation id="9068849894565669697">Kleur selecteren</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-muis aangesloten</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Berichten verzenden naar en ontvangen van Bluetooth-apparaten.</translation>
 <translation id="9134304429738380103">Ja, ik doe mee.</translation>
 <translation id="9137013805542155359">Origineel weergeven</translation>
+<translation id="9137157311132182254">Voorkeurszoekmachine</translation>
 <translation id="9137916601698928395">Link openen als <ph name="USER" /></translation>
 <translation id="9138978632494473300">Snelle links toevoegen op de volgende locaties:</translation>
 <translation id="9140067245205650184">Je gebruikt een niet-ondersteunde functiemarkering: <ph name="BAD_FLAG" />. De stabiliteit en beveiliging zullen hieronder lijden.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Mappenstructuur voor bladwijzers</translation>
 <translation id="964286338916298286">Je IT-beheerder heeft Chrome-extra's uitgeschakeld voor je apparaat.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{App}other{Apps}}</translation>
+<translation id="965211523698323809">Sms'jes verzenden en ontvangen op je <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Hiermee word je uitgelogd van je Google-accounts. Wijzigingen in je bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden niet meer gesynchroniseerd met je Google-account. Je bestaande gegevens blijven echter opgeslagen in je Google-account en kunnen worden beheerd via <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Opgeslagen gegevens</translation>
 <translation id="968000525894980488">Schakel Google Play-services in.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 255bcdc..7988dab 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Det ble bedt om en lese- eller skriveoperasjon med en ugyldig forskyvning på: «<ph name="DEVICE_NAME" />».</translation>
 <translation id="1097658378307015415">Gå inn som gjest for å aktivere nettverket <ph name="NETWORK_ID" /> før du logger deg på.</translation>
 <translation id="1103523840287552314">Oversett alltid <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Vi fant ikke SIM-kortet ditt</translation>
 <translation id="1108600514891325577">&amp;Stopp</translation>
 <translation id="1110155001042129815">Vent</translation>
 <translation id="1112420131909513020">En bakgrunnsfane bruker Bluetooth</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">Administratoren din har slått av synkronisering.</translation>
 <translation id="2127372758936585790">Lading med lav effekt</translation>
 <translation id="212862741129535676">Utnyttelsesgrad for frekvenstilstand</translation>
+<translation id="212876957201860463">Forbereder konfigureringen av mobilenheten din …</translation>
 <translation id="2129825002735785149">Oppdater programtillegget</translation>
 <translation id="2131077480075264">Kunne ikke installere «<ph name="APP_NAME" />» fordi det ikke er tillatt av «<ph name="IMPORT_NAME" />»</translation>
 <translation id="21354425047973905">Skjul PIN-koder</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187">Data ble kryptert med Google-passordet ditt
           <ph name="TIME" />. Dette inkluderer ikke betalingsmåter og adresser fra Google Pay.</translation>
 <translation id="2419706071571366386">Av sikkerhetsårsaker bør du logge av når datamaskinen ikke er i bruk.</translation>
+<translation id="2422125132043002186">Gjenopprettingen av Linux er avbrutt</translation>
 <translation id="2423578206845792524">Lagre &amp;bildet som...</translation>
 <translation id="2428510569851653187">Beskriv hva du holdt på med da fanen kræsjet</translation>
 <translation id="2431027948063157455">Google-assistenten kunne ikke lastes inn. Kontrollér nettverkstilkoblingen din, og prøv på nytt.</translation>
@@ -1420,6 +1423,7 @@
 <translation id="3090193911106258841">Åpner lyd- og videoinngang</translation>
 <translation id="3090819949319990166">Kunne ikke kopiere den eksterne crx-filen til <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">«<ph name="DEVICE_NAME" />» er tilkoblet</translation>
+<translation id="3092699946856346803">Sett inn SIM-kortet og prøv på nytt</translation>
 <translation id="3101709781009526431">Dato og klokkeslett</translation>
 <translation id="310671807099593501">Nettstedet bruker Bluetooth</translation>
 <translation id="3115147772012638511">Venter på buffer...</translation>
@@ -1527,6 +1531,7 @@
 <translation id="3281892622610078515">Filer og programmer som blir satt i karantene:</translation>
 <translation id="3282568296779691940">Logg på Chrome</translation>
 <translation id="3285322247471302225">Ny &amp;fane</translation>
+<translation id="3286654161521615710">Brukes av Chrome-nettleseren og <ph name="DEVICE_TYPE" />-appoversikten</translation>
 <translation id="3286737518123001369">Vis og slett påloggingsdataene som er lagret på sikkerhetsnøkkelen</translation>
 <translation id="3288047731229977326">Utvidelser som kjører i utviklermodus kan skade datamaskinen din. Hvis du ikke er utvikler, bør du deaktivere disse utvidelsene som kjører i utviklermodus, for å være på den sikre siden.</translation>
 <translation id="3289856944988573801">For å sjekke etter oppdateringer, kan du bruke Ethernet eller Wi-Fi.</translation>
@@ -1870,6 +1875,7 @@
 <translation id="3775432569830822555">SSL-tjenersertifikat</translation>
 <translation id="3775705724665058594">Send til enhetene dine</translation>
 <translation id="3776796446459804932">Denne utvidelsen strider med retningslinjene for Chrome Nettmarked.</translation>
+<translation id="3777483481409781352">Kunne ikke aktivere mobilenheten</translation>
 <translation id="3777806571986431400">Utvidelsen er aktivert</translation>
 <translation id="3778152852029592020">Nedlastingen ble avbrutt.</translation>
 <translation id="3778208826288864398">Sikkerhetsnøkkelen er låst fordi feil PIN-kode ble skrevet inn for mange ganger. Du må tilbakestille sikkerhetsnøkkelen.</translation>
@@ -2131,6 +2137,7 @@
 <translation id="4131410914670010031">Svarthvitt</translation>
 <translation id="4136203100490971508">Nattlys blir slått av automatisk ved soloppgang</translation>
 <translation id="4138267921960073861">Vis brukernavn og bilder på påloggingsskjermen</translation>
+<translation id="4142052906269098341">Lås opp <ph name="DEVICE_TYPE" /> med telefonen. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Få video med bedre kvalitet og spar batteri. Videoen spilles kun av på den Cast-kompatible skjermen.</translation>
 <translation id="4145922204387553806">La assistenten vise deg informasjon knyttet til det som er på skjermen din</translation>
 <translation id="4146026355784316281">Åpne alltid med systemvisningsprogrammet</translation>
@@ -2172,6 +2179,7 @@
 <translation id="42126664696688958">Eksportér</translation>
 <translation id="42137655013211669">Tilgangen til denne ressursen ble avvist av tjeneren.</translation>
 <translation id="4215350869199060536">Ojsann – det er ulovlige symboler i navnet!</translation>
+<translation id="4220648711404560261">Det oppsto en feil under aktiveringen.</translation>
 <translation id="4225397296022057997">På alle nettsteder</translation>
 <translation id="4232375817808480934">Konfigurer Kerberos</translation>
 <translation id="4235200303672858594">Hele skjermen</translation>
@@ -2320,6 +2328,7 @@
 <translation id="4470957202018033307">Innstillinger for ekstern lagring</translation>
 <translation id="447252321002412580">Hjelp til med å forbedre funksjonene og ytelsen til Chrome</translation>
 <translation id="4474155171896946103">Bokmerk alle fanene</translation>
+<translation id="4474461121892222090">Det kan ta opptil 15 minutter å fullføre aktiveringen av mobildata.</translation>
 <translation id="4475552974751346499">Søk i nedlastinger</translation>
 <translation id="4476590490540813026">Idrettsutøver</translation>
 <translation id="4477015793815781985">Inkluder Ctrl, Alt eller ⌘</translation>
@@ -2329,6 +2338,7 @@
 <translation id="4479877282574735775">Konfigurerer den virtuelle maskinen. Dette kan ta noen minutter.</translation>
 <translation id="4480590691557335796">Chrome kan finne skadelig programvare på datamaskinen din og fjerne den</translation>
 <translation id="4481530544597605423">Frakoblede enheter</translation>
+<translation id="4483579413421375386">Vis for nettstedet</translation>
 <translation id="4495419450179050807">Ikke vis på denne siden</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> har kræsjet</translation>
 <translation id="450099669180426158">Utropstegnikon</translation>
@@ -2432,6 +2442,7 @@
 <translation id="4647697156028544508">Skriv inn PIN-koden for «<ph name="DEVICE_NAME" />»:</translation>
 <translation id="4648491805942548247">Utilstrekkelige tillatelser</translation>
 <translation id="4648499713050786492">Du må låse opp profilen din før du kan legge til en person.</translation>
+<translation id="4650591383426000695">Koble telefonen fra <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Kunne ikke laste inn nettbasert komponent med ressurser for demomodus.</translation>
 <translation id="465878909996028221">Bare protokollene http, https og file støttes for viderekobling av nettleseren.</translation>
 <translation id="4659077111144409915">Primærkonto</translation>
@@ -2733,6 +2744,7 @@
 <translation id="5115309401544567011">Koble <ph name="DEVICE_TYPE" />-enheten til en strømkilde.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">La&amp;gre lyd som</translation>
+<translation id="5117139026559873716">Koble telefonen fra <ph name="DEVICE_TYPE" />. De kommer ikke lenger til å kobles sammen automatisk.</translation>
 <translation id="5117427536932535467">Temaer og bakgrunner</translation>
 <translation id="5117625797180141189">Skrev ut <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">overvåke atferden til andre utvidelser, inkludert besøkte nettadresser</translation>
@@ -2962,6 +2974,7 @@
 <translation id="5463275305984126951">Indeks for <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Meny med skjulte bokmerker</translation>
 <translation id="5464632865477611176">Kjør denne gangen</translation>
+<translation id="5464660706533281090">Denne innstillingen kan ikke endres av en barnebruker.</translation>
 <translation id="5466374726908360271">&amp;Lim inn og søk etter «<ph name="SEARCH_TERMS" />»</translation>
 <translation id="5471768120198416576">Heisann! Jeg er tekst til tale-stemmen din.</translation>
 <translation id="5473333559083690127">Skriv inn den nye PIN-koden på nytt</translation>
@@ -3197,6 +3210,7 @@
 <translation id="5817918615728894473">Koble sammen</translation>
 <translation id="5821565227679781414">Opprett snarvei</translation>
 <translation id="5825412242012995131">På (anbefales)</translation>
+<translation id="5826395379250998812">Koble <ph name="DEVICE_TYPE" /> til telefonen. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Vanlig navn (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Skriver ut …</translation>
@@ -3418,6 +3432,7 @@
 <translation id="6129691635767514872">De valgte dataene er fjernet fra Chrome og alle synkroniserte enheter. Det kan hende Google-kontoen din har andre typer nettleserlogger, for eksempel for søk og aktivitet fra andre Google-tjenester, på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Kommentar til Netscape-sertifikat</translation>
 <translation id="6129953537138746214">Mellomrom</translation>
+<translation id="6130024555057767093">Varsler er for øyeblikket blokkert på alle nettsteder bortsett fra dem du har tillatt individuelt.</translation>
 <translation id="6136114942382973861">Lukk nedlastingsraden</translation>
 <translation id="6137767437444130246">Brukersertifikat</translation>
 <translation id="6138680304137685902">X9.62 ECDSA-signatur med SHA-384</translation>
@@ -3463,6 +3478,7 @@
 <translation id="620722923698527029">Åpne alltid disse linktypene i den tilknyttede appen</translation>
 <translation id="6207282396926186323">Installer <ph name="APP_NAME" /> (Linux-app)</translation>
 <translation id="6207937957461833379">Land / region</translation>
+<translation id="6208521041562685716">Mobildata aktiveres</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Synkroniseringen fungerer ikke</translation>
 <translation id="6212039847102026977">Vis avanserte nettverksegenskaper</translation>
 <translation id="6212168817037875041">Slå av skjermen</translation>
@@ -3824,6 +3840,7 @@
 <translation id="677965093459947883">Veldig liten</translation>
 <translation id="6780439250949340171">administrer andre innstillinger</translation>
 <translation id="6781284683813954823">Doodle-link</translation>
+<translation id="6781978626986383437">Sikkerhetskopieringen av Linux er avbrutt</translation>
 <translation id="6782111308708962316">Forhindrer at nettsteder fra tredjeparter lagrer og leser data i informasjonskapsler</translation>
 <translation id="6786747875388722282">Utvidelser</translation>
 <translation id="6787839852456839824">Hurtigtaster</translation>
@@ -4111,6 +4128,7 @@
 <translation id="7197632491113152433">Vi fant <ph name="NUMBER_OF_APPS" /> apper i kontoen din som kan brukes på denne enheten.</translation>
 <translation id="7199158086730159431">Få hjelp</translation>
 <translation id="7200083590239651963">Velg konfigurasjon</translation>
+<translation id="7201042526153088083">Installer apper og spill fra Google Play på <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Finn ut mer&lt;/a&gt;</translation>
 <translation id="720110658997053098">Behold denne enheten permanent i kioskmodus</translation>
 <translation id="7201118060536064622">«<ph name="DELETED_ITEM_NAME" />» er slettet</translation>
 <translation id="7201420661433230412">Se filer</translation>
@@ -4135,6 +4153,7 @@
 <translation id="7229570126336867161">Krever EVDO</translation>
 <translation id="7230787553283372882">Tilpass tekststørrelsen</translation>
 <translation id="7232750842195536390">Navneendringen mislyktes</translation>
+<translation id="7234010996000898150">Avbryter gjenopprettingen av Linux</translation>
 <translation id="7235716375204803342">Henter aktiviteter …</translation>
 <translation id="7235737137505019098">Sikkerhetsnøkkelen har ikke plass til flere kontoer.</translation>
 <translation id="7238585580608191973">SHA-256-fingeravtrykk</translation>
@@ -4270,6 +4289,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Åpne alle i &amp;nye vinduer}=1{Åpne i et &amp;nytt vindu}other{Åpne alle (#) i &amp;nye vinduer}}</translation>
 <translation id="7434509671034404296">Utvikler</translation>
 <translation id="7436921188514130341">Æsj! Det oppsto en feil under navneendringen.</translation>
+<translation id="7437427339141948518">Varsler er av</translation>
 <translation id="7438976808740265764">Etter desember 2020 støttes ikke Flash Player lenger.</translation>
 <translation id="7441736921018636843">For å endre denne innstillingen, <ph name="BEGIN_LINK" />tilbakestill synkronisering<ph name="END_LINK" /> for å fjerne passordfrasen din for synkronisering</translation>
 <translation id="7441830548568730290">Andre brukere</translation>
@@ -4397,6 +4417,7 @@
 <translation id="7643932971554933646">Vil du la nettstedet se filene?</translation>
 <translation id="7644543211198159466">Farge og tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (eier)</translation>
+<translation id="7645681574855902035">Avbryter sikkerhetskopiering av Linux</translation>
 <translation id="7647403192093989392">Ingen nylige aktiviteter</translation>
 <translation id="7648142322539582331">Koble til internett for å sette opp foreldrekontroll</translation>
 <translation id="7648992873808071793">lagre filer på denne enheten</translation>
@@ -4848,6 +4869,7 @@
 <translation id="8256319818471787266">Fido</translation>
 <translation id="8257950718085972371">Fortsett blokkering av kameratilgang</translation>
 <translation id="8259239505248583312">Sett i gang</translation>
+<translation id="8259556432390118667">Heksadesimal fargekode</translation>
 <translation id="8260126382462817229">Prøv å logge på igjen</translation>
 <translation id="8260864402787962391">Mus</translation>
 <translation id="8261378640211443080">Denne utvidelsen er ikke oppført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, og kan ha blitt lagt uten at du har vært klar over det.</translation>
@@ -5100,6 +5122,7 @@
 <translation id="8662911384982557515">endre startsiden din til: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome kan ikke angi bakgrunnsbilde.</translation>
 <translation id="8663099077749055505">Blokker alltid automatisk nedlasting av flere filer på <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Vil du vise varsler for dette nettstedet?</translation>
 <translation id="8664389313780386848">&amp;Vis sidekilde</translation>
 <translation id="8665180165765946056">Sikkerhetskopieringen er fullført</translation>
 <translation id="866611985033792019">Stol på dette sertifikatet for identifisering av e-postbrukere.</translation>
@@ -5389,6 +5412,7 @@
 <translation id="9065203028668620118">Endre</translation>
 <translation id="9066773882585798925">Få tekst lest opp</translation>
 <translation id="9066782832737749352">Tekst til tale</translation>
+<translation id="9068849894565669697">Velg farge</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-mus er tilkoblet</translation>
@@ -5426,6 +5450,7 @@
 <translation id="9131487537093447019">sende meldinger til og motta meldinger fra Bluetooth-enheter.</translation>
 <translation id="9134304429738380103">Ja, den er grei.</translation>
 <translation id="9137013805542155359">Vis original</translation>
+<translation id="9137157311132182254">Foretrukket søkemotor</translation>
 <translation id="9137916601698928395">Åpne linken som <ph name="USER" /></translation>
 <translation id="9138978632494473300">Legg til hurtigtaster til disse stedene:</translation>
 <translation id="9140067245205650184">Du bruker et funksjonsflagg som ikke støttes: <ph name="BAD_FLAG" />. Dette reduserer stabiliteten og sikkerheten.</translation>
@@ -5498,6 +5523,7 @@
 <translation id="962802172452141067">Trestrukturen for bokmerkemappen</translation>
 <translation id="964286338916298286">IT-administratoren din har deaktivert ekstrafunksjoner for Chrome på enheten din.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Program}other{Programmer}}</translation>
+<translation id="965211523698323809">Send og motta SMS-er fra <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Dette logger deg av Google-kontoene dine. Endringer i bokmerkene, loggen, passordene og andre innstillinger du har, blir ikke lenger synkronisert med Google-kontoen din. Data som allerede er lagret i Google-kontoen din, blir imidlertid værende og kan administreres ved hjelp av <ph name="BEGIN_LINK" />Google Oversikt<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Lagrede data</translation>
 <translation id="968000525894980488">Slå på Google Play Tjenester.</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 2705430e..06800c11 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Zażądano operacji odczytu lub zapisu z nieprawidłowym offsetem w: „<ph name="DEVICE_NAME" />”.</translation>
 <translation id="1097658378307015415">Zanim się zalogujesz, wybierz tryb gościa, aby aktywować sieć <ph name="NETWORK_ID" />.</translation>
 <translation id="1103523840287552314">Zawsze tłumacz z języka: <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Nie udało się wykryć Twojej karty SIM</translation>
 <translation id="1108600514891325577">&amp;Zatrzymaj</translation>
 <translation id="1110155001042129815">Zaczekaj</translation>
 <translation id="1112420131909513020">Karta w tle używa Bluetootha</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Synchronizację wyłączył administrator.</translation>
 <translation id="2127372758936585790">Ładowarka o małej mocy</translation>
 <translation id="212862741129535676">Stan częstotliwości – procentowo</translation>
+<translation id="212876957201860463">Przygotowuję konfigurację urządzenia komórkowego…</translation>
 <translation id="2129825002735785149">Aktualizuj wtyczkę</translation>
 <translation id="2131077480075264">Nie można zainstalować elementu „<ph name="APP_NAME" />”, bo nie zezwala na to element „<ph name="IMPORT_NAME" />”</translation>
 <translation id="21354425047973905">Ukryj kody PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Dane zostały zaszyfrowane Twoim hasłem Google z <ph name="TIME" />.
           Nie obejmuje to form płatności ani adresów w Google Pay.</translation>
 <translation id="2419706071571366386">Ze względów bezpieczeństwa wyloguj się na czas, gdy nie korzystasz z komputera.</translation>
+<translation id="2422125132043002186">Przywracanie Linuksa zostało anulowane</translation>
 <translation id="2423578206845792524">Zapisz gra&amp;fikę jako...</translation>
 <translation id="2428510569851653187">Opisz, co robiłeś, gdy wystąpiła awaria karty</translation>
 <translation id="2431027948063157455">Nie udało się załadować Asystenta Google. Spróbuj ponownie.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Otwieram wejście audio i wideo</translation>
 <translation id="3090819949319990166">Nie można skopiować zewnętrznego pliku CRX jako <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Sparowano „<ph name="DEVICE_NAME" />”</translation>
+<translation id="3092699946856346803">Włóż kartę SIM i spróbuj ponownie</translation>
 <translation id="3101709781009526431">Data i godzina</translation>
 <translation id="310671807099593501">Strona używa Bluetootha</translation>
 <translation id="3115147772012638511">Czekam na pamięć podręczną...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Pliki i programy do kwarantanny:</translation>
 <translation id="3282568296779691940">Zaloguj się w Chrome</translation>
 <translation id="3285322247471302225">Nowa &amp;karta</translation>
+<translation id="3286654161521615710">Używana w przeglądarce Chrome i w Menu z aplikacjami na urządzeniu <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Przeglądaj i usuwaj dane logowania zapisane na kluczu bezpieczeństwa</translation>
 <translation id="3288047731229977326">Rozszerzenia działające w trybie dewelopera mogą uszkodzić Twój komputer. Jeśli nie jesteś deweloperem, wyłącz je dla bezpieczeństwa.</translation>
 <translation id="3289856944988573801">Jeśli chcesz sprawdzić aktualizacje, użyj Ethernetu lub Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Certyfikat serwera SSL</translation>
 <translation id="3775705724665058594">Wyślij na swoje urządzenia</translation>
 <translation id="3776796446459804932">To rozszerzenie narusza zasady Chrome Web Store.</translation>
+<translation id="3777483481409781352">Nie udało się aktywować urządzenia komórkowego</translation>
 <translation id="3777806571986431400">Włączono rozszerzenie</translation>
 <translation id="3778152852029592020">Pobieranie zostało anulowane.</translation>
 <translation id="3778208826288864398">Klucz bezpieczeństwa jest zablokowany z powodu wprowadzenia nieprawidłowego kodu PIN zbyt wiele razy. Musisz zresetować klucz bezpieczeństwa.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Czarno-biały</translation>
 <translation id="4136203100490971508">Podświetlenie nocne wyłączy się automatycznie o wschodzie słońca</translation>
 <translation id="4138267921960073861">Pokaż nazwy użytkowników i zdjęcia na stronie logowania</translation>
+<translation id="4142052906269098341">Odblokowuj urządzenie <ph name="DEVICE_TYPE" /> telefonem. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Lepsza jakość filmów i dłuższy czas pracy na baterii. Filmy będą odtwarzane tylko na ekranie obsługującym Cast.</translation>
 <translation id="4145922204387553806">Pozwól Asystentowi wyświetlić więcej informacji związanych z tym, co masz na ekranie</translation>
 <translation id="4146026355784316281">Zawsze otwieraj w przeglądarce systemowej</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Eksportuj</translation>
 <translation id="42137655013211669">Serwer zabronił dostępu do tego zasobu.</translation>
 <translation id="4215350869199060536">Ups! W nazwie są niedozwolone znaki.</translation>
+<translation id="4220648711404560261">Podczas aktywowania wystąpił błąd.</translation>
 <translation id="4225397296022057997">We wszystkich witrynach</translation>
 <translation id="4232375817808480934">Konfigurowanie Kerberos</translation>
 <translation id="4235200303672858594">Cały ekran</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Ustawienia pamięci zewnętrznej</translation>
 <translation id="447252321002412580">Pomóż w ulepszaniu funkcji i działania Chrome</translation>
 <translation id="4474155171896946103">Dodaj wszystkie karty do zakładek...</translation>
+<translation id="4474461121892222090">Aktywowanie mobilnej transmisji danych może potrwać do 15 minut.</translation>
 <translation id="4475552974751346499">Przeszukaj pobrane pliki</translation>
 <translation id="4476590490540813026">Sportowiec</translation>
 <translation id="4477015793815781985">Uwzględnij klawisze Ctrl, Alt lub ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Konfiguruję maszynę wirtualną. Może to potrwać kilka minut.</translation>
 <translation id="4480590691557335796">Chrome może znaleźć i usunąć szkodliwe oprogramowanie na Twoim komputerze</translation>
 <translation id="4481530544597605423">Niesparowane urządzenia</translation>
+<translation id="4483579413421375386">Pokaż ze strony</translation>
 <translation id="4495419450179050807">Nie pokazuj na tej stronie</translation>
 <translation id="4500114933761911433">We wtyczce <ph name="PLUGIN_NAME" /> wystąpił poważny błąd</translation>
 <translation id="450099669180426158">Ikona wykrzyknika</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Wpisz PIN urządzenia „<ph name="DEVICE_NAME" />”:</translation>
 <translation id="4648491805942548247">Niewystarczające uprawnienia</translation>
 <translation id="4648499713050786492">Aby dodać osobę, odblokuj swój profil.</translation>
+<translation id="4650591383426000695">Odłącz telefon od urządzenia <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Nie udało się załadować komponentu online z zasobami trybu demonstracyjnego.</translation>
 <translation id="465878909996028221">Przekierowania przeglądarki działają tylko z protokołami http, https i file.</translation>
 <translation id="4659077111144409915">Konto główne</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Podłącz urządzenie <ph name="DEVICE_TYPE" /> do źródła zasilania.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Za&amp;pisz dźwięk jako...</translation>
+<translation id="5117139026559873716">Odłącz telefon od urządzenia <ph name="DEVICE_TYPE" />. Te urządzenia nie będą już łączyć się ze sobą automatycznie.</translation>
 <translation id="5117427536932535467">Motywy i tapety</translation>
 <translation id="5117625797180141189">Wydrukowano: <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Monitorowanie działania innych rozszerzeń, w tym otwieranych adresów URL</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Indeks – <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu zawierające ukryte zakładki</translation>
 <translation id="5464632865477611176">Uruchom tym razem</translation>
+<translation id="5464660706533281090">Dziecko nie może zmienić tego ustawienia.</translation>
 <translation id="5466374726908360271">&amp;Wklej i wyszukaj „<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Witaj. Jestem Twoim głosem do czytania tekstu.</translation>
 <translation id="5473333559083690127">Ponownie wpisz nowy kod PIN</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Sparuj</translation>
 <translation id="5821565227679781414">Utwórz skrót</translation>
 <translation id="5825412242012995131">Włącz (zalecane)</translation>
+<translation id="5826395379250998812">Połącz urządzenie <ph name="DEVICE_TYPE" /> z telefonem. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nazwa pospolita (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Trwa drukowanie...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Wybrane dane zostały usunięte z Chrome i synchronizowanych urządzeń. Inne rodzaje historii przeglądania, takie jak wyszukiwania i aktywność w innych usługach Google, mogą być nadal dostępne na Twoim koncie Google na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Komentarz do certyfikatu firmy Netscape</translation>
 <translation id="6129953537138746214">Spacja</translation>
+<translation id="6130024555057767093">Zablokowane są powiadomienia ze wszystkich stron internetowych oprócz tych, na które zezwalasz.</translation>
 <translation id="6136114942382973861">Zamknij pasek pobranych plików</translation>
 <translation id="6137767437444130246">Certyfikat użytkownika</translation>
 <translation id="6138680304137685902">Podpis X9.62 ECDSA z SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Zawsze otwieraj ten typ linków w powiązanej aplikacji</translation>
 <translation id="6207282396926186323">Zainstaluj <ph name="APP_NAME" /> (aplikacja na Linuksa)</translation>
 <translation id="6207937957461833379">Kraj/region</translation>
+<translation id="6208521041562685716">Aktywuję mobilną transmisję danych</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: synchronizacja nie działa</translation>
 <translation id="6212039847102026977">Pokaż zaawansowane właściwości sieci</translation>
 <translation id="6212168817037875041">Wyłącz ekran</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Bardzo mała</translation>
 <translation id="6780439250949340171">zarządzać innymi ustawieniami</translation>
 <translation id="6781284683813954823">Link do doodla</translation>
+<translation id="6781978626986383437">Tworzenie kopii zapasowej Linuksa zostało anulowane</translation>
 <translation id="6782111308708962316">Nie pozwalaj witrynom innych firm zapisywać ani odczytywać danych z plików cookie</translation>
 <translation id="6786747875388722282">Rozszerzenia</translation>
 <translation id="6787839852456839824">Skróty klawiszowe</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Na tym urządzeniu możesz używać <ph name="NUMBER_OF_APPS" /> aplikacji, które znaleźliśmy na Twoim koncie.</translation>
 <translation id="7199158086730159431">Uzyskaj p&amp;omoc</translation>
 <translation id="7200083590239651963">Wybierz konfigurację</translation>
+<translation id="7201042526153088083">Instaluj aplikacje i gry z Google Play na urządzeniu <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Więcej informacji&lt;/a&gt;</translation>
 <translation id="720110658997053098">Trwale utrzymuj to urządzenie w trybie kiosku</translation>
 <translation id="7201118060536064622">Element „<ph name="DELETED_ITEM_NAME" />” został usunięty</translation>
 <translation id="7201420661433230412">Wyświetl pliki</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Wymagana technologia EVDO</translation>
 <translation id="7230787553283372882">Dostosuj rozmiar tekstu</translation>
 <translation id="7232750842195536390">Nie udało się zmienić nazwy</translation>
+<translation id="7234010996000898150">Anuluję przywracanie Linuksa</translation>
 <translation id="7235716375204803342">Pobieram aktywność…</translation>
 <translation id="7235737137505019098">Na Twoim kluczu bezpieczeństwa nie ma wystarczającej ilości miejsca na kolejne konta.</translation>
 <translation id="7238585580608191973">Odcisk cyfrowy SHA-256</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Otwórz wszystkie w &amp;nowym oknie}=1{Otwórz w &amp;nowym oknie}few{Otwórz wszystkie (#) w &amp;nowym oknie}many{Otwórz wszystkie (#) w &amp;nowym oknie}other{Otwórz wszystkie (#) w &amp;nowym oknie}}</translation>
 <translation id="7434509671034404296">Deweloper</translation>
 <translation id="7436921188514130341">Kurza twarz! Podczas zmiany nazwy wystąpił błąd.</translation>
+<translation id="7437427339141948518">Powiadomienia wyłączone</translation>
 <translation id="7438976808740265764">Z końcem grudnia 2020 roku Flash Player nie będzie już obsługiwany.</translation>
 <translation id="7441736921018636843">Aby zmienić to ustawienie, <ph name="BEGIN_LINK" />zresetuj synchronizację<ph name="END_LINK" />, by usunąć hasło synchronizacji</translation>
 <translation id="7441830548568730290">Inni użytkownicy</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Zezwolić witrynie na wyświetlanie plików?</translation>
 <translation id="7644543211198159466">Kolor i motyw</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (właściciel)</translation>
+<translation id="7645681574855902035">Anuluję tworzenie kopii zapasowej Linuksa</translation>
 <translation id="7647403192093989392">Brak ostatniej aktywności</translation>
 <translation id="7648142322539582331">Połącz się z internetem, by skonfigurować kontrolę rodzicielską</translation>
 <translation id="7648992873808071793">Zapisywanie plików na tym urządzeniu</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Tofik</translation>
 <translation id="8257950718085972371">Nadal blokuj dostęp do kamery</translation>
 <translation id="8259239505248583312">Rozpocznij</translation>
+<translation id="8259556432390118667">Wartość szesnastkowego kodu koloru</translation>
 <translation id="8260126382462817229">Spróbuj zalogować się jeszcze raz</translation>
 <translation id="8260864402787962391">Mysz</translation>
 <translation id="8261378640211443080">To rozszerzenie nie jest oferowane w <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i mogło zostać dodane bez Twojej wiedzy.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Zmiana strony głównej na: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome nie może ustawić tapety.</translation>
 <translation id="8663099077749055505">Zawsze blokuj wiele pobierań automatycznych na <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Pokazywać powiadomienia z tej strony?</translation>
 <translation id="8664389313780386848">&amp;Wyświetl źródło strony</translation>
 <translation id="8665180165765946056">Kopia zapasowa utworzona</translation>
 <translation id="866611985033792019">Ufaj temu certyfikatowi przy identyfikowaniu użytkowników poczty e-mail</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Edytuj</translation>
 <translation id="9066773882585798925">Czytanie tekstu na głos</translation>
 <translation id="9066782832737749352">Zamiana tekstu na mowę</translation>
+<translation id="9068849894565669697">Wybierz kolor</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Podłączono mysz USB</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Wysyłanie wiadomości do urządzeń Bluetooth i odbieranie ich z tych urządzeń</translation>
 <translation id="9134304429738380103">Tak, zgadzam się.</translation>
 <translation id="9137013805542155359">Pokaż tekst oryginalny</translation>
+<translation id="9137157311132182254">Preferowana wyszukiwarka</translation>
 <translation id="9137916601698928395">Otwórz link jako <ph name="USER" /></translation>
 <translation id="9138978632494473300">Dodaj skróty do tych miejsc:</translation>
 <translation id="9140067245205650184">Korzystasz z nieobsługiwanej flagi funkcji: <ph name="BAD_FLAG" />. Ma to negatywny wpływ na stabilność i zabezpieczenia.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Drzewo folderów zakładek</translation>
 <translation id="964286338916298286">Twój administrator IT wyłączył możliwość korzystania z bonusów Chrome na tym urządzeniu.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplikacja}few{Aplikacje}many{Aplikacje}other{Aplikacje}}</translation>
+<translation id="965211523698323809">Wysyłanie i odbieranie SMS-ów na urządzeniu <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Spowoduje to wylogowanie Cię z Twoich kont Google. Zmiany w zakładkach, historii, hasłach i innych ustawieniach nie będą już synchronizowane z Twoim kontem Google. Dane już zapisane na koncie Google pozostaną na nim. Możesz nimi zarządzać w <ph name="BEGIN_LINK" />Panelu Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Zapisane dane</translation>
 <translation id="968000525894980488">Włącz Usługi Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 9f44801..447189c3 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">A operação de leitura ou escrita foi solicitada com um deslocamento inválido em: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Antes de fazer login, entre como Visitante para ativar a rede <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Sempre traduzir do <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Não foi possível detectar o chip</translation>
 <translation id="1108600514891325577">&amp;Parar</translation>
 <translation id="1110155001042129815">Aguarde</translation>
 <translation id="1112420131909513020">A guia em segundo plano está usando o Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">A sincronização foi desativada pelo administrador.</translation>
 <translation id="2127372758936585790">Carregador de baixa potência</translation>
 <translation id="212862741129535676">Porcentagem de ocupação em estado de frequência</translation>
+<translation id="212876957201860463">Preparando para configurar seu dispositivo…</translation>
 <translation id="2129825002735785149">Atualizar plug-in</translation>
 <translation id="2131077480075264">Não foi possível instalar o app "<ph name="APP_NAME" />" porque ele não é permitido por "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Ocultar PINs</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Dados foram criptografados com sua senha do Google a partir de
           <ph name="TIME" />. Isso não inclui formas de pagamento e endereços do Google Pay.</translation>
 <translation id="2419706071571366386">Por segurança, saia da sua conta quando seu computador não estiver sendo usado.</translation>
+<translation id="2422125132043002186">Restauração do Linux cancelada</translation>
 <translation id="2423578206845792524">&amp;Salvar imagem como...</translation>
 <translation id="2428510569851653187">Descrever o que você estava fazendo quando a guia travou</translation>
 <translation id="2431027948063157455">Não foi possível carregar o Google Assistente. Verifique sua conexão de rede e tente novamente.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Acessando entrada de áudio e vídeo</translation>
 <translation id="3090819949319990166">Não foi possível copiar o arquivo externo crx em <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" pareado</translation>
+<translation id="3092699946856346803">Insira seu chip e tente novamente</translation>
 <translation id="3101709781009526431">Data e hora</translation>
 <translation id="310671807099593501">O site está usando o Bluetooth</translation>
 <translation id="3115147772012638511">Aguardando o cache...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Arquivos e programas a serem colocados em quarentena:</translation>
 <translation id="3282568296779691940">Fazer login no Google Chrome</translation>
 <translation id="3285322247471302225">Nova &amp;guia</translation>
+<translation id="3286654161521615710">Usado pelo navegador Chrome e pelo acesso rápido do<ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Ver e excluir os dados de login armazenados na sua chave de segurança</translation>
 <translation id="3288047731229977326">Extensões executadas no modo de desenvolvedor podem prejudicar o computador. Se você não for desenvolvedor, para sua segurança, desative essas extensões que estão sendo executadas no modo de desenvolvedor.</translation>
 <translation id="3289856944988573801">Para verificar se há atualizações, utilize Ethernet ou Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Certificado de servidor SSL</translation>
 <translation id="3775705724665058594">Enviar para seus dispositivos</translation>
 <translation id="3776796446459804932">Esta extensão viola a política da Chrome Web Store.</translation>
+<translation id="3777483481409781352">Não foi possível ativar o celular</translation>
 <translation id="3777806571986431400">Extensão ativada</translation>
 <translation id="3778152852029592020">O download foi cancelado.</translation>
 <translation id="3778208826288864398">A chave de segurança está bloqueada porque o PIN incorreto foi inserido muitas vezes. Redefina a chave de segurança.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Preto e branco</translation>
 <translation id="4136203100490971508">O Modo noturno será desativado automaticamente ao amanhecer</translation>
 <translation id="4138267921960073861">Mostrar nomes de usuários e fotos na tela de login</translation>
+<translation id="4142052906269098341">Desbloqueie o <ph name="DEVICE_TYPE" /> com seu smartphone. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Tenha uma melhor qualidade de vídeo e economize bateria. Os vídeos serão reproduzidos apenas na tela compatível com Cast.</translation>
 <translation id="4145922204387553806">Permitir que o Assistente mostre informações relacionadas ao que está na sua tela</translation>
 <translation id="4146026355784316281">Sempre abrir com visualizador do sistema</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Exportar</translation>
 <translation id="42137655013211669">O acesso a este recurso foi proibido pelo servidor.</translation>
 <translation id="4215350869199060536">Ops, o nome contém símbolos inválidos.</translation>
+<translation id="4220648711404560261">Ocorreu um erro durante a ativação.</translation>
 <translation id="4225397296022057997">Em todos os sites</translation>
 <translation id="4232375817808480934">Configurar o Kerberos</translation>
 <translation id="4235200303672858594">Tela cheia</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Preferências de armazenamento externo</translation>
 <translation id="447252321002412580">Ajude a melhorar os recursos e o desempenho do Chrome</translation>
 <translation id="4474155171896946103">Adicionar todas as guias aos favoritos...</translation>
+<translation id="4474461121892222090">A ativação dos dados móveis pode levar até 15 minutos.</translation>
 <translation id="4475552974751346499">Pesquisar downloads</translation>
 <translation id="4476590490540813026">Atleta</translation>
 <translation id="4477015793815781985">Inclua Ctrl, Alt ou ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Configurando a máquina virtual. Isso pode levar alguns minutos.</translation>
 <translation id="4480590691557335796">O Chrome pode localizar softwares nocivos no seu computador e removê-los</translation>
 <translation id="4481530544597605423">Dispositvos não pareados</translation>
+<translation id="4483579413421375386">Mostrar para o site</translation>
 <translation id="4495419450179050807">Não mostrar esta página</translation>
 <translation id="4500114933761911433">O plug-in <ph name="PLUGIN_NAME" /> falhou</translation>
 <translation id="450099669180426158">Ícone de ponto de exclamação</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Insira o PIN para "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Permissões insuficientes</translation>
 <translation id="4648499713050786492">Desbloqueie seu perfil antes de adicionar uma pessoa.</translation>
+<translation id="4650591383426000695">Desconecte seu smartphone do <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Não foi possível carregar o componente on-line com recursos do modo de demonstração.</translation>
 <translation id="465878909996028221">Apenas os protocolos http, https e file são compatíveis com redirecionamentos do navegador.</translation>
 <translation id="4659077111144409915">Conta principal</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Conecte seu <ph name="DEVICE_TYPE" /> a uma fonte de energia.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sal&amp;var áudio como...</translation>
+<translation id="5117139026559873716">Desconecte o smartphone do <ph name="DEVICE_TYPE" />. Eles não serão mais conectados automaticamente.</translation>
 <translation id="5117427536932535467">Temas e planos de fundo</translation>
 <translation id="5117625797180141189">Impressão do documento <ph name="DOCUMENT_NAME" /> concluída</translation>
 <translation id="5117930984404104619">Monitorar o comportamento de outras extensões, incluindo URLs visitados</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Índice de <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu contendo favoritos ocultos</translation>
 <translation id="5464632865477611176">Executar esta vez</translation>
+<translation id="5464660706533281090">Essa configuração não pode ser alterada por um usuário menor de idade.</translation>
 <translation id="5466374726908360271">Colar e pesquisar “<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Olá! Eu sou sua voz para conversão de texto em voz.</translation>
 <translation id="5473333559083690127">Digite o novo PIN novamente</translation>
@@ -3205,6 +3218,7 @@
 <translation id="5817918615728894473">Parear</translation>
 <translation id="5821565227679781414">Criar atalho</translation>
 <translation id="5825412242012995131">Ativado (recomendado)</translation>
+<translation id="5826395379250998812">Conecte seu <ph name="DEVICE_TYPE" /> ao smartphone. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nome comum (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Imprimindo...</translation>
@@ -3411,7 +3425,7 @@
 <translation id="6107012941649240045">Emitido para</translation>
 <translation id="6112294629795967147">Toque para redimensionar</translation>
 <translation id="6112727384379533756">Adicionar um tíquete</translation>
-<translation id="6112931163620622315">Verificar o smartphone</translation>
+<translation id="6112931163620622315">Verifique seu smartphone</translation>
 <translation id="6112952769866305444">Editar pessoa, <ph name="PROFILE_NAME" />, <ph name="USERNAME" /></translation>
 <translation id="6113942107547980621">Para usar o Smart Lock, acesse o perfil de usuário principal no smartphone</translation>
 <translation id="6116338172782435947">Ver os textos e imagens copiados para a área de transferência</translation>
@@ -3426,6 +3440,7 @@
 <translation id="6129691635767514872">Os dados selecionados foram removidos do Chrome e dos dispositivos sincronizados. É possível que sua Conta do Google tenha outras formas de histórico de navegação, como pesquisas e atividades de outros serviços do Google em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Comentário do certificado do Netscape</translation>
 <translation id="6129953537138746214">Espaço</translation>
+<translation id="6130024555057767093">No momento, as notificações estão bloqueadas para todos os sites, exceto para os sites permitidos individualmente.</translation>
 <translation id="6136114942382973861">Fechar barra de downloads</translation>
 <translation id="6137767437444130246">Certificado do usuário</translation>
 <translation id="6138680304137685902">Assinatura X9.62 ECDSA com SHA-384</translation>
@@ -3472,6 +3487,7 @@
 <translation id="620722923698527029">Abrir sempre esse tipo de link no app associado</translation>
 <translation id="6207282396926186323">Instalar o <ph name="APP_NAME" /> (app Linux)</translation>
 <translation id="6207937957461833379">País/Região</translation>
+<translation id="6208521041562685716">Ativando dados móveis</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: a sincronização não está funcionando</translation>
 <translation id="6212039847102026977">Mostrar propriedades de rede avançadas</translation>
 <translation id="6212168817037875041">Desligar a tela</translation>
@@ -3833,6 +3849,7 @@
 <translation id="677965093459947883">Muito pequeno</translation>
 <translation id="6780439250949340171">gerenciar outras configurações</translation>
 <translation id="6781284683813954823">Link do doodle</translation>
+<translation id="6781978626986383437">Backup do Linux cancelado</translation>
 <translation id="6782111308708962316">Impedir sites de terceiros de salvar e ler dados de cookies</translation>
 <translation id="6786747875388722282">Extensões</translation>
 <translation id="6787839852456839824">Atalhos do teclado</translation>
@@ -4120,6 +4137,7 @@
 <translation id="7197632491113152433">Encontramos <ph name="NUMBER_OF_APPS" /> apps da sua conta que podem ser usados neste dispositivo.</translation>
 <translation id="7199158086730159431">Conseguir &amp;ajuda</translation>
 <translation id="7200083590239651963">Selecionar configuração</translation>
+<translation id="7201042526153088083">Instale apps e jogos do Google Play no <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Saiba mais&lt;/a&gt;</translation>
 <translation id="720110658997053098">Manter este dispositivo permanentemente no modo quiosque</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' excluído</translation>
 <translation id="7201420661433230412">Visualizar arquivos</translation>
@@ -4144,6 +4162,7 @@
 <translation id="7229570126336867161">EVDO ausente</translation>
 <translation id="7230787553283372882">Personalizar o tamanho do texto</translation>
 <translation id="7232750842195536390">Falha na renomeação</translation>
+<translation id="7234010996000898150">Cancelando restauração do Linux</translation>
 <translation id="7235716375204803342">Buscando atividades…</translation>
 <translation id="7235737137505019098">Sua chave de segurança não tem espaço suficiente para mais contas.</translation>
 <translation id="7238585580608191973">Assinatura digital SHA-256</translation>
@@ -4279,6 +4298,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Abrir tudo em &amp;Nova janela}=1{Abrir em &amp;Nova janela}one{Abrir tudo (#) em &amp;Nova janela}other{Abrir tudo (#) em &amp;Nova janela}}</translation>
 <translation id="7434509671034404296">Desenvolvedor</translation>
 <translation id="7436921188514130341">Ah, não! Ocorreu um erro durante a renomeação.</translation>
+<translation id="7437427339141948518">Notificações desativadas</translation>
 <translation id="7438976808740265764">Não haverá mais compatibilidade com Flash Player a partir de dezembro de 2020.</translation>
 <translation id="7441736921018636843">Para mudar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" /> e remova sua senha longa de sincronização</translation>
 <translation id="7441830548568730290">Outros usuários</translation>
@@ -4408,6 +4428,7 @@
 <translation id="7643932971554933646">Permitir que o site veja arquivos?</translation>
 <translation id="7644543211198159466">Cor e tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (proprietário)</translation>
+<translation id="7645681574855902035">Cancelando backup do Linux</translation>
 <translation id="7647403192093989392">Nenhuma atividade recente</translation>
 <translation id="7648142322539582331">Conectar à Internet para configurar o controle dos pais</translation>
 <translation id="7648992873808071793">Armazenar arquivos neste dispositivo</translation>
@@ -4859,6 +4880,7 @@
 <translation id="8256319818471787266">Totó</translation>
 <translation id="8257950718085972371">Continuar bloqueando o acesso à câmera</translation>
 <translation id="8259239505248583312">Vamos lá</translation>
+<translation id="8259556432390118667">Valor de cor hexadecimal</translation>
 <translation id="8260126382462817229">Tente fazer login novamente</translation>
 <translation id="8260864402787962391">Mouse</translation>
 <translation id="8261378640211443080">Esta extensão não está listada na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e pode ter sido adicionada sem seu conhecimento.</translation>
@@ -5111,6 +5133,7 @@
 <translation id="8662911384982557515">Alterar sua página inicial para: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">O Google Chrome não pode definir o plano de fundo.</translation>
 <translation id="8663099077749055505">Sempre bloquear vários downloads automáticos em <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Mostrar notificações para este site?</translation>
 <translation id="8664389313780386848">&amp;Exibir código fonte da página</translation>
 <translation id="8665180165765946056">Backup concluído</translation>
 <translation id="866611985033792019">Confiar neste certificado para identificar usuários de e-mail</translation>
@@ -5400,6 +5423,7 @@
 <translation id="9065203028668620118">Editar</translation>
 <translation id="9066773882585798925">Ouvir o texto lido em voz alta</translation>
 <translation id="9066782832737749352">Conversão de texto em voz</translation>
+<translation id="9068849894565669697">Selecionar cor</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB conectado</translation>
@@ -5437,6 +5461,7 @@
 <translation id="9131487537093447019">Enviar mensagens para e receber mensagens de dispositivos Bluetooth.</translation>
 <translation id="9134304429738380103">Sim, vamos lá.</translation>
 <translation id="9137013805542155359">Mostrar original</translation>
+<translation id="9137157311132182254">Mecanismo de pesquisa preferido</translation>
 <translation id="9137916601698928395">Abrir link como <ph name="USER" /></translation>
 <translation id="9138978632494473300">Adiciona atalhos aos seguintes lugares:</translation>
 <translation id="9140067245205650184">Sinalizador de recurso incompatível usado: <ph name="BAD_FLAG" />. Estabilidade e segurança afetadas.</translation>
@@ -5509,6 +5534,7 @@
 <translation id="962802172452141067">Árvore de pastas de favoritos</translation>
 <translation id="964286338916298286">Seu administrador de TI desativou os Goodies do Chrome para seu dispositivo.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplicativo}one{Aplicativo}other{Aplicativos}}</translation>
+<translation id="965211523698323809">Envie e receba mensagens de texto no <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Isso desconectará você das suas Contas do Google. As alterações feitas nos seus favoritos, histórico, senhas e outras configurações não serão mais sincronizadas com sua Conta do Google. No entanto, os dados já existentes continuarão armazenados na Conta do Google e poderão ser gerenciados no <ph name="BEGIN_LINK" />Painel do Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Dados armazenados</translation>
 <translation id="968000525894980488">Ative o Google Play Services.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index cfe775a..17805c3 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Foi solicitada uma operação de leitura ou de escrita com um desvio inválido em: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Antes de iniciar sessão, entre como Convidado para ativar a rede <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Traduzir sempre <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Não foi possível detetar o cartão SIM</translation>
 <translation id="1108600514891325577">&amp;Parar</translation>
 <translation id="1110155001042129815">Esperar</translation>
 <translation id="1112420131909513020">O separador em segundo plano está a utilizar o Bluetooth.</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">A sincronização foi desativada pelo gestor.</translation>
 <translation id="2127372758936585790">Carregador de baixo consumo</translation>
 <translation id="212862741129535676">Percentagem de ocupação no estado de frequência</translation>
+<translation id="212876957201860463">A preparar a configuração do dispositivo móvel…</translation>
 <translation id="2129825002735785149">Atualizar plug-in</translation>
 <translation id="2131077480075264">Não é possível instalar "<ph name="APP_NAME" />", pois não é permitido por "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Ocultar PINs</translation>
@@ -955,6 +957,7 @@
 <translation id="2413749388954403953">Alterar a interface de utilizador dos marcadores</translation>
 <translation id="241727068219398187">Os dados foram encriptados com a sua palavra-passe do Google em <ph name="TIME" />. Não estão incluídos métodos de pagamento e endereços do Google Pay.</translation>
 <translation id="2419706071571366386">Por motivos de segurança, termine a sessão quando não estiver a utilizar o computador.</translation>
+<translation id="2422125132043002186">Restauro do Linux cancelado</translation>
 <translation id="2423578206845792524">Guard&amp;ar imagem como...</translation>
 <translation id="2428510569851653187">Descreva o que estava a fazer quando o separador falhou</translation>
 <translation id="2431027948063157455">Não foi possível carregar o Assistente Google. Verifique a sua ligação à rede e tente novamente.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">A aceder à entrada de áudio e de vídeo</translation>
 <translation id="3090819949319990166">Não é possível copiar o ficheiro crx externo para <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" sincronizado</translation>
+<translation id="3092699946856346803">Introduza o SIM e tente novamente</translation>
 <translation id="3101709781009526431">Data e hora</translation>
 <translation id="310671807099593501">O site está a utilizar o Bluetooth.</translation>
 <translation id="3115147772012638511">A aguardar pela cache...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Ficheiros e programas a colocar em quarentena:</translation>
 <translation id="3282568296779691940">Iniciar sessão no Chrome</translation>
 <translation id="3285322247471302225">Novo &amp;Separador</translation>
+<translation id="3286654161521615710">Utilizado pelo navegador Chrome e pelo iniciador do <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Veja e elimine os dados de início de sessão armazenados na sua chave de segurança.</translation>
 <translation id="3288047731229977326">As extensões que funcionam no modo de programador podem danificar o seu computador. Se não é programador, deverá desativar as extensões que sejam executadas neste modo para se manter protegido.</translation>
 <translation id="3289856944988573801">Para verificar se existem atualizações, utilize Ethernet ou Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Certificado de servidor SSL</translation>
 <translation id="3775705724665058594">Envie para os seus dispositivos</translation>
 <translation id="3776796446459804932">Esta extensão viola a política da Chrome Web Store.</translation>
+<translation id="3777483481409781352">Não foi possível ativar o dispositivo móvel</translation>
 <translation id="3777806571986431400">Extensão Ativada</translation>
 <translation id="3778152852029592020">A transferência foi cancelada.</translation>
 <translation id="3778208826288864398">A chave de segurança está bloqueada porque foi introduzido o PIN incorreto demasiadas vezes. Tem de repor a chave de segurança.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Preto e branco</translation>
 <translation id="4136203100490971508">A Luz noturna irá desativar-se automaticamente ao nascer do sol.</translation>
 <translation id="4138267921960073861">Mostrar nomes de utilizador e fotos no ecrã de início de sessão</translation>
+<translation id="4142052906269098341">Desbloqueie o dispositivo <ph name="DEVICE_TYPE" /> com o seu telemóvel. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Obtenha uma melhor qualidade de vídeo e poupe autonomia da bateria. O vídeo é reproduzido apenas no seu ecrã compatível com o Cast.</translation>
 <translation id="4145922204387553806">Permitir que o Assistente mostre informações relacionadas com o que está a ser apresentado no ecrã</translation>
 <translation id="4146026355784316281">Abrir sempre com o visualizador do sistema</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Exportar</translation>
 <translation id="42137655013211669">O acesso a este recurso foi proibido pelo servidor.</translation>
 <translation id="4215350869199060536">Existem símbolos ilegais no nome.</translation>
+<translation id="4220648711404560261">Ocorreu um erro durante a ativação.</translation>
 <translation id="4225397296022057997">Em todos os sites</translation>
 <translation id="4232375817808480934">Configure o Kerberos</translation>
 <translation id="4235200303672858594">Ecrã inteiro</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Preferências de armazenamento externo</translation>
 <translation id="447252321002412580">Ajudar a melhorar as funcionalidades e o desempenho do Chrome</translation>
 <translation id="4474155171896946103">Adicionar todos os separadores aos marcadores...</translation>
+<translation id="4474461121892222090">Pode demorar até 15 minutos a concluir a ativação dos dados móveis.</translation>
 <translation id="4475552974751346499">Pesquisar transferências</translation>
 <translation id="4476590490540813026">Atleta</translation>
 <translation id="4477015793815781985">Inclua Ctrl, Alt ou ⌘.</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">A configurar a máquina virtual… Esta ação pode demorar alguns minutos.</translation>
 <translation id="4480590691557335796">O Chrome pode encontrar software prejudicial no seu computador e removê-lo.</translation>
 <translation id="4481530544597605423">Dispositivos dessincronizados</translation>
+<translation id="4483579413421375386">Mostrar do site</translation>
 <translation id="4495419450179050807">Não mostrar nesta página</translation>
 <translation id="4500114933761911433">O plug-in <ph name="PLUGIN_NAME" /> falhou.</translation>
 <translation id="450099669180426158">Ícone de ponto de exclamação</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Introduza o PIN para "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Permissões insuficientes</translation>
 <translation id="4648499713050786492">Desbloqueie o seu perfil antes de adicionar uma pessoa.</translation>
+<translation id="4650591383426000695">Desligue o telemóvel do dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Não foi possível carregar o componente online com os recursos do modo de demonstração.</translation>
 <translation id="465878909996028221">Apenas são suportados os protocolos HTTP, HTTPS e protocolos de ficheiros para redirecionamento do navegador.</translation>
 <translation id="4659077111144409915">Conta principal</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Ligue o seu <ph name="DEVICE_TYPE" /> a uma fonte de alimentação.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Gua&amp;rdar Áudio Como...</translation>
+<translation id="5117139026559873716">Desassocie o seu telemóvel do <ph name="DEVICE_TYPE" />. Deixarão de se ligar um ao outro automaticamente.</translation>
 <translation id="5117427536932535467">Temas e imagens de fundo</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> impresso com êxito</translation>
 <translation id="5117930984404104619">Monitorizar o comportamento de outras extensões, incluindo URLs visitados</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Índice de <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu com marcadores ocultos</translation>
 <translation id="5464632865477611176">Executar desta vez</translation>
+<translation id="5464660706533281090">Esta definição não pode ser alterada por um utilizador secundário.</translation>
 <translation id="5466374726908360271">Co&amp;lar e pesquisar "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Olá! Sou a sua voz para a síntese de voz.</translation>
 <translation id="5473333559083690127">Voltar a introduzir o PIN novo</translation>
@@ -3205,6 +3218,7 @@
 <translation id="5817918615728894473">Sincronizar</translation>
 <translation id="5821565227679781414">Criar Atalho</translation>
 <translation id="5825412242012995131">Ativado (recomendado)</translation>
+<translation id="5826395379250998812">Ligue o dispositivo <ph name="DEVICE_TYPE" /> ao telemóvel. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nome comum (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">A imprimir...</translation>
@@ -3426,6 +3440,7 @@
 <translation id="6129691635767514872">Os dados selecionados foram removidos do Chrome e dos dispositivos sincronizados. A sua Conta Google pode ter outras formas do histórico de navegação, tais como as pesquisas e a atividade de outros serviços Google em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Comentário do certificado Netscape</translation>
 <translation id="6129953537138746214">Espaço</translation>
+<translation id="6130024555057767093">As notificações estão atualmente bloqueadas para todos os sites, exceto os permitidos individualmente.</translation>
 <translation id="6136114942382973861">Fechar barra de transferências</translation>
 <translation id="6137767437444130246">Certificado do utilizador</translation>
 <translation id="6138680304137685902">Assinatura X9.62 ECDSA com SHA-384</translation>
@@ -3471,6 +3486,7 @@
 <translation id="620722923698527029">Abrir sempre estes tipos de link na aplicação associada</translation>
 <translation id="6207282396926186323">Instalar <ph name="APP_NAME" /> (aplicação do Linux)</translation>
 <translation id="6207937957461833379">País/Região</translation>
+<translation id="6208521041562685716">Os dados móveis estão a ser ativados</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: a sincronização não está a funcionar</translation>
 <translation id="6212039847102026977">Mostrar propriedades de rede avançadas</translation>
 <translation id="6212168817037875041">Desligar o ecrã</translation>
@@ -3832,6 +3848,7 @@
 <translation id="677965093459947883">Muito pequeno</translation>
 <translation id="6780439250949340171">gerir outras definições</translation>
 <translation id="6781284683813954823">Link do doodle</translation>
+<translation id="6781978626986383437">Cópia de segurança do Linux cancelada</translation>
 <translation id="6782111308708962316">Impedir que os Sites de terceiros guardem e leiam dados de cookies</translation>
 <translation id="6786747875388722282">Extensões</translation>
 <translation id="6787839852456839824">Atalhos de teclado</translation>
@@ -4119,6 +4136,7 @@
 <translation id="7197632491113152433">Encontrámos <ph name="NUMBER_OF_APPS" /> aplicações na sua conta que podem ser utilizadas neste dispositivo.</translation>
 <translation id="7199158086730159431">Obter a&amp;juda</translation>
 <translation id="7200083590239651963">Selecionar configuração</translation>
+<translation id="7201042526153088083">Instale aplicações e jogos do Google Play no dispositivo <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Saiba mais&lt;/a&gt;</translation>
 <translation id="720110658997053098">Manter este dispositivo permanentemente no modo quiosque</translation>
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" eliminado</translation>
 <translation id="7201420661433230412">Ver ficheiros</translation>
@@ -4143,6 +4161,7 @@
 <translation id="7229570126336867161">Requer EVDO</translation>
 <translation id="7230787553283372882">Personalizar o tamanho do texto</translation>
 <translation id="7232750842195536390">Falha ao mudar o nome</translation>
+<translation id="7234010996000898150">A cancelar o restauro do Linux…</translation>
 <translation id="7235716375204803342">A obter atividades…</translation>
 <translation id="7235737137505019098">A sua chave de segurança não tem espaço suficiente para mais contas.</translation>
 <translation id="7238585580608191973">Impressão digital SHA-256</translation>
@@ -4278,6 +4297,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Abrir todos numa &amp;nova janela}=1{Abrir numa &amp;nova janela}other{Abrir todos (#) numa &amp;nova janela}}</translation>
 <translation id="7434509671034404296">Programador</translation>
 <translation id="7436921188514130341">Ah, bolas! Ocorreu um erro durante a mudança de nome.</translation>
+<translation id="7437427339141948518">Notificações desativadas</translation>
 <translation id="7438976808740265764">O leitor de Flash deixará de ser suportado depois de dezembro de 2020.</translation>
 <translation id="7441736921018636843">Para alterar esta definição, <ph name="BEGIN_LINK" />reponha a sincronização<ph name="END_LINK" /> para remover a sua frase de acesso de sincronização</translation>
 <translation id="7441830548568730290">Outros utilizadores</translation>
@@ -4407,6 +4427,7 @@
 <translation id="7643932971554933646">Permite que o site veja ficheiros?</translation>
 <translation id="7644543211198159466">Cor e tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (proprietário)</translation>
+<translation id="7645681574855902035">A cancelar a cópia de segurança do Linux…</translation>
 <translation id="7647403192093989392">Não existem atividades recentes.</translation>
 <translation id="7648142322539582331">Ligue-se à Internet para configurar o controlo parental.</translation>
 <translation id="7648992873808071793">Armazenar ficheiros neste dispositivo</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Pantufa</translation>
 <translation id="8257950718085972371">Continuar a bloquear o acesso à câmara</translation>
 <translation id="8259239505248583312">Vamos lá</translation>
+<translation id="8259556432390118667">Valor de cor hexadecimal</translation>
 <translation id="8260126382462817229">Experimente iniciar sessão novamente</translation>
 <translation id="8260864402787962391">Rato</translation>
 <translation id="8261378640211443080">Esta extensão não está listada no <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e é possível que tenha sido adicionada sem o seu conhecimento.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Alterar a página inicial para: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">O Chrome não consegue definir a imagem de fundo.</translation>
 <translation id="8663099077749055505">Bloquear sempre as transferências automáticas múltiplas no <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Pretende mostrar as notificações deste site?</translation>
 <translation id="8664389313780386848">&amp;Ver fonte da página</translation>
 <translation id="8665180165765946056">Cópia de segurança concluída</translation>
 <translation id="866611985033792019">Confiar neste certificado para identificar utilizadores de email</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Editar</translation>
 <translation id="9066773882585798925">Ouvir o texto em voz alta</translation>
 <translation id="9066782832737749352">Síntese de voz</translation>
+<translation id="9068849894565669697">Selecionar cor</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Rato USB ligado</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Envie mensagens para e receba mensagens de dispositivos Bluetooth.</translation>
 <translation id="9134304429738380103">Sim, aceito.</translation>
 <translation id="9137013805542155359">Mostrar original</translation>
+<translation id="9137157311132182254">Motor de pesquisa preferido</translation>
 <translation id="9137916601698928395">Abrir link como <ph name="USER" /></translation>
 <translation id="9138978632494473300">Adicionar atalhos aos seguintes locais:</translation>
 <translation id="9140067245205650184">Está a utilizar um sinalizador de funcionalidade não suportado: <ph name="BAD_FLAG" />. A estabilidade e a segurança serão afetadas.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Árvore de pastas de marcadores</translation>
 <translation id="964286338916298286">O gestor de TI desativou os Extras do Chrome para o dispositivo.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplicação}other{Aplicações}}</translation>
+<translation id="965211523698323809">Envie e receba mensagens de texto com o <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Deste modo, termina sessão nas suas Contas Google. As alterações aos marcadores, ao histórico, às palavras-passe e a outras definições deixam de ser sincronizadas com a Conta Google. Contudo, os dados existentes permanecem armazenados na Conta Google e podem ser geridos no <ph name="BEGIN_LINK" />Painel de Controlo Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Dados armazenados</translation>
 <translation id="968000525894980488">Ative os Serviços do Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 91cf52e4..9949e05 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Operațiunea de citire sau de scriere a fost solicitată cu un decalaj nevalid pe: „<ph name="DEVICE_NAME" />”.</translation>
 <translation id="1097658378307015415">Înainte de a vă conecta, începeți o sesiune pentru invitați pentru activarea rețelei <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Tradu întotdeauna din <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Nu s-a detectat cardul SIM</translation>
 <translation id="1108600514891325577">&amp;Oprește</translation>
 <translation id="1110155001042129815">Așteaptă</translation>
 <translation id="1112420131909513020">O filă din fundal folosește Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Sincronizarea este dezactivată de administrator.</translation>
 <translation id="2127372758936585790">Încărcător de putere joasă</translation>
 <translation id="212862741129535676">Procentaj de ocupare în starea activă</translation>
+<translation id="212876957201860463">Se pregătește configurarea dispozitivului celular...</translation>
 <translation id="2129825002735785149">Actualizează pluginul</translation>
 <translation id="2131077480075264">„<ph name="APP_NAME" />” nu poate fi instalată, deoarece „<ph name="IMPORT_NAME" />” nu permite acest lucru</translation>
 <translation id="21354425047973905">Ascunde codurile PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Datele au fost criptate cu parola ta Google începând cu
           <ph name="TIME" />. Acest lucru nu este valabil și pentru metodele de plată și adresele din Google Pay.</translation>
 <translation id="2419706071571366386">Pentru securitate, deconectează-te când nu folosești computerul.</translation>
+<translation id="2422125132043002186">Restabilirea Linux a fost anulată</translation>
 <translation id="2423578206845792524">Sal&amp;vează imaginea ca...</translation>
 <translation id="2428510569851653187">Descrie ce făceai când s-a blocat fila</translation>
 <translation id="2431027948063157455">Asistentul Google nu s-a putut încărca; încearcă din nou.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Se accesează intrările audio și video</translation>
 <translation id="3090819949319990166">Fișierul crx extern nu se poate copia în <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">„<ph name="DEVICE_NAME" />” conectată</translation>
+<translation id="3092699946856346803">Introdu cardul SIM și încearcă din nou</translation>
 <translation id="3101709781009526431">Data și ora</translation>
 <translation id="310671807099593501">Site-ul folosește Bluetooth</translation>
 <translation id="3115147772012638511">Se așteaptă cache-ul...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Fișierele și programele ce urmează a fi mutate în carantină:</translation>
 <translation id="3282568296779691940">Conectează-te la Chrome</translation>
 <translation id="3285322247471302225">Filă &amp;nouă</translation>
+<translation id="3286654161521615710">Folosit de browserul Chrome și lansatorul <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Consultă și șterge datele de conectare stocate pe cheia de securitate</translation>
 <translation id="3288047731229977326">Extensiile care rulează în modul pentru dezvoltatori pot afecta computerul. Dacă nu sunteți dezvoltator, se recomandă să dezactivați aceste extensii, pentru siguranță.</translation>
 <translation id="3289856944988573801">Pentru a verifica dacă există actualizări, utilizați Ethernet sau Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Certificat de server SSL</translation>
 <translation id="3775705724665058594">Trimite pe dispozitivele tale</translation>
 <translation id="3776796446459804932">Această extensie încalcă politica Magazinului web Chrome.</translation>
+<translation id="3777483481409781352">Dispozitivul celular nu a putut fi activat</translation>
 <translation id="3777806571986431400">Extensie activată</translation>
 <translation id="3778152852029592020">Descărcarea a fost anulată.</translation>
 <translation id="3778208826288864398">Cheia de securitate este blocată deoarece codul PIN a fost introdus greșit de prea multe ori. Trebuie să resetezi cheia de securitate.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Alb-negru</translation>
 <translation id="4136203100490971508">Lumina de noapte se va dezactiva automat la răsărit</translation>
 <translation id="4138267921960073861">Afișează numele de utilizatori și fotografiile pe ecranul de conectare</translation>
+<translation id="4142052906269098341">Deblochează <ph name="DEVICE_TYPE" /> cu telefonul. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Obține videoclipuri de o calitate mai bună și mărește autonomia bateriei. Videoclipul va fi redat numai pe un ecran compatibil cu Cast.</translation>
 <translation id="4145922204387553806">Permite Asistentului să îți arate informații legate de ce este afișat pe ecran</translation>
 <translation id="4146026355784316281">Deschide întotdeauna cu Utilitarul de vizualizare al sistemului</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Exportă</translation>
 <translation id="42137655013211669">Accesul la această resursă a fost interzis de server.</translation>
 <translation id="4215350869199060536">Hopa, în nume apar simboluri nepermise!</translation>
+<translation id="4220648711404560261">A apărut o eroare în timpul activării.</translation>
 <translation id="4225397296022057997">Pe toate site-urile</translation>
 <translation id="4232375817808480934">Configurează Kerberos</translation>
 <translation id="4235200303672858594">Întregul ecran</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Preferințe pentru stocarea externă</translation>
 <translation id="447252321002412580">Contribuie la îmbunătățirea funcțiilor și performanței Chrome</translation>
 <translation id="4474155171896946103">Marchează toate filele...</translation>
+<translation id="4474461121892222090">Finalizarea activării datelor mobile poate dura maximum 15 minute.</translation>
 <translation id="4475552974751346499">Caută în descărcări</translation>
 <translation id="4476590490540813026">Atletă</translation>
 <translation id="4477015793815781985">Include Ctrl, Alt sau ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Se configurează mașina virtuală. Poate dura câteva minute.</translation>
 <translation id="4480590691557335796">Chrome poate să găsească software dăunător pe computer și să îl elimine</translation>
 <translation id="4481530544597605423">Dispozitive neasociate</translation>
+<translation id="4483579413421375386">Afișează pentru site</translation>
 <translation id="4495419450179050807">Nu afișa pe această pagină</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> s-a blocat</translation>
 <translation id="450099669180426158">Pictogramă semn de exclamare</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Introduceți codul PIN pentru „<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Permisiuni insuficiente</translation>
 <translation id="4648499713050786492">Deblochează profilul înainte de a adăuga o persoană.</translation>
+<translation id="4650591383426000695">Deconectează telefonul de la <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Componenta online nu a putut fi încărcată cu resurse pentru modul demo.</translation>
 <translation id="465878909996028221">Numai http, https și protocoalele de fișiere sunt compatibile cu redirecționarea către un browser secundar.</translation>
 <translation id="4659077111144409915">Cont principal</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Conectează dispozitivul <ph name="DEVICE_TYPE" /> la o sursă de alimentare.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Sal&amp;vează conținutul audio ca...</translation>
+<translation id="5117139026559873716">Deconectează telefonul de la<ph name="DEVICE_TYPE" />. Nu se va mai conecta automat.</translation>
 <translation id="5117427536932535467">Teme și imagini de fundal</translation>
 <translation id="5117625797180141189">S-a printat <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Monitorizarea comportamentului altor extensii, inclusiv al adreselor URL accesate</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Index pentru <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Meniu conținând marcajele ascunse</translation>
 <translation id="5464632865477611176">Rula de această dată</translation>
+<translation id="5464660706533281090">Setarea nu poate fi modificată de un copil.</translation>
 <translation id="5466374726908360271">In&amp;serează și caută „<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Bună! Eu sunt vocea pentru redarea vocală a textului.</translation>
 <translation id="5473333559083690127">Reintrodu noul cod PIN</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Asociază</translation>
 <translation id="5821565227679781414">Creați o comandă rapidă</translation>
 <translation id="5825412242012995131">Activat (recomandat)</translation>
+<translation id="5826395379250998812">Conectează-ți dispozitivul <ph name="DEVICE_TYPE" /> cu telefonul. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Nume comun (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Se printează...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Datele selectate au fost eliminate din Chrome și de pe dispozitivele sincronizate. Contul Google poate să ofere alte forme ale istoricului de navigare, cum ar fi căutările și activitatea din alte servicii Google, la <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Comentariu certificat Netscape</translation>
 <translation id="6129953537138746214">Spațiu</translation>
+<translation id="6130024555057767093">Momentan, notificările sunt blocate pentru toate site-urile, cu excepția celor pe care le accepți individual.</translation>
 <translation id="6136114942382973861">Închide bara de descărcări</translation>
 <translation id="6137767437444130246">Certificat de utilizator</translation>
 <translation id="6138680304137685902">Semnătură X9.62 ECDSA cu SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Deschide întotdeauna aceste tipuri de linkuri în aplicația asociată</translation>
 <translation id="6207282396926186323">Instalează <ph name="APP_NAME" /> (aplicație Linux)</translation>
 <translation id="6207937957461833379">Țară/Regiune</translation>
+<translation id="6208521041562685716">Se activează datele mobile</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: sincronizarea nu funcționează</translation>
 <translation id="6212039847102026977">Afișează proprietățile avansate pentru rețea</translation>
 <translation id="6212168817037875041">Dezactivează ecranul</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Foarte mică</translation>
 <translation id="6780439250949340171">gestionați alte setări</translation>
 <translation id="6781284683813954823">Linkul doodle-ului</translation>
+<translation id="6781978626986383437">Backupul Linux a fost anulat</translation>
 <translation id="6782111308708962316">Împiedică site-urile terță parte să salveze și să citească datele asociate cookie-urilor</translation>
 <translation id="6786747875388722282">Extensii</translation>
 <translation id="6787839852456839824">Comenzi rapide de la tastatură</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Am găsit <ph name="NUMBER_OF_APPS" /> aplicații din contul tău care pot fi folosite pe acest dispozitiv.</translation>
 <translation id="7199158086730159431">Obțineți a&amp;jutor</translation>
 <translation id="7200083590239651963">Selectează configurația</translation>
+<translation id="7201042526153088083">Instalează aplicații și jocuri din Google Play pe <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Află mai multe&lt;/a&gt;</translation>
 <translation id="720110658997053098">Menține permanent acest dispozitiv în modul chioșc</translation>
 <translation id="7201118060536064622">„<ph name="DELETED_ITEM_NAME" />” a fost șters</translation>
 <translation id="7201420661433230412">Afișați fișierele</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Este necesar EVDO</translation>
 <translation id="7230787553283372882">Personalizează dimensiunea textului</translation>
 <translation id="7232750842195536390">Redenumirea nu a reușit</translation>
+<translation id="7234010996000898150">Se anulează restabilirea Linux</translation>
 <translation id="7235716375204803342">Se preiau activitățile…</translation>
 <translation id="7235737137505019098">Cheia ta de securitate nu are suficient spațiu pentru mai mult conturi.</translation>
 <translation id="7238585580608191973">Amprentă digitală SHA-256</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Deschide-le pe toate într-o fereastră &amp;nouă}=1{Deschide într-o fereastră &amp;nouă}few{Deschide-le pe toate (#) într-o fereastră &amp;nouă}other{Deschide-le pe toate (#) într-o fereastră &amp;nouă}}</translation>
 <translation id="7434509671034404296">Dezvoltator</translation>
 <translation id="7436921188514130341">Of, nu mai merge! A apărut o eroare la redenumire.</translation>
+<translation id="7437427339141948518">Notificări dezactivate</translation>
 <translation id="7438976808740265764">Flash Player nu va mai fi acceptat după decembrie 2020.</translation>
 <translation id="7441736921018636843">Ca să modifici setarea, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" /> pentru a elimina expresia de acces pentru sincronizare</translation>
 <translation id="7441830548568730290">Alți utilizatori</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Permiți ca site-ul să vadă fișierele?</translation>
 <translation id="7644543211198159466">Culoare și temă</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (proprietar)</translation>
+<translation id="7645681574855902035">Se anulează backupul Linux</translation>
 <translation id="7647403192093989392">Nu există activități recente.</translation>
 <translation id="7648142322539582331">Conectează-te la internet pentru a configura controlul parental</translation>
 <translation id="7648992873808071793">Stocheze fișiere pe acest dispozitiv</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Lăbuș</translation>
 <translation id="8257950718085972371">Blocați în continuare accesul la cameră</translation>
 <translation id="8259239505248583312">Să începem</translation>
+<translation id="8259556432390118667">Valoarea culorii hexazecimale</translation>
 <translation id="8260126382462817229">Încearcă să te conectezi din nou</translation>
 <translation id="8260864402787962391">Mouse</translation>
 <translation id="8261378640211443080">Această extensie nu este inclusă în <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> și este posibil să fi fost adăugată fără știrea dvs.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Schimbă pagina de pornire la: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome nu poate seta imaginea de fundal.</translation>
 <translation id="8663099077749055505">Blocați întotdeauna descărcarea automată a mai multor fișiere pentru <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Afișezi notificările pentru acest site?</translation>
 <translation id="8664389313780386848">&amp;Afișează sursa paginii</translation>
 <translation id="8665180165765946056">Backupul a fost finalizat</translation>
 <translation id="866611985033792019">Ai încredere în acest certificat pentru a identifica utilizatorii de e-mail</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Editează</translation>
 <translation id="9066773882585798925">Ascultă textul citit cu voce tare</translation>
 <translation id="9066782832737749352">Redarea vocală a textului</translation>
+<translation id="9068849894565669697">Selectați culoarea</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Mouse USB conectat</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Trimite mesaje către dispozitivele Bluetooth și primește mesaje de la acestea.</translation>
 <translation id="9134304429738380103">Da, sunt de acord.</translation>
 <translation id="9137013805542155359">Afișează originalul</translation>
+<translation id="9137157311132182254">Motor de căutare preferat</translation>
 <translation id="9137916601698928395">Deschide linkul ca <ph name="USER" /></translation>
 <translation id="9138978632494473300">Adaugă comenzi rapide către următoarele locații:</translation>
 <translation id="9140067245205650184">Folosești un semnalizator de funcție neacceptat: <ph name="BAD_FLAG" />. Stabilitatea și securitatea vor fi afectate.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Arborele cu dosarele de marcaje</translation>
 <translation id="964286338916298286">Administratorul IT a dezactivat accesoriile Chrome pentru dispozitiv.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplicație}few{Aplicații}other{Aplicații}}</translation>
+<translation id="965211523698323809">Trimite și primește mesaje text pe <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Astfel, te vei deconecta de la conturile Google. Modificările marcajelor, istoricului, parolelor sau ale altor setări nu vor mai fi sincronizate cu Contul Google. Totuși, datele existente vor rămâne stocate în Contul Google și pot fi gestionate din <ph name="BEGIN_LINK" />Tabloul de bord Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Date stocate</translation>
 <translation id="968000525894980488">Activează serviciile Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index c662009..2ece483 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Поступил запрос на чтение или запись с недействительным смещением на устройстве <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Сначала войдите как гость, чтобы активировать работу сети <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Всегда переводить <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Не удалось найти SIM-карту</translation>
 <translation id="1108600514891325577">&amp;Остановить</translation>
 <translation id="1110155001042129815">Подождать</translation>
 <translation id="1112420131909513020">На фоновой вкладке используется Bluetooth.</translation>
@@ -755,6 +756,7 @@
 <translation id="2126167708562367080">Ваш администратор отключил синхронизацию.</translation>
 <translation id="2127372758936585790">Маломощное зарядное устройство</translation>
 <translation id="212862741129535676">Продолжительность работы процессора на разных ступенях частоты в процентах</translation>
+<translation id="212876957201860463">Подготовка к настройке мобильного устройства…</translation>
 <translation id="2129825002735785149">Обновить плагин</translation>
 <translation id="2131077480075264">Невозможно установить <ph name="APP_NAME" />: нет разрешения от <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Скрыть PIN-коды</translation>
@@ -954,6 +956,7 @@
 <translation id="2413749388954403953">Изменение пользовательского интерфейса закладок</translation>
 <translation id="241727068219398187">Данные зашифрованы с помощью пароля вашего аккаунта Google от <ph name="TIME" />. Шифрование не применяется к способам оплаты и адресам из Google Pay.</translation>
 <translation id="2419706071571366386">Если вы закончили работу на компьютере, рекомендуем выйти из аккаунта.</translation>
+<translation id="2422125132043002186">Восстановление контейнера Linux отменено.</translation>
 <translation id="2423578206845792524">Со&amp;хранить картинку как...</translation>
 <translation id="2428510569851653187">Опишите, что вы делали, когда произошел сбой</translation>
 <translation id="2431027948063157455">Не удалось загрузить Google Ассистента. Проверьте подключение к Интернету и повторите попытку.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Доступ к аудио- и видеовходу</translation>
 <translation id="3090819949319990166">Не удалось скопировать внешний файл CRX в <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Подключено устройство: <ph name="DEVICE_NAME" /></translation>
+<translation id="3092699946856346803">Вставьте SIM-карту и повторите попытку.</translation>
 <translation id="3101709781009526431">Дата и время</translation>
 <translation id="310671807099593501">Сайт использует Bluetooth</translation>
 <translation id="3115147772012638511">Ожидание кеша…</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Файлы и программы, которые будут отправлены в карантин:</translation>
 <translation id="3282568296779691940">Войдите в Chrome</translation>
 <translation id="3285322247471302225">Новая вкладка</translation>
+<translation id="3286654161521615710">Используется браузером Chrome и панелью запуска устройства <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Просмотр и удаление учетных данных, которые хранятся на электронном ключе.</translation>
 <translation id="3288047731229977326">Расширения, запущенные в режиме разработчика, могут причинить вред вашему компьютеру. Если вы не являетесь разработчиком, их следует отключить, чтобы обеспечить безопасность данных.</translation>
 <translation id="3289856944988573801">Чтобы проверить наличие обновлений, подключитесь через сеть Ethernet или Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Сертификат сервера SSL</translation>
 <translation id="3775705724665058594">Отправка на свои устройства</translation>
 <translation id="3776796446459804932">Это расширение нарушает правила Интернет-магазина Chrome.</translation>
+<translation id="3777483481409781352">Не удалось активировать мобильное устройство</translation>
 <translation id="3777806571986431400">Расширение включено</translation>
 <translation id="3778152852029592020">Скачивание отменено.</translation>
 <translation id="3778208826288864398">Слишком много попыток ввода PIN-кода. Электронный ключ заблокирован. Сбросьте настройки электронного ключа.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Черно-белая печать</translation>
 <translation id="4136203100490971508">Ночной режим отключится автоматически на рассвете</translation>
 <translation id="4138267921960073861">Показывать имена и фотографии пользователей на экране входа</translation>
+<translation id="4142052906269098341">Снимать блокировку <ph name="DEVICE_TYPE" /> с помощью телефона. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">С помощью этой функции вы улучшите качество видео и продлите время работы от батареи. Видео будет воспроизводиться только на экранах с поддержкой Cast.</translation>
 <translation id="4145922204387553806">Разрешите Ассистенту показывать подсказки, связанные с изображением на экране.</translation>
 <translation id="4146026355784316281">Всегда открывать в программе просмотра по умолчанию</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Экспортировать</translation>
 <translation id="42137655013211669">Доступ к этому ресурсу запрещен сервером.</translation>
 <translation id="4215350869199060536">Имя содержит недопустимые символы!</translation>
+<translation id="4220648711404560261">При активации произошла ошибка.</translation>
 <translation id="4225397296022057997">На всех сайтах</translation>
 <translation id="4232375817808480934">Настройка Kerberos</translation>
 <translation id="4235200303672858594">Полноэкранный режим</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Настройки внешних накопителей</translation>
 <translation id="447252321002412580">Помогать повышать производительность Chrome и улучшать функции</translation>
 <translation id="4474155171896946103">Добавить все вкладки в закладки…</translation>
+<translation id="4474461121892222090">Активация мобильного Интернета может занять до 15 минут.</translation>
 <translation id="4475552974751346499">Искать в скачанных файлах</translation>
 <translation id="4476590490540813026">Спортсмен</translation>
 <translation id="4477015793815781985">Комбинация должна начинаться с Ctrl, Alt или ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Идет настройка виртуальной машины. Это может занять несколько минут.</translation>
 <translation id="4480590691557335796">Браузер Chrome может найти вредоносные программы на вашем компьютере и удалить их.</translation>
 <translation id="4481530544597605423">Отключенные устройства</translation>
+<translation id="4483579413421375386">Показывать для этого сайта</translation>
 <translation id="4495419450179050807">Не показывать на этой странице</translation>
 <translation id="4500114933761911433">Сбой в плагине <ph name="PLUGIN_NAME" /></translation>
 <translation id="450099669180426158">Значок восклицательного знака.</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Введите PIN-код для "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Недостаточно прав</translation>
 <translation id="4648499713050786492">Разблокируйте свой профиль, прежде чем добавлять ещё один.</translation>
+<translation id="4650591383426000695">Телефон будет отключен от устройства <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Не удалось загрузить онлайн-компонент с ресурсами демонстрационного режима.</translation>
 <translation id="465878909996028221">Для переадресации в браузере поддерживаются только протоколы HTTP, HTTPS и файловые протоколы.</translation>
 <translation id="4659077111144409915">Основной аккаунт</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Подключите <ph name="DEVICE_TYPE" /> к источнику питания.</translation>
 <translation id="5115338116365931134">Система единого входа</translation>
 <translation id="5116628073786783676">Сохранить аудио как...</translation>
+<translation id="5117139026559873716">Телефон будет отключен от устройства <ph name="DEVICE_TYPE" />. Они больше не будут подключаться друг к другу автоматически.</translation>
 <translation id="5117427536932535467">Темы и обои</translation>
 <translation id="5117625797180141189">Документ <ph name="DOCUMENT_NAME" /> распечатан</translation>
 <translation id="5117930984404104619">Отслеживание режима работы других расширений, в том числе посещаемых URL</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Содержание <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Меню со скрытыми закладками</translation>
 <translation id="5464632865477611176">Запустить один раз</translation>
+<translation id="5464660706533281090">Значение этого параметра может изменить только взрослый пользователь.</translation>
 <translation id="5466374726908360271">Вст&amp;авить и найти "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Здравствуйте! Я буду озвучивать для вас текст.</translation>
 <translation id="5473333559083690127">Повторно введите новый PIN-код</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Подключить</translation>
 <translation id="5821565227679781414">Создать ярлык</translation>
 <translation id="5825412242012995131">Вкл. (рекомендуется)</translation>
+<translation id="5826395379250998812">Подключите устройство <ph name="DEVICE_TYPE" /> к телефону. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Общее имя (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Печать...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Выбранные данные удалены из Chrome и с синхронизированных устройств. История также может храниться в вашем аккаунте Google, например в виде поисковых запросов и сведений из сервисов Google. Их можно найти на сайте <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Комментарий к сертификату Netscape</translation>
 <translation id="6129953537138746214">Пробел</translation>
+<translation id="6130024555057767093">Сейчас заблокированы уведомления со всех сайтов, кроме тех, которым вы предоставили отдельные разрешения.</translation>
 <translation id="6136114942382973861">Закрыть панель загрузок</translation>
 <translation id="6137767437444130246">Сертификат пользователя</translation>
 <translation id="6138680304137685902">Подпись ECDSA X9.62 с SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Запомнить мой выбор для этого типа ссылок</translation>
 <translation id="6207282396926186323">Установка приложения Linux "<ph name="APP_NAME" />"</translation>
 <translation id="6207937957461833379">Страна/регион</translation>
+<translation id="6208521041562685716">Мобильный Интернет активирован</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: ошибка синхронизации</translation>
 <translation id="6212039847102026977">Показать дополнительные свойства сети</translation>
 <translation id="6212168817037875041">Выключать экран</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Очень мелкий</translation>
 <translation id="6780439250949340171">управление другими настройками</translation>
 <translation id="6781284683813954823">Ссылка на дудл</translation>
+<translation id="6781978626986383437">Резервное копирование контейнера Linux отменено.</translation>
 <translation id="6782111308708962316">Запретить сторонним веб-сайтам сохранять и просматривать файлы cookie</translation>
 <translation id="6786747875388722282">Расширения</translation>
 <translation id="6787839852456839824">Быстрые клавиши</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">С вашим аккаунтом связано несколько приложений (<ph name="NUMBER_OF_APPS" />), которые можно использовать на этом устройстве.</translation>
 <translation id="7199158086730159431">&amp;Справка</translation>
 <translation id="7200083590239651963">Выбор конфигурации</translation>
+<translation id="7201042526153088083">Устанавливайте приложения и игры из Google Play на устройство <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Подробнее…&lt;/a&gt;</translation>
 <translation id="720110658997053098">Всегда запускать устройство в режиме киоска</translation>
 <translation id="7201118060536064622">Объект "<ph name="DELETED_ITEM_NAME" />" удален</translation>
 <translation id="7201420661433230412">Просмотреть файлы</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Необходимо наличие EV-DO</translation>
 <translation id="7230787553283372882">Позволяет настроить размер текста</translation>
 <translation id="7232750842195536390">Название не изменено</translation>
+<translation id="7234010996000898150">Отмена восстановления контейнера Linux…</translation>
 <translation id="7235716375204803342">Загрузка действий...</translation>
 <translation id="7235737137505019098">На электронном ключе не хватает места для нового аккаунта.</translation>
 <translation id="7238585580608191973">Отпечаток SHA-256</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Открыть все в &amp;новом окне}=1{Открыть в &amp;новом окне}one{Открыть все (#) в &amp;новом окне}few{Открыть все (#) в &amp;новом окне}many{Открыть все (#) в &amp;новом окне}other{Открыть все (#) в &amp;новом окне}}</translation>
 <translation id="7434509671034404296">Разработчикам</translation>
 <translation id="7436921188514130341">При изменении названия произошла ошибка.</translation>
+<translation id="7437427339141948518">Уведомления отключены</translation>
 <translation id="7438976808740265764">Поддержка Flash Player будет прекращена в декабре 2020 года.</translation>
 <translation id="7441736921018636843">Чтобы изменить этот параметр, <ph name="BEGIN_LINK" />сбросьте настройки синхронизации<ph name="END_LINK" /> и удалите кодовую фразу</translation>
 <translation id="7441830548568730290">Другие пользователи</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Разрешить сайту доступ для просмотра файлов?</translation>
 <translation id="7644543211198159466">Цвет и тема</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (владелец)</translation>
+<translation id="7645681574855902035">Отмена резервного копирования контейнера Linux…</translation>
 <translation id="7647403192093989392">Нет недавних действий</translation>
 <translation id="7648142322539582331">Чтобы настроить родительский контроль, подключитесь к Интернету.</translation>
 <translation id="7648992873808071793">сохранение файлов на этом устройстве</translation>
@@ -4856,6 +4877,7 @@
 <translation id="8256319818471787266">Дружок</translation>
 <translation id="8257950718085972371">Всегда блокировать доступ к камере</translation>
 <translation id="8259239505248583312">Начать</translation>
+<translation id="8259556432390118667">Шестнадцатеричный код цвета</translation>
 <translation id="8260126382462817229">Снова войдите в аккаунт</translation>
 <translation id="8260864402787962391">Мышь</translation>
 <translation id="8261378640211443080"><ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> не содержит сведений об этом расширении, то есть оно могло быть установлено без вашего ведома.</translation>
@@ -5108,6 +5130,7 @@
 <translation id="8662911384982557515">Смена главной страницы на <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome не может установить выбранное изображение в качестве обоев рабочего стола.</translation>
 <translation id="8663099077749055505">Всегда блокировать автоматическое скачивание нескольких файлов с сайта <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Показывать уведомления с этого сайта?</translation>
 <translation id="8664389313780386848">&amp;Просмотр кода страницы</translation>
 <translation id="8665180165765946056">Готово</translation>
 <translation id="866611985033792019">Доверять этому сертификату для идентификации адресов электронной почты</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">Изменить</translation>
 <translation id="9066773882585798925">Позволяет прослушивать текст с экрана.</translation>
 <translation id="9066782832737749352">Озвучивание текста</translation>
+<translation id="9068849894565669697">Выберите цвет</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-мышь подключена</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">Обмен сообщениями с устройствами Bluetooth.</translation>
 <translation id="9134304429738380103">ОК</translation>
 <translation id="9137013805542155359">Показать оригинал</translation>
+<translation id="9137157311132182254">Предпочитаемая поисковая система</translation>
 <translation id="9137916601698928395">Открыть ссылку как <ph name="USER" /></translation>
 <translation id="9138978632494473300">Куда добавить ярлыки:</translation>
 <translation id="9140067245205650184">Вы используете неподдерживаемый флаг функции: <ph name="BAD_FLAG" />. Стабильность и безопасность будут нарушены.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">Дерево папок с закладками</translation>
 <translation id="964286338916298286">Администратор отключил бонусы Chrome для вашего устройства.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Приложение}one{Приложения}few{Приложения}many{Приложения}other{Приложения}}</translation>
+<translation id="965211523698323809">Отправлять и получать SMS на устройстве <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Вы выйдете из аккаунта Google. С ним перестанут синхронизироваться изменения, связанные с закладками, историей, паролями и другими параметрами. Уже сохраненные данные останутся в аккаунте. Вы можете посмотреть и изменить их в <ph name="BEGIN_LINK" />Личном кабинете Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Объем занятой памяти</translation>
 <translation id="968000525894980488">Включите сервисы Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 568fc40c..dddc2c2 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Na zariadení <ph name="DEVICE_NAME" /> bola vyžiadaná operácia čítania alebo zápisu s nesprávnym odsadením.</translation>
 <translation id="1097658378307015415">Ak chcete aktivovať sieť <ph name="NETWORK_ID" />, vstúpte pred prihlásením ako hosť</translation>
 <translation id="1103523840287552314">Vždy preložiť nasledujúci jazyk: <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Vašu SIM kartu sa nepodarilo rozpoznať</translation>
 <translation id="1108600514891325577">&amp;Zastaviť</translation>
 <translation id="1110155001042129815">Čakajte, prosím.</translation>
 <translation id="1112420131909513020">Karta na pozadí používa Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Synchronizácia je zakázaná správcom.</translation>
 <translation id="2127372758936585790">Nabíjačka s nízkym výkonom</translation>
 <translation id="212862741129535676">Percento obsadenia priestoru údajmi stavu frekvencie</translation>
+<translation id="212876957201860463">Pripravuje sa nastavenie vášho mobilného zariadenia…</translation>
 <translation id="2129825002735785149">Aktualizovať doplnok</translation>
 <translation id="2131077480075264">Aplikáciu <ph name="APP_NAME" /> nie je možné nainštalovať, pretože nie je povolená v importe <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Skryť kódy PIN</translation>
@@ -955,6 +957,7 @@
 <translation id="2413749388954403953">Zmeniť používateľské rozhranie záložiek</translation>
 <translation id="241727068219398187">Údaje boli <ph name="TIME" /> zašifrované pomocou vášho hesla Google. Nezahŕňa to spôsoby platby ani adresy zo služby Google Pay.</translation>
 <translation id="2419706071571366386">Keď počítač nepoužívate, z bezpečnostných dôvodov sa odhláste.</translation>
+<translation id="2422125132043002186">Obnovenie systému Linux bolo zrušené</translation>
 <translation id="2423578206845792524">Uložiť &amp;obrázok ako...</translation>
 <translation id="2428510569851653187">Opíšte, čo ste robili, keď karta zlyhala</translation>
 <translation id="2431027948063157455">Asistent Google sa nenačítal. Skontrolujte sieťové pripojenie a skúste to znova.</translation>
@@ -1105,7 +1108,7 @@
 <translation id="2630681426381349926">Začnite pripojením k sieti Wi‑Fi</translation>
 <translation id="2631120081682787498">Naozaj chcete povoliť režim ukážky?</translation>
 <translation id="2631498379019108537">Zobraziť možnosti vstupu na poličke</translation>
-<translation id="2633212996805280240">Odstrániť rozšírenie <ph name="EXTENSION_NAME" />?</translation>
+<translation id="2633212996805280240">Chcete odstrániť <ph name="EXTENSION_NAME" />?</translation>
 <translation id="263325223718984101">Inštaláciu prehliadača <ph name="PRODUCT_NAME" /> sa nepodarilo dokončiť, ale bude sa naďalej spúšťať z jeho obrazu disku.</translation>
 <translation id="2633764681656412085">FIDO</translation>
 <translation id="2635094637295383009">Twitter</translation>
@@ -1422,6 +1425,7 @@
 <translation id="3090193911106258841">Pristupovanie k zvukovému vstupu a vstupu videa</translation>
 <translation id="3090819949319990166">Externý súbor crx nie je možné skopírovať do súboru <ph name="TEMP_CRX_FILE" /></translation>
 <translation id="3090871774332213558">Zariadenie „<ph name="DEVICE_NAME" />“ bolo spárované</translation>
+<translation id="3092699946856346803">Vložte SIM kartu a skúste to znova</translation>
 <translation id="3101709781009526431">Dátum a čas</translation>
 <translation id="310671807099593501">Web používa Bluetooth</translation>
 <translation id="3115147772012638511">Čakanie na vyrovnávaciu pamäť...</translation>
@@ -1529,6 +1533,7 @@
 <translation id="3281892622610078515">Súbory a programy, ktoré sa pridajú do karantény:</translation>
 <translation id="3282568296779691940">Prihlásenie do prehliadača Chrome</translation>
 <translation id="3285322247471302225">Nová &amp;karta</translation>
+<translation id="3286654161521615710">Používa prehliadač Chrome a spúšťač zariadenia <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Zobraziť a vymazať prihlasovacie údaje uložené v bezpečnostnom kľúči</translation>
 <translation id="3288047731229977326">Rozšírenia spustené v režime pre vývojárov môžu poškodiť váš počítač. Ak nie ste vývojár, mali by ste v záujme bezpečnosti rozšírenia spustené v režime vývojára zakázať.</translation>
 <translation id="3289856944988573801">Ak chcete skontrolovať aktualizácie, použite sieť ethernet alebo Wi‑Fi.</translation>
@@ -1873,6 +1878,7 @@
 <translation id="3775432569830822555">Certifikát servera SSL</translation>
 <translation id="3775705724665058594">Odoslanie do zariadení</translation>
 <translation id="3776796446459804932">Toto rozšírenie porušuje pravidlá Internetového obchodu Chrome.</translation>
+<translation id="3777483481409781352">Mobilné zariadenie sa nepodarilo aktivovať</translation>
 <translation id="3777806571986431400">Povolenie rozšírenia</translation>
 <translation id="3778152852029592020">Sťahovanie bolo zrušené.</translation>
 <translation id="3778208826288864398">Bezpečnostný kľúč je uzamknutý, pretože bol príliš veľakrát zadaný nesprávny PIN. Musíte resetovať bezpečnostný kľúč.</translation>
@@ -2136,6 +2142,7 @@
 <translation id="4131410914670010031">Čiernobielo</translation>
 <translation id="4136203100490971508">Nočný režim sa automaticky vypne pri východe slnka</translation>
 <translation id="4138267921960073861">Zobraziť používateľské mená a fotografie na prihlasovacej obrazovke</translation>
+<translation id="4142052906269098341">Odomykajte zariadenie <ph name="DEVICE_TYPE" /> so svojím telefónom. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Získajte kvalitnejšie video a predĺžte výdrž batérie. Video sa bude prehrávať iba na obrazovke podporujúcej Cast.</translation>
 <translation id="4145922204387553806">Umožnite Asistentovi zobrazovať informácie týkajúce sa obsahu na obrazovke</translation>
 <translation id="4146026355784316281">Vždy otvárať pomocou systémového zobrazovača</translation>
@@ -2177,6 +2184,7 @@
 <translation id="42126664696688958">Exportovať</translation>
 <translation id="42137655013211669">Server zakázal prístup k tomuto zdroju</translation>
 <translation id="4215350869199060536">Hops, v mene sú nepovolené symboly!</translation>
+<translation id="4220648711404560261">Počas aktivácie sa vyskytla chyba.</translation>
 <translation id="4225397296022057997">Na všetkých weboch</translation>
 <translation id="4232375817808480934">Konfigurácia protokolu Kerberos</translation>
 <translation id="4235200303672858594">Celá obrazovka</translation>
@@ -2325,6 +2333,7 @@
 <translation id="4470957202018033307">Predvoľby externých úložísk</translation>
 <translation id="447252321002412580">Pomáhať s vylepšovaním funkcií a výkonu Chromu</translation>
 <translation id="4474155171896946103">Všetky karty uložiť ako záložky...</translation>
+<translation id="4474461121892222090">Dokončenie aktivácie mobilných dát môže trvať až 15 minút.</translation>
 <translation id="4475552974751346499">Hľadať stiahnuté súbory</translation>
 <translation id="4476590490540813026">Športovkyňa</translation>
 <translation id="4477015793815781985">Použite kláves Ctrl, Alt alebo ⌘</translation>
@@ -2334,6 +2343,7 @@
 <translation id="4479877282574735775">Konfiguruje sa virtuálny počítač. Môže to trvať niekoľko minút.</translation>
 <translation id="4480590691557335796">Chrome dokáže vo vašom počítači nájsť škodlivý softvér a odstrániť ho</translation>
 <translation id="4481530544597605423">Nespárované zariadenia</translation>
+<translation id="4483579413421375386">Zobrazovať pre web</translation>
 <translation id="4495419450179050807">Nezobrazovať na tejto stránke</translation>
 <translation id="4500114933761911433">Doplnok <ph name="PLUGIN_NAME" /> zlyhal</translation>
 <translation id="450099669180426158">Ikona Výkričník</translation>
@@ -2437,6 +2447,7 @@
 <translation id="4647697156028544508">Zadajte kód PIN pre zariadenie <ph name="DEVICE_NAME" />:</translation>
 <translation id="4648491805942548247">Nedostatočné povolenia</translation>
 <translation id="4648499713050786492">Skôr ako pridáte osobu, odomknite svoj profil.</translation>
+<translation id="4650591383426000695">Odpojte svoj telefón od zariadenia <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Nepodarilo sa načítať komponent so zdrojmi režimu ukážky.</translation>
 <translation id="465878909996028221">Presmerovania prehliadača podporujú iba protokoly http, https a file.</translation>
 <translation id="4659077111144409915">Primárny účet</translation>
@@ -2738,6 +2749,7 @@
 <translation id="5115309401544567011">Pripojte zariadenie <ph name="DEVICE_TYPE" /> k zdroju napájania.</translation>
 <translation id="5115338116365931134">Jediné prihlásenie</translation>
 <translation id="5116628073786783676">Uložiť &amp;zvuk ako...</translation>
+<translation id="5117139026559873716">Odpojte telefón od zariadenia <ph name="DEVICE_TYPE" />. Už sa nebude automaticky pripájať.</translation>
 <translation id="5117427536932535467">Motívy a tapety</translation>
 <translation id="5117625797180141189">Dokument <ph name="DOCUMENT_NAME" /> bol úspešne vytlačený</translation>
 <translation id="5117930984404104619">Sledovať správanie ďalších rozšírení vrátane navštívených webových adries</translation>
@@ -2967,6 +2979,7 @@
 <translation id="5463275305984126951">Index adresára <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Ponuka obsahujúca skryté záložky</translation>
 <translation id="5464632865477611176">Spustiť len tentoraz</translation>
+<translation id="5464660706533281090">Toto nastavenie nemôže zmeniť používateľ, ktorý je dieťa.</translation>
 <translation id="5466374726908360271">Prilepiť a &amp;vyhľadať „<ph name="SEARCH_TERMS" />“</translation>
 <translation id="5471768120198416576">Dobrý deň, som hlas prevodu textu na reč.</translation>
 <translation id="5473333559083690127">Opätovné zadanie nového kódu PIN</translation>
@@ -3202,6 +3215,7 @@
 <translation id="5817918615728894473">Párovať</translation>
 <translation id="5821565227679781414">Vytvoriť odkaz</translation>
 <translation id="5825412242012995131">Zapnuté (odporúča sa)</translation>
+<translation id="5826395379250998812">Pripojte zariadenie <ph name="DEVICE_TYPE" /> k svojmu telefónu. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Bežný názov (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Prebieha tlač...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">Vybrané dáta boli odstránené z Chromu a synchronizovaných zariadení. Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> (napríklad vyhľadávania a aktivity v iných službách Googlu).</translation>
 <translation id="6129938384427316298">Netscape – komentár certifikátu</translation>
 <translation id="6129953537138746214">Medzera</translation>
+<translation id="6130024555057767093">Upozornenia sú momentálne blokované pre všetky weby okrem tých, ktoré individuálne povolíte.</translation>
 <translation id="6136114942382973861">Zatvoriť panel so stiahnutými súbormi</translation>
 <translation id="6137767437444130246">Certifikát používateľa</translation>
 <translation id="6138680304137685902">Podpis X9.62 ECDSA s SHA-384</translation>
@@ -3468,6 +3483,7 @@
 <translation id="620722923698527029">Vždy otvárať tieto typy odkazov v priradenej aplikácii</translation>
 <translation id="6207282396926186323">Inštalácia aplikácie <ph name="APP_NAME" /> (aplikácia pre Linux)</translation>
 <translation id="6207937957461833379">Krajina alebo oblasť</translation>
+<translation id="6208521041562685716">Mobilné dáta sa aktivujú</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: synchronizácia nefunguje</translation>
 <translation id="6212039847102026977">Zobraziť rozšírené vlastnosti siete</translation>
 <translation id="6212168817037875041">Vypnúť obrazovku</translation>
@@ -3829,6 +3845,7 @@
 <translation id="677965093459947883">Veľmi malé</translation>
 <translation id="6780439250949340171">spravovať ďalšie nastavenia</translation>
 <translation id="6781284683813954823">Odkaz na doodle</translation>
+<translation id="6781978626986383437">Záloha systému Linux bola zrušená</translation>
 <translation id="6782111308708962316">Brániť webom tretích strán ukladať a čítať súbory cookie</translation>
 <translation id="6786747875388722282">Rozšírenia</translation>
 <translation id="6787839852456839824">Klávesové skratky</translation>
@@ -4116,6 +4133,7 @@
 <translation id="7197632491113152433">Vo vašom účte sme našli niekoľko aplikácií, ktoré sa dajú použiť v tomto zariadení (počet: <ph name="NUMBER_OF_APPS" />).</translation>
 <translation id="7199158086730159431">Získať p&amp;omoc</translation>
 <translation id="7200083590239651963">Výber konfigurácie</translation>
+<translation id="7201042526153088083">Nainštalujte si aplikácie a hry zo služby Google Play v zariadení <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Ďalšie informácie&lt;/a&gt;</translation>
 <translation id="720110658997053098">Udržiavať toto zariadenie trvale v režime kiosku</translation>
 <translation id="7201118060536064622">Položka <ph name="DELETED_ITEM_NAME" /> bola odstránená</translation>
 <translation id="7201420661433230412">Zobraziť súbory</translation>
@@ -4140,6 +4158,7 @@
 <translation id="7229570126336867161">Je potrebné pripojenie EVDO</translation>
 <translation id="7230787553283372882">Prispôsobiť veľkosť textu</translation>
 <translation id="7232750842195536390">Nepodarilo sa premenovať</translation>
+<translation id="7234010996000898150">Ruší sa obnovenie systému Linux</translation>
 <translation id="7235716375204803342">Načítavajú sa aktivity…</translation>
 <translation id="7235737137505019098">Bezpečnostný kľúč nemá dostatok miesta na ďalšie účty.</translation>
 <translation id="7238585580608191973">Odtlačok SHA-256</translation>
@@ -4275,6 +4294,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Otvoriť všetky v novom okne}=1{Otvoriť v novom okne}few{Otvoriť všetky (#) v novom okne}many{Otvoriť všetky (#) v novom okne}other{Otvoriť všetky (#) v novom okne}}</translation>
 <translation id="7434509671034404296">Vývojár</translation>
 <translation id="7436921188514130341">Ojoj! Pri premenovaní sa vyskytla chyba.</translation>
+<translation id="7437427339141948518">Upozornenia sú vypnuté</translation>
 <translation id="7438976808740265764">V decembri 2020 sa ukončí podpora prehrávača Flash Player.</translation>
 <translation id="7441736921018636843">Ak chcete zmeniť toto nastavenie, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" /> a odstráňte tak prístupovú frázu synchronizácie</translation>
 <translation id="7441830548568730290">Ostatní používatelia</translation>
@@ -4404,6 +4424,7 @@
 <translation id="7643932971554933646">Chcete povoliť webu zobrazovať si súbory?</translation>
 <translation id="7644543211198159466">Farba a motív</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (vlastník)</translation>
+<translation id="7645681574855902035">Ruší sa záloha systému Linux</translation>
 <translation id="7647403192093989392">Žiadne nedávne aktivity</translation>
 <translation id="7648142322539582331">Ak chcete nastaviť rodičovskú kontrolu, pripojte sa k internetu</translation>
 <translation id="7648992873808071793">Ukladať súbory na tomto zariadení</translation>
@@ -4854,6 +4875,7 @@
 <translation id="8256319818471787266">Rexo</translation>
 <translation id="8257950718085972371">Aj naďalej blokovať prístup ku kamere</translation>
 <translation id="8259239505248583312">Poďme na to</translation>
+<translation id="8259556432390118667">Hodnota farby v šestnástkovej sústave</translation>
 <translation id="8260126382462817229">Skúste sa znova prihlásiť</translation>
 <translation id="8260864402787962391">Myš</translation>
 <translation id="8261378640211443080">Toto rozšírenie nedodáva <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a mohlo byť pridané bez vášho vedomia.</translation>
@@ -5106,6 +5128,7 @@
 <translation id="8662911384982557515">Zmeniť domovskú stránku na: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Prehliadač Chrome nemôže nastaviť tapetu.</translation>
 <translation id="8663099077749055505">Vždy blokovať viaceré automatické stiahnutia na stránkach <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Chcete zobrazovať upozornenia pre tento web?</translation>
 <translation id="8664389313780386848">&amp;Zobraziť zdrojový kód stránky</translation>
 <translation id="8665180165765946056">Zálohovanie bolo dokončené</translation>
 <translation id="866611985033792019">Dôverovať tomuto certifikátu na identifikáciu e-mailových používateľov</translation>
@@ -5395,6 +5418,7 @@
 <translation id="9065203028668620118">Upraviť</translation>
 <translation id="9066773882585798925">Čítanie textu nahlas</translation>
 <translation id="9066782832737749352">Prevod textu na reč</translation>
+<translation id="9068849894565669697">Výber farby</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Myš s konektorom USB bola pripojená</translation>
@@ -5432,6 +5456,7 @@
 <translation id="9131487537093447019">Posielať správy zariadeniam Bluetooth a prijímať správy zo zariadení Bluetooth.</translation>
 <translation id="9134304429738380103">Áno, chcem.</translation>
 <translation id="9137013805542155359">Zobraziť originál</translation>
+<translation id="9137157311132182254">Preferovaný vyhľadávač</translation>
 <translation id="9137916601698928395">Otvoriť odkaz ako <ph name="USER" /></translation>
 <translation id="9138978632494473300">Pridať odkazy na nasledujúce miesta:</translation>
 <translation id="9140067245205650184">Používate nepodporovaný príznak funkcie: <ph name="BAD_FLAG" />. Prejaví sa to na nižšej stabilite a horšom zabezpečení</translation>
@@ -5504,6 +5529,7 @@
 <translation id="962802172452141067">Stromová štruktúra priečinka so záložkami</translation>
 <translation id="964286338916298286">Správca IT zakázal v zariadení doplnky Chrome Goodies.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplikácia}few{Aplikácie}many{Aplikácie}other{Aplikácie}}</translation>
+<translation id="965211523698323809">Odosielajte a prijímajte textové správy zo svojho zariadenia <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Týmto sa odhlásite z účtov Google. Zmeny záložiek, histórie hesiel a ďalších nastavení sa už nebudú synchronizovať do vášho účtu Google. Vaše existujúce dáta však zostanú uložené v účte Google a môžete ich spravovať pomocou služby <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Uložené dáta</translation>
 <translation id="968000525894980488">Zapnite Služby Google Play</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index e4dea436..d82ae2a 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Dejanje branja ali pisanja je bilo zahtevano z neveljavnim zamikom v tej napravi: »<ph name="DEVICE_NAME" />«.</translation>
 <translation id="1097658378307015415">Pred prijavo vstopite kot gost, da aktivirate omrežje <ph name="NETWORK_ID" />.</translation>
 <translation id="1103523840287552314">Vedno prevedi ta jezik: <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Kartice SIM ni bilo mogoče zaznati</translation>
 <translation id="1108600514891325577">&amp;Ustavi</translation>
 <translation id="1110155001042129815">Počakaj</translation>
 <translation id="1112420131909513020">Zavihek v ozadju uporablja Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Sinhronizacijo je onemogočil skrbnik.</translation>
 <translation id="2127372758936585790">Nizkoenergijski polnilnik</translation>
 <translation id="212862741129535676">Odstotek zasedenosti frekvenčnega stanja</translation>
+<translation id="212876957201860463">Pripravljanje nastavitve mobilne naprave …</translation>
 <translation id="2129825002735785149">Posodobitev vtičnika</translation>
 <translation id="2131077480075264">»<ph name="APP_NAME" />« ni mogoče namestiti, ker »<ph name="IMPORT_NAME" />« tega ne dovoli.</translation>
 <translation id="21354425047973905">Skrivanje kod PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Podatki so bili šifrirani z vašim geslom za Google Račun z dnem
           <ph name="TIME" />. To ne vključuje plačilnih sredstev in naslovov iz Googla Pay.</translation>
 <translation id="2419706071571366386">Zaradi varnosti se odjavite iz računalnika, ko ga ne uporabljate.</translation>
+<translation id="2422125132043002186">Obnovitev vsebnika za Linux je bila preklicana</translation>
 <translation id="2423578206845792524">Sh&amp;rani sliko kot ...</translation>
 <translation id="2428510569851653187">Opišite, kaj ste počeli, ko se je zavihek zrušil</translation>
 <translation id="2431027948063157455">Pomočnika Google ni bilo mogoče naložiti. Preverite omrežno povezavo in poskusite znova.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Dostopanje do zvočnih vhodov in videovhodov</translation>
 <translation id="3090819949319990166">Zunanje datoteke crx ni mogoče kopirati v <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Naprava »<ph name="DEVICE_NAME" />« je seznanjena</translation>
+<translation id="3092699946856346803">Vstavite kartico SIM in poskusite znova</translation>
 <translation id="3101709781009526431">Datum in ura</translation>
 <translation id="310671807099593501">Spletno mesto uporablja Bluetooth</translation>
 <translation id="3115147772012638511">Čakam predpomnilnik ...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Datoteke in programi, določeni za karanteno:</translation>
 <translation id="3282568296779691940">Prijava v Chrome</translation>
 <translation id="3285322247471302225">Nov &amp;zavihek</translation>
+<translation id="3286654161521615710">Uporabljata brskalnik Chrome in zaganjalnik za napravo <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Ogled in brisanje podatkov za prijavo, shranjenih na varnostnem ključu</translation>
 <translation id="3288047731229977326">Razširitve, ki se izvajajo v razvijalskem načinu, lahko škodijo vašemu računalniku. Če niste razvijalec, zaradi varnosti onemogočite razširitve, ki se izvajajo v razvijalskem načinu.</translation>
 <translation id="3289856944988573801">Če želite preveriti, ali so na voljo posodobitve, uporabite ethernet ali Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Strežniško potrdilo SSL</translation>
 <translation id="3775705724665058594">Pošiljanje v naprave</translation>
 <translation id="3776796446459804932">Ta razširitev krši pravilnik Spletne trgovine Chrome.</translation>
+<translation id="3777483481409781352">Mobilne naprave ni bilo mogoče aktivirati</translation>
 <translation id="3777806571986431400">Razširitev omogočena</translation>
 <translation id="3778152852029592020">Prenos je bil preklican.</translation>
 <translation id="3778208826288864398">Varnostni ključ je zaklenjen, ker ste prevečkrat vnesli napačno kodo PIN. Ponastaviti boste morali varnostni ključ.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Črno-belo</translation>
 <translation id="4136203100490971508">Nočna svetloba se bo samodejno izklopila ob sončnem vzhodu.</translation>
 <translation id="4138267921960073861">Prikaži uporabniška imena in fotografije na prijavnem zaslonu</translation>
+<translation id="4142052906269098341">Odklepanje naprave <ph name="DEVICE_TYPE" /> s telefonom. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Boljša kakovost videoposnetkov in prihranek energije v akumulatorju. Videoposnetki se bodo predvajali samo na zaslonu, ki podpira Google Cast.</translation>
 <translation id="4145922204387553806">Naj vam Pomočnik pokaže informacije glede na vsebino zaslona</translation>
 <translation id="4146026355784316281">Vedno odpri s sistemskim pregledovalnikom</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Izvozi</translation>
 <translation id="42137655013211669">Strežnik je onemogočil dostop do tega vira.</translation>
 <translation id="4215350869199060536">Ojoj, neveljavni znaki v imenu.</translation>
+<translation id="4220648711404560261">Med aktiviranjem je prišlo do napake.</translation>
 <translation id="4225397296022057997">Na vseh spletnih mestih</translation>
 <translation id="4232375817808480934">Konfiguriranje storitve Kerberos</translation>
 <translation id="4235200303672858594">Celoten zaslon</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Nastavitve zunanjih naprav za shranjevanje</translation>
 <translation id="447252321002412580">Pomagajte izboljšati funkcije in delovanje Chroma</translation>
 <translation id="4474155171896946103">Dodaj vse zavihke med zaznamke ...</translation>
+<translation id="4474461121892222090">Dokončanje aktiviranja prenosa podatkov v mobilnem omrežju lahko traja do 15 minut.</translation>
 <translation id="4475552974751346499">Iskanje v prenosih</translation>
 <translation id="4476590490540813026">Športnik</translation>
 <translation id="4477015793815781985">Vključevati morajo Ctrl, Alt ali ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Konfiguriranje navideznega računalnika. To lahko traja nekaj minut.</translation>
 <translation id="4480590691557335796">Chrome lahko poišče škodljivo programsko opremo v računalniku in jo odstrani</translation>
 <translation id="4481530544597605423">Naprave, za katere je bila preklicana seznanitev</translation>
+<translation id="4483579413421375386">Pokaži za spletno mesto</translation>
 <translation id="4495419450179050807">Ne pokaži na tej strani</translation>
 <translation id="4500114933761911433">Vtičnik <ph name="PLUGIN_NAME" /> se je zrušil</translation>
 <translation id="450099669180426158">Ikona klicaja</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Vnesite PIN za napravo »<ph name="DEVICE_NAME" />«:</translation>
 <translation id="4648491805942548247">Nezadostna dovoljenja</translation>
 <translation id="4648499713050786492">Preden dodate osebo, odklenite profil.</translation>
+<translation id="4650591383426000695">Prekinitev povezave telefona z napravo <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Spletne komponente ni bilo mogoče naložiti s sredstvi predstavitvenega načina.</translation>
 <translation id="465878909996028221">Za preusmeritve v brskalnike so podprti samo protokoli http, https in file.</translation>
 <translation id="4659077111144409915">Glavni račun</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Priključite napravo <ph name="DEVICE_TYPE" /> v vir napajanja.</translation>
 <translation id="5115338116365931134">Enotna prijava</translation>
 <translation id="5116628073786783676">Shr&amp;ani zvok kot ...</translation>
+<translation id="5117139026559873716">Prekličite povezavo telefona in naprave <ph name="DEVICE_TYPE" />. Ne bosta se več samodejno povezala.</translation>
 <translation id="5117427536932535467">Teme in ozadja</translation>
 <translation id="5117625797180141189">Dokument <ph name="DOCUMENT_NAME" /> je bil uspešno natisnjen</translation>
 <translation id="5117930984404104619">Spremljanje obnašanja drugih razširitev, vključno z obiskanimi URL-ji</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Kazalo lokacije <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Meni s skritimi zaznamki</translation>
 <translation id="5464632865477611176">Zaženi tokrat</translation>
+<translation id="5464660706533281090">Otroški uporabnik te nastavitve ne more spremeniti.</translation>
 <translation id="5466374726908360271">&amp;Prilepi in poišči »<ph name="SEARCH_TERMS" />«</translation>
 <translation id="5471768120198416576">Pozdravljeni! Jaz sem glas za pretvorbo besedila v govor.</translation>
 <translation id="5473333559083690127">Vnovični vnos nove kode PIN</translation>
@@ -3206,6 +3219,7 @@
 <translation id="5817918615728894473">Seznani</translation>
 <translation id="5821565227679781414">Ustvari bližnjico</translation>
 <translation id="5825412242012995131">Vklop (priporočeno)</translation>
+<translation id="5826395379250998812">Povežite napravo <ph name="DEVICE_TYPE" /> s telefonom. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Običajno ime (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Tiskanje ...</translation>
@@ -3427,6 +3441,7 @@
 <translation id="6129691635767514872">Izbrani podatki so bili odstranjeni iz Chroma in sinhroniziranih naprav. V Google Računu so morda druge vrste zgodovine brskanja, kot so iskanja in dejavnosti iz drugih Googlovih storitev, na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Pripomba o Netscapeovem potrdilu</translation>
 <translation id="6129953537138746214">Presledek</translation>
+<translation id="6130024555057767093">Obvestila so trenutno blokirana za vsa spletna mesta razen za tista, za katera jih omogočite posamično.</translation>
 <translation id="6136114942382973861">Zapri vrstico za prenose</translation>
 <translation id="6137767437444130246">Uporabniško potrdilo</translation>
 <translation id="6138680304137685902">Podpis X9.62 ECDSA z algoritmom SHA-384</translation>
@@ -3472,6 +3487,7 @@
 <translation id="620722923698527029">Vedno odpri povezave te vrste v povezani aplikaciji</translation>
 <translation id="6207282396926186323">Namestitev aplikacije <ph name="APP_NAME" /> (aplikacija za Linux)</translation>
 <translation id="6207937957461833379">Država/regija</translation>
+<translation id="6208521041562685716">Prenos podatkov v mobilnih omrežjih je v postopku aktiviranja</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: sinhronizacija ne deluje</translation>
 <translation id="6212039847102026977">Prikaži dodatne lastnosti omrežja</translation>
 <translation id="6212168817037875041">Izklop zaslona</translation>
@@ -3833,6 +3849,7 @@
 <translation id="677965093459947883">Zelo majhna</translation>
 <translation id="6780439250949340171">upravljanje drugih nastavitev</translation>
 <translation id="6781284683813954823">Povezava do priložnostnega logotipa</translation>
+<translation id="6781978626986383437">Varnostno kopiranje vsebnika za Linux je bilo preklicano</translation>
 <translation id="6782111308708962316">Drugim spletnim mestom prepreči shranjevanje in branje podatkov piškotkov</translation>
 <translation id="6786747875388722282">Razširitve</translation>
 <translation id="6787839852456839824">Bližnjične tipke</translation>
@@ -4120,6 +4137,7 @@
 <translation id="7197632491113152433">V računu smo našli toliko aplikacij, ki jih je mogoče uporabljati v tej napravi: <ph name="NUMBER_OF_APPS" />.</translation>
 <translation id="7199158086730159431">Pomoč</translation>
 <translation id="7200083590239651963">Izbira konfiguracije</translation>
+<translation id="7201042526153088083">Namestite aplikacije in igre iz Googla Play v napravi <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Več o tem&lt;/a&gt;</translation>
 <translation id="720110658997053098">Ta naprava naj bo trajno v načinu kioska</translation>
 <translation id="7201118060536064622">Element »<ph name="DELETED_ITEM_NAME" />« je izbrisan</translation>
 <translation id="7201420661433230412">Prikaz datotek</translation>
@@ -4144,6 +4162,7 @@
 <translation id="7229570126336867161">Potreben je EVDO</translation>
 <translation id="7230787553283372882">Prilagajanje velikosti besedila</translation>
 <translation id="7232750842195536390">Preimenovanje ni uspelo</translation>
+<translation id="7234010996000898150">Preklic obnovitve vsebnika za Linux</translation>
 <translation id="7235716375204803342">Pridobivanje dejavnosti ...</translation>
 <translation id="7235737137505019098">Na varnostnem ključu ni dovolj prostora za dodatne račune.</translation>
 <translation id="7238585580608191973">Prstni odtis SHA-256</translation>
@@ -4279,6 +4298,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Odpiranje vseh v &amp;novem oknu}=1{Odpiranje v &amp;novem oknu}one{Odpiranje vseh (#) v &amp;novem oknu}two{Odpiranje vseh (#) v &amp;novem oknu}few{Odpiranje vseh (#) v &amp;novem oknu}other{Odpiranje vseh (#) v &amp;novem oknu}}</translation>
 <translation id="7434509671034404296">Razvijalec</translation>
 <translation id="7436921188514130341">Ti šment! Napaka med preimenovanjem.</translation>
+<translation id="7437427339141948518">Obvestila so izklopljena</translation>
 <translation id="7438976808740265764">Flash Player po decembru 2020 ne bo več podprt.</translation>
 <translation id="7441736921018636843">Če želite spremeniti to nastavitev, <ph name="BEGIN_LINK" />ponastavite sinhronizacijo<ph name="END_LINK" />, da odstranite geslo za sinhronizacijo</translation>
 <translation id="7441830548568730290">Drugi uporabniki</translation>
@@ -4408,6 +4428,7 @@
 <translation id="7643932971554933646">Dovolite spletnemu mestu ogled datotek?</translation>
 <translation id="7644543211198159466">Barva in tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (lastnik)</translation>
+<translation id="7645681574855902035">Preklic varnostnega kopiranja vsebnika za Linux</translation>
 <translation id="7647403192093989392">Ni nedavnih dejavnosti</translation>
 <translation id="7648142322539582331">Vzpostavite povezavo z internetom, če želite nastaviti starševski nadzor</translation>
 <translation id="7648992873808071793">Shranjevanje datotek v tej napravi</translation>
@@ -4859,6 +4880,7 @@
 <translation id="8256319818471787266">Piki</translation>
 <translation id="8257950718085972371">Še naprej preprečuj dostop do kamere</translation>
 <translation id="8259239505248583312">Pa začnimo</translation>
+<translation id="8259556432390118667">Vrednost barve v šestnajstiškem zapisu</translation>
 <translation id="8260126382462817229">Poskusite se znova prijaviti.</translation>
 <translation id="8260864402787962391">Miška</translation>
 <translation id="8261378640211443080">Ta razširitev ni navedena v storitvi <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> in je bila morda dodana brez vaše vednosti.</translation>
@@ -5111,6 +5133,7 @@
 <translation id="8662911384982557515">Sprememba domače strani na: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome ne more nastaviti slike ozadja.</translation>
 <translation id="8663099077749055505">Vedno blokiraj samodejne prenose več datotek na <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Želite, da se za to spletno mesto prikazujejo obvestila?</translation>
 <translation id="8664389313780386848">&amp;Ogled vira strani</translation>
 <translation id="8665180165765946056">Varnostno kopiranje je končano</translation>
 <translation id="866611985033792019">Zaupaj temu potrdilu za prepoznavanje uporabnikov e-pošte</translation>
@@ -5400,6 +5423,7 @@
 <translation id="9065203028668620118">Uredi</translation>
 <translation id="9066773882585798925">Branje besedila na glas</translation>
 <translation id="9066782832737749352">Pretvorba besedila v govor</translation>
+<translation id="9068849894565669697">Izbira barve</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Miška USB je povezana</translation>
@@ -5437,6 +5461,7 @@
 <translation id="9131487537093447019">Pošiljanje sporočil napravam Bluetooth in prejemanje sporočil od naprav Bluetooth.</translation>
 <translation id="9134304429738380103">Da, sem za.</translation>
 <translation id="9137013805542155359">Pokaži izvirno besedilo</translation>
+<translation id="9137157311132182254">Prednostni iskalnik</translation>
 <translation id="9137916601698928395">Odpri povezavo kot <ph name="USER" /></translation>
 <translation id="9138978632494473300">Dodajte bližnjice tem mestom:</translation>
 <translation id="9140067245205650184">Uporabljate nepodprto zastavico funkcije: <ph name="BAD_FLAG" />. Ogroženi bosta stabilnost in varnost.</translation>
@@ -5509,6 +5534,7 @@
 <translation id="962802172452141067">Drevo mape z zaznamki</translation>
 <translation id="964286338916298286">Skrbnik za IT je za vašo napravo onemogočil dodatke za Chrome.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Aplikacija}one{Aplikacije}two{Aplikacije}few{Aplikacije}other{Aplikacije}}</translation>
+<translation id="965211523698323809">Prejemanje in pošiljanje sporočil SMS z napravo <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">S tem boste odjavljeni iz Google Računov. Spremembe zaznamkov, zgodovine, gesel in drugih nastavitev ne bodo več sinhronizirane z Google Računom. Obstoječi podatki bodo še naprej shranjeni v Google Računu in mogoče jih bo upravljati na <ph name="BEGIN_LINK" />Google Nadzorni plošči<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Shranjeni podatki</translation>
 <translation id="968000525894980488">Vklopite storitve Google Play</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 080fbf5..a3231c49 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Операција читања или писања је захтевана уз неважеће смањење на: „<ph name="DEVICE_NAME" />“.</translation>
 <translation id="1097658378307015415">Пре пријављивања приступите као гост да бисте активирали мрежу <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Увек преводи <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Откривање SIM картице није успело</translation>
 <translation id="1108600514891325577">&amp;Stop (Заустави)</translation>
 <translation id="1110155001042129815">Сачекај</translation>
 <translation id="1112420131909513020">Картица у позадини користи Bluetooth</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">Администратор је онемогућио синхронизацију.</translation>
 <translation id="2127372758936585790">Пуњач мале снаге</translation>
 <translation id="212862741129535676">Проценат заузетости стања фреквенције</translation>
+<translation id="212876957201860463">Подешавање мобилног уређаја се припрема...</translation>
 <translation id="2129825002735785149">Ажурирај додатну компоненту</translation>
 <translation id="2131077480075264">Није успело инсталирање „<ph name="APP_NAME" />“ јер то не дозвољава „<ph name="IMPORT_NAME" />“</translation>
 <translation id="21354425047973905">Сакриј PIN-ове</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187">Подаци су шифровани помоћу Google лозинке од
           <ph name="TIME" />. То не обухвата начине плаћања и адресе из Google Pay-а.</translation>
 <translation id="2419706071571366386">Из безбедносних разлога се одјавите када не користите рачунар.</translation>
+<translation id="2422125132043002186">Враћање Linux-а је отказано</translation>
 <translation id="2423578206845792524">Са&amp;чувај слику као...</translation>
 <translation id="2428510569851653187">Опишите шта сте радили када је картица отказала</translation>
 <translation id="2431027948063157455">Google помоћник није успео да се учита. Проверите мрежну везу, па покушајте поново.</translation>
@@ -1420,6 +1423,7 @@
 <translation id="3090193911106258841">Приступа се аудио и видео улазу</translation>
 <translation id="3090819949319990166">Није успело копирање спољне crx датотеке у датотеку <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Упарили сте „<ph name="DEVICE_NAME" />“</translation>
+<translation id="3092699946856346803">Убаците SIM картицу и пробајте поново</translation>
 <translation id="3101709781009526431">Датум и време</translation>
 <translation id="310671807099593501">Сајт користи Bluetooth</translation>
 <translation id="3115147772012638511">Чека се кеш меморија...</translation>
@@ -1527,6 +1531,7 @@
 <translation id="3281892622610078515">Датотеке и програми који треба да се ставе у карантин:</translation>
 <translation id="3282568296779691940">Пријављивање у Chrome</translation>
 <translation id="3285322247471302225">Нова &amp;картица</translation>
+<translation id="3286654161521615710">Користе га прегледач Chrome и покретач уређаја <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Прегледајте и избришите податке за пријављивање сачуване на безбедносном кључу</translation>
 <translation id="3288047731229977326">Додаци покренути у режиму програмера могу да нашкоде рачунару. Ако нисте програмер, требало би да онемогућите ове додатке покренуте у режиму програмера да бисте се заштитили.</translation>
 <translation id="3289856944988573801">Да бисте потражили ажурирања, користите етернет или Wi-Fi.</translation>
@@ -1871,6 +1876,7 @@
 <translation id="3775432569830822555">Сертификат SSL сервера</translation>
 <translation id="3775705724665058594">Пошаљите на своје уређаје</translation>
 <translation id="3776796446459804932">Овај додатак крши смернице Chrome веб-продавнице.</translation>
+<translation id="3777483481409781352">Активирање мобилног уређаја није успело</translation>
 <translation id="3777806571986431400">Додатак је омогућен</translation>
 <translation id="3778152852029592020">Преузимање је отказано.</translation>
 <translation id="3778208826288864398">Безбедносни кључ је закључан јер сте превише пута унели погрешан PIN. Треба да ресетујете безбедносни кључ.</translation>
@@ -2134,6 +2140,7 @@
 <translation id="4131410914670010031">Црно-бело</translation>
 <translation id="4136203100490971508">Ноћно светло се аутоматски искључује када сунце изађе</translation>
 <translation id="4138267921960073861">Приказуј корисничка имена и слике на екрану за пријављивање</translation>
+<translation id="4142052906269098341">Откључајте <ph name="DEVICE_TYPE" /> помоћу телефона. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Пронађите видео садржај бољег квалитета и продужите трајање батерије. Видео ће се пуштати само на екрану који подржава Cast.</translation>
 <translation id="4145922204387553806">Дозволите Помоћнику да вам приказује информације на основу онога што је на екрану</translation>
 <translation id="4146026355784316281">Увек отварај помоћу системског приказивача</translation>
@@ -2175,6 +2182,7 @@
 <translation id="42126664696688958">Извези</translation>
 <translation id="42137655013211669">Сервер је забранио приступ овом ресурсу.</translation>
 <translation id="4215350869199060536">Упс, имате недозвољене симболе у имену!</translation>
+<translation id="4220648711404560261">Дошло је до грешке при активацији.</translation>
 <translation id="4225397296022057997">На свим сајтовима</translation>
 <translation id="4232375817808480934">Конфигуришите Kerberos</translation>
 <translation id="4235200303672858594">Цео екран</translation>
@@ -2323,6 +2331,7 @@
 <translation id="4470957202018033307">Подешавања спољне меморије</translation>
 <translation id="447252321002412580">Помозите нам да побољшамо Chrome-ове функције и учинак</translation>
 <translation id="4474155171896946103">Обележи све картице...</translation>
+<translation id="4474461121892222090">Довршавање активације мобилних података може да потраје до 15 минута.</translation>
 <translation id="4475552974751346499">Претражите преузимања</translation>
 <translation id="4476590490540813026">Спортисткиња</translation>
 <translation id="4477015793815781985">Користите Ctrl, Alt или ⌘</translation>
@@ -2332,6 +2341,7 @@
 <translation id="4479877282574735775">Виртуелна машина се конфигуруше. То може да потраје неколико минута.</translation>
 <translation id="4480590691557335796">Chrome може да пронађе штетан софтвер на рачунару и да га уклони</translation>
 <translation id="4481530544597605423">Уређаји чије је упаривање опозвано</translation>
+<translation id="4483579413421375386">Приказуј за овај сајт</translation>
 <translation id="4495419450179050807">Не приказуј на овој страници</translation>
 <translation id="4500114933761911433">Додатна компонента <ph name="PLUGIN_NAME" /> је отказала</translation>
 <translation id="450099669180426158">Икона узвичника</translation>
@@ -2435,6 +2445,7 @@
 <translation id="4647697156028544508">Унесите PIN за „<ph name="DEVICE_NAME" />“:</translation>
 <translation id="4648491805942548247">Недовољан број дозвола</translation>
 <translation id="4648499713050786492">Откључајте профил да бисте додали особу.</translation>
+<translation id="4650591383426000695">Прекините везу између телефона и уређаја <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Учитавање онлајн компоненте са ресурсима за режим демонстрације није успело.</translation>
 <translation id="465878909996028221">За преусмеравања у прегледачу подржани су само протоколи http, https и file.</translation>
 <translation id="4659077111144409915">Примарни налог</translation>
@@ -2736,6 +2747,7 @@
 <translation id="5115309401544567011">Укључите <ph name="DEVICE_TYPE" /> у извор напајања.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Са&amp;чувај аудио снимак као...</translation>
+<translation id="5117139026559873716">Прекините везу телефона са уређајем <ph name="DEVICE_TYPE" />. Они се више неће повезивати аутоматски.</translation>
 <translation id="5117427536932535467">Теме и позадине</translation>
 <translation id="5117625797180141189">Одштампали сте: <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Праћење понашања других додатака, укључујући посећене URL-ове</translation>
@@ -2965,6 +2977,7 @@
 <translation id="5463275305984126951">Индекс локације <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Мени са скривеним обележивачима</translation>
 <translation id="5464632865477611176">Покрени овај пут</translation>
+<translation id="5464660706533281090">Ово подешавање не може да промени дете.</translation>
 <translation id="5466374726908360271">Налепи и претражи „<ph name="SEARCH_TERMS" />“</translation>
 <translation id="5471768120198416576">Здраво! Ја сам глас за претварање текста у говор.</translation>
 <translation id="5473333559083690127">Поново унесите нови PIN</translation>
@@ -3202,6 +3215,7 @@
 <translation id="5817918615728894473">Упари</translation>
 <translation id="5821565227679781414">Направи пречицу</translation>
 <translation id="5825412242012995131">Укључено (препоручено)</translation>
+<translation id="5826395379250998812">Повежите <ph name="DEVICE_TYPE" /> са телефоном. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Опште име (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Штампање...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">Изабрани подаци су уклоњени из Chrome-а и са синхронизованих уређаја. Google налог можда има друге облике историје прегледања, попут претрага и активности на другим Google услугама на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Коментар Netscape сертификата</translation>
 <translation id="6129953537138746214">Размак</translation>
+<translation id="6130024555057767093">Обавештења су тренутно блокирана за све сајтове осим за оне које појединачно омогућите.</translation>
 <translation id="6136114942382973861">Затвори траку са преузимањима</translation>
 <translation id="6137767437444130246">Кориснички сертификат</translation>
 <translation id="6138680304137685902">Потпис X9.62 ECDSA путем SHA-384</translation>
@@ -3468,6 +3483,7 @@
 <translation id="620722923698527029">Увек отварај ове типове линкова у повезаној апликацији</translation>
 <translation id="6207282396926186323">Инсталирајте апликацију <ph name="APP_NAME" /> (Linux апликација)</translation>
 <translation id="6207937957461833379">Земља/регија</translation>
+<translation id="6208521041562685716">Мобилни подаци се активирају</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: синхронизација не ради</translation>
 <translation id="6212039847102026977">Прикажи напредна својства мреже</translation>
 <translation id="6212168817037875041">Искључи екран</translation>
@@ -3829,6 +3845,7 @@
 <translation id="677965093459947883">Јако мали</translation>
 <translation id="6780439250949340171">да управљате другим подешавањима</translation>
 <translation id="6781284683813954823">Линк дудл логотипа</translation>
+<translation id="6781978626986383437">Прављење резервне копије за Linux је отказано</translation>
 <translation id="6782111308708962316">Спречи веб-сајтове треће стране да чувају и читају податке колачића</translation>
 <translation id="6786747875388722282">Додаци</translation>
 <translation id="6787839852456839824">Тастерске пречице</translation>
@@ -4116,6 +4133,7 @@
 <translation id="7197632491113152433">На налогу смо пронашли апликације (<ph name="NUMBER_OF_APPS" />) које могу да се користе на овом уређају.</translation>
 <translation id="7199158086730159431">Потражи помоћ</translation>
 <translation id="7200083590239651963">Изаберите конфигурацију</translation>
+<translation id="7201042526153088083">Инсталирајте апликације и игре са Google Play-а на уређају <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Сазнајте више&lt;/a&gt;</translation>
 <translation id="720110658997053098">Трајно задржи овај уређај у режиму киоска</translation>
 <translation id="7201118060536064622">Ставка „<ph name="DELETED_ITEM_NAME" />“ је избрисана</translation>
 <translation id="7201420661433230412">Прикажи датотеке</translation>
@@ -4140,6 +4158,7 @@
 <translation id="7229570126336867161">Потребан је EVDO</translation>
 <translation id="7230787553283372882">Прилагодите величину текста</translation>
 <translation id="7232750842195536390">Промена назива није успела</translation>
+<translation id="7234010996000898150">Враћање Linux-а се отказује</translation>
 <translation id="7235716375204803342">Преузимају се активности...</translation>
 <translation id="7235737137505019098">На безбедносном кључу нема довољно простора за још налога.</translation>
 <translation id="7238585580608191973">SHA-256 Fingerprint</translation>
@@ -4275,6 +4294,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Отвори све у &amp;новом прозору}=1{Отвори у &amp;новом прозору}one{Отвори све (#) у &amp;новом прозору}few{Отвори све (#) у &amp;новом прозору}other{Отвори све (#) у &amp;новом прозору}}</translation>
 <translation id="7434509671034404296">Програмер</translation>
 <translation id="7436921188514130341">О, не! Дошло је до грешке током промене назива.</translation>
+<translation id="7437427339141948518">Обавештења су искључена</translation>
 <translation id="7438976808740265764">Flash Player више неће бити подржан од децембра 2020.</translation>
 <translation id="7441736921018636843">Да бисте променили ово подешавање, <ph name="BEGIN_LINK" />ресетујте синхронизацију<ph name="END_LINK" /> да бисте уклонили приступну фразу за синхронизацију</translation>
 <translation id="7441830548568730290">Други корисници</translation>
@@ -4404,6 +4424,7 @@
 <translation id="7643932971554933646">Желите ли да дозволите да сајт прегледа датотеке?</translation>
 <translation id="7644543211198159466">Боја и тема</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (власник)</translation>
+<translation id="7645681574855902035">Отказује се прављење резервне копије за Linux</translation>
 <translation id="7647403192093989392">Нема недавних активности</translation>
 <translation id="7648142322539582331">Повежите се на интернет да бисте подесили родитељски надзор</translation>
 <translation id="7648992873808071793">складишти датотеке на овом уређају</translation>
@@ -4855,6 +4876,7 @@
 <translation id="8256319818471787266">Искрица</translation>
 <translation id="8257950718085972371">Настави да блокираш приступ камери</translation>
 <translation id="8259239505248583312">Идемо</translation>
+<translation id="8259556432390118667">Хексадецимална вредност боје</translation>
 <translation id="8260126382462817229">Пробајте поново да се пријавите</translation>
 <translation id="8260864402787962391">Миш</translation>
 <translation id="8261378640211443080"><ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> не наводи овај додатак и он је можда додат без вашег знања.</translation>
@@ -5107,6 +5129,7 @@
 <translation id="8662911384982557515">Промените почетну страницу у: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome не може да подеси позадину.</translation>
 <translation id="8663099077749055505">Увек блокирај више аутоматских преузимања на хосту <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Желите ли да се приказују обавештења за овај сајт?</translation>
 <translation id="8664389313780386848">&amp;Прикажи извор странице</translation>
 <translation id="8665180165765946056">Резервна копија је направљена</translation>
 <translation id="866611985033792019">Овај сертификат је поуздан за идентификацију корисника имејла</translation>
@@ -5396,6 +5419,7 @@
 <translation id="9065203028668620118">Измени</translation>
 <translation id="9066773882585798925">Слушајте читање текста наглас</translation>
 <translation id="9066782832737749352">Претварање текста у говор</translation>
+<translation id="9068849894565669697">Изаберите боју</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB миш је повезан</translation>
@@ -5433,6 +5457,7 @@
 <translation id="9131487537093447019">Слање порука на Bluetooth уређаје и примање порука са њих.</translation>
 <translation id="9134304429738380103">Да, омогући.</translation>
 <translation id="9137013805542155359">Прикажи оригинал</translation>
+<translation id="9137157311132182254">Жељени претраживач</translation>
 <translation id="9137916601698928395">Отвори линк као <ph name="USER" /></translation>
 <translation id="9138978632494473300">Додајте пречице до следећих места:</translation>
 <translation id="9140067245205650184">Користите неподржану ознаку функције: <ph name="BAD_FLAG" />. Угрозићете стабилност и безбедност.</translation>
@@ -5505,6 +5530,7 @@
 <translation id="962802172452141067">Стабло директоријума обележивача</translation>
 <translation id="964286338916298286">ИТ администратор је онемогућио Chrome забавне стварчице за уређај.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Апликација}one{Апликације}few{Апликације}other{Апликације}}</translation>
+<translation id="965211523698323809">Шаљите и примајте SMS-ове са уређаја <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Овим ћете се одјавити са Google налога. Промене обележивача, историје, лозинки и других подешавања се више неће синхронизовати са Google налогом. Међутим, постојећи подаци ће се и даље чувати на Google налогу и можете да управљате њима на <ph name="BEGIN_LINK" />Google контролној табли<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Сачувани подаци</translation>
 <translation id="968000525894980488">Укључите Google Play услуге.</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 4195c008..610bada 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Läs- eller skrivåtgärden begärdes med en ogiltig offset på: <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Aktivera nätverket <ph name="NETWORK_ID" /> genom att logga in som gäst innan du loggar in</translation>
 <translation id="1103523840287552314">Översätt alltid <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Det gick inte att hitta SIM-kortet.</translation>
 <translation id="1108600514891325577">&amp;Stopp</translation>
 <translation id="1110155001042129815">Vänta</translation>
 <translation id="1112420131909513020">En flik i bakgrunden använder Bluetooth</translation>
@@ -755,6 +756,7 @@
 <translation id="2126167708562367080">Synkronisering har inaktiverats av administratören.</translation>
 <translation id="2127372758936585790">Laddning med låg effekt</translation>
 <translation id="212862741129535676">Kapacitetsprocentsats för frekvens</translation>
+<translation id="212876957201860463">Konfigurationen av din enhet med mobildata förbereds …</translation>
 <translation id="2129825002735785149">Uppdatera pluginprogrammet</translation>
 <translation id="2131077480075264">Det går inte att installera <ph name="APP_NAME" /> eftersom den inte tillåts av <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Dölj pinkoder</translation>
@@ -955,6 +957,7 @@
 <translation id="241727068219398187">Data krypterades med Google-lösenordet den
           <ph name="TIME" />. Betalningsuppgifter och adresser från Google Pay omfattas inte.</translation>
 <translation id="2419706071571366386">Av säkerhetsskäl bör du logga ut när datorn inte används.</translation>
+<translation id="2422125132043002186">Återställningen av Linux har avbrutits</translation>
 <translation id="2423578206845792524">S&amp;para bild som...</translation>
 <translation id="2428510569851653187">Beskriv vad du höll på med när fliken kraschade</translation>
 <translation id="2431027948063157455">Det gick inte att läsa in Google Assistent. Kontrollera nätverksanslutningen och försök igen.</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">Får åtkomst till ljud- och videoindata</translation>
 <translation id="3090819949319990166">Det går inte att kopiera den externa CRX-filen till <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558"><ph name="DEVICE_NAME" /> har kopplats</translation>
+<translation id="3092699946856346803">Sätt i ditt SIM-kort och försök igen</translation>
 <translation id="3101709781009526431">Datum och tid</translation>
 <translation id="310671807099593501">Webbplatsen använder Bluetooth</translation>
 <translation id="3115147772012638511">Väntar på cache-minnet...</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">Filer och program som sätts i karantän:</translation>
 <translation id="3282568296779691940">Logga in i Chrome</translation>
 <translation id="3285322247471302225">Ny &amp;flik</translation>
+<translation id="3286654161521615710">Används i Chrome-webbläsaren och <ph name="DEVICE_TYPE" />-översikten</translation>
 <translation id="3286737518123001369">Visa och radera inloggningsuppgifter som lagrats på säkerhetsnyckeln</translation>
 <translation id="3288047731229977326">Tillägg som körs i utvecklarläge kan skada datorn. Om du inte är en utvecklare bör du inaktivera tillägg som körs i utvecklarläge för att skydda dig.</translation>
 <translation id="3289856944988573801">Använd Ethernet eller Wi-Fi om du vill söka efter uppdateringar.</translation>
@@ -1874,6 +1879,7 @@
 <translation id="3775432569830822555">SSL-servercertifikat</translation>
 <translation id="3775705724665058594">Skicka till dina enheter</translation>
 <translation id="3776796446459804932">Det här tillägget bryter mot policyn för Chrome Web Store.</translation>
+<translation id="3777483481409781352">Det gick inte att aktivera enheten med mobildata</translation>
 <translation id="3777806571986431400">Tillägget har aktiverats</translation>
 <translation id="3778152852029592020">Nedladdnningen avbröts.</translation>
 <translation id="3778208826288864398">Säkerhetsnyckeln har låsts eftersom du har angett fel pinkod för många gånger. Du måste återställa säkerhetsnyckeln.</translation>
@@ -2137,6 +2143,7 @@
 <translation id="4131410914670010031">Svartvitt</translation>
 <translation id="4136203100490971508">Nattljuset släcks automatiskt vid soluppgången</translation>
 <translation id="4138267921960073861">Visa användarnamn och foton på inloggningssidan</translation>
+<translation id="4142052906269098341">Lås upp <ph name="DEVICE_TYPE" /> med telefonen. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Få bättre videokvalitet och spara på batteriet. Videor spelas bara upp på den Cast-kompatibla skärmen.</translation>
 <translation id="4145922204387553806">Tillåt att assistenten ger information utifrån vad som visas på skärmen</translation>
 <translation id="4146026355784316281">Öppna alltid med systemets visningsprogram</translation>
@@ -2178,6 +2185,7 @@
 <translation id="42126664696688958">Exportera</translation>
 <translation id="42137655013211669">Åtkomsten till den här resursen blockerades av servern.</translation>
 <translation id="4215350869199060536">Det finns ogiltiga symboler i namnet!</translation>
+<translation id="4220648711404560261">Ett fel inträffade under aktiveringen.</translation>
 <translation id="4225397296022057997">På alla webbplatser</translation>
 <translation id="4232375817808480934">Konfigurera Kerberos</translation>
 <translation id="4235200303672858594">Helskärm</translation>
@@ -2326,6 +2334,7 @@
 <translation id="4470957202018033307">Inställningar för extern lagring</translation>
 <translation id="447252321002412580">Bidra till att förbättra Chromes funktioner och prestanda</translation>
 <translation id="4474155171896946103">Skapa bokmärken för alla flikar ...</translation>
+<translation id="4474461121892222090">Det kan ta upp till 15 minuter att slutföra aktiveringen av mobildata.</translation>
 <translation id="4475552974751346499">Sök i nedladdningar</translation>
 <translation id="4476590490540813026">Idrottare</translation>
 <translation id="4477015793815781985">Använd Ctrl, Alt eller ⌘</translation>
@@ -2335,6 +2344,7 @@
 <translation id="4479877282574735775">Den virtuella maskinen konfigureras. Det kan ta några minuter.</translation>
 <translation id="4480590691557335796">Chrome kan hjälpa dig att upptäcka skadlig programvara på datorn och ta bort den</translation>
 <translation id="4481530544597605423">Frånkopplade enheter</translation>
+<translation id="4483579413421375386">Visa på webbplatsen</translation>
 <translation id="4495419450179050807">Visa inte den här sidan</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> har kraschat</translation>
 <translation id="450099669180426158">Ikon med utropstecken</translation>
@@ -2438,6 +2448,7 @@
 <translation id="4647697156028544508">Ange pinkoden för <ph name="DEVICE_NAME" />:</translation>
 <translation id="4648491805942548247">Otillräckliga behörigheter</translation>
 <translation id="4648499713050786492">Du måste låsa upp din profil innan du kan lägga till en person.</translation>
+<translation id="4650591383426000695">Koppla från mobilen från <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Det gick inte att läsa in onlinekomponenten med resurser för demoläge.</translation>
 <translation id="465878909996028221">Endast protokollen http, https och file stöds för omdirigeringar till en annan webbläsare.</translation>
 <translation id="4659077111144409915">Primärt konto</translation>
@@ -2739,6 +2750,7 @@
 <translation id="5115309401544567011">Anslut <ph name="DEVICE_TYPE" /> till en strömkälla.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">S&amp;para ljud som...</translation>
+<translation id="5117139026559873716">Koppla från telefonen från <ph name="DEVICE_TYPE" />. De ansluts inte längre till varandra automatiskt.</translation>
 <translation id="5117427536932535467">Teman och bakgrunder</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> har skrivits ut</translation>
 <translation id="5117930984404104619">Bevaka hur övriga tillägg fungerar, däribland besökta webbadresser</translation>
@@ -2968,6 +2980,7 @@
 <translation id="5463275305984126951">Index till <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menyn innehåller dolda bokmärken</translation>
 <translation id="5464632865477611176">Kör den här gången</translation>
+<translation id="5464660706533281090">Inställningen kan inte ändras av barn.</translation>
 <translation id="5466374726908360271">Kli&amp;stra in och sök efter <ph name="SEARCH_TERMS" /></translation>
 <translation id="5471768120198416576">Hejsan! Nu används min röst för text till tal.</translation>
 <translation id="5473333559083690127">Ange ny pinkod igen</translation>
@@ -3203,6 +3216,7 @@
 <translation id="5817918615728894473">Koppla</translation>
 <translation id="5821565227679781414">Skapa genväg</translation>
 <translation id="5825412242012995131">På (rekommenderas)</translation>
+<translation id="5826395379250998812">Anslut <ph name="DEVICE_TYPE" /> till telefonen. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Vanligt namn (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Skriver ut...</translation>
@@ -3424,6 +3438,7 @@
 <translation id="6129691635767514872">Den data som markerades har tagits bort från Chrome och från synkroniserade enheter. Det kan finnas webbhistorik av annat slag i Google-kontot på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />, t.ex. sökningar och aktivitet på andra tjänster från Google.</translation>
 <translation id="6129938384427316298">Kommentar för Netscape-certifikat</translation>
 <translation id="6129953537138746214">Blanksteg</translation>
+<translation id="6130024555057767093">Aviseringar blockeras för närvarande för alla webbplatser utom de webbplatser du specifikt tillåter.</translation>
 <translation id="6136114942382973861">Stäng nedladdningsfältet</translation>
 <translation id="6137767437444130246">Användarcertifikat</translation>
 <translation id="6138680304137685902">X9.62 ECDSA-signatur med SHA-384</translation>
@@ -3469,6 +3484,7 @@
 <translation id="620722923698527029">Öppna alltid dessa typer av länkar i den kopplade appen</translation>
 <translation id="6207282396926186323">Installera <ph name="APP_NAME" /> (Linux-app)</translation>
 <translation id="6207937957461833379">Land/region</translation>
+<translation id="6208521041562685716">Mobildata aktiveras</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Synkroniseringen fungerar inte</translation>
 <translation id="6212039847102026977">Visa avancerade nätverksinställningar</translation>
 <translation id="6212168817037875041">Stäng av skärmen</translation>
@@ -3830,6 +3846,7 @@
 <translation id="677965093459947883">Mycket liten</translation>
 <translation id="6780439250949340171">hantera andra inställningar</translation>
 <translation id="6781284683813954823">Länk till doodlen</translation>
+<translation id="6781978626986383437">Säkerhetskopieringen av Linux har avbrutits</translation>
 <translation id="6782111308708962316">Hindra att webbplatser från tredje part sparar och läser cookiedata</translation>
 <translation id="6786747875388722282">Tillägg</translation>
 <translation id="6787839852456839824">Kortkommandon</translation>
@@ -4117,6 +4134,7 @@
 <translation id="7197632491113152433">Vi hittade <ph name="NUMBER_OF_APPS" /> appar i ditt konto som kan användas på den här enheten.</translation>
 <translation id="7199158086730159431">Få h&amp;jälp</translation>
 <translation id="7200083590239651963">Välj konfiguration</translation>
+<translation id="7201042526153088083">Installera appar och spel från Google Play på <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Läs mer&lt;/a&gt;</translation>
 <translation id="720110658997053098">Behåll enheten permanent i kioskläge</translation>
 <translation id="7201118060536064622"><ph name="DELETED_ITEM_NAME" /> har raderats</translation>
 <translation id="7201420661433230412">Visa filer</translation>
@@ -4141,6 +4159,7 @@
 <translation id="7229570126336867161">Behöver EVDO</translation>
 <translation id="7230787553283372882">Anpassa textstorleken</translation>
 <translation id="7232750842195536390">Det gick inte att byta namn</translation>
+<translation id="7234010996000898150">Återställningen av Linux avbryts</translation>
 <translation id="7235716375204803342">Hämtar aktiviteter …</translation>
 <translation id="7235737137505019098">Det finns inte tillräckligt mycket utrymme på säkerhetsnyckeln för fler konton.</translation>
 <translation id="7238585580608191973">SHA-256-fingeravtryck</translation>
@@ -4276,6 +4295,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Öppna alla i ett &amp;nytt fönster}=1{Öppna i ett &amp;nytt fönster}other{Öppna alla (#) i ett &amp;nytt fönster}}</translation>
 <translation id="7434509671034404296">Utvecklare</translation>
 <translation id="7436921188514130341">Ett fel uppstod när namnet skulle bytas.</translation>
+<translation id="7437427339141948518">Aviseringar av</translation>
 <translation id="7438976808740265764">Stödet för Flash Player upphör i slutet av december 2020.</translation>
 <translation id="7441736921018636843"><ph name="BEGIN_LINK" />Återställ synkroniseringen<ph name="END_LINK" /> så att lösenfrasen för synkronisering tas bort om du vill ändra den här inställningen</translation>
 <translation id="7441830548568730290">Andra användare</translation>
@@ -4405,6 +4425,7 @@
 <translation id="7643932971554933646">Vill du ge webbplatsen läsbehörighet till filer?</translation>
 <translation id="7644543211198159466">Färg och tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (ägare)</translation>
+<translation id="7645681574855902035">Säkerhetskopieringen av Linux avbryts …</translation>
 <translation id="7647403192093989392">Inga aktiviteter nyligen</translation>
 <translation id="7648142322539582331">Anslut till internet om du vill ställa in barnfilter</translation>
 <translation id="7648992873808071793">Spara filer på enheten</translation>
@@ -4856,6 +4877,7 @@
 <translation id="8256319818471787266">Ludde</translation>
 <translation id="8257950718085972371">Fortsätt att blockera kameraåtkomsten</translation>
 <translation id="8259239505248583312">Då kör vi</translation>
+<translation id="8259556432390118667">Hexadecimalt färgvärde</translation>
 <translation id="8260126382462817229">Försök att logga in igen</translation>
 <translation id="8260864402787962391">Mus</translation>
 <translation id="8261378640211443080">Det här tillägget finns inte i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> och kan ha lagts till utan att du vet om det.</translation>
@@ -5108,6 +5130,7 @@
 <translation id="8662911384982557515">Ändra startsida till: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Bakgrundsbilden kan inte anges i Chrome.</translation>
 <translation id="8663099077749055505">Blockera alltid flera automatiska nedladdningar på <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Vill du visa aviseringar för den här webbplatsen?</translation>
 <translation id="8664389313780386848">Visa &amp;sidkälla</translation>
 <translation id="8665180165765946056">Säkerhetskopieringen är klar</translation>
 <translation id="866611985033792019">Lita på detta certifikat för identifiering av e-postanvändare</translation>
@@ -5397,6 +5420,7 @@
 <translation id="9065203028668620118">Redigera</translation>
 <translation id="9066773882585798925">Få text uppläst</translation>
 <translation id="9066782832737749352">Text till tal</translation>
+<translation id="9068849894565669697">Välj färg</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB-mus har anslutits</translation>
@@ -5434,6 +5458,7 @@
 <translation id="9131487537093447019">Skicka och ta emot meddelanden från Bluetooth-enheter.</translation>
 <translation id="9134304429738380103">Ja</translation>
 <translation id="9137013805542155359">Visa original</translation>
+<translation id="9137157311132182254">Prioriterad sökmotor</translation>
 <translation id="9137916601698928395">Öppna länk som <ph name="USER" /></translation>
 <translation id="9138978632494473300">Lägg till genvägar till följande platser:</translation>
 <translation id="9140067245205650184">Du använder en funktionsflagga som inte stöds: <ph name="BAD_FLAG" />. Detta påverkar stabilitet och säkerhet negativt.</translation>
@@ -5506,6 +5531,7 @@
 <translation id="962802172452141067">Mappstruktur för bokmärken</translation>
 <translation id="964286338916298286">IT-administratören har inaktiverat Godbitar från Chrome för din enhet.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{App}other{Appar}}</translation>
+<translation id="965211523698323809">Skicka och ta emot sms på <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Du loggas ut från dina Google-konton. När bokmärken, historik, lösenord och andra inställningar ändras kommer dessa ändringar inte längre att synkroniseras med Google-kontot. Uppgifter som redan har sparats i Google-kontot finns däremot kvar och kan hanteras via <ph name="BEGIN_LINK" />Google Översikt<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Sparad data</translation>
 <translation id="968000525894980488">Aktivera Google Play-tjänster.</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index bfcf6090..4940d2c 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Shughuli za kusoma au kuandika ziliombwa kwa kutumia nambari isiyo sahihi kwenye : "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Kabla ya kuingia, tafadhali ingia kama Mgeni ili kuamilisha mtandao <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Tafsiri <ph name="LANGUAGE" /> kila wakati</translation>
+<translation id="1104038495841596279">Tumeshindwa kutambua SIM kadi yako</translation>
 <translation id="1108600514891325577">&amp;Acha</translation>
 <translation id="1110155001042129815">Subiri</translation>
 <translation id="1112420131909513020">Kichupo kinachofanya kazi chinichini kinatumia Bluetooth</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">Usawazishaji umezimwa na msimamizi wako.</translation>
 <translation id="2127372758936585790">Chaja ya nguvu ya chini</translation>
 <translation id="212862741129535676">Asilimia ya Ukaaji wa Hali ya Masafa</translation>
+<translation id="212876957201860463">Inajitayarisha kuweka mipangilio ya kifaa chako cha mkononi...</translation>
 <translation id="2129825002735785149">Sasisha programu jalizi</translation>
 <translation id="2131077480075264">Imeshindwa kusakinisha "<ph name="APP_NAME" />" kwa sababu hairuhusiwa na "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Ficha PIN</translation>
@@ -953,6 +955,7 @@
 <translation id="241727068219398187">Data yako imesimbwa kwa njia fiche kwa kutumia nenosiri la Google lililokuwepo
           <ph name="TIME" />. Hali hii haijumuishi njia za kulipa na anwani kutoka Google Pay.</translation>
 <translation id="2419706071571366386">Kwa usalama, ondoka kwenye akaunti wakati kompyuta yako haitumiki.</translation>
+<translation id="2422125132043002186">Imeghairi urejeshaji wa Linux</translation>
 <translation id="2423578206845792524">Hifadhi picha kama...</translation>
 <translation id="2428510569851653187">Eleza shughuli ulizokuwa ukifanya kichupo kilipoacha kufanya kazi</translation>
 <translation id="2431027948063157455">Programu ya Mratibu wa Google haijapakiwa, tafadhali angalia muunganisho wako wa mtandao na ujaribu tena.</translation>
@@ -1420,6 +1423,7 @@
 <translation id="3090193911106258841">Inafikia vifaa vya kuingiza sauti na video</translation>
 <translation id="3090819949319990166">Haiwezi kunakili faili ya CRX kwenye <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" imeoanishwa</translation>
+<translation id="3092699946856346803">Tafadhali weka SIM yako kisha ujaribu tena</translation>
 <translation id="3101709781009526431">Tarehe na wakati</translation>
 <translation id="310671807099593501">Tovuti inatumia bluetooth</translation>
 <translation id="3115147772012638511">Inasubiri akiba...</translation>
@@ -1527,6 +1531,7 @@
 <translation id="3281892622610078515">Faili na programu ambazo zitawekwa kwenye folda ya vipengee vilivyotengwa:</translation>
 <translation id="3282568296779691940">Ingia katika Chrome</translation>
 <translation id="3285322247471302225">Kichupo &amp;Kipya</translation>
+<translation id="3286654161521615710">Inatumiwa na kivinjari cha Chrome na kifungua programu cha <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Angalia na ufute data ya kuingia katika akaunti iliyohifadhiwa kwenye ufunguo wako wa usalama</translation>
 <translation id="3288047731229977326">Viendelezi vinavyoendeshwa katika hali ya msanidi programu vinaweza vikadhuru kompyuta yako. Kama wewe si msanidi programu, unapaswa kuzima viendelezi hivi vinavyoendeshwa katika hali ya msanidi programu ili ukae salama.</translation>
 <translation id="3289856944988573801">Ili kuangalia sasisho, tafadhali tumia Ethernet au Wi-Fi.</translation>
@@ -1868,6 +1873,7 @@
 <translation id="3775432569830822555">Cheti cha Seva cha SSL</translation>
 <translation id="3775705724665058594">Tuma kwenye vifaa vyako</translation>
 <translation id="3776796446459804932">Kiendelezi hiki kinakiuka sera ya Duka la Wavuti ya Chrome.</translation>
+<translation id="3777483481409781352">Imeshindwa kuwasha kifaa cha mkononi</translation>
 <translation id="3777806571986431400">Kiendelezi Kimewezeshwa</translation>
 <translation id="3778152852029592020">Upakuaji ulighairiwa.</translation>
 <translation id="3778208826288864398">Tumefunga ufunguo wa usalama kwa sababu umeweka PIN isiyo sahihi mara nyingi mno. Utahitaji kubadilisha ufunguo wa usalama.</translation>
@@ -2129,6 +2135,7 @@
 <translation id="4131410914670010031">Nyeusi na nyeupe</translation>
 <translation id="4136203100490971508">Kipengele cha Mwanga wa Usiku kitazimwa kiotomatiki wakati wa macheo</translation>
 <translation id="4138267921960073861">Onyesha majina ya watumiaji na picha kwenye skrini ya kuingia</translation>
+<translation id="4142052906269098341">Fungua <ph name="DEVICE_TYPE" /> yako ukitumia simu yako. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Pata video bora na uokoe muda wa matumizi ya betri. Video itacheza tu kwenye skrini inayoweza kutumia Google Cast.</translation>
 <translation id="4145922204387553806">Ruhusu programu ya Mratibu ikuonyeshe maelezo yanayohusiana na kilicho kwenye skrini yako</translation>
 <translation id="4146026355784316281">Fungua Ukitumia Kitazamaji Cha Mfumo Wakati Wowote</translation>
@@ -2170,6 +2177,7 @@
 <translation id="42126664696688958">Hamisha</translation>
 <translation id="42137655013211669">Idhini ya kufikia rasilimali hii ilizuiwa na seva.</translation>
 <translation id="4215350869199060536">Lo!, alama batili katika jina!</translation>
+<translation id="4220648711404560261">Hitilafu imetokea wakati wa kuwasha mipangilio.</translation>
 <translation id="4225397296022057997">Kwenye tovuti zote</translation>
 <translation id="4232375817808480934">Weka Mipangilio ya Kerberos</translation>
 <translation id="4235200303672858594">Skrini Nzima</translation>
@@ -2318,6 +2326,7 @@
 <translation id="4470957202018033307">Mapendeleo ya hifadhi ya nje</translation>
 <translation id="447252321002412580">Tusaidie tuboreshe utendaji na vipengele vya Chrome</translation>
 <translation id="4474155171896946103">Alamisha vichupo vyote...</translation>
+<translation id="4474461121892222090">Huenda ikachukua hadi dakika 15 kukamilisha hatua ya kuwasha data ya mtandao wa simu.</translation>
 <translation id="4475552974751346499">Tafuta katika vipakuliwa</translation>
 <translation id="4476590490540813026">Mwanariadha</translation>
 <translation id="4477015793815781985">Jumuisha Ctrl, Alt, au ⌘</translation>
@@ -2327,6 +2336,7 @@
 <translation id="4479877282574735775">Inaweka mipangilio ya mashine dhahania. Hatua hii inaweza kuchukua dakika kadhaa.</translation>
 <translation id="4480590691557335796">Chrome inaweza kupata programu hatari kwenye kompyuta yako na kuiondoa</translation>
 <translation id="4481530544597605423">Vifaa visivyooanishwa</translation>
+<translation id="4483579413421375386">Onyesha arifa za tovuti</translation>
 <translation id="4495419450179050807">Usionyeshe kwenye ukurasa huu</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> imeacha kufanya kazi</translation>
 <translation id="450099669180426158">Aikoni ya alama hisi</translation>
@@ -2430,6 +2440,7 @@
 <translation id="4647697156028544508">Tafadhali ingiza PIN ya "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Idhini isiyotosha</translation>
 <translation id="4648499713050786492">Tafadhali fungua wasifu wako kabla ya kumwongeza mtumiaji.</translation>
+<translation id="4650591383426000695">Tenganisha simu yako na <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Imeshindwa kupakia kipengele cha mtandaoni chenye nyenzo za hali ya onyesho.</translation>
 <translation id="465878909996028221">Ni http, https na itifaki za faili ndizo tu zinazotumika kwenye uelekezaji wa kivinjari kwingine.</translation>
 <translation id="4659077111144409915">Akaunti ya msingi</translation>
@@ -2731,6 +2742,7 @@
 <translation id="5115309401544567011">Tafadhali weka kifaa chako cha <ph name="DEVICE_TYPE" /> kwenye chaji.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">&amp;Hifadhi Sauti Kama...</translation>
+<translation id="5117139026559873716">Tenganisha simu yako na <ph name="DEVICE_TYPE" /> yako Hazitaunganishwa tena kiotomatiki.</translation>
 <translation id="5117427536932535467">Mandhari</translation>
 <translation id="5117625797180141189">Imechapisha <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Ufuatiliaji wa tabia ya viendelezi vingine, pamoja na URL zilizotembelewa</translation>
@@ -2960,6 +2972,7 @@
 <translation id="5463275305984126951">Fahirisi ya <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menyu iliyo na alamisho zilizofichwa</translation>
 <translation id="5464632865477611176">Endesha wakati huu</translation>
+<translation id="5464660706533281090">Mipangilio hii haiwezi kubadilishwa na mtoto.</translation>
 <translation id="5466374726908360271">Ba&amp;ndika na utafute “<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Hujambo! Mimi ni sauti yako inayobadilisha maandishi kwenda usemi.</translation>
 <translation id="5473333559083690127">Weka tena PIN mpya</translation>
@@ -3195,6 +3208,7 @@
 <translation id="5817918615728894473">Oanisha</translation>
 <translation id="5821565227679781414">Unda Njia Mkato</translation>
 <translation id="5825412242012995131">Imewashwa (Inapendekezwa)</translation>
+<translation id="5826395379250998812">Unganisha <ph name="DEVICE_TYPE" /> yako na simu yako. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Jina la Kawaida (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Inachapisha...</translation>
@@ -3416,6 +3430,7 @@
 <translation id="6129691635767514872">Data uliyochagua imeondolewa kwenye Chrome na kwenye vifaa vilivyosawazishwa. Huenda Akaunti yako ya Google ina aina nyingine za historia ya kuvinjari kama vile utafutaji na shughuli kutoka huduma nyingine za Google katika <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Kidokezo cha Cheti cha Netscape</translation>
 <translation id="6129953537138746214">Nafasi</translation>
+<translation id="6130024555057767093">Kwa sasa arifa zimezuiwa kwenye tovuti zote ila kwa tovuti ambazo unakubali mwenyewe.</translation>
 <translation id="6136114942382973861">Funga upau wa vipakuliwa</translation>
 <translation id="6137767437444130246">Cheti cha mtumiaji</translation>
 <translation id="6138680304137685902">Sahihi ya X9.62 ECDSA yenye SHA-384</translation>
@@ -3461,6 +3476,7 @@
 <translation id="620722923698527029">Fungua aina hizi za viungo katika programu husika wakati wowote</translation>
 <translation id="6207282396926186323">Sakinisha <ph name="APP_NAME" /> (Programu ya Linux)</translation>
 <translation id="6207937957461833379">Nchi/Eneo</translation>
+<translation id="6208521041562685716">Data ya mtandao wa simu inawashwa</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Kipengele cha kusawazisha hakifanyi kazi</translation>
 <translation id="6212039847102026977">Onyesha sifa za kina za mtandao</translation>
 <translation id="6212168817037875041">Izime skrini</translation>
@@ -3822,6 +3838,7 @@
 <translation id="677965093459947883">Ndogo sana</translation>
 <translation id="6780439250949340171">dhibiti mipangilio mingine</translation>
 <translation id="6781284683813954823">Kiungo cha Doodle</translation>
+<translation id="6781978626986383437">Imeghairi kuhifadhi rudufu ya Linux</translation>
 <translation id="6782111308708962316">Zuia tovuti nyingine kuhifadhi na kusoma data ya vidakuzi</translation>
 <translation id="6786747875388722282">Viendelezi</translation>
 <translation id="6787839852456839824">Mikato ya kibodi</translation>
@@ -4109,6 +4126,7 @@
 <translation id="7197632491113152433">Tumepata programu <ph name="NUMBER_OF_APPS" /> kutoka akaunti yako ambazo zinaweza kutumika kwenye kifaa hiki.</translation>
 <translation id="7199158086730159431">Pata Usaidizi</translation>
 <translation id="7200083590239651963">Chagua mipangilio</translation>
+<translation id="7201042526153088083">Sakinisha programu na michezo kutoka Google Play kwenye <ph name="DEVICE_TYPE" /> yako. &lt;a target="_blank" href="<ph name="URL" />"&gt;Pata maelezo zaidi&lt;/a&gt;</translation>
 <translation id="720110658997053098">Weka kifaa hiki katika hali ya skrini nzima kila wakati</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' imefutwa</translation>
 <translation id="7201420661433230412">Angalia faili</translation>
@@ -4133,6 +4151,7 @@
 <translation id="7229570126336867161">Inahitaji EVDO</translation>
 <translation id="7230787553283372882">Badilisha ukubwa wa maandishi ukufae</translation>
 <translation id="7232750842195536390">Imeshindwa kubadilisha jina</translation>
+<translation id="7234010996000898150">Inaghairi urejeshaji wa Linux</translation>
 <translation id="7235716375204803342">Inaleta shughuli...</translation>
 <translation id="7235737137505019098">Ufunguo wako wa usalama hauna nafasi ya kutosha ili kutumia akaunti nyingine zozote.</translation>
 <translation id="7238585580608191973">Alama ya kidole ya SHA-256</translation>
@@ -4268,6 +4287,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Fungua Zote katika &amp;Dirisha Jipya}=1{Fungua katika &amp;Dirisha Jipya}other{Fungua Zote (#) katika Dirisha Jipya}}</translation>
 <translation id="7434509671034404296">Wasanidi Programu</translation>
 <translation id="7436921188514130341">Samahani. Hitilafu imetokea wakati wa kubadilisha jina.</translation>
+<translation id="7437427339141948518">Arifa zimezimwa</translation>
 <translation id="7438976808740265764">Tutaacha kutumia Flash Player baada ya Desemba 2020.</translation>
 <translation id="7441736921018636843">Ili ubadilishe mipangilio hii, <ph name="BEGIN_LINK" />weka upya kipengele cha usawazishaji<ph name="END_LINK" /> ili kuondoa kauli yako ya siri ya usawazishaji</translation>
 <translation id="7441830548568730290">Watumiaji wengine</translation>
@@ -4397,6 +4417,7 @@
 <translation id="7643932971554933646">Je, ungependa kuruhusu tovuti ione faili?</translation>
 <translation id="7644543211198159466">Rangi na mandhari</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (mmiliki)</translation>
+<translation id="7645681574855902035">Inaghairi kuhifadhi rudufu ya Linux</translation>
 <translation id="7647403192093989392">Hakuna shughuli za hivi majuzi</translation>
 <translation id="7648142322539582331">Unganisha kwenye Intaneti ili uweke Udhibiti wa Wazazi</translation>
 <translation id="7648992873808071793">Hifadhi faili kwenye kifaa hiki</translation>
@@ -4850,6 +4871,7 @@
 <translation id="8256319818471787266">Spaki</translation>
 <translation id="8257950718085972371">Endelea kuzuia ufikiaji wa kamera</translation>
 <translation id="8259239505248583312">Anza kutumia</translation>
+<translation id="8259556432390118667">Thamani ya rangi ya hex</translation>
 <translation id="8260126382462817229">Jaribu kuingia katika akaunti tena</translation>
 <translation id="8260864402787962391">Kipanya</translation>
 <translation id="8261378640211443080">Kiendelezi hiki hakijaorodheshwa katika <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na huenda kiliongezwa pasipo ridhaa yako.</translation>
@@ -5102,6 +5124,7 @@
 <translation id="8662911384982557515">Badilisha ukurasa wako wa mwanzo uwe: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome haiwezi kuweka mandhari.</translation>
 <translation id="8663099077749055505">Zuia upakuaji otomatiki kwa wingi kwenye <ph name="HOST" /> wakati wote</translation>
+<translation id="8663534996262079772">Je, ungependa kuonyesha arifa za tovuti hii?</translation>
 <translation id="8664389313780386848">&amp;Tazama asili ya ukurasa</translation>
 <translation id="8665180165765946056">Imemaliza kuhifadhi nakala</translation>
 <translation id="866611985033792019">Amini cheti hiki kwa kutambua watumiaji wa barua pepe</translation>
@@ -5391,6 +5414,7 @@
 <translation id="9065203028668620118">Badilisha</translation>
 <translation id="9066773882585798925">Maandishi yatasomwa kwa sauti</translation>
 <translation id="9066782832737749352">Kusoma maandishi kwa sauti</translation>
+<translation id="9068849894565669697">Chagua rangi</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Kipanya cha USB kimeunganishwa</translation>
@@ -5428,6 +5452,7 @@
 <translation id="9131487537093447019">Tuma na upokee barua kutoka kwenye vifaa vya Bluetooth.</translation>
 <translation id="9134304429738380103">Ndiyo, ninakubali.</translation>
 <translation id="9137013805542155359">Onyesha asili</translation>
+<translation id="9137157311132182254">Mtambo wa kutafuta unaopendelea</translation>
 <translation id="9137916601698928395">Fungua kiungo ukitumia <ph name="USER" /></translation>
 <translation id="9138978632494473300">Ongeza njia za mkato kwenye sehemu zifuatazo:</translation>
 <translation id="9140067245205650184">Unatumia kitia alama cha kipengele kisichoruhusiwa: <ph name="BAD_FLAG" />. Uthabiti na usalama utaathirika.</translation>
@@ -5500,6 +5525,7 @@
 <translation id="962802172452141067">Kielelezo cha folda ya alamisho</translation>
 <translation id="964286338916298286">Msimamizi wako wa Tehama amezima Zawadi za Chrome kwa kifaa chako.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Programu}other{Programu}}</translation>
+<translation id="965211523698323809">Tuma na upokee SMS kupitia <ph name="DEVICE_TYPE" /> yako. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Hatua hii itakuondoa katika akaunti zako za Google. Mabadiliko utakayofanya kwenye alamisho, historia, manenosiri na mipangilio yako mingine hayatasawazishwa katika Akaunti yako ya Google. Hata hivyo, data yako ya sasa itaendelea kuhifadhiwa katika Akaunti yako ya Google na inaweza kudhibitiwa kwenye <ph name="BEGIN_LINK" />Dashibodi ya Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Data iliyohifadhiwa</translation>
 <translation id="968000525894980488">Washa huduma za Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index ac812e3..57a2062 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -129,7 +129,7 @@
 <translation id="1177138678118607465">தேடல், விளம்பரங்கள் மற்றும் பிற Google சேவைகளைத் தனிப்பயனாக்க, உங்கள் உலாவல் வரலாற்றை Google பயன்படுத்தக்கூடும். myaccount.google.com/activitycontrols/search எனும் இணைப்பில் எப்போது வேண்டுமானாலும் இதை மாற்றலாம்</translation>
 <translation id="1177863135347784049">தனிப்பயன்</translation>
 <translation id="1178581264944972037">இடைநிறுத்து</translation>
-<translation id="117916940443676133">'பின்' மூலம் உங்கள் பாதுகாப்பு விசை பாதுகாக்கப்படவில்லை. உள்நுழைவுத் தரவு நிர்வகிக்க முதலில் 'பின்னை' அமைக்கவும்.</translation>
+<translation id="117916940443676133">'பின்' மூலம் உங்கள் பாதுகாப்பு விசை பாதுகாக்கப்படவில்லை. உள்நுழைவுத் தரவை நிர்வகிக்க முதலில் 'பின்னை' அமைக்கவும்.</translation>
 <translation id="1181037720776840403">அகற்று</translation>
 <translation id="1183237619868651138">அக தற்காலிகச் சேமிப்பில் <ph name="EXTERNAL_CRX_FILE" />ஐ நிறுவ முடியாது.</translation>
 <translation id="1185924365081634987">இந்த நெட்வொர்க் பிழையைச் சரிசெய்ய, <ph name="GUEST_SIGNIN_LINK_START" />விருந்தினராக உலாவவும்<ph name="GUEST_SIGNIN_LINK_END" /> முயற்சி செய்யலாம்.</translation>
@@ -178,7 +178,7 @@
 <translation id="1241753985463165747">அனுமதித்தால், தற்போதைய இணையதளத்தில் உங்கள் எல்லாத் தரவையும் படிக்கும், மாற்றும்</translation>
 <translation id="1242633766021457174">உங்கள் அமைப்புகளை மீட்டமைக்க <ph name="THIRD_PARTY_TOOL_NAME" /> விரும்புகிறது.</translation>
 <translation id="1243314992276662751">பதிவேற்று</translation>
-<translation id="1244265436519979884">Linux மீட்டெடுத்தல் செயலில் உள்ளது</translation>
+<translation id="1244265436519979884">Linux மீட்டமைத்தல் செயலில் உள்ளது</translation>
 <translation id="1244303850296295656">நீட்டிப்புப் பிழை</translation>
 <translation id="1249643471736608405">தடுக்கப்பட்டுள்ளதன் காரணமாக <ph name="PLUGIN_NAME" /> தடைசெய்யப்பட்டுள்ளது.</translation>
 <translation id="1251366534849411931">திறந்த நெளி அடைப்புக்குறி இல்லை: <ph name="ERROR_LINE" /></translation>
@@ -390,7 +390,7 @@
 <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (விருந்தினர்)</translation>
 <translation id="1572266655485775982">வைஃபையை இயக்கு</translation>
 <translation id="1572876035008611720">மின்னஞ்சலை உள்ளிடவும்</translation>
-<translation id="1574038418461948632"><ph name="FILENAME" /> இல் செய்யப்பட்டுள்ள மாற்றங்களைச் சேமிக்கவா?</translation>
+<translation id="1574038418461948632"><ph name="FILENAME" /> கோப்பில் செய்யப்பட்டுள்ள மாற்றங்களைச் சேமிக்கவா?</translation>
 <translation id="1576594961618857597">இயல்பு வெள்ளைநிற அவதார்</translation>
 <translation id="1581962803218266616">&amp;கண்டுபிடிப்பானில் காண்பி</translation>
 <translation id="1582955169539260415">[<ph name="FINGERPRINT_NAME" />] கைரேகையை நீக்கு</translation>
@@ -492,7 +492,7 @@
 <translation id="1709217939274742847">அங்கீகரிப்பதற்கான டிக்கெட் ஒன்றைத் தேர்ந்தெடுக்கவும். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
 <translation id="1712349894969001173">இந்தக் கடவுச்சொல்லை உங்கள் iPhone இல் பெறுங்கள்</translation>
 <translation id="1712552549805331520">உங்கள் கம்ப்யூட்டரில் தரவை நிரந்தரமாகச் சேமிக்க <ph name="URL" /> விரும்புகிறது</translation>
-<translation id="1716976638776486616">கணக்குப் படத்தை மாற்று</translation>
+<translation id="1716976638776486616">கணக்கின் படத்தை மாற்று</translation>
 <translation id="1717218214683051432">மோஷன் சென்சார்கள்</translation>
 <translation id="1718835860248848330">கடந்த ஒரு மணிநேரம்</translation>
 <translation id="1719312230114180055">குறிப்பு: கைரேகையானது வலிமையான கடவுச்சொல் அல்லது பின்னை விடப் பாதுகாப்புக் குறைவாக இருக்கக்கூடும்.</translation>
@@ -666,7 +666,7 @@
 <translation id="1965624977906726414">எந்தச் சிறப்பு அனுமதிகளும் இல்லை.</translation>
 <translation id="1969654639948595766">WebRTC உரைப் பதிவுகள் (<ph name="WEBRTC_TEXT_LOG_COUNT" />)</translation>
 <translation id="1970368523891847084">வீடியோ பயன்முறைக்குச் சென்றது</translation>
-<translation id="197228003527531594">இந்தப் பக்கம் உங்கள் சாதனத்தில் உள்ள கோப்புறையில் இருக்கும் அனைத்து கோப்புகளையும் பார்க்க அனுமதிக்கப்பட்டுள்ளது.</translation>
+<translation id="197228003527531594">இந்தப் பக்கத்திற்கு உங்கள் சாதனத்தில் உள்ள கோப்புறையில் இருக்கும் அனைத்து கோப்புகளையும் பார்க்கும் அனுமதி உள்ளது.</translation>
 <translation id="197288927597451399">வைத்திரு</translation>
 <translation id="1974043046396539880">CRL பகிர்வுப் புள்ளிகள்</translation>
 <translation id="1974060860693918893">மேம்பட்டவை</translation>
@@ -773,7 +773,7 @@
 <translation id="2148756636027685713">வடிவமைத்தல் முடிந்தது</translation>
 <translation id="2148892889047469596">தாவலை அலைபரப்பு</translation>
 <translation id="2150139952286079145">இலக்குகளைத் தேடு</translation>
-<translation id="2150212764721500731">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் இந்த <ph name="FOLDERNAME" /> கோப்புகளில் நேரடியாகச் சேமிக்க முடியும்.</translation>
+<translation id="2150212764721500731">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் இந்த <ph name="FOLDERNAME" /> கோப்புறையிலுள்ள கோப்புகளில் நேரடியாகச் சேமிக்க முடியும்.</translation>
 <translation id="2150661552845026580">"<ph name="EXTENSION_NAME" />" சேர்க்க வேண்டுமா?</translation>
 <translation id="2151576029659734873">செல்லுபடியாகாத தாவல் அட்டவணை உள்ளிடப்பட்டது.</translation>
 <translation id="2154484045852737596">கார்டைத் திருத்தவும்</translation>
@@ -1214,7 +1214,7 @@
 <translation id="2773288106548584039">லெகஸி உலாவி ஆதரவு</translation>
 <translation id="2773802008104670137">இது போன்ற கோப்புகள் உங்கள் கம்ப்யூட்டருக்குத் தீங்கு விளைவிக்கக்கூடும்.</translation>
 <translation id="2775104091073479743">கைரேகைகளை மாற்று</translation>
-<translation id="2775188527796017992">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் <ph name="FILENAME" /> இல் நேரடியாகச் சேமிக்க முடியும். தாவலை மூடும் வரை இந்த வலைதளத்தால் மாற்றங்களைச் சேமிக்க முடியும்.</translation>
+<translation id="2775188527796017992">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் <ph name="FILENAME" /> கோப்பில் நேரடியாகச் சேமிக்க முடியும். தாவலை மூடும் வரை இந்த வலைதளத்தால் மாற்றங்களைச் சேமிக்க முடியும்.</translation>
 <translation id="2776441542064982094">நெட்வொர்க்கில் பதிவுசெய்வதற்கான சாதனங்கள் எதுவும் இல்லாததுபோல் தெரிகிறது. உங்கள் சாதனம் இயக்கத்தில் இருந்து இணையத்துடன் இணைக்கப்பட்டிருந்தால், அதன் வழிகாட்டிக் கையேட்டில் உள்ள வழிமுறைகளைப் பயன்படுத்தி பதிவுசெய்ய முயலவும்.</translation>
 <translation id="2780009105947267877">செருகுநிரல் VMமை அமைக்கிறது...</translation>
 <translation id="2781692009645368755">Google Pay</translation>
@@ -2903,7 +2903,7 @@
 <translation id="5370819323174483825">&amp;மீண்டும் ஏற்று</translation>
 <translation id="5372529912055771682">வழங்கப்பட்ட பதிவு பயன்முறை இயக்க முறைமையின் இந்தப் பதிப்பால் ஆதரிக்கப்படவில்லை. நீங்கள் புதிய பதிப்பை இயக்குவதை உறுதி செய்து, மீண்டும் முயலவும்.</translation>
 <translation id="5374359983950678924">படத்தை மாற்றுக</translation>
-<translation id="5375793835576008230">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் <ph name="FOLDERNAME" /> கோப்புகளில் நேரடியாகச் சேமிக்க முடியும். தாவலை மூடும் வரை இந்த வலைதளத்தால் மாற்றங்களைச் சேமிக்க முடியும்.</translation>
+<translation id="5375793835576008230">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் <ph name="FOLDERNAME" /> கோப்புறையிலுள்ள கோப்புகளில் நேரடியாகச் சேமிக்க முடியும். தாவலை மூடும் வரை இந்த வலைதளத்தால் மாற்றங்களைச் சேமிக்க முடியும்.</translation>
 <translation id="5376169624176189338">முந்தைய பக்கத்திற்கு செல்ல கிளிக் செய்க, வரலாற்றைக் காண அழுத்திக்கொண்டே இருங்கள்</translation>
 <translation id="5376931455988532197">மிகப் பெரிய கோப்பு</translation>
 <translation id="537813040452600081">இந்தச் சாளரத்தில் நீங்கள் பார்க்கும் பக்கங்கள் உலாவி வரலாற்றில் தோன்றாது, மேலும் நீங்கள் வெளியேறிய பிறகு, குக்கீகள் போன்ற பிற தடங்களைக் கம்ப்யூட்டரில் விட்டுச் செல்லாது. நீங்கள் பதிவிறக்கிய கோப்புகளும் உருவாக்கிய புக்மார்க்குகளும் பாதுகாக்கப்படாது.</translation>
@@ -3966,7 +3966,7 @@
 <translation id="6979044105893951891">நிர்வகிக்கப்பட்ட விருந்தினர் அமர்வுகளைத் தொடங்கும்/வெளியேறும் அனுமதி</translation>
 <translation id="6979440798594660689">முடக்கு (இயல்பு)</translation>
 <translation id="6979737339423435258">எல்லா நேரமும்</translation>
-<translation id="6980969641756020642">சேமிப்பதற்குக் கிடைக்கும் பிரிண்டர்கள்</translation>
+<translation id="6980969641756020642">அருகிலுள்ள பிரிண்டர்கள்</translation>
 <translation id="6981982820502123353">அணுகல் தன்மை</translation>
 <translation id="6983783921975806247">பதிவுசெய்யப்பட்ட OID</translation>
 <translation id="6984299437918708277">உள்நுழைவுத் திரையில் உங்கள் கணக்கிற்குக் காட்ட வேண்டிய படத்தைத் தேர்வு செய்யவும்</translation>
@@ -4419,7 +4419,7 @@
 <translation id="7661259717474717992">குக்கீத் தரவைச் சேமிக்கவும், படிக்கவும் தளங்களை அனுமதி</translation>
 <translation id="7661451191293163002">பதிவுச் சான்றிதழைப் பெற முடியவில்லை.</translation>
 <translation id="7662283695561029522">உள்ளமைக்க, தட்டவும்</translation>
-<translation id="766254481392580456">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் <ph name="FILENAME" /> இல் நேரடியாகச் சேமிக்க முடியும்</translation>
+<translation id="766254481392580456">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் <ph name="FILENAME" /> கோப்பில் நேரடியாகச் சேமிக்க முடியும்</translation>
 <translation id="7663719505383602579">ரிசீவர்: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7664620655576155379">ஆதரிக்கப்படாத புளூடூத் சாதனம்: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="7665369617277396874">கணக்கைச் சேர்</translation>
@@ -4703,7 +4703,7 @@
       திரைப்படங்கள், டிவி நிகழ்ச்சிகள், இசை, புத்தகங்கள் போன்ற நீங்கள் வாங்கிய உள்ளடக்கம் அல்லது ஆப்ஸ் சார்ந்த பிற வாங்குதல்களும் நீக்கப்படலாம்.
       <ph name="LINE_BREAKS2" />
       இதனால் பிற சாதனங்களில் உள்ள ஆப்ஸ்கள் அல்லது உள்ளடக்கம் பாதிக்கப்படாது.</translation>
-<translation id="8025958612547562988">கண்டறியும் பிரிண்டர்களை உங்கள் சுயவிவரத்தில் சேமிக்கலாம் அல்லது புதிய பிரிண்டர் ஒன்றைச் சேர்க்கலாம்.</translation>
+<translation id="8025958612547562988">ஏற்கனவே உள்ள பிரிண்டர்களை உங்கள் சுயவிவரத்தில் சேமிக்கலாம் அல்லது புதிய பிரிண்டர் ஒன்றைச் சேர்க்கலாம்.</translation>
 <translation id="8026334261755873520">உலாவல் தரவை அழி</translation>
 <translation id="8028060951694135607">Microsoft Key Recovery</translation>
 <translation id="8028803902702117856"><ph name="SIZE" />, <ph name="FILE_NAME" />ஐப் பதிவிறக்குகிறது</translation>
@@ -4784,7 +4784,7 @@
 <translation id="8146177459103116374">இந்த சாதனத்தில் ஏற்கனவே பதிவுசெய்திருந்தால், <ph name="LINK2_START" />நடப்புப் பயனராக உள்நுழையலாம்<ph name="LINK2_END" />.</translation>
 <translation id="8146793085009540321">உள்நுழைய முடியவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும் அல்லது மீண்டும் முயலவும்.</translation>
 <translation id="8151638057146502721">உள்ளமை</translation>
-<translation id="8152021341839173449">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் நேரடியாகப் பின்வரும் கோப்புகளிலும் கோப்புறைகளிலும் சேமிக்க முடியும்.</translation>
+<translation id="8152021341839173449">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் பின்வரும் கோப்புகளிலும் கோப்புறைகளிலும் நேரடியாகச் சேமிக்க முடியும்.</translation>
 <translation id="8152091997436726702">அச்சுப்பொறியைப் பதிவுசெய்தலுக்கான நேரம் கடந்துவிட்டது. பிரிண்டரைப் பதிவுசெய்ய, நீங்கள் அச்சுப்பொறியில் பதிவுசெய்ததை உறுதிப்படுத்த வேண்டும்.</translation>
 <translation id="8154790740888707867">கோப்பு இல்லை</translation>
 <translation id="815491593104042026">அச்சச்சோ!  இது பாதுகாப்பற்ற URLலை (<ph name="BLOCKED_URL" />) பயன்படுத்துவதற்கு உள்ளமைக்கப்பட்டுள்ளதால் அங்கீகாரம் தோல்வியடைந்தது.  உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
@@ -4860,6 +4860,7 @@
 <translation id="8256319818471787266">ஸ்பார்க்கி</translation>
 <translation id="8257950718085972371">கேமரா அணுகலைத் தொடர்ந்து தடு</translation>
 <translation id="8259239505248583312">தொடங்குக</translation>
+<translation id="8259556432390118667">ஹெக்ஸ் வண்ண மதிப்பு</translation>
 <translation id="8260126382462817229">மீண்டும் உள்நுழையவும்</translation>
 <translation id="8260864402787962391">சுட்டி</translation>
 <translation id="8261378640211443080">இந்த நீட்டிப்பு <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> இல் பட்டியலிடப்படவில்லை, மேலும் அது உங்களுக்குத் தெரியாமல் சேர்க்கப்பட்டிருக்கலாம்.</translation>
@@ -4942,7 +4943,7 @@
 <translation id="839736845446313156">பதிவு</translation>
 <translation id="8398877366907290961">இருப்பினும் தொடர்க</translation>
 <translation id="8400146488506985033">நபர்களை நிர்வகி</translation>
-<translation id="8405046151008197676">சமீபத்திய புதுப்பிப்பில் இருந்து ஹைலைட்களைப் பெறுங்கள்</translation>
+<translation id="8405046151008197676">சமீபத்திய புதுப்பிப்பில் இருந்து முக்கியத் தகவல்களைப் பெறுங்கள்</translation>
 <translation id="8410775397654368139">Google Play</translation>
 <translation id="8413385045638830869">முதலில் கேள் (பரிந்துரைத்தது)</translation>
 <translation id="8418445294933751433">தாவலாக &amp;காண்பி</translation>
@@ -5401,6 +5402,7 @@
 <translation id="9065203028668620118">திருத்து</translation>
 <translation id="9066773882585798925">படிக்கப்படும் உரையைக் கேட்கலாம்</translation>
 <translation id="9066782832737749352">உரையிலிருந்து பேச்சு</translation>
+<translation id="9068849894565669697">வண்ணத்தைத் தேர்ந்தெடு</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">புளூடூத்</translation>
 <translation id="9074836595010225693">USB மவுஸ் இணைக்கப்பட்டது</translation>
@@ -5535,5 +5537,5 @@
 <translation id="995782501881226248">YouTube</translation>
 <translation id="996250603853062861">பாதுகாப்பான இணைப்பை உருவாக்குகிறது...</translation>
 <translation id="998747458861718449">க&amp;ண்காணி</translation>
-<translation id="999180493986838144">நீங்கள் செய்யும் மாற்றங்களை <ph name="ORIGIN" /> வலைதளத்தால் <ph name="FOLDERNAME" /> இல் நேரடியாகச் சேமிக்க முடியும். இந்தத் தாவலை மூடும் வரை வலைதளத்தால் மாற்றங்களைப் பார்க்க முடியும்.</translation>
+<translation id="999180493986838144"><ph name="ORIGIN" /> வலைதளத்தால் <ph name="FOLDERNAME" /> கோப்புறையிலுள்ள அனைத்து கோப்புகளையும் பார்க்க முடியும். இந்தத் தாவலை மூடும் வரை வலைதளத்தால் மாற்றங்களைப் பார்க்க முடியும்.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 79cb10c..a4783bbd 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">దీనిలో చెల్లని ఆఫ్‌సెట్‌తో చదివే లేదా రాసే చర్య అభ్యర్థించబడింది: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">సైన్ ఇన్ చేయడానికి ముందుగా, దయచేసి <ph name="NETWORK_ID" /> నెట్‌వర్క్‌ను యాక్టివేట్ చేయడానికి అతిథి లాగా ప్రవేశించండి</translation>
 <translation id="1103523840287552314">ఎల్లప్పుడూ <ph name="LANGUAGE" />ను అనువదించు</translation>
+<translation id="1104038495841596279">మీ SIM కార్డ్‌ను మేము గుర్తించలేకపోయాము</translation>
 <translation id="1108600514891325577">&amp;ఆపు</translation>
 <translation id="1110155001042129815">వేచి ఉండండి</translation>
 <translation id="1112420131909513020">బ్యాక్‌గ్రౌండ్‌ ట్యాబ్ బ్లూటూత్‌ను ఉపయోగిస్తోంది</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">సింక్‌ను మీ నిర్వాహకులు నిలిపివేశారు.</translation>
 <translation id="2127372758936585790">తక్కువ-పవర్ గల ఛార్జర్</translation>
 <translation id="212862741129535676">తరచుదనం స్థితి అధీన శాతం</translation>
+<translation id="212876957201860463">మీ సెల్యులార్ పరికరాన్ని సెటప్ చేయడానికి సిద్ధం చేస్తోంది...</translation>
 <translation id="2129825002735785149">ప్లగిన్‌ను అప్‌డేట్ చేయండి</translation>
 <translation id="2131077480075264">"<ph name="APP_NAME" />"ను అనుమతించనందున దీన్ని ఇన్‌స్టాల్ చేయడం సాధ్యపడలేదు "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">పిన్‌లను దాస్తుంది</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187"><ph name="TIME" /> నాటికి మీ Google పాస్‌వర్డ్‌తో డేటా ఎన్‌క్రిప్ట్ చేయబడింది.
           Google Payకి చెందిన చెల్లింపు పద్ధతులు మరియు చిరునామాలు ఇందులో ఉండవు.</translation>
 <translation id="2419706071571366386">భద్రత కోసం, మీ కంప్యూటర్‌ని ఉపయోగించనప్పుడు సైన్ అవుట్ చేయండి.</translation>
+<translation id="2422125132043002186">Linux పునరుద్ధరణ రద్దయింది</translation>
 <translation id="2423578206845792524">చిత్రాన్ని ఇలా సే&amp;వ్ చేయి...</translation>
 <translation id="2428510569851653187">ట్యాబ్ క్రాష్ అయిన సమయంలో మీరు ఏం చేస్తున్నారో వివరించండి</translation>
 <translation id="2431027948063157455">Google అసిస్టెంట్‌ను లోడ్ చేయడం సాధ్యపడలేదు, దయచేసి మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసుకుని మళ్లీ ప్రయత్నించండి.</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">ఆడియో, వీడియో ఇన్‌పుట్ యాక్సెస్‌ చేయబడుతోంది</translation>
 <translation id="3090819949319990166">బాహ్య crx ఫైల్‌ను <ph name="TEMP_CRX_FILE" />‌కు కాపీ చేయడం సాధ్యపడదు.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" జత చేయబడింది</translation>
+<translation id="3092699946856346803">దయచేసి మీ SIMను చొప్పించి, ఆపై మళ్లీ ప్రయత్నించండి</translation>
 <translation id="3101709781009526431">తేదీ మరియు సమయం</translation>
 <translation id="310671807099593501">సైట్ బ్లూటూత్‌ను ఉపయోగిస్తోంది</translation>
 <translation id="3115147772012638511">కాష్ కోసం వేచి ఉంది...</translation>
@@ -1530,6 +1534,7 @@
 <translation id="3281892622610078515">నిరోధించాల్సిన ఫైల్‌లు, ప్రోగ్రామ్‌లు:</translation>
 <translation id="3282568296779691940">Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="3285322247471302225">క్రొత్త &amp;టాబ్</translation>
+<translation id="3286654161521615710">Chrome బ్రౌజర్, <ph name="DEVICE_TYPE" /> లాంచర్ ద్వారా ఉపయోగించబడుతుంది</translation>
 <translation id="3286737518123001369">మీ 'సెక్యూరిటీ కీ'లో నిల్వ చేసిన సైన్-ఇన్ డేటాను చూసి, తొలగించండి</translation>
 <translation id="3288047731229977326">డెవలపర్ మోడ్‌లో అమలవుతున్న ఎక్స్‌టెన్ష‌న్‌లు మీ కంప్యూటర్‌కు హాని కలిగించవచ్చు. మీరు డెవలపర్ కాకపోతే, సురక్షితంగా ఉంచడానికి డెవలపర్ మోడ్‌లో అమలవుతున్న ఈ ఎక్స్‌టెన్ష‌న్‌లను నిలిపివేయాలి.</translation>
 <translation id="3289856944988573801">అప్‌డేట్‌ల కోసం తనిఖీ చేయడానికి, దయచేసి ఈథర్‌నెట్ లేదా Wi-Fiని ఉపయోగించండి.</translation>
@@ -1874,6 +1879,7 @@
 <translation id="3775432569830822555">SSL సర్వర్ సర్టిఫికెట్</translation>
 <translation id="3775705724665058594">మీ పరికరాలకు పంపండి</translation>
 <translation id="3776796446459804932">ఈ ఎక్స్‌టెన్షన్ Chrome వెబ్ స్టోర్ విధానాన్ని ఉల్లంఘిస్తోంది.</translation>
+<translation id="3777483481409781352">సెల్యులార్ పరికరాన్ని యాక్టివేట్ చేయలేకపోయింది</translation>
 <translation id="3777806571986431400">పొడిగింపు ప్రారంభించబడింది</translation>
 <translation id="3778152852029592020">డౌన్‌లోడ్ చేయడం రద్దు చేయబడింది.</translation>
 <translation id="3778208826288864398">చాలా ఎక్కువ సార్లు తప్పు పిన్‌ను నమోదు చేసినందున సెక్యూరిటీ కీ లాక్ చేయబడింది. మీరు సెక్యూరిటీ కీని రీసెట్ చేయాలి.</translation>
@@ -2137,6 +2143,7 @@
 <translation id="4131410914670010031">నలుపు మరియు తెలుపు</translation>
 <translation id="4136203100490971508">సూర్యోదయ సమయానికి రాత్రి కాంతి స్వయంచాలకంగా ఆఫ్ అవుతుంది</translation>
 <translation id="4138267921960073861">సైన్-ఇన్ స్క్రీన్‌లో వినియోగదారు పేర్లను మరియు ఫోటోలను చూపించు</translation>
+<translation id="4142052906269098341">మీ ఫోన్‌తో <ph name="DEVICE_TYPE" />ను అన్‌లాక్ చేయండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">మెరుగైన నాణ్యత గల వీడియోను పొందండి మరియు బ్యాటరీ జీవితకాలాన్ని పెంపొందించండి. వీడియో మీ ప్రసార అనుకూల స్క్రీన్‌లో మాత్రమే ప్లే అవుతుంది.</translation>
 <translation id="4145922204387553806">మీ స్క్రీన్‌పై ఉన్నవాటికి సంబంధించిన సమాచారాన్ని మీకు చూపడానికి అసిస్టెంట్‌ని అనుమతిస్తుంది</translation>
 <translation id="4146026355784316281">ఎల్లప్పుడూ సిస్టమ్ వ్యూయర్‌తో తెరువు</translation>
@@ -2178,6 +2185,7 @@
 <translation id="42126664696688958">ఎగుమతి చేయి</translation>
 <translation id="42137655013211669">సర్వర్ ఈ వనరుకు యాక్సెస్‌ను నిషేధించింది.</translation>
 <translation id="4215350869199060536">అయ్యో, పేరులో చట్టవ్యతిరేక చిహ్నాలు ఉన్నాయి!</translation>
+<translation id="4220648711404560261">యాక్టివేషన్ సమయంలో ఎర్రర్ సంభవించింది.</translation>
 <translation id="4225397296022057997">అన్ని సైట్‌లలో</translation>
 <translation id="4232375817808480934">Kerberosను కాన్ఫిగర్ చేయండి</translation>
 <translation id="4235200303672858594">పూర్తి స్క్రీన్</translation>
@@ -2326,6 +2334,7 @@
 <translation id="4470957202018033307">బాహ్య నిల్వ ప్రాధాన్యతలు</translation>
 <translation id="447252321002412580">Chrome ఫీచర్‌లు మరియు పనితీరును మెరుగుపరచడంలో సహాయపడండి</translation>
 <translation id="4474155171896946103">అన్ని టాబ్‌లను బుక్‌మార్క్ చేయి...</translation>
+<translation id="4474461121892222090">మొబైల్ డేటా యాక్టివేషన్‌ను పూర్తి చేయడానికి 15 నిమిషాల వరకు పట్టవచ్చు.</translation>
 <translation id="4475552974751346499">డౌన్‌లోడ్‌లను వెతకండి</translation>
 <translation id="4476590490540813026">అథ్లెట్</translation>
 <translation id="4477015793815781985">Ctrl, Alt లేదా ⌘ని చేర్చండి</translation>
@@ -2335,6 +2344,7 @@
 <translation id="4479877282574735775">వర్చువల్ మెషీన్‌ను కాన్ఫిగర్ చేస్తోంది. దీనికి కొద్ది నిమిషాలు పట్టవచ్చు.</translation>
 <translation id="4480590691557335796">Chrome మీ కంప్యూటర్‌లో హానికరమైన సాఫ్ట్‌వేర్‌ని కనుగొని, తీసివేయగలదు</translation>
 <translation id="4481530544597605423">జతను తీసివేసిన పరికరాలు</translation>
+<translation id="4483579413421375386">ఈ సైట్‌కు సంబంధించినవి చూపు</translation>
 <translation id="4495419450179050807">ఈ పేజీని చూపవద్దు</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> క్రాష్ అయింది</translation>
 <translation id="450099669180426158">ఆశ్చర్యార్థక గుర్తు చిహ్నం</translation>
@@ -2438,6 +2448,7 @@
 <translation id="4647697156028544508">దయచేసి "<ph name="DEVICE_NAME" />" కోసం PINను నమోదు చేయండి:</translation>
 <translation id="4648491805942548247">చాలని అనుమతులు</translation>
 <translation id="4648499713050786492">వ్యక్తిని జోడించే ముందు దయచేసి మీ ప్రొఫైల్‌ను అన్‌లాక్ చేయండి.</translation>
+<translation id="4650591383426000695">మీ <ph name="DEVICE_TYPE" /> నుండి మీ ఫోన్‌ను డిస్‌కనెక్ట్ చేయండి</translation>
 <translation id="4651484272688821107">డెమో మోడ్ వనరులతో ఆన్‌లైన్ అంతర్భాగాన్ని లోడ్ చేయడం సాధ్యపడలేదు.</translation>
 <translation id="465878909996028221">కేవలం http, https, ఫైల్ ప్రోటోకాల్‌లు మాత్రమే బ్రౌజర్ మళ్లింపులకు మద్దతిస్తాయి.</translation>
 <translation id="4659077111144409915">ప్రాథమిక ఖాతా</translation>
@@ -2739,6 +2750,7 @@
 <translation id="5115309401544567011">దయచేసి మీ <ph name="DEVICE_TYPE" />ని ఛార్జింగ్ పెట్టండి</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">ఆడియోని ఇలా సే&amp;వ్ చెయ్యి...</translation>
+<translation id="5117139026559873716">మీ <ph name="DEVICE_TYPE" /> నుండి మీ ఫోన్‌ను డిస్‌కనెక్ట్ చేయండి. అవి ఇకపై ఆటోమేటిక్‌గా కనెక్ట్ కావు.</translation>
 <translation id="5117427536932535467">థీమ్‌లు &amp; వాల్‌పేపర్‌లు</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> విజయవంతంగా ముద్రించబడింది</translation>
 <translation id="5117930984404104619">సందర్శించిన URLలతో సహా ఇతర పొడిగింపుల యొక్క ప్రవర్తనను పర్యవేక్షించండి</translation>
@@ -2968,6 +2980,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> యొక్క సూచిక</translation>
 <translation id="5463856536939868464">దాచిపెట్టిన బుక్‌మార్క్‌లు ఉన్న మెను</translation>
 <translation id="5464632865477611176">ఈ సమయాన్ని అమలు చేయి</translation>
+<translation id="5464660706533281090">ఈ సెట్టింగ్‌ను చిన్నారి వినియోగదారు మార్చలేరు.</translation>
 <translation id="5466374726908360271">అతికించి “<ph name="SEARCH_TERMS" />” కోసం వెతకండి</translation>
 <translation id="5471768120198416576">హలో! నేను మీ వచనం నుండి ప్రసంగం వాయిస్‌ని.</translation>
 <translation id="5473333559083690127">కొత్త PINని మళ్లీ నమోదు చేయండి</translation>
@@ -3203,6 +3216,7 @@
 <translation id="5817918615728894473">జత చేయి</translation>
 <translation id="5821565227679781414">షార్ట్‌కట్‌ను సృష్టించు</translation>
 <translation id="5825412242012995131">ఆన్ (సిఫార్సు చేయడమైనది)</translation>
+<translation id="5826395379250998812">మీ <ph name="DEVICE_TYPE" />ను మీ ఫోన్‌తో కనెక్ట్ చేయండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">సాధారణ పేరు (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">ముద్రిస్తోంది...</translation>
@@ -3424,6 +3438,7 @@
 <translation id="6129691635767514872">ఎంచుకోబడిన డేటా- Chromeతో పాటు సమకాలీకరించిన పరికరాల నుండి తీసివేయబడింది. మీ Google ఖాతా <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />లో ఇతర Google సేవల నుండి శోధనలు, కార్య‌క‌లాపాలు వంటి ఇతర రూపాల బ్రౌజింగ్ చరిత్రను కలిగి ఉండవచ్చు.</translation>
 <translation id="6129938384427316298">Netscape సర్టిఫికెట్ వ్యాఖ్య</translation>
 <translation id="6129953537138746214">ఖాళీ</translation>
+<translation id="6130024555057767093">మీరు ప్రత్యేకంగా అనుమతించిన సైట్‌లు తప్పితే మిగతా అన్ని సైట్‌ల నోటిఫికేషన్‌లు ప్రస్తుతం బ్లాక్ చేయబడ్డాయి.</translation>
 <translation id="6136114942382973861">డౌన్‌లోడ్‌ల బార్‌ను మూసివేయండి</translation>
 <translation id="6137767437444130246">వినియోగదారు సర్టిఫికెట్</translation>
 <translation id="6138680304137685902">SHA-384తో X9.62 ECDSA సంతకం</translation>
@@ -3469,6 +3484,7 @@
 <translation id="620722923698527029">ఎల్లప్పుడూ ఈ రకమైన లింక్‌లను అనుబంధిత యాప్‌లో తెరువు</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> (Linux యాప్)ను ఇన్‌స్టాల్ చేయండి</translation>
 <translation id="6207937957461833379">దేశం/ప్రాంతం</translation>
+<translation id="6208521041562685716">మొబైల్ డేటా యాక్టివేట్ చేయబడుతోంది</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: సమకాలీకరణ పని చేయడం లేదు</translation>
 <translation id="6212039847102026977">అధునాతన నెట్‌వర్క్ లక్షణాలను చూపు</translation>
 <translation id="6212168817037875041">ప్రదర్శనను ఆఫ్ చేయండి</translation>
@@ -3830,6 +3846,7 @@
 <translation id="677965093459947883">చాలా చిన్నవిగా</translation>
 <translation id="6780439250949340171">ఇతర సెట్టింగ్‌లను నిర్వహించండి</translation>
 <translation id="6781284683813954823">డూడుల్ లింక్</translation>
+<translation id="6781978626986383437">Linux బ్యాకప్ రద్దు చేయబడింది</translation>
 <translation id="6782111308708962316">మూడవ పక్షం వెబ్‌సైట్‌లను కుక్కీ డేటా సేవ్ చేయనీయకుండా, చదవనీయకుండా నిరోధించు</translation>
 <translation id="6786747875388722282">ఎక్స్‌టెన్షన్‌లు</translation>
 <translation id="6787839852456839824">కీబోర్డ్ సత్వరమార్గాలు</translation>
@@ -4117,6 +4134,7 @@
 <translation id="7197632491113152433">మేము ఈ పరికరంలో ఉపయోగించగల <ph name="NUMBER_OF_APPS" /> యాప్‌లను మీ ఖాతాలో కనుగొన్నాము.</translation>
 <translation id="7199158086730159431">సహా&amp;యం పొందండి</translation>
 <translation id="7200083590239651963">కాన్ఫిగరేషన్‌‌ను ఎంచుకోండి</translation>
+<translation id="7201042526153088083">మీ <ph name="DEVICE_TYPE" />లో Google Play నుండి యాప్‌లను, గేమ్‌లను ఇన్‌స్టాల్ చేసుకోండి. &lt;a target="_blank" href="<ph name="URL" />"&gt;మరింత తెలుసుకోండి&lt;/a&gt;</translation>
 <translation id="720110658997053098">ఈ పరికరాన్ని శాశ్వతంగా కియోస్క్ మోడ్‌లో ఉంచు</translation>
 <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' తొలగించబడింది</translation>
 <translation id="7201420661433230412">ఫైల్‌లను వీక్షించండి</translation>
@@ -4141,6 +4159,7 @@
 <translation id="7229570126336867161">EVDO అవసరం</translation>
 <translation id="7230787553283372882">మీ వచన పరిమాణాన్ని అనుకూలీకరించండి</translation>
 <translation id="7232750842195536390">పేరు మార్చడం విఫలమైంది</translation>
+<translation id="7234010996000898150">Linux పునరుద్ధరణను రద్దు చేస్తోంది</translation>
 <translation id="7235716375204803342">కార్యకలాపాలను పొందుతోంది...</translation>
 <translation id="7235737137505019098">ఏ ఇతర ఖాతాల కోసం మీ సెక్యూరిటీ కీలో తగినంత స్థలం లేదు.</translation>
 <translation id="7238585580608191973">SHA-256 వేలిముద్ర</translation>
@@ -4276,6 +4295,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{అన్నింటినీ &amp;కొత్త విండోలో తెరవండి}=1{&amp;కొత్త విండోలో తెరవండి}other{అన్నింటినీ (#) &amp;కొత్త విండోలో తెరవండి}}</translation>
 <translation id="7434509671034404296">డెవలపర్</translation>
 <translation id="7436921188514130341">అయ్యో! పేరు మారుస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది.</translation>
+<translation id="7437427339141948518">నోటిఫికేషన్‌లు ఆఫ్ చేయబడ్డాయి</translation>
 <translation id="7438976808740265764">డిసెంబర్ 2020 నుండి Flash Playerకు మద్దతు తీసివేయబడుతుంది.</translation>
 <translation id="7441736921018636843">ఈ సెట్టింగ్‌ని మార్చడానికి, మీ సమకాలీకరణ రహస్య పదబంధాన్ని తీసివేయడానికి <ph name="BEGIN_LINK" />సమకాలీకరణను రీసెట్ చేయండి<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">ఇతర వినియోగదారులు</translation>
@@ -4405,6 +4425,7 @@
 <translation id="7643932971554933646">ఫైల్‌లను చూడటానికి సైట్‌ను అనుమతించాలా?</translation>
 <translation id="7644543211198159466">రంగు మరియు థీమ్‌</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (యజమాని)</translation>
+<translation id="7645681574855902035">Linux బ్యాకప్‍ను రద్దు చేస్తోంది</translation>
 <translation id="7647403192093989392">ఇటీవలి కార్యకలాపాలు లేవు</translation>
 <translation id="7648142322539582331">తల్లిదండ్రుల నియంత్రణలను సెటప్ చేయడానికి ఇంటర్నెట్‌కు కనెక్ట్ చేయండి</translation>
 <translation id="7648992873808071793">ఈ పరికరంలో ఫైల్‌లను నిల్వ చేయాలనుకుంటోంది</translation>
@@ -4852,6 +4873,7 @@
 <translation id="8256319818471787266">స్పార్కీ</translation>
 <translation id="8257950718085972371">కెమెరా యాక్సెస్‌ను బ్లాక్ చేయడాన్ని కొనసాగించు</translation>
 <translation id="8259239505248583312">ప్రారంభించు</translation>
+<translation id="8259556432390118667">హెక్స్ రంగు విలువ</translation>
 <translation id="8260126382462817229">మళ్లీ సైన్ ఇన్ చేయడానికి ప్రయత్నించండి</translation>
 <translation id="8260864402787962391">మౌస్</translation>
 <translation id="8261378640211443080">ఈ పొడిగింపు <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />లో జాబితా చేయబడలేదు మరియు మీకు తెలియకుండానే జోడించబడి ఉండవచ్చు.</translation>
@@ -5104,6 +5126,7 @@
 <translation id="8662911384982557515">మీ హోమ్ పేజీని దీనికి మార్చండి: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">వాల్‌పేపర్‌ను Chrome సెట్ చేయలేదు.</translation>
 <translation id="8663099077749055505"><ph name="HOST" />లో ఎల్లప్పుడూ బహుళ స్వయంచాలక డౌన్‌లోడ్‌లను బ్లాక్ చేయి</translation>
+<translation id="8663534996262079772">ఈ సైట్‌కు సంబంధించిన నోటిఫికేషన్‌లను చూపాలా?</translation>
 <translation id="8664389313780386848">పేజీ మూలాన్ని &amp;వీక్షించండి</translation>
 <translation id="8665180165765946056">బ్యాకప్ పూర్తయింది</translation>
 <translation id="866611985033792019">ఇమెయిల్ వినియోగదారులను గుర్తించడానికి ఈ ప్రమాణపత్రాన్ని విశ్వసిస్తుంది</translation>
@@ -5393,6 +5416,7 @@
 <translation id="9065203028668620118">సవరించు</translation>
 <translation id="9066773882585798925">వినేందుకు వీలుగా వచనం గట్టిగా చదవబడుతుంది</translation>
 <translation id="9066782832737749352">వచనం నుండి ప్రసంగం</translation>
+<translation id="9068849894565669697">రంగుని ఎంచుకోండి</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">బ్లూటూత్</translation>
 <translation id="9074836595010225693">USB మౌస్ కనెక్ట్ చేయబడింది</translation>
@@ -5430,6 +5454,7 @@
 <translation id="9131487537093447019">బ్లూటూత్ పరికరాలకు సందేశాలను పంపడానికి మరియు వాటి నుండి స్వీకరించడానికి అనుమతి.</translation>
 <translation id="9134304429738380103">అవును, నాకు సమ్మతమే.</translation>
 <translation id="9137013805542155359">అసలును చూపించు</translation>
+<translation id="9137157311132182254">ప్రాధాన్య శోధన ఇంజిన్</translation>
 <translation id="9137916601698928395">లింక్‌ను <ph name="USER" /> తరపున తెరువు</translation>
 <translation id="9138978632494473300">కింది స్థలాలకు షార్ట్‌కట్‌లను జోడించండి:</translation>
 <translation id="9140067245205650184">మీరు మద్దతు లేని ఫీచర్ ఫ్లాగ్‌ను ఉపయోగిస్తున్నారు: <ph name="BAD_FLAG" />. స్థిరత్వం మరియు భద్రతలలో ఇబ్బందులు ఏర్పడతాయి.</translation>
@@ -5502,6 +5527,7 @@
 <translation id="962802172452141067">బుక్‌మార్క్ ఫోల్డర్‌ ట్రీ</translation>
 <translation id="964286338916298286">మీ IT నిర్వాహకుడు మీ పరికరానికి Chrome కానుకలను నిలిపివేసారు.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{అప్లికేషన్}other{అప్లికేషన్‌లు}}</translation>
+<translation id="965211523698323809">మీ <ph name="DEVICE_TYPE" /> నుండి వచన సందేశాలను పంపండి, స్వీకరించండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">ఇది మిమ్మల్ని మీ google ఖాతా నుండి సైన్ అవుట్ చేస్తుంది. మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు మరియు ఇతర సెట్టింగ్‌లలోని మార్పులు మీ Google ఖాతాకి ఇకపై సమకాలీకరించబడవు. అయినప్పటికీ, ఇప్పటికే ఉన్న మీ డేటా Google ఖాతాలో నిల్వ చేయబడి ఉంటుంది మరియు దాన్ని <ph name="BEGIN_LINK" />Google డాష్‌బోర్డ్<ph name="END_LINK" />లో నిర్వహించుకోవచ్చు.</translation>
 <translation id="967624055006145463">నిల్వ చేయబడిన డేటా</translation>
 <translation id="968000525894980488">Google Play సేవలను ఆన్ చేయండి.</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 360c5c8..9fb02f6 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">ได้รับคำขอการอ่านหรือเขียนที่มีออฟเซ็ตไม่ถูกต้องใน "<ph name="DEVICE_NAME" />"</translation>
 <translation id="1097658378307015415">ก่อนที่จะลงชื่อเข้าใช้ โปรดเข้าใช้ในฐานะผู้มาเยือนเพื่อเปิดใช้งานเครือข่าย <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">แปลภาษา<ph name="LANGUAGE" />ทุกครั้ง</translation>
+<translation id="1104038495841596279">เราไม่พบซิมการ์ด</translation>
 <translation id="1108600514891325577">&amp;หยุด</translation>
 <translation id="1110155001042129815">รอ</translation>
 <translation id="1112420131909513020">แท็บพื้นหลังกำลังใช้บลูทูธ</translation>
@@ -178,7 +179,7 @@
 <translation id="1241753985463165747">อ่านและเปลี่ยนแปลงข้อมูลทั้งหมดในเว็บไซต์ปัจจุบันเมื่อเรียกใช้</translation>
 <translation id="1242633766021457174"><ph name="THIRD_PARTY_TOOL_NAME" /> ต้องการรีเซ็ตการตั้งค่าของคุณ</translation>
 <translation id="1243314992276662751">อัปโหลด</translation>
-<translation id="1244265436519979884">การคืนค่า Linux กำลังทำงาน</translation>
+<translation id="1244265436519979884">กำลังดำเนินการคืนค่า Linux</translation>
 <translation id="1244303850296295656">ข้อผิดพลาดของส่วนขยาย</translation>
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ถูกบล็อกเนื่องจากเลิกใช้งานไปแล้ว</translation>
 <translation id="1251366534849411931">เครื่องหมายวงเล็บปีกกาเปิดที่ต้องมี: <ph name="ERROR_LINE" /></translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">ผู้ดูแลระบบปิดใช้การซิงค์</translation>
 <translation id="2127372758936585790">ที่ชาร์จพลังงานต่ำ</translation>
 <translation id="212862741129535676">เปอร์เซ็นต์การเกิดขึ้นของสถานะความถี่</translation>
+<translation id="212876957201860463">กำลังเตรียมตั้งค่าอุปกรณ์มือถือ...</translation>
 <translation id="2129825002735785149">อัปเดตปลั๊กอิน</translation>
 <translation id="2131077480075264">ไม่สามารถติดตั้ง "<ph name="APP_NAME" />" เนื่องจากไม่ได้รับอนุญาตจาก "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">ซ่อน PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">มีการเข้ารหัสลับข้อมูลด้วยรหัสผ่าน Google ของคุณตั้งแต่
           <ph name="TIME" /> ข้อมูลนี้ไม่รวมถึงวิธีการชำระเงินและที่อยู่จาก Google Pay</translation>
 <translation id="2419706071571366386">โปรดออกจากระบบเมื่อไม่ได้ใช้คอมพิวเตอร์เพื่อความปลอดภัย</translation>
+<translation id="2422125132043002186">ยกเลิกการคืนค่า Linux แล้ว</translation>
 <translation id="2423578206845792524">&amp;บันทึกรูปภาพเป็น...</translation>
 <translation id="2428510569851653187">อธิบายว่าคุณกำลังทำอะไรเมื่อแท็บขัดข้อง</translation>
 <translation id="2431027948063157455">โหลด Google Assistant ไม่ได้ โปรดตรวจสอบการเชื่อมต่อเครือข่ายและลองอีกครั้ง</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">กำลังเข้าถึงอินพุตเสียงและวิดีโอ</translation>
 <translation id="3090819949319990166">ไม่สามารถคัดลอกไฟล์ crx ภายนอกไปยัง <ph name="TEMP_CRX_FILE" /></translation>
 <translation id="3090871774332213558">จับคู่ "<ph name="DEVICE_NAME" />" แล้ว</translation>
+<translation id="3092699946856346803">โปรดใส่ซิมแล้วลองอีกครั้ง</translation>
 <translation id="3101709781009526431">วันที่และเวลา</translation>
 <translation id="310671807099593501">เว็บไซต์กำลังใช้บลูทูธ</translation>
 <translation id="3115147772012638511">กำลังรอแคช...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">ไฟล์และโปรแกรมที่จะกักบริเวณ</translation>
 <translation id="3282568296779691940">ลงชื่อเข้าใช้ Chrome</translation>
 <translation id="3285322247471302225">แ&amp;ท็บใหม่</translation>
+<translation id="3286654161521615710">ใช้โดยเบราว์เซอร์ Chrome และ Launcher ของ <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">ดูและลบข้อมูลการลงชื่อเข้าใช้ที่เก็บไว้ในคีย์ความปลอดภัย</translation>
 <translation id="3288047731229977326">ส่วนขยายที่ทำงานอยู่ในโหมดนักพัฒนาซอฟต์แวร์อาจเป็นอันตรายต่อคอมพิวเตอร์ของคุณ หากคุณไม่ใช่นักพัฒนาซอฟต์แวร์ คุณควรปิดส่วนขยายที่ทำงานอยู่ในโหมดนักพัฒนาซอฟต์แวร์เพื่อรักษาความปลอดภัย</translation>
 <translation id="3289856944988573801">ในการตรวจหาการอัปเดต โปรดใช้อีเทอร์เน็ตหรือ WiFi</translation>
@@ -1572,7 +1577,7 @@
 <translation id="3341699307020049241">PIN ไม่ถูกต้อง คุณป้อน PIN ได้อีก <ph name="RETRIES" /> ครั้ง</translation>
 <translation id="3341703758641437857">อนุญาตให้เข้าถึงไฟล์ URL</translation>
 <translation id="3342361181740736773">"<ph name="TRIGGERING_EXTENSION_NAME" />" ต้องการนำส่วนขยายนี้ออก</translation>
-<translation id="3343738344138980580"><ph name="ORIGIN" /> ดูไฟล์ทั้งหมดในโฟลดอร์ <ph name="FOLDERNAME" /> ได้</translation>
+<translation id="3343738344138980580"><ph name="ORIGIN" /> ดูไฟล์ทั้งหมดในโฟลเดอร์ <ph name="FOLDERNAME" /> ได้</translation>
 <translation id="3345886924813989455">ไม่พบเบราว์เซอร์ที่สนับสนุน</translation>
 <translation id="3347086966102161372">คัด&amp;ลอกที่อยู่รูปภาพ</translation>
 <translation id="3348038390189153836">พบอุปกรณ์แบบถอดออกได้</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">ใบรับรองเซิร์ฟเวอร์ SSL</translation>
 <translation id="3775705724665058594">ส่งไปยังอุปกรณ์</translation>
 <translation id="3776796446459804932">ส่วนขยายนี้ละเมิดนโยบาย Chrome เว็บสโตร์</translation>
+<translation id="3777483481409781352">เปิดใช้งานอุปกรณ์มือถือไม่สำเร็จ</translation>
 <translation id="3777806571986431400">ส่วนขยายที่เปิดใช้งาน</translation>
 <translation id="3778152852029592020">การดาวน์โหลดถูกยกเลิก</translation>
 <translation id="3778208826288864398">คีย์ความปลอดภัยถูกล็อกเพราะคุณป้อน PIN ไม่ถูกต้องหลายครั้งเกินไป คุณจะต้องรีเซ็ตคีย์ความปลอดภัย</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">ขาวดำ</translation>
 <translation id="4136203100490971508">แสงตอนกลางคืนจะปิดโดยอัตโนมัติเมื่อพระอาทิตย์ขึ้น</translation>
 <translation id="4138267921960073861">แสดงชื่อผู้ใช้และภาพถ่ายบนหน้าจอลงชื่อเข้าใช้</translation>
+<translation id="4142052906269098341">ปลดล็อก <ph name="DEVICE_TYPE" /> ด้วยโทรศัพท์ <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">ดูวิดีโอคุณภาพดีขึ้นและยืดอายุการใช้งานแบตเตอรี่ วิดีโอจะเล่นเฉพาะในหน้าจอที่พร้อมใช้งาน Cast</translation>
 <translation id="4145922204387553806">ให้ Assistant แสดงข้อมูลเกี่ยวกับสิ่งที่อยู่ในหน้าจอ</translation>
 <translation id="4146026355784316281">เปิดด้วยโปรแกรมดูของระบบทุกครั้ง</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">ส่งออก</translation>
 <translation id="42137655013211669">เซิร์ฟเวอร์ได้ห้ามการเข้าถึงทรัพยากรนี้</translation>
 <translation id="4215350869199060536">อ๊ะ มีสัญลักษณ์ที่ไม่ถูกต้องในชื่อ!</translation>
+<translation id="4220648711404560261">เกิดข้อผิดพลาดขณะเปิดใช้งาน</translation>
 <translation id="4225397296022057997">ในเว็บไซต์ทั้งหมด</translation>
 <translation id="4232375817808480934">กำหนดค่า Kerberos</translation>
 <translation id="4235200303672858594">ทั้งหน้าจอ</translation>
@@ -2323,10 +2331,11 @@
 <translation id="4459169140545916303">ใช้งานเมื่อ <ph name="DEVICE_LAST_ACTIVATED_TIME" /> วันที่ผ่านมา</translation>
 <translation id="4462159676511157176">เซิร์ฟเวอร์ชื่อที่กำหนดเอง</translation>
 <translation id="4469477701382819144">บล็อกในเว็บไซต์ที่แสดงโฆษณาที่แทรกหรือทำให้เข้าใจผิด</translation>
-<translation id="4469943624506685059">โปรดใช้อะแดปเตอร์ USB Type-C เพื่อหลีกเลี่ยงปัญหาเรื่องการชาร์จและประสิทธิภาพ</translation>
+<translation id="4469943624506685059">โปรดใช้อะแดปเตอร์ USB Type-C หรืออะแดปเตอร์จากผู้ผลิต Chromebook เพื่อหลีกเลี่ยงปัญหาเรื่องการชาร์จและประสิทธิภาพ</translation>
 <translation id="4470957202018033307">ค่ากำหนดพื้นที่เก็บข้อมูลภายนอก</translation>
 <translation id="447252321002412580">ช่วยปรับปรุงฟีเจอร์และประสิทธิภาพของ Chrome</translation>
 <translation id="4474155171896946103">บุ๊กมาร์กแท็บทั้งหมด...</translation>
+<translation id="4474461121892222090">การเปิดใช้งานอินเทอร์เน็ตมือถือให้เสร็จสมบูรณ์อาจใช้เวลาสูงสุด 15 นาที</translation>
 <translation id="4475552974751346499">ค้นสิ่งที่ดาวน์โหลดไว้</translation>
 <translation id="4476590490540813026">นักกีฬา</translation>
 <translation id="4477015793815781985">รวม Ctrl, Alt หรือ ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">กำลังกำหนดค่าเครื่องเสมือน อาจใช้เวลาสักครู่</translation>
 <translation id="4480590691557335796">Chrome ค้นหาซอฟต์แวร์ที่เป็นอันตรายในคอมพิวเตอร์และนำซอฟต์แวร์นั้นออกได้</translation>
 <translation id="4481530544597605423">อุปกรณ์ที่ไม่ได้จับคู่</translation>
+<translation id="4483579413421375386">แสดงเว็บไซต์</translation>
 <translation id="4495419450179050807">ไม่แสดงในหน้านี้อีก</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ขัดข้อง</translation>
 <translation id="450099669180426158">ไอคอนเครื่องหมายอัศเจรีย์</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">โปรดป้อน PIN สำหรับ "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">สิทธิ์ไม่เพียงพอ</translation>
 <translation id="4648499713050786492">โปรดปลดล็อกโปรไฟล์ของคุณก่อนเพิ่มบุคคล</translation>
+<translation id="4650591383426000695">ยกเลิกการเชื่อมต่อโทรศัพท์จาก <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">โหลดองค์ประกอบออนไลน์ที่มีทรัพยากรโหมดสาธิตไม่ได้</translation>
 <translation id="465878909996028221">การเปลี่ยนเส้นทางเบราว์เซอร์รองรับเฉพาะ http, https และโปรโตคอลไฟล์เท่านั้น</translation>
 <translation id="4659077111144409915">บัญชีหลัก</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">โปรดเสียบ <ph name="DEVICE_TYPE" /> เข้ากับแหล่งจ่ายไฟ</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">บั&amp;นทึกเสียงเป็น...</translation>
+<translation id="5117139026559873716">ยกเลิกการเชื่อมต่อโทรศัพท์กับ <ph name="DEVICE_TYPE" /> อุปกรณ์ทั้งสองจะไม่เชื่อมต่อกันโดยอัตโนมัติอีกต่อไป</translation>
 <translation id="5117427536932535467">ธีมและวอลเปเปอร์</translation>
 <translation id="5117625797180141189">พิมพ์ <ph name="DOCUMENT_NAME" /> สำเร็จแล้ว</translation>
 <translation id="5117930984404104619">ตรวจสอบพฤติกรรมของส่วนขยายอื่นๆ รวมถึง URL ที่เข้าชม</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">ดัชนีของ <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">เมนูมีบุ๊กมาร์กซ่อนอยู่</translation>
 <translation id="5464632865477611176">เรียกใช้ตอนนี้</translation>
+<translation id="5464660706533281090">ผู้ใช้ที่เป็นเด็กจะเปลี่ยนแปลงการตั้งค่านี้ไม่ได้</translation>
 <translation id="5466374726908360271">ว&amp;างและค้นหา “<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">สวัสดี นี่เป็นเสียงของระบบอ่านออกเสียงข้อความ</translation>
 <translation id="5473333559083690127">ป้อน PIN ใหม่อีกครั้ง</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">จับคู่</translation>
 <translation id="5821565227679781414">สร้างทางลัด</translation>
 <translation id="5825412242012995131">เปิด (แนะนำ)</translation>
+<translation id="5826395379250998812">เชื่อมต่อ <ph name="DEVICE_TYPE" /> กับโทรศัพท์ <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">ชื่อทั่วไป (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">กำลังพิมพ์...</translation>
@@ -3219,7 +3233,7 @@
 <translation id="5838456317242088717">เซสชันไม่ระบุตัวตนปัจจุบัน</translation>
 <translation id="5842497610951477805">เปิดใช้บลูทูธ</translation>
 <translation id="5843250171025351504">อุปกรณ์ของคุณใช้เวอร์ชันไคลเอ็นต์ที่ต่ำกว่าเวอร์ชันที่ผู้ดูแลระบบกำหนดไว้ โปรดอัปเดตเพื่อเข้าสู่ระบบ</translation>
-<translation id="5846200638699387931">ข้อผิดพลาดทางไวยากรณ์ที่เกี่ยวข้อง: <ph name="ERROR_LINE" /></translation>
+<translation id="5846200638699387931">ข้อผิดพลาดทางไวยากรณ์ที่แสดงความสัมพันธ์: <ph name="ERROR_LINE" /></translation>
 <translation id="5849212445710944278">เพิ่มแล้ว</translation>
 <translation id="5849570051105887917">รหัสผู้ให้บริการหน้าแรก</translation>
 <translation id="5851868085455377790">ผู้ออกใบรับรอง</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">นำข้อมูลที่เลือกออกจาก Chrome และอุปกรณ์ที่ซิงค์แล้ว บัญชี Google ของคุณอาจมีประวัติการท่องเว็บในรูปแบบอื่น เช่น การค้นหาและกิจกรรมจากบริการอื่นๆ ของ Google ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
 <translation id="6129938384427316298">ความคิดเห็นเกี่ยวกับใบรับรองของ Netscape</translation>
 <translation id="6129953537138746214">ช่องว่าง</translation>
+<translation id="6130024555057767093">ขณะนี้ระบบกำลังบล็อกการแจ้งเตือนของทุกเว็บไซต์ ยกเว้นแต่ละเว็บไซต์ที่คุณอนุญาต</translation>
 <translation id="6136114942382973861">ปิดแถบดาวน์โหลด</translation>
 <translation id="6137767437444130246">ใบรับรองของผู้ใช้</translation>
 <translation id="6138680304137685902">ลายเซ็น X9.62 ECDSA ที่มี SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">เปิดลิงก์ประเภทนี้ในแอปที่เกี่ยวข้องเสมอ</translation>
 <translation id="6207282396926186323">ติดตั้ง <ph name="APP_NAME" /> (แอป Linux)</translation>
 <translation id="6207937957461833379">ประเทศ/เขตการปกครอง</translation>
+<translation id="6208521041562685716">กำลังเปิดใช้งานอินเทอร์เน็ตมือถือ</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: การซิงค์ไม่ทำงาน</translation>
 <translation id="6212039847102026977">แสดงคุณสมบัติเครือข่ายขั้นสูง</translation>
 <translation id="6212168817037875041">ปิดจอแสดงผล</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">เล็กมาก</translation>
 <translation id="6780439250949340171">จัดการการตั้งค่าอื่นๆ</translation>
 <translation id="6781284683813954823">ลิงก์ของ Doodle</translation>
+<translation id="6781978626986383437">ยกเลิกการสำรองข้อมูล Linux แล้ว</translation>
 <translation id="6782111308708962316">ป้องกันไม่ให้เว็บไซต์ของบุคคลที่สามบันทึกและอ่านข้อมูลคุกกี้</translation>
 <translation id="6786747875388722282">ส่วนขยาย</translation>
 <translation id="6787839852456839824">แป้นพิมพ์ลัด</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">เราพบแอป <ph name="NUMBER_OF_APPS" /> แอปจากบัญชีของคุณที่ใช้ในอุปกรณ์นี้ได้</translation>
 <translation id="7199158086730159431">รั&amp;บความช่วยเหลือ</translation>
 <translation id="7200083590239651963">เลือกการกำหนดค่า</translation>
+<translation id="7201042526153088083">ติดตั้งแอปและเกมจาก Google Play ใน <ph name="DEVICE_TYPE" /> &lt;a target="_blank" href="<ph name="URL" />"&gt;ดูข้อมูลเพิ่มเติม&lt;/a&gt;</translation>
 <translation id="720110658997053098">เก็บอุปกรณ์นี้ไว้ในโหมดคีออสก์อย่างถาวร</translation>
 <translation id="7201118060536064622">ลบ "<ph name="DELETED_ITEM_NAME" />" แล้ว</translation>
 <translation id="7201420661433230412">ดูไฟล์</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">ต้องใช้ EVDO</translation>
 <translation id="7230787553283372882">กำหนดขนาดข้อความของคุณ</translation>
 <translation id="7232750842195536390">การเปลี่ยนชื่อล้มเหลว</translation>
+<translation id="7234010996000898150">กำลังยกเลิกการคืนค่า Linux</translation>
 <translation id="7235716375204803342">กำลังดึงข้อมูลกิจกรรม...</translation>
 <translation id="7235737137505019098">คีย์ความปลอดภัยมีพื้นที่ไม่เพียงพอสำหรับบัญชีเพิ่มเติม</translation>
 <translation id="7238585580608191973">ลายนิ้วมือ SHA-256</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{เปิดทั้งหมดใน&amp;หน้าต่างใหม่}=1{เปิดใน&amp;หน้าต่างใหม่}other{เปิดทั้งหมด (#) ใน&amp;หน้าต่างใหม่}}</translation>
 <translation id="7434509671034404296">นักพัฒนา</translation>
 <translation id="7436921188514130341">แย่จัง! เกิดข้อผิดพลาดในระหว่างการตั้งชื่อ</translation>
+<translation id="7437427339141948518">การแจ้งเตือนปิดอยู่</translation>
 <translation id="7438976808740265764">เราจะไม่รองรับ Flash Player อีกต่อไปหลังจากเดือนธันวาคม 2020</translation>
 <translation id="7441736921018636843">หากต้องการเปลี่ยนการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" />เพื่อนำรหัสผ่านการซิงค์ออก</translation>
 <translation id="7441830548568730290">ผู้ใช้รายอื่น</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">อนุญาตให้เว็บไซต์ดูไฟล์ใช่ไหม</translation>
 <translation id="7644543211198159466">สีและธีม</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (เจ้าของ)</translation>
+<translation id="7645681574855902035">กำลังยกเลิกการสำรองข้อมูล Linux</translation>
 <translation id="7647403192093989392">ไม่มีกิจกรรมล่าสุด</translation>
 <translation id="7648142322539582331">เชื่อมต่ออินเทอร์เน็ตเพื่อตั้งค่าการควบคุมโดยผู้ปกครอง</translation>
 <translation id="7648992873808071793">จัดเก็บไฟล์บนอุปกรณ์นี้</translation>
@@ -4700,7 +4721,7 @@
       และอาจลบเนื้อหาที่คุณเคยซื้อ เช่น ภาพยนตร์ รายการทีวี เพลง หนังสือ หรือการซื้อในแอปอื่นๆ อีกด้วย
       <ph name="LINE_BREAKS2" />
       การลบนี้จะไม่ส่งผลต่อแอปหรือเนื้อหาบนอุปกรณ์เครื่องอื่น</translation>
-<translation id="8025958612547562988">เครื่องพิมพ์ที่บันทึกในโปรไฟล์ของคุณหรือเพิ่มเครื่องพิมพ์ใหม่</translation>
+<translation id="8025958612547562988">บันทึกเครื่องพิมพ์ที่ตรวจพบลงในโปรไฟล์ของคุณหรือเพิ่มเครื่องพิมพ์ใหม่</translation>
 <translation id="8026334261755873520">ล้างข้อมูลการท่องเว็บ</translation>
 <translation id="8028060951694135607">การกู้คืนคีย์ของ Microsoft</translation>
 <translation id="8028803902702117856">กำลังดาวน์โหลด <ph name="SIZE" /> <ph name="FILE_NAME" /></translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">สปาร์กกี้</translation>
 <translation id="8257950718085972371">บล็อกการเข้าถึงกล้องต่อไป</translation>
 <translation id="8259239505248583312">เริ่มเลย</translation>
+<translation id="8259556432390118667">ค่าสีแบบเลขฐาน 16</translation>
 <translation id="8260126382462817229">ลองลงชื่อเข้าใช้อีกครั้ง</translation>
 <translation id="8260864402787962391">เมาส์</translation>
 <translation id="8261378640211443080">ส่วนขยายนี้ไม่ได้ระบุไว้ใน <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> และอาจถูกเพิ่มเข้ามาโดยที่คุณไม่รู้ตัว</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">เปลี่ยนหน้าแรกของคุณเป็น: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome ไม่สามารถตั้งวอลเปเปอร์</translation>
 <translation id="8663099077749055505">บล็อกการดาวน์โหลดโดยอัตโนมัติหลายรายการที่ <ph name="HOST" /> เสมอ</translation>
+<translation id="8663534996262079772">แสดงการแจ้งเตือนของเว็บไซต์นี้ไหม</translation>
 <translation id="8664389313780386848">&amp;ดูรหัสต้นฉบับ</translation>
 <translation id="8665180165765946056">สำรองข้อมูลเสร็จสมบูรณ์</translation>
 <translation id="866611985033792019">เชื่อถือใบรับรองนี้ในการระบุตัวตนของผู้ใช้อีเมล</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">แก้ไข</translation>
 <translation id="9066773882585798925">ฟังข้อความที่อ่านออกเสียง</translation>
 <translation id="9066782832737749352">การอ่านออกเสียงข้อความ</translation>
+<translation id="9068849894565669697">เลือกสี</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">บลูทูธ</translation>
 <translation id="9074836595010225693">เชื่อมต่อเมาส์ USB แล้ว</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">ส่งข้อความถึงและรับข้อความจากอุปกรณ์บลูทูธ</translation>
 <translation id="9134304429738380103">ได้สิ ตกลง</translation>
 <translation id="9137013805542155359">แสดงหน้าเว็บเดิม</translation>
+<translation id="9137157311132182254">เครื่องมือค้นหาที่ต้องการ</translation>
 <translation id="9137916601698928395">เปิดลิงก์ในฐานะ <ph name="USER" /></translation>
 <translation id="9138978632494473300">เพิ่มทางลัดไปยังตำแหน่งต่อไปนี้:</translation>
 <translation id="9140067245205650184">คุณใช้แฟล็กฟีเจอร์ที่ระบบไม่สนับสนุน: <ph name="BAD_FLAG" /> ซึ่งจะส่งผลต่อความเสถียรและความปลอดภัย</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">แผนผังของโฟลเดอร์บุ๊กมาร์ก</translation>
 <translation id="964286338916298286">ผู้ดูแลระบบไอทีได้ปิดการใช้สินค้าจาก Chrome ในอุปกรณ์ของคุณ</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{แอปพลิเคชัน}other{แอปพลิเคชัน}}</translation>
+<translation id="965211523698323809">ส่งและรับ SMS จาก <ph name="DEVICE_TYPE" /> <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">การดำเนินการนี้จะนำคุณออกจากระบบบัญชี Google การเปลี่ยนแปลงในบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะไม่ซิงค์กับบัญชี Google อีกต่อไป แต่ข้อมูลที่มีอยู่จะยังจัดเก็บไว้ในบัญชี Google และจัดการได้ใน <ph name="BEGIN_LINK" />Google แดชบอร์ด<ph name="END_LINK" /></translation>
 <translation id="967624055006145463">ข้อมูลที่จัดเก็บ</translation>
 <translation id="968000525894980488">เปิดบริการ Google Play</translation>
@@ -5526,11 +5552,11 @@
 <translation id="988978206646512040">ต้องระบุรหัสผ่าน</translation>
 <translation id="992032470292211616">ส่วนขยาย แอป และธีมอาจเป็นอันตรายต่ออุปกรณ์ของคุณ คุณแน่ใจไหมว่าต้องการดำเนินการต่อ</translation>
 <translation id="992592832486024913">ปิดใช้ ChromeVox (การตอบสนองด้วยเสียง)</translation>
-<translation id="992778845837390402">การสำรองข้อมูล Linux กำลังทำงาน</translation>
+<translation id="992778845837390402">กำลังดำเนินการสำรองข้อมูล Linux</translation>
 <translation id="993540765962421562">กำลังดำเนินการติดตั้ง</translation>
 <translation id="994289308992179865">ว&amp;นกลับ</translation>
 <translation id="995782501881226248">YouTube</translation>
 <translation id="996250603853062861">กำลังทำการเชื่อมต่ออย่างปลอดภัย...</translation>
 <translation id="998747458861718449">&amp;ตรวจสอบ</translation>
-<translation id="999180493986838144"><ph name="ORIGIN" /> จะเห็นไฟล์ทั้งหมดในโฟลดอร์ <ph name="FOLDERNAME" /> เว็บไซต์จะเห็นการเปลี่ยนแปลงใดๆ ที่เกิดกับโฟลเดอร์จนกว่าคุณจะปิดแท็บนี้</translation>
+<translation id="999180493986838144"><ph name="ORIGIN" /> จะเห็นไฟล์ทั้งหมดในโฟลเดอร์ <ph name="FOLDERNAME" /> เว็บไซต์จะเห็นการเปลี่ยนแปลงใดๆ ที่เกิดกับโฟลเดอร์จนกว่าคุณจะปิดแท็บนี้</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index ffc867b..f973913 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Şu cihazda geçersiz bir ofset değeriyle okuma veya yazma işlemi istendi: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Oturum açmadan önce <ph name="NETWORK_ID" /> ağını etkinleştirmek için lütfen Misafir olarak giriş yapın</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" /> dilini daima çevir</translation>
+<translation id="1104038495841596279">SIM kartınızı algılayamadık</translation>
 <translation id="1108600514891325577">D&amp;urdur</translation>
 <translation id="1110155001042129815">Bekle</translation>
 <translation id="1112420131909513020">Arka plan sekmesi Bluetooth bağlantısını kullanıyor</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Senkronizasyon, yöneticiniz tarafından devre dışı bırakıldı.</translation>
 <translation id="2127372758936585790">Düşük güçlü şarj cihazı</translation>
 <translation id="212862741129535676">Frekans Durumu Kullanma Yüzdesi</translation>
+<translation id="212876957201860463">Hücresel cihazınız kurulum için hazırlanıyor...</translation>
 <translation id="2129825002735785149">Eklentiyi güncelle</translation>
 <translation id="2131077480075264">"<ph name="IMPORT_NAME" />" tarafından izin verilmediğinden "<ph name="APP_NAME" />" yüklenemiyor</translation>
 <translation id="21354425047973905">PIN numaralarını gizle</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187"><ph name="TIME" /> itibarıyla veriler Google şifrenizle şifrelendi.
           Google Pay'deki adresler ve ödeme yöntemleri bu kapsamda değildir.</translation>
 <translation id="2419706071571366386">Bilgisayarınızı kullanmadığınız zamanlarda güvenlik için çıkış yapın.</translation>
+<translation id="2422125132043002186">Linux geri yükleme işlemi iptal edildi</translation>
 <translation id="2423578206845792524">Res&amp;mi farklı kaydet...</translation>
 <translation id="2428510569851653187">Sekme kilitlendiği sırada ne yaptığınızı açıklayın</translation>
 <translation id="2431027948063157455">Google Asistan yüklenemedi, lütfen ağ bağlantınızı kontrol edin ve tekrar deneyin.</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Ses ve video girişlerine erişiliyor</translation>
 <translation id="3090819949319990166">Harici crx dosyası <ph name="TEMP_CRX_FILE" /> hedefine kopyalanamıyor.</translation>
 <translation id="3090871774332213558">"<ph name="DEVICE_NAME" />" eşlendi</translation>
+<translation id="3092699946856346803">Lütfen SIM kartınızı takıp tekrar deneyin</translation>
 <translation id="3101709781009526431">Tarih ve saat</translation>
 <translation id="310671807099593501">Site, Bluetooth bağlantısını kullanıyor</translation>
 <translation id="3115147772012638511">Önbellek bekleniyor...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Karantinaya alınacak dosyalar ve programlar:</translation>
 <translation id="3282568296779691940">Chrome'da oturum aç</translation>
 <translation id="3285322247471302225">Yeni &amp;Sekme</translation>
+<translation id="3286654161521615710">Chrome tarayıcı ve <ph name="DEVICE_TYPE" /> başlaıtıcı tarafından kullanılıyor</translation>
 <translation id="3286737518123001369">Güvenlik anahtarınızda depolanan oturum açma verilerini görüntüleyin ve silin</translation>
 <translation id="3288047731229977326">Geliştirici modunda çalışan uzantılar bilgisayarınıza zarar verebilir. Geliştirici değilseniz, geliştirici modundayken güvende olmak için bu uzantıların çalışmasını devre dışı bırakmanız gerekir.</translation>
 <translation id="3289856944988573801">Güncellemeleri kontrol etmek için lütfen Ethernet veya Kablosuz kullanın.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">SSL Sunucu Sertifikası</translation>
 <translation id="3775705724665058594">Cihazlarınıza gönderin</translation>
 <translation id="3776796446459804932">Bu uzantı Chrome Web Mağazası politikasını ihlal ediyor.</translation>
+<translation id="3777483481409781352">Hücresel cihaz etkinleştirilemedi</translation>
 <translation id="3777806571986431400">Uzantı Etkinleştirildi</translation>
 <translation id="3778152852029592020">İndirme iptal edildi.</translation>
 <translation id="3778208826288864398">Çok sayıda yanlış PIN girildiği için güvenlik anahtarı kilitlendi. Güvenlik anahtarınızı sıfırlamanız gerekiyor.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Siyah beyaz</translation>
 <translation id="4136203100490971508">Gece Işığı güneş doğduğunda otomatik olarak kapatılır</translation>
 <translation id="4138267921960073861">Oturum açma ekranında kullanıcı adlarını ve fotoğrafları göster</translation>
+<translation id="4142052906269098341"><ph name="DEVICE_TYPE" /> cihazınızın kilidini telefonunuzla açın. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Daha iyi video kalitesi elde edin ve pil ömründen tasarruf edin. Video yalnızca Cast uyumlu ekranınızda oynatılır.</translation>
 <translation id="4145922204387553806">Asistanın ekranınızda bulunan içerikle ilgili bilgileri göstermesine izin verin</translation>
 <translation id="4146026355784316281">Her Zaman Sistem Görüntüleyici ile Aç</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Dışa Aktar</translation>
 <translation id="42137655013211669">Bu kaynağa erişim sunucu tarafından yasaklandı.</translation>
 <translation id="4215350869199060536">Hata! Adda geçersiz simgeler var!</translation>
+<translation id="4220648711404560261">Etkinleştirme sırasında bir hata oluştu.</translation>
 <translation id="4225397296022057997">Tüm sitelerde</translation>
 <translation id="4232375817808480934">Kerberos'u yapılandırın</translation>
 <translation id="4235200303672858594">Tüm ekran</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Harici depolama tercihleri</translation>
 <translation id="447252321002412580">Chrome'un özelliklerini ve performansını iyileştirmeye yardımcı olun</translation>
 <translation id="4474155171896946103">Tüm sekmelere yer işareti koy...</translation>
+<translation id="4474461121892222090">Mobil veriyi etkinleştirme işleminin tamamlanması 15 dakika kadar sürebilir.</translation>
 <translation id="4475552974751346499">İndirilenlerde ara</translation>
 <translation id="4476590490540813026">Sporcu</translation>
 <translation id="4477015793815781985">Ctrl, Alt veya ⌘ tuşuna da basın</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Sanal makine yapılandırılıyor. Bu işlem birkaç dakika sürebilir.</translation>
 <translation id="4480590691557335796">Chrome, bilgisayarınızdaki zararlı yazılımları bulabilir ve kaldırabilir</translation>
 <translation id="4481530544597605423">Eşlemesi kaldırılmış cihazlar</translation>
+<translation id="4483579413421375386">Site için göster</translation>
 <translation id="4495419450179050807">Bu sayfada gösterme</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> eklentisi kilitlendi</translation>
 <translation id="450099669180426158">Ünlem işareti simgesi</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Lütfen "<ph name="DEVICE_NAME" />" için PIN'i girin:</translation>
 <translation id="4648491805942548247">İzinler yetersiz</translation>
 <translation id="4648499713050786492">Lütfen bir kişiyi eklemeden önce profilinizin kilidini açın.</translation>
+<translation id="4650591383426000695">Telefonunuzun <ph name="DEVICE_TYPE" /> cihazınızla bağlantısını kesin</translation>
 <translation id="4651484272688821107">Demo modu kaynakları olan online bileşen yüklenemedi.</translation>
 <translation id="465878909996028221">Yalnızca http, https ve dosya protokolleri tarayıcı yönlendirmeleri için desteklenir.</translation>
 <translation id="4659077111144409915">Birincil hesap</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Lütfen <ph name="DEVICE_TYPE" /> cihazınızı bir güç kaynağına takın.</translation>
 <translation id="5115338116365931134">TOA</translation>
 <translation id="5116628073786783676">Sesi Farklı Kay&amp;det...</translation>
+<translation id="5117139026559873716">Telefonunuzun <ph name="DEVICE_TYPE" /> cihazınızla olan bağlantısını kesin. Bundan böyle otomatik olarak bağlanmazlar.</translation>
 <translation id="5117427536932535467">Temalar ve Duvar Kağıtları</translation>
 <translation id="5117625797180141189"><ph name="DOCUMENT_NAME" /> başarıyla yazdırıldı</translation>
 <translation id="5117930984404104619">Ziyaret edilen URL'ler de dahil olmak üzere diğer uzantıların davranışını izleme</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> dizini</translation>
 <translation id="5463856536939868464">Gizlenmiş yer işaretlerini içeren menü</translation>
 <translation id="5464632865477611176">Bu seferlik çalıştır</translation>
+<translation id="5464660706533281090">Bu ayar, çocuk kullanıcılar tarafından değiştirilemez.</translation>
 <translation id="5466374726908360271">Ya&amp;pıştır ve “<ph name="SEARCH_TERMS" />” sorgusunu ara</translation>
 <translation id="5471768120198416576">Merhaba! Ben sizin metin okuma sesinizim.</translation>
 <translation id="5473333559083690127">Yeni PIN'i tekrar girin</translation>
@@ -3205,6 +3218,7 @@
 <translation id="5817918615728894473">Eşle</translation>
 <translation id="5821565227679781414">Kısayol Oluştur</translation>
 <translation id="5825412242012995131">Açık (Önerilen)</translation>
+<translation id="5826395379250998812"><ph name="DEVICE_TYPE" /> cihazınızı telefonunuza bağlayın. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Genel Ad (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Yazdırılıyor...</translation>
@@ -3426,6 +3440,7 @@
 <translation id="6129691635767514872">Seçilen veriler Chrome'dan ve senkronize edilen cihazlardan kaldırıldı. <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> adresinde, diğer Google hizmetlerinden yapılan aramalar ve etkinlikler gibi Google Hesabınızla ilişkili başka biçimlerde tarama geçmişi bulunabilir.</translation>
 <translation id="6129938384427316298">Netscape Sertifikası Yorumu</translation>
 <translation id="6129953537138746214">Boşluk</translation>
+<translation id="6130024555057767093">Bildirimler, şu anda bağımsız olarak izin verdiğiniz siteler haricindeki tüm siteler için engellenmiş durumda.</translation>
 <translation id="6136114942382973861">İndirme çubuğunu kapat</translation>
 <translation id="6137767437444130246">Kullanıcı sertifikası</translation>
 <translation id="6138680304137685902">SHA-384 ile X9.62 ECDSA İmzası</translation>
@@ -3471,6 +3486,7 @@
 <translation id="620722923698527029">Bu tür bağlantıları her zaman ilişkili uygulamada aç</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> uygulamasını (Linux Uygulaması) yükleyin</translation>
 <translation id="6207937957461833379">Ülke/Bölge</translation>
+<translation id="6208521041562685716">Mobil veri etkinleştiriliyor</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Senkronizasyon çalışmıyor</translation>
 <translation id="6212039847102026977">Gelişmiş ağ özelliklerini göster</translation>
 <translation id="6212168817037875041">Ekranı kapat</translation>
@@ -3832,6 +3848,7 @@
 <translation id="677965093459947883">Çok küçük</translation>
 <translation id="6780439250949340171">diğer ayarları yönetin</translation>
 <translation id="6781284683813954823">Doodle Bağlantısı</translation>
+<translation id="6781978626986383437">Linux yedeklemesi iptal edildi</translation>
 <translation id="6782111308708962316">Üçüncü taraf web sitelerinin çerez verilerini kaydetmesini ve okumasını engelle</translation>
 <translation id="6786747875388722282">Uzantılar</translation>
 <translation id="6787839852456839824">Klavye kısayolları</translation>
@@ -4119,6 +4136,7 @@
 <translation id="7197632491113152433">Hesabınızdan bu cihazda kullanılabilecek <ph name="NUMBER_OF_APPS" /> uygulama bulduk.</translation>
 <translation id="7199158086730159431">&amp;Yardım Al</translation>
 <translation id="7200083590239651963">Yapılandırmayı seçin</translation>
+<translation id="7201042526153088083"><ph name="DEVICE_TYPE" /> cihazınıza Google Play'den uygulama ve oyunlar yükleyin. &lt;a target="_blank" href="<ph name="URL" />"&gt;Daha fazla bilgi&lt;/a&gt;</translation>
 <translation id="720110658997053098">Bu cihazı kalıcı olarak kiosk modunda tut</translation>
 <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" silindi</translation>
 <translation id="7201420661433230412">Dosyaları görüntüle</translation>
@@ -4143,6 +4161,7 @@
 <translation id="7229570126336867161">EVDO gerekli</translation>
 <translation id="7230787553283372882">Metin boyutunu özelleştir</translation>
 <translation id="7232750842195536390">Yeniden adlandırma başarısız oldu</translation>
+<translation id="7234010996000898150">Linuz geri yükleme işlemi iptal ediliyor</translation>
 <translation id="7235716375204803342">Etkinlikler getiriliyor...</translation>
 <translation id="7235737137505019098">Güvenlik anahtarınızda başka hesaplar için yeterli alan yok.</translation>
 <translation id="7238585580608191973">SHA-256 Parmak İzi</translation>
@@ -4278,6 +4297,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Tümünü &amp;Yeni Pencerede Aç}=1{&amp;Yeni Pencerede Aç}other{Tümünü (#) &amp;Yeni Pencerede Aç}}</translation>
 <translation id="7434509671034404296">Geliştirici</translation>
 <translation id="7436921188514130341">Hay aksi! Yeniden adlandırma sırasında bir hata oluştu.</translation>
+<translation id="7437427339141948518">Bildirimler kapalı</translation>
 <translation id="7438976808740265764">Aralık 2020'den sonra Flash Player desteklenmeyecektir.</translation>
 <translation id="7441736921018636843">Bu ayarı değiştirmek için <ph name="BEGIN_LINK" />senkronizasyonu sıfırlayarak<ph name="END_LINK" /> senkronizasyon parolanızı kaldırın</translation>
 <translation id="7441830548568730290">Diğer kullanıcılar</translation>
@@ -4407,6 +4427,7 @@
 <translation id="7643932971554933646">Sitenin dosyaları görüntülemesine izin verilsin mi?</translation>
 <translation id="7644543211198159466">Renk ve tema</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (cihaz sahibi)</translation>
+<translation id="7645681574855902035">Linux yedeklemesi iptal ediliyor</translation>
 <translation id="7647403192093989392">Yeni etkinlik yok</translation>
 <translation id="7648142322539582331">Ebeveyn Denetimleri'ni kurmak için internete bağlanın</translation>
 <translation id="7648992873808071793">Dosyaları bu cihazda depolama</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Çomar</translation>
 <translation id="8257950718085972371">Kamera erişimini engellemeye devam et</translation>
 <translation id="8259239505248583312">Başlayalım</translation>
+<translation id="8259556432390118667">Onaltılık renk değeri</translation>
 <translation id="8260126382462817229">Tekrar oturum açmayı deneyin</translation>
 <translation id="8260864402787962391">Fare</translation>
 <translation id="8261378640211443080">Bu uzantı <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> altında listelenmiyor ve bilginiz dışında eklenmiş olabilir.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Ana sayfanızı <ph name="HOME_PAGE" /> olarak değiştirme</translation>
 <translation id="8662978096466608964">Chrome duvar kağıdını ayarlayamıyor.</translation>
 <translation id="8663099077749055505"><ph name="HOST" /> ana makinesinde otomatik olarak birden fazla dosya indirmeyi her zaman engelle</translation>
+<translation id="8663534996262079772">Bu site için bildirimler gösterilsin mi?</translation>
 <translation id="8664389313780386848">&amp;Sayfa kaynağını görüntüle</translation>
 <translation id="8665180165765946056">Yedekleme tamamlandı</translation>
 <translation id="866611985033792019">E-posta kullanıcılarını tanımlamak için bu sertifikaya güvenin</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Düzenle</translation>
 <translation id="9066773882585798925">Metnin sesli olarak okunmasını duyma</translation>
 <translation id="9066782832737749352">Metin-Konuşma</translation>
+<translation id="9068849894565669697">Renk seçin</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">USB fare bağlandı</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Bluetooth cihazlarına ileti gönderme ve Bluetooth cihazlarından gelen iletileri alma.</translation>
 <translation id="9134304429738380103">Evet, istiyorum.</translation>
 <translation id="9137013805542155359">Orijinali göster</translation>
+<translation id="9137157311132182254">Tercih edilen arama motoru</translation>
 <translation id="9137916601698928395">Bağlantıyı <ph name="USER" /> olarak aç</translation>
 <translation id="9138978632494473300">Aşağıdaki yerlere kısayollar ekleyin:</translation>
 <translation id="9140067245205650184">Desteklenmeyen bir özellik işareti kullanıyorsunuz: <ph name="BAD_FLAG" />. Kararlılık ve güvenlik seviyesi düşecektir.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Yer işareti klasör ağacı</translation>
 <translation id="964286338916298286">BT yöneticiniz cihazınızda Chrome Ekstraları'nı devre dışı bırakmış.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Uygulama}other{Uygulamalar}}</translation>
+<translation id="965211523698323809"><ph name="DEVICE_TYPE" /> cihazınızdan kısa mesaj gönderin ve alın <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Bu işlem Google hesaplarınızın oturumunu kapatacaktır. Yer işaretleri, geçmiş, şifreler ve diğer ayarlarınızla ilgili değişiklikler artık Google Hesabınızla senkronize edilmeyecek. Ancak mevcut verileriniz Google Hesabınızda kalmaya devam edecek ve <ph name="BEGIN_LINK" />Google Hesap Özeti<ph name="END_LINK" />'nde yönetilebilecektir.</translation>
 <translation id="967624055006145463">Depolanan veriler</translation>
 <translation id="968000525894980488">Google Play hizmetlerini açın.</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index bbd06213..4431a5a 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Запит на операцію перегляду або внесення змін надіслано з недійсним зміщенням на пристрої <ph name="DEVICE_NAME" />.</translation>
 <translation id="1097658378307015415">Перш ніж увійти, розпочніть сеанс у режимі гостя, щоб активувати мережу <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Завжди перекладати з такої мови: <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">SIM-карту не виявлено</translation>
 <translation id="1108600514891325577">&amp;Зупинити</translation>
 <translation id="1110155001042129815">Зачекайте</translation>
 <translation id="1112420131909513020">Фонова вкладка використовує Bluetooth</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Ваш адміністратор вимкнув синхронізацію.</translation>
 <translation id="2127372758936585790">Зарядний пристрій низької потужності</translation>
 <translation id="212862741129535676">Відсоток заряду акумулятора, який використовує стан частоти</translation>
+<translation id="212876957201860463">Підготовка до налаштування мобільного пристрою…</translation>
 <translation id="2129825002735785149">Оновити плагін</translation>
 <translation id="2131077480075264">Не вдається встановити додаток <ph name="APP_NAME" />, оскільки він заборонений в <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Сховати PIN-коди</translation>
@@ -773,7 +775,7 @@
 <translation id="2148756636027685713">Форматування закінчено</translation>
 <translation id="2148892889047469596">Транслювати вкладку</translation>
 <translation id="2150139952286079145">Пошук місць призначення</translation>
-<translation id="2150212764721500731">Сайт <ph name="ORIGIN" /> може зберігати зміни просто у файлах у папці "<ph name="FOLDERNAME" />"</translation>
+<translation id="2150212764721500731">Сайт <ph name="ORIGIN" /> може напряму зберігати зміни у файлах у папці "<ph name="FOLDERNAME" />"</translation>
 <translation id="2150661552845026580">Додати "<ph name="EXTENSION_NAME" />"?</translation>
 <translation id="2151576029659734873">Введено недійсний індекс вкладки.</translation>
 <translation id="2154484045852737596">Редагувати картку</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Дані зашифровано паролем Google від
           <ph name="TIME" />. Це не стосується способів оплати й адрес із Google Pay.</translation>
 <translation id="2419706071571366386">З міркувань безпеки виходьте з облікового запису, коли не використовуєте комп’ютер.</translation>
+<translation id="2422125132043002186">Відновлення Linux скасовано</translation>
 <translation id="2423578206845792524">Збер&amp;егти зображення як...</translation>
 <translation id="2428510569851653187">Опишіть, що ви робили, коли вкладка аварійно завершила роботу</translation>
 <translation id="2431027948063157455">Не вдалося завантажити Google Асистент. Перевірте з’єднання з мережею та повторіть спробу.</translation>
@@ -1213,7 +1216,7 @@
 <translation id="2773288106548584039">Підтримка застарілих веб-переглядачів</translation>
 <translation id="2773802008104670137">Цей файл може пошкодити ваш комп’ютер.</translation>
 <translation id="2775104091073479743">Редагувати відбитки пальців</translation>
-<translation id="2775188527796017992">Сайт <ph name="ORIGIN" /> зможе зберігати зміни просто у файлі "<ph name="FILENAME" />". Зміни зберігаються, доки ви не закриєте цю вкладку.</translation>
+<translation id="2775188527796017992">Сайт <ph name="ORIGIN" /> зможе напряму зберігати зміни у файлі "<ph name="FILENAME" />". Зміни зберігаються, доки ви не закриєте цю вкладку.</translation>
 <translation id="2776441542064982094">Схоже, немає пристроїв для реєстрації в мережі. Якщо ваш пристрій увімкнено й під’єднано до Інтернету, спробуйте зареєструвати його, дотримуючись інструкцій у посібнику з експлуатації.</translation>
 <translation id="2780009105947267877">Налаштування плагіна віртуальної машини…</translation>
 <translation id="2781692009645368755">Google Pay</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Отримання доступу до аудіо- й відеовходу</translation>
 <translation id="3090819949319990166">Не вдається скопіювати зовнішній файл .crx у файл <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558"><ph name="DEVICE_NAME" />: підключено</translation>
+<translation id="3092699946856346803">Вставте SIM-карту й повторіть спробу</translation>
 <translation id="3101709781009526431">Дата та час</translation>
 <translation id="310671807099593501">Сайт використовує Bluetooth</translation>
 <translation id="3115147772012638511">...</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Файли та програми, які буде переміщено в карантин:</translation>
 <translation id="3282568296779691940">Вхід у Chrome</translation>
 <translation id="3285322247471302225">Нова &amp;вкладка</translation>
+<translation id="3286654161521615710">Використовують веб-переглядач Chrome і панель запуску <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Переглянути й видалити дані для входу, збережені на ключі безпеки</translation>
 <translation id="3288047731229977326">Розширення, які працюють у режимі розробника, можуть пошкодити ваш комп’ютер. Якщо ви не розробник, вимкніть їх заради безпеки.</translation>
 <translation id="3289856944988573801">Щоб перевірити наявність оновлень, скористайтеся мережею Ethernet чи Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Сертифікат SSL-сервера</translation>
 <translation id="3775705724665058594">Надіслати на пристрої</translation>
 <translation id="3776796446459804932">Це розширення порушує політику Веб-магазину Chrome.</translation>
+<translation id="3777483481409781352">Не вдалось активувати мобільний пристрій</translation>
 <translation id="3777806571986431400">Розширення ввімкнено</translation>
 <translation id="3778152852029592020">Завантаження скасовано.</translation>
 <translation id="3778208826288864398">Ключ безпеки заблоковано, оскільки ви ввели неправильний PIN-код забагато разів. Потрібно скинути ключ безпеки.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Чорно-білий</translation>
 <translation id="4136203100490971508">Нічний режим вимкнеться автоматично на світанку</translation>
 <translation id="4138267921960073861">Показувати імена користувачів і фото на екрані входу</translation>
+<translation id="4142052906269098341">Розблоковуйте <ph name="DEVICE_TYPE" /> за допомогою телефона. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Покращуйте якість відео й заощаджуйте час роботи акумулятора. Відео відтворюватиметься лише на екрані з підтримкою Google Cast.</translation>
 <translation id="4145922204387553806">Дозвольте Асистенту показувати інформацію на основі вмісту на екрані</translation>
 <translation id="4146026355784316281">Завжди відкривати за допомогою системного переглядача</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Експортувати</translation>
 <translation id="42137655013211669">Сервер заборонив доступ до цього ресурсу.</translation>
 <translation id="4215350869199060536">Помилка. Заборонені символи в імені.</translation>
+<translation id="4220648711404560261">Під час активації сталася помилка.</translation>
 <translation id="4225397296022057997">На всіх сайтах</translation>
 <translation id="4232375817808480934">Налаштувати Kerberos</translation>
 <translation id="4235200303672858594">Увесь екран</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Параметри зовнішньої пам'яті</translation>
 <translation id="447252321002412580">Допоможіть покращити функції й ефективність Chrome</translation>
 <translation id="4474155171896946103">Позначити закладками всі вкладки...</translation>
+<translation id="4474461121892222090">Активація мобільного передавання даних може зайняти до 15 хвилин.</translation>
 <translation id="4475552974751346499">Пошук завантажень</translation>
 <translation id="4476590490540813026">Спортсменка</translation>
 <translation id="4477015793815781985">Натискайте Ctrl, Alt або ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Налаштовується віртуальна машина. Це може тривати кілька хвилин.</translation>
 <translation id="4480590691557335796">Chrome може знайти на вашому комп’ютері шкідливе програмне забезпечення й видалити його</translation>
 <translation id="4481530544597605423">Відключені пристрої</translation>
+<translation id="4483579413421375386">Показувати для сайту</translation>
 <translation id="4495419450179050807">Не показувати на цій сторінці</translation>
 <translation id="4500114933761911433">Плагін <ph name="PLUGIN_NAME" /> аварійно завершив роботу</translation>
 <translation id="450099669180426158">Значок знака оклику</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Введіть PIN-код для пристрою "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Недостатні дозволи</translation>
 <translation id="4648499713050786492">Перш ніж додати особу, розблокуйте свій профіль.</translation>
+<translation id="4650591383426000695">Від'єднати телефон від <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Не вдалося завантажити онлайн-компонент із ресурсами демо-режиму.</translation>
 <translation id="465878909996028221">Для переспрямування у веб-переглядачі підтримуються лише http, https і протоколи файлів.</translation>
 <translation id="4659077111144409915">Основний обліковий запис</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Підключіть пристрій <ph name="DEVICE_TYPE" /> до джерела живлення.</translation>
 <translation id="5115338116365931134">Система єдиного входу (SSO)</translation>
 <translation id="5116628073786783676">Збере&amp;гти аудіо як...</translation>
+<translation id="5117139026559873716">Від'єднайте телефон від <ph name="DEVICE_TYPE" />. Вони більше не під'єднуватимуться автоматично.</translation>
 <translation id="5117427536932535467">Теми та фонові зображення</translation>
 <translation id="5117625797180141189">"<ph name="DOCUMENT_NAME" />" надруковано</translation>
 <translation id="5117930984404104619">Відстежувати поведінку інших розширень, зокрема відвідані URL-адреси</translation>
@@ -2903,7 +2915,7 @@
 <translation id="5370819323174483825">&amp;Оновити</translation>
 <translation id="5372529912055771682">Наданий режим реєстрації не підтримується цією версією операційної системи. Переконайтеся, що ви використовуєте останню версію, і повторіть спробу.</translation>
 <translation id="5374359983950678924">Змінити зображення</translation>
-<translation id="5375793835576008230">Сайт <ph name="ORIGIN" /> зможе зберігати зміни просто у файлах у папці "<ph name="FOLDERNAME" />". Зміни зберігаються, доки ви не закриєте цю вкладку.</translation>
+<translation id="5375793835576008230">Сайт <ph name="ORIGIN" /> зможе напряму зберігати зміни у файлах у папці "<ph name="FOLDERNAME" />". Зміни зберігаються, доки ви не закриєте цю вкладку.</translation>
 <translation id="5376169624176189338">Натисніть, щоб повернутися назад; утримуйте, щоб переглянути історію</translation>
 <translation id="5376931455988532197">Файл завеликий</translation>
 <translation id="537813040452600081">Сторінки, які ви переглядаєте в цьому вікні, не відображатимуться в історії веб-переглядача, а після вашого виходу не залишать у комп'ютері інших слідів, наприклад, файлів cookie. Завантажені вами файли та створені закладки не зберігаються.</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Індекс <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Меню, яке містить сховані закладки</translation>
 <translation id="5464632865477611176">Запустити цього разу</translation>
+<translation id="5464660706533281090">Дитина не може змінювати це налаштування.</translation>
 <translation id="5466374726908360271">Вставити й шукати "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5471768120198416576">Вітаю! Я – голос для синтезу мовлення.</translation>
 <translation id="5473333559083690127">Ще раз введіть новий PIN-код</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Підключити</translation>
 <translation id="5821565227679781414">Створити ярлик</translation>
 <translation id="5825412242012995131">Увімкнено (рекомендовано)</translation>
+<translation id="5826395379250998812">Під'єднайте <ph name="DEVICE_TYPE" /> до телефона. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Загальне ім'я (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Друк...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Вибрані дані видалено з Chrome і синхронізованих пристроїв. Історія веб-перегляду, а також ваші дії в інших сервісах Google можуть також зберігатися у вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Коментар сертифіката Netscape</translation>
 <translation id="6129953537138746214">Пробіл</translation>
+<translation id="6130024555057767093">Наразі сповіщення заблоковано для всіх сайтів, окрім тих, які ви окремо дозволили.</translation>
 <translation id="6136114942382973861">Закрити панель завантажень</translation>
 <translation id="6137767437444130246">Сертифікат користувача</translation>
 <translation id="6138680304137685902">Алгоритм ECDSA X9.62 з підписом SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Завжди відкривати ці типи посилань у пов’язаному додатку</translation>
 <translation id="6207282396926186323">Установити додаток <ph name="APP_NAME" /> (додаток Linux)</translation>
 <translation id="6207937957461833379">Країна або регіон</translation>
+<translation id="6208521041562685716">Мобільне передавання даних активується</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: синхронізація не працює</translation>
 <translation id="6212039847102026977">Показати розширені параметри мережі</translation>
 <translation id="6212168817037875041">Вимкнути дисплей</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Дуже малий</translation>
 <translation id="6780439250949340171">керувати іншими налаштуваннями</translation>
 <translation id="6781284683813954823">Посилання на дудл</translation>
+<translation id="6781978626986383437">Резервне копіювання Linux скасовано</translation>
 <translation id="6782111308708962316">Забороняти стороннім веб-сайтам зберігати та переглядати дані файлів cookie</translation>
 <translation id="6786747875388722282">Розширення</translation>
 <translation id="6787839852456839824">Комбінації клавіш</translation>
@@ -3892,7 +3909,7 @@
 <translation id="6865313869410766144">Дані автозаповнення форм</translation>
 <translation id="6865708901122695652">Журнали подій WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation>
 <translation id="686664946474413495">Температура кольорів</translation>
-<translation id="6868139415119881457">Сайт <ph name="ORIGIN" /> може переглядати й зберігати зміни просто в указаних нижче файлах і папках</translation>
+<translation id="6868139415119881457">Сайт <ph name="ORIGIN" /> може переглядати й напряму зберігати зміни в указаних нижче файлах і папках</translation>
 <translation id="6870888490422746447">Виберіть додаток:</translation>
 <translation id="6871644448911473373">Відповідач OCSP: <ph name="LOCATION" /></translation>
 <translation id="6872781471649843364">Сервер відхилив введений вами пароль.</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Ми знайшли в обліковому записі додатки (<ph name="NUMBER_OF_APPS" />), які можна використовувати на цьому пристрої.</translation>
 <translation id="7199158086730159431">Довідка</translation>
 <translation id="7200083590239651963">Виберіть налаштування</translation>
+<translation id="7201042526153088083">Встановлюйте додатки й ігри з Google Play на <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Докладніше&lt;/a&gt;</translation>
 <translation id="720110658997053098">Назавжди перевести цей пристрій у режим термінала</translation>
 <translation id="7201118060536064622">Елемент "<ph name="DELETED_ITEM_NAME" />" видалено</translation>
 <translation id="7201420661433230412">Переглянути файли</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Потрібна мережа EVDO</translation>
 <translation id="7230787553283372882">Налаштувати розмір тексту</translation>
 <translation id="7232750842195536390">Не вдалося перейменувати</translation>
+<translation id="7234010996000898150">Скасовується відновлення Linux</translation>
 <translation id="7235716375204803342">Завантаження дій…</translation>
 <translation id="7235737137505019098">На вашому ключі безпеки замало місця, щоб створити ще один обліковий запис.</translation>
 <translation id="7238585580608191973">Відбиток SHA-256</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Відкрити всі у &amp;новому вікні}=1{Відкрити в &amp;новому вікні}one{Відкрити всі (#) у &amp;новому вікні}few{Відкрити всі (#) у &amp;новому вікні}many{Відкрити всі (#) у &amp;новому вікні}other{Відкрити всі (#) у &amp;новому вікні}}</translation>
 <translation id="7434509671034404296">Для розробників</translation>
 <translation id="7436921188514130341">От халепа! Сталася помилка під час перейменування.</translation>
+<translation id="7437427339141948518">Сповіщення вимкнено</translation>
 <translation id="7438976808740265764">З грудня 2020 року програвач Flash Player не підтримуватиметься.</translation>
 <translation id="7441736921018636843">Щоб змінити це налаштування, видаліть парольну фразу для синхронізації, <ph name="BEGIN_LINK" />скинувши параметри синхронізації<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">Інші користувачі</translation>
@@ -4324,7 +4344,7 @@
 <translation id="7506541170099744506"><ph name="DEVICE_TYPE" /> зареєстровано для корпоративного керування.</translation>
 <translation id="7507930499305566459">Сертифікат відповідача статусу</translation>
 <translation id="7508054832109420082">Надати доступ до принтерів</translation>
-<translation id="7509896576944228744">Сайт <ph name="ORIGIN" /> може зберігати зміни просто в указаних нижче папках</translation>
+<translation id="7509896576944228744">Сайт <ph name="ORIGIN" /> може напряму зберігати зміни в указаних нижче папках</translation>
 <translation id="7513029293694390567">Автоматично входити в облікові записи на веб-сайтах за допомогою збережених облікових даних. Якщо цю функцію вимкнено, потрібно підтверджувати облікові дані під час кожного входу на веб-сайтах.</translation>
 <translation id="7514365320538308">Завантажити</translation>
 <translation id="7517786267097410259">Створити пароль –</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Дозволити сайту переглядати файли?</translation>
 <translation id="7644543211198159466">Колір і тема</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (власник)</translation>
+<translation id="7645681574855902035">Скасовується резервне копіювання Linux</translation>
 <translation id="7647403192093989392">Немає останніх дій</translation>
 <translation id="7648142322539582331">Щоб налаштувати батьківський контроль, під'єднайте пристрій до Інтернету</translation>
 <translation id="7648992873808071793">Зберігати файли на цьому пристрої</translation>
@@ -4420,7 +4441,7 @@
 <translation id="7661259717474717992">Дозволити сайтам зберігати та переглядати дані файлів cookie</translation>
 <translation id="7661451191293163002">Не вдалось отримати сертифікат про реєстрацію.</translation>
 <translation id="7662283695561029522">Торкніться, щоб налаштувати</translation>
-<translation id="766254481392580456">Сайт <ph name="ORIGIN" /> може зберігати зміни просто у файлі "<ph name="FILENAME" />"</translation>
+<translation id="766254481392580456">Сайт <ph name="ORIGIN" /> може напряму зберігати зміни у файлі "<ph name="FILENAME" />"</translation>
 <translation id="7663719505383602579">Одержувач: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7664620655576155379">Непідтримуваний пристрій Bluetooth: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="7665369617277396874">Додати обліковий запис</translation>
@@ -4781,7 +4802,7 @@
 <translation id="8146177459103116374">Якщо ви вже зареєструвалися на цьому пристрої, можна <ph name="LINK2_START" />ввійти як існуючий користувач<ph name="LINK2_END" /> .</translation>
 <translation id="8146793085009540321">Помилка під час входу. Зв’яжіться з адміністратором або повторіть спробу.</translation>
 <translation id="8151638057146502721">Налаштувати</translation>
-<translation id="8152021341839173449">Сайт <ph name="ORIGIN" /> може зберігати зміни просто в указаних нижче файлах і папках</translation>
+<translation id="8152021341839173449">Сайт <ph name="ORIGIN" /> може напряму зберігати зміни в указаних нижче файлах і папках</translation>
 <translation id="8152091997436726702">Час очікування реєстрації принтера минув. Щоб зареєструвати принтер, підтвердьте реєстрацію на самому принтері.</translation>
 <translation id="8154790740888707867">Немає файлу</translation>
 <translation id="815491593104042026">Помилка. Не вдалося отримати дозвіл, оскільки вас було переспрямовано на незахищену URL-адресу (<ph name="BLOCKED_URL" />). Зверніться до свого адміністратора.</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Шибеник</translation>
 <translation id="8257950718085972371">Продовжити блокувати доступ до камери</translation>
 <translation id="8259239505248583312">Почати</translation>
+<translation id="8259556432390118667">Шістнадцятковий код кольору</translation>
 <translation id="8260126382462817229">Спробуйте ввійти ще раз</translation>
 <translation id="8260864402787962391">Миша</translation>
 <translation id="8261378640211443080">Це розширення встановлено не із сайту <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />. Можливо, його було додано без вашого відома.</translation>
@@ -5039,7 +5061,7 @@
 <translation id="8561206103590473338">Слон</translation>
 <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation>
 <translation id="8565650234829130278">Спроба встановити програму нижчої версії.</translation>
-<translation id="856745937116041450">Сайт <ph name="ORIGIN" /> може зберігати зміни просто в указаних нижче файлах</translation>
+<translation id="856745937116041450">Сайт <ph name="ORIGIN" /> може напряму зберігати зміни в указаних нижче файлах</translation>
 <translation id="8569002732135253578">Друк "<ph name="DOCUMENT_NAME" />"</translation>
 <translation id="8569682776816196752">Не знайдено жодного місця призначення</translation>
 <translation id="8571213806525832805">Останні 4 тижні</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Зробити <ph name="HOME_PAGE" /> домашньою сторінкою</translation>
 <translation id="8662978096466608964">Chrome не може встановити цей фоновий малюнок.</translation>
 <translation id="8663099077749055505">Завжди блокувати автоматичне завантаження декількох файлів на <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Показувати сповіщення для цього сайту?</translation>
 <translation id="8664389313780386848">&amp;Переглянути джерело сторінки</translation>
 <translation id="8665180165765946056">Резервне копіювання завершено</translation>
 <translation id="866611985033792019">Довіряти цьому сертифікату для ідентифікації користувачів електронної пошти</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Редагувати</translation>
 <translation id="9066773882585798925">Озвучуйте текст</translation>
 <translation id="9066782832737749352">Синтез мовлення</translation>
+<translation id="9068849894565669697">Вибрати колір</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Під’єднано мишу USB</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Обмінюватися повідомленнями на пристроях Bluetooth.</translation>
 <translation id="9134304429738380103">Так.</translation>
 <translation id="9137013805542155359">Показати оригінал</translation>
+<translation id="9137157311132182254">Основна пошукова система</translation>
 <translation id="9137916601698928395">Відкрити посилання як <ph name="USER" /></translation>
 <translation id="9138978632494473300">Створити ярлики в таких розташуваннях:</translation>
 <translation id="9140067245205650184">Використовується непідтримувана позначка функції: <ph name="BAD_FLAG" />. Це вплине на стабільність і безпеку.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Дерево папок із закладками</translation>
 <translation id="964286338916298286">ІТ-адміністратор вимкнув додаткові можливості Chrome для вашого пристрою.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Додаток}one{Додатки}few{Додатки}many{Додатки}other{Додатки}}</translation>
+<translation id="965211523698323809">Обмінюйтеся текстовими повідомленнями за допомогою <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Ви вийдете з облікових записів Google. Зміни в закладках, історії, паролях та інших налаштуваннях більше не синхронізуватимуться з ним. Дані, які зберігаються в обліковому записі Google, не буде видалено. Ними можна керувати на <ph name="BEGIN_LINK" />Інформаційній панелі Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Збережені дані</translation>
 <translation id="968000525894980488">Увімкніть сервіси Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 66e926f..ed51866 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">Đã yêu cầu tác vụ đọc hoặc ghi với hiệu số không hợp lệ trên: "<ph name="DEVICE_NAME" />".</translation>
 <translation id="1097658378307015415">Trước khi đăng nhập, vui lòng đăng nhập với tư cách khách để kích hoạt mạng <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">Luôn dịch <ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">Chúng tôi không phát hiện được thẻ SIM của bạn</translation>
 <translation id="1108600514891325577">&amp;Dừng</translation>
 <translation id="1110155001042129815">Chờ</translation>
 <translation id="1112420131909513020">Tab nền đang sử dụng Bluetooth</translation>
@@ -129,7 +130,7 @@
 <translation id="1177138678118607465">Google có thể sử dụng lịch sử duyệt web của bạn để cá nhân hóa Tìm kiếm, quảng cáo và các dịch vụ khác của Google. Bạn có thể thay đổi cài đặt này bất cứ lúc nào tại myaccount.google.com/activitycontrols/search</translation>
 <translation id="1177863135347784049">Tùy chỉnh</translation>
 <translation id="1178581264944972037">Tạm dừng</translation>
-<translation id="117916940443676133">Bạn chưa bảo vệ khóa bảo mật bằng mã PIN. Để quản lý dữ liệu đăng nhập, trước tiên, hãy tạo một mã PIN.</translation>
+<translation id="117916940443676133">Bạn chưa thiết lập mã PIN để bảo vệ khóa bảo mật. Để quản lý dữ liệu đăng nhập, trước tiên, hãy tạo một mã PIN.</translation>
 <translation id="1181037720776840403">Xóa</translation>
 <translation id="1183237619868651138">Không thể cài đặt <ph name="EXTERNAL_CRX_FILE" /> trong bộ nhớ đệm cục bộ.</translation>
 <translation id="1185924365081634987">Bạn cũng có thể thử <ph name="GUEST_SIGNIN_LINK_START" />duyệt với tư cách khách<ph name="GUEST_SIGNIN_LINK_END" /> để khắc phục lỗi mạng này.</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">Đồng bộ hóa bị quản trị viên của bạn tắt.</translation>
 <translation id="2127372758936585790">Bộ sạc công suất thấp</translation>
 <translation id="212862741129535676">Phần trăm sử dụng ở trạng thái tần số</translation>
+<translation id="212876957201860463">Đang chuẩn bị thiết lập thiết bị di động của bạn...</translation>
 <translation id="2129825002735785149">Cập nhật plugin</translation>
 <translation id="2131077480075264">Không thể cài đặt "<ph name="APP_NAME" />" vì "<ph name="IMPORT_NAME" />" không cho phép ứng dụng này</translation>
 <translation id="21354425047973905">Ẩn mã PIN</translation>
@@ -956,6 +958,7 @@
 <translation id="241727068219398187">Dữ liệu được mã hóa bằng mật khẩu Google của bạn kể từ
           <ph name="TIME" />. Dữ liệu này không bao gồm địa chỉ và phương thức thanh toán từ Google Pay.</translation>
 <translation id="2419706071571366386">Vì lý do bảo mật, hãy đăng xuất khi bạn không sử dụng máy tính.</translation>
+<translation id="2422125132043002186">Đã hủy quá trình khôi phục Linux</translation>
 <translation id="2423578206845792524">Lưu &amp;hình ảnh thành...</translation>
 <translation id="2428510569851653187">Mô tả những việc bạn đang làm khi tab gặp lỗi</translation>
 <translation id="2431027948063157455">Không thể tải Trợ lý Google, vui lòng kiểm tra kết nối mạng của bạn rồi thử lại.</translation>
@@ -1213,7 +1216,7 @@
 <translation id="2773288106548584039">Hỗ trợ trình duyệt cũ</translation>
 <translation id="2773802008104670137">Loại tệp này có thể gây hại cho máy tính của bạn.</translation>
 <translation id="2775104091073479743">Chỉnh sửa vân tay</translation>
-<translation id="2775188527796017992"><ph name="ORIGIN" /> có thể lưu trực tiếp các thay đổi vào <ph name="FILENAME" />. Trang web có thể lưu các thay đổi cho đến khi bạn đóng tab này.</translation>
+<translation id="2775188527796017992"><ph name="ORIGIN" /> có thể lưu trực tiếp các thay đổi vào <ph name="FILENAME" />. Chừng nào tab này còn mở thì trang web vẫn có thể lưu các thay đổi.</translation>
 <translation id="2776441542064982094">Dường như không có thiết bị nào khả dụng để đăng ký trên mạng. Nếu thiết bị của bạn đã bật và kết nối với Internet, hãy thử đăng ký thiết bị bằng các hướng dẫn trong sách hướng dẫn của thiết bị đó.</translation>
 <translation id="2780009105947267877">Đang thiết lập Máy chủ ảo plugin...</translation>
 <translation id="2781692009645368755">Google Pay</translation>
@@ -1424,6 +1427,7 @@
 <translation id="3090193911106258841">Đang truy cập thiết bị đầu vào video và âm thanh</translation>
 <translation id="3090819949319990166">Không thể sao chép tệp crx bên ngoài sang <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">Đã ghép nối "<ph name="DEVICE_NAME" />"</translation>
+<translation id="3092699946856346803">Vui lòng lắp SIM rồi thử lại</translation>
 <translation id="3101709781009526431">Ngày và giờ</translation>
 <translation id="310671807099593501">Trang web đang sử dụng Bluetooth</translation>
 <translation id="3115147772012638511">Đang chờ bộ nhớ đệm…</translation>
@@ -1531,6 +1535,7 @@
 <translation id="3281892622610078515">Các tệp và chương trình cần cách ly:</translation>
 <translation id="3282568296779691940">Đăng nhập vào Chrome</translation>
 <translation id="3285322247471302225">&amp;Tab Mới</translation>
+<translation id="3286654161521615710">Dùng trong trình duyệt Chrome và trình chạy <ph name="DEVICE_TYPE" /></translation>
 <translation id="3286737518123001369">Xem và xóa dữ liệu đăng nhập lưu trữ trên khóa bảo mật của bạn</translation>
 <translation id="3288047731229977326">Tiện ích chạy ở chế độ nhà phát triển có thể gây hại cho máy tính của bạn. Nếu bạn không phải là nhà phát triển, bạn nên vô hiệu hóa các tiện ích này chạy trong chế độ nhà phát triển để giữ an toàn.</translation>
 <translation id="3289856944988573801">Để kiểm tra các cập nhật, hãy sử dụng kết nối Ethernet hoặc Wi-Fi.</translation>
@@ -1875,6 +1880,7 @@
 <translation id="3775432569830822555">Chứng chỉ Máy chủ SSL</translation>
 <translation id="3775705724665058594">Gửi đến các thiết bị của bạn</translation>
 <translation id="3776796446459804932">Tiện ích này vi phạm chính sách của Cửa hàng Chrome trực tuyến.</translation>
+<translation id="3777483481409781352">Không kích hoạt được thiết bị di động</translation>
 <translation id="3777806571986431400">Đã bật tiện ích</translation>
 <translation id="3778152852029592020">Đã hủy tải xuống.</translation>
 <translation id="3778208826288864398">Khóa bảo mật đã bị khóa do bạn nhập sai mã PIN quá nhiều lần. Bạn cần đặt lại khóa bảo mật.</translation>
@@ -2138,6 +2144,7 @@
 <translation id="4131410914670010031">Đen và trắng</translation>
 <translation id="4136203100490971508">Chế độ Ánh sáng đêm sẽ tự động tắt khi trời sáng</translation>
 <translation id="4138267921960073861">Hiển thị tên người dùng và ảnh trên màn hình đăng nhập</translation>
+<translation id="4142052906269098341">Mở khóa <ph name="DEVICE_TYPE" /> bằng điện thoại của bạn. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">Trải nhiệm chất lượng video tốt hơn và tiết kiệm pin. Video sẽ chỉ phát trên màn hình có hỗ trợ tính năng Truyền.</translation>
 <translation id="4145922204387553806">Cho phép Trợ lý hiển thị thông tin liên quan đến nội dung trên màn hình của bạn</translation>
 <translation id="4146026355784316281">Luôn mở bằng trình xem hệ thống</translation>
@@ -2179,6 +2186,7 @@
 <translation id="42126664696688958">Xuất</translation>
 <translation id="42137655013211669">Máy chủ cấm truy cập vào tài nguyên này.</translation>
 <translation id="4215350869199060536">Rất tiếc, ký tự không hợp lệ trong tên!</translation>
+<translation id="4220648711404560261">Đã xảy ra lỗi trong quá trình kích hoạt.</translation>
 <translation id="4225397296022057997">Trên tất cả các trang web</translation>
 <translation id="4232375817808480934">Định cấu hình Kerberos</translation>
 <translation id="4235200303672858594">Toàn màn hình</translation>
@@ -2327,6 +2335,7 @@
 <translation id="4470957202018033307">Tùy chọn bộ nhớ bên ngoài</translation>
 <translation id="447252321002412580">Giúp cải thiện hiệu suất cũng như các tính năng của Chrome</translation>
 <translation id="4474155171896946103">Đánh dấu tất cả các tab...</translation>
+<translation id="4474461121892222090">Có thể mất tối đa 15 phút để hoàn tất quá trình kích hoạt dữ liệu di động.</translation>
 <translation id="4475552974751346499">Tìm kiếm trong các tệp đã tải xuống</translation>
 <translation id="4476590490540813026">Vận động viên</translation>
 <translation id="4477015793815781985">Bao gồm phím Ctrl, Alt hoặc ⌘</translation>
@@ -2336,6 +2345,7 @@
 <translation id="4479877282574735775">Đang định cấu hình máy ảo. Quá trình này có thể mất vài phút.</translation>
 <translation id="4480590691557335796">Chrome có thể tìm và xóa phần mềm gây hại trên máy tính của bạn</translation>
 <translation id="4481530544597605423">Thiết bị được hủy ghép nối</translation>
+<translation id="4483579413421375386">Hiển thị cho trang web</translation>
 <translation id="4495419450179050807">Không hiển thị trên trang này</translation>
 <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> đã bị lỗi</translation>
 <translation id="450099669180426158">Biểu tượng dấu chấm than</translation>
@@ -2439,6 +2449,7 @@
 <translation id="4647697156028544508">Vui lòng nhập PIN cho "<ph name="DEVICE_NAME" />":</translation>
 <translation id="4648491805942548247">Không đủ quyền</translation>
 <translation id="4648499713050786492">Vui lòng mở khóa hồ sơ của bạn trước khi thêm một người.</translation>
+<translation id="4650591383426000695">Ngắt kết nối điện thoại khỏi <ph name="DEVICE_TYPE" /></translation>
 <translation id="4651484272688821107">Không thể tải thành phần trực tuyến có tài nguyên chế độ minh họa.</translation>
 <translation id="465878909996028221">Chỉ hỗ trợ chuyển hướng trình duyệt cho các giao thức http, https và tệp.</translation>
 <translation id="4659077111144409915">Tài khoản chính</translation>
@@ -2740,6 +2751,7 @@
 <translation id="5115309401544567011">Hãy cắm <ph name="DEVICE_TYPE" /> của bạn vào nguồn điện.</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">Lư&amp;u Âm thanh Dưới dạng...</translation>
+<translation id="5117139026559873716">Ngắt kết nối điện thoại khỏi <ph name="DEVICE_TYPE" />. Hai thiết bị này sẽ không tự động kết nối nữa.</translation>
 <translation id="5117427536932535467">Chủ đề và hình nền</translation>
 <translation id="5117625797180141189">Đã in thành công <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">Giám sát hoạt động của các tiện ích khác, bao gồm cả các URL đã truy cập</translation>
@@ -2796,7 +2808,7 @@
 <translation id="5213891612754844763">Hiển thị cài đặt proxy</translation>
 <translation id="5215502535566372932">Chọn quốc gia</translation>
 <translation id="521582610500777512">Đã hủy ảnh</translation>
-<translation id="5217313969810784338">Hãy dùng pin của nhà sản xuất Chromebook để sạc pin.</translation>
+<translation id="5217313969810784338">Hãy dùng pin của nhà sản xuất Chromebook để sạc.</translation>
 <translation id="5222676887888702881">Đăng xuất</translation>
 <translation id="52232769093306234">Không đóng gói được.</translation>
 <translation id="5225324770654022472">Hiển thị lối tắt cho ứng dụng</translation>
@@ -2903,7 +2915,7 @@
 <translation id="5370819323174483825">&amp;Tải lại</translation>
 <translation id="5372529912055771682">Chế độ đăng ký đã cung cấp không được phiên bản hệ điều hành này hỗ trợ. Hãy đảm bảo bạn đang chạy phiên bản mới nhất và thử lại.</translation>
 <translation id="5374359983950678924">Thay đổi hình ảnh</translation>
-<translation id="5375793835576008230"><ph name="ORIGIN" /> có thể lưu trực tiếp các thay đổi vào các tệp trong <ph name="FOLDERNAME" />. Trang web có thể lưu các thay đổi cho đến khi bạn đóng tab này.</translation>
+<translation id="5375793835576008230"><ph name="ORIGIN" /> có thể lưu trực tiếp các thay đổi của bạn vào các tệp trong <ph name="FOLDERNAME" />. Chừng nào tab này còn mở thì trang web vẫn có thể lưu các thay đổi.</translation>
 <translation id="5376169624176189338">Nhấp vào để quay lại, giữ để xem lịch sử</translation>
 <translation id="5376931455988532197">Tệp quá lớn</translation>
 <translation id="537813040452600081">Các trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử trình duyệt đồng thời sẽ không để lại dấu vết khác, như cookie, trên máy tính sau khi bạn đăng xuất. Các tệp bạn tải xuống và các dấu trang bạn tạo sẽ không được lưu giữ.</translation>
@@ -2969,6 +2981,7 @@
 <translation id="5463275305984126951">Chỉ mục của <ph name="LOCATION" /></translation>
 <translation id="5463856536939868464">Menu chứa các dấu trang bị ẩn</translation>
 <translation id="5464632865477611176">Chạy lần này</translation>
+<translation id="5464660706533281090">Người dùng là trẻ em không thể thay đổi tùy chọn cài đặt này.</translation>
 <translation id="5466374726908360271">Dá&amp;n và tìm kiếm “<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">Chào bạn! Đây là giọng nói của tính năng chuyển văn bản sang lời nói.</translation>
 <translation id="5473333559083690127">Nhập lại mã PIN mới</translation>
@@ -3157,7 +3170,7 @@
 <translation id="5750324801516359607">Xa</translation>
 <translation id="5756163054456765343">Trung tâm trợ g&amp;iúp</translation>
 <translation id="5759728514498647443">Tài liệu bạn gửi để in qua <ph name="APP_NAME" /> có thể đọc được bằng <ph name="APP_NAME" />.</translation>
-<translation id="5760765233610147582">Dùng một đế sạc có thiết kế tương thích với Chromebook này.</translation>
+<translation id="5760765233610147582">Vui lòng sử dụng đế sạc tương thích với Chromebook này.</translation>
 <translation id="5763315388120433852">Thiết lập hoặc quản lý tính năng chia sẻ tệp trong mạng.</translation>
 <translation id="5763751966069581670">Không tìm thấy thiết bị USB nào</translation>
 <translation id="5764483294734785780">Lư&amp;u âm thanh thành...</translation>
@@ -3204,6 +3217,7 @@
 <translation id="5817918615728894473">Ghép nối</translation>
 <translation id="5821565227679781414">Tạo lối tắt</translation>
 <translation id="5825412242012995131">Bật (Đề xuất)</translation>
+<translation id="5826395379250998812">Hãy kết nối <ph name="DEVICE_TYPE" /> với điện thoại của bạn. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">Tên Phổ biến (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">Đang in...</translation>
@@ -3425,6 +3439,7 @@
 <translation id="6129691635767514872">Dữ liệu được chọn đã bị xóa khỏi Chrome và các thiết bị được đồng bộ hóa. Tài khoản Google của bạn có thể có các dạng lịch sử duyệt web khác, chẳng hạn như tìm kiếm và hoạt động từ các dịch vụ khác của Google tại <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="6129938384427316298">Nhận xét về Chứng chỉ Netscape</translation>
 <translation id="6129953537138746214">Dấu cách</translation>
+<translation id="6130024555057767093">Hiện đã chặn thông báo đối với mọi trang web, ngoại trừ các trang web bạn cho phép riêng.</translation>
 <translation id="6136114942382973861">Đóng thanh tệp đã tải xuống</translation>
 <translation id="6137767437444130246">Chứng chỉ người dùng</translation>
 <translation id="6138680304137685902">Chữ ký X9.62 ECDSA với SHA-384</translation>
@@ -3470,6 +3485,7 @@
 <translation id="620722923698527029">Luôn mở những loại liên kết này trong ứng dụng được liên kết</translation>
 <translation id="6207282396926186323">Cài đặt <ph name="APP_NAME" /> (Ứng dụng Linux)</translation>
 <translation id="6207937957461833379">Quốc gia/vùng</translation>
+<translation id="6208521041562685716">Đang kích hoạt dữ liệu di động</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: Tính năng đồng bộ hóa hiện không hoạt động</translation>
 <translation id="6212039847102026977">Hiển thị thuộc tính mạng nâng cao</translation>
 <translation id="6212168817037875041">Tắt màn hình</translation>
@@ -3831,6 +3847,7 @@
 <translation id="677965093459947883">Rất nhỏ</translation>
 <translation id="6780439250949340171">quản lý các cài đặt khác</translation>
 <translation id="6781284683813954823">Liên kết Doodle</translation>
+<translation id="6781978626986383437">Đã hủy quá trình sao lưu Linux</translation>
 <translation id="6782111308708962316">Ngăn các trang web của bên thứ ba lưu và đọc dữ liệu cookie</translation>
 <translation id="6786747875388722282">Tiện ích</translation>
 <translation id="6787839852456839824">Phím tắt</translation>
@@ -4118,6 +4135,7 @@
 <translation id="7197632491113152433">Chúng tôi tìm thấy <ph name="NUMBER_OF_APPS" /> ứng dụng từ tài khoản của bạn có thể dùng trên thiết bị này.</translation>
 <translation id="7199158086730159431">Nhận &amp;trợ giúp</translation>
 <translation id="7200083590239651963">Chọn cấu hình</translation>
+<translation id="7201042526153088083">Cài đặt ứng dụng và trò chơi từ Google Play trên <ph name="DEVICE_TYPE" />. &lt;a target="_blank" href="<ph name="URL" />"&gt;Tìm hiểu thêm&lt;/a&gt;</translation>
 <translation id="720110658997053098">Vĩnh viễn giữ thiết bị này ở chế độ kiosk</translation>
 <translation id="7201118060536064622">Đã xóa '<ph name="DELETED_ITEM_NAME" />'</translation>
 <translation id="7201420661433230412">Xem tệp</translation>
@@ -4142,6 +4160,7 @@
 <translation id="7229570126336867161">Cần có EVDO</translation>
 <translation id="7230787553283372882">Tùy chỉnh kích thước văn bản của bạn</translation>
 <translation id="7232750842195536390">Không đổi tên được</translation>
+<translation id="7234010996000898150">Đang hủy quá trình khôi phục Linux</translation>
 <translation id="7235716375204803342">Đang tìm nạp hoạt động...</translation>
 <translation id="7235737137505019098">Khóa bảo mật của bạn không có đủ dung lượng cho bất kỳ tài khoản nào khác nữa.</translation>
 <translation id="7238585580608191973">SHA-256 Fingerprint</translation>
@@ -4277,6 +4296,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{Mở tất cả trong &amp;cửa sổ mới}=1{Mở trong &amp;cửa sổ mới}other{Mở tất cả (#) trong &amp;cửa sổ mới}}</translation>
 <translation id="7434509671034404296">Nhà phát triển</translation>
 <translation id="7436921188514130341">Ôi, hỏng! Đã xảy ra lỗi trong khi đổi tên.</translation>
+<translation id="7437427339141948518">Đã tắt thông báo</translation>
 <translation id="7438976808740265764">Sau tháng 12 năm 2020, Flash Player sẽ không còn được hỗ trợ nữa.</translation>
 <translation id="7441736921018636843">Để thay đổi mục cài đặt này, hãy <ph name="BEGIN_LINK" />đặt lại tính năng đồng bộ hóa<ph name="END_LINK" /> để xóa cụm mật khẩu đồng bộ hóa của bạn</translation>
 <translation id="7441830548568730290">Người dùng khác</translation>
@@ -4406,6 +4426,7 @@
 <translation id="7643932971554933646">Cho phép trang web xem tệp?</translation>
 <translation id="7644543211198159466">Màu sắc và giao diện</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (chủ sở hữu)</translation>
+<translation id="7645681574855902035">Đang hủy quá trình sao lưu Linux</translation>
 <translation id="7647403192093989392">Không có hoạt động nào gần đây</translation>
 <translation id="7648142322539582331">Kết nối Internet để thiết lập tính năng Quyền kiểm soát của cha mẹ</translation>
 <translation id="7648992873808071793">Lưu trữ tệp trên thiết bị này</translation>
@@ -4857,6 +4878,7 @@
 <translation id="8256319818471787266">Cún con tinh nghịch</translation>
 <translation id="8257950718085972371">Tiếp tục chặn quyền truy cập máy ảnh</translation>
 <translation id="8259239505248583312">Bắt đầu</translation>
+<translation id="8259556432390118667">Giá trị màu hex</translation>
 <translation id="8260126382462817229">Thử đăng nhập lại</translation>
 <translation id="8260864402787962391">Chuột</translation>
 <translation id="8261378640211443080">Tiện ích này không được liệt kê trong <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> và có thể đã được thêm mà bạn không biết.</translation>
@@ -5109,6 +5131,7 @@
 <translation id="8662911384982557515">Thay đổi trang chủ của bạn thành: <ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome không thể đặt hình nền.</translation>
 <translation id="8663099077749055505">Luôn chặn nhiều bản tải xuống tự động trên <ph name="HOST" /></translation>
+<translation id="8663534996262079772">Hiển thị thông báo cho trang web này?</translation>
 <translation id="8664389313780386848">X&amp;em nguồn trang</translation>
 <translation id="8665180165765946056">Đã sao lưu xong</translation>
 <translation id="866611985033792019">Tin tưởng chứng chỉ này khi nhận dạng người dùng email</translation>
@@ -5398,6 +5421,7 @@
 <translation id="9065203028668620118">Chỉnh sửa</translation>
 <translation id="9066773882585798925">Nghe đọc to văn bản</translation>
 <translation id="9066782832737749352">Chuyển văn bản sang lời nói</translation>
+<translation id="9068849894565669697">Chọn màu</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">Bluetooth</translation>
 <translation id="9074836595010225693">Đã kết nối chuột USB</translation>
@@ -5435,6 +5459,7 @@
 <translation id="9131487537093447019">Gửi tin nhắn tới và nhận tin nhắn từ thiết bị Bluetooth.</translation>
 <translation id="9134304429738380103">Có, tôi đồng ý.</translation>
 <translation id="9137013805542155359">Hiển thị văn bản gốc</translation>
+<translation id="9137157311132182254">Công cụ tìm kiếm ưu tiên</translation>
 <translation id="9137916601698928395">Mở liên kết bằng tài khoản <ph name="USER" /></translation>
 <translation id="9138978632494473300">Thêm lối tắt cho các vị trí sau đây:</translation>
 <translation id="9140067245205650184">Bạn đang sử dụng cờ của tính năng không được hỗ trợ: <ph name="BAD_FLAG" />. Độ ổn định và tính bảo mật sẽ bị ảnh hưởng.</translation>
@@ -5507,6 +5532,7 @@
 <translation id="962802172452141067">Cây thư mục dấu trang</translation>
 <translation id="964286338916298286">Quản trị viên CNTT đã tắt các Ưu đãi của Chrome trên thiết bị của bạn.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{Ứng dụng}other{Các ứng dụng}}</translation>
+<translation id="965211523698323809">Gửi và nhận tin nhắn văn bản từ <ph name="DEVICE_TYPE" /> của bạn. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">Thao tác này sẽ đăng xuất bạn khỏi tài khoản Google. Các thay đổi đối với dấu trang, lịch sử, mật khẩu và các mục cài đặt khác sẽ không đồng bộ hóa với Tài khoản Google của bạn nữa. Tuy nhiên, dữ liệu hiện có sẽ vẫn được lưu trữ trong Tài khoản Google của bạn và có thể quản lý trên <ph name="BEGIN_LINK" />Trang tổng quan Google<ph name="END_LINK" />.</translation>
 <translation id="967624055006145463">Dữ liệu đã lưu trữ</translation>
 <translation id="968000525894980488">Bật dịch vụ của Google Play.</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 206f8fe..4ecfee417 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">有人使用无效偏移值在“<ph name="DEVICE_NAME" />”上请求了读取或写入操作。</translation>
 <translation id="1097658378307015415">登录前,请先以访客身份进入,以便激活“<ph name="NETWORK_ID" />”网络。</translation>
 <translation id="1103523840287552314">一律翻译<ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">我们检测不到您的 SIM 卡</translation>
 <translation id="1108600514891325577">停止(&amp;S)</translation>
 <translation id="1110155001042129815">等待</translation>
 <translation id="1112420131909513020">背景标签页正在使用蓝牙</translation>
@@ -181,7 +182,7 @@
 <translation id="1244265436519979884">正在进行 Linux 恢复</translation>
 <translation id="1244303850296295656">扩展程序错误</translation>
 <translation id="1249643471736608405">“<ph name="PLUGIN_NAME" />”已被屏蔽,因为它已被弃用</translation>
-<translation id="1251366534849411931">左大括号缺失:<ph name="ERROR_LINE" /></translation>
+<translation id="1251366534849411931">缺少左大括号:<ph name="ERROR_LINE" /></translation>
 <translation id="1252987234827889034">发生个人资料错误</translation>
 <translation id="1254593899333212300">直接连接到互联网</translation>
 <translation id="1260240842868558614">显示:</translation>
@@ -663,7 +664,7 @@
 <translation id="1965624977906726414">无需特殊权限。</translation>
 <translation id="1969654639948595766">WebRTC 文本日志 (<ph name="WEBRTC_TEXT_LOG_COUNT" />)</translation>
 <translation id="1970368523891847084">已进入视频模式</translation>
-<translation id="197228003527531594">此页面可查看您设备上某个文件夹内的全部文件。</translation>
+<translation id="197228003527531594">此页面可查看您设备上文件夹内的全部文件。</translation>
 <translation id="197288927597451399">保留</translation>
 <translation id="1974043046396539880">CRL 分发点</translation>
 <translation id="1974060860693918893">高级</translation>
@@ -753,6 +754,7 @@
 <translation id="2126167708562367080">您的管理员已停用同步。</translation>
 <translation id="2127372758936585790">低功率充电器</translation>
 <translation id="212862741129535676">频率状态占用率</translation>
+<translation id="212876957201860463">正在准备设置您的移动网络设备…</translation>
 <translation id="2129825002735785149">更新插件</translation>
 <translation id="2131077480075264">“<ph name="IMPORT_NAME" />”不允许安装“<ph name="APP_NAME" />”,因为无法进行此项安装</translation>
 <translation id="21354425047973905">隐藏 PIN 码</translation>
@@ -952,6 +954,7 @@
 <translation id="2413749388954403953">更改书签界面</translation>
 <translation id="241727068219398187">数据已于 <ph name="TIME" />使用您的 Google 密码加密。这并不包括 Google Pay 中的付款方式和地址。</translation>
 <translation id="2419706071571366386">为了安全起见,当您未使用计算机时,请退出帐号。</translation>
+<translation id="2422125132043002186">已取消 Linux 恢复</translation>
 <translation id="2423578206845792524">图片另存为(&amp;V)...</translation>
 <translation id="2428510569851653187">请说明此标签页崩溃时您在做什么</translation>
 <translation id="2431027948063157455">无法加载 Google 助理。请检查您的网络连接,然后重试。</translation>
@@ -1328,7 +1331,7 @@
 <translation id="2948300991547862301">转到“<ph name="PAGE_TITLE" />”</translation>
 <translation id="29488703364906173">一款快速、简单且安全的网络浏览器,能很好满足现代网络对浏览器的要求。</translation>
 <translation id="2949289451367477459">使用位置信息。允许具有位置权限的应用和服务使用此设备的位置信息。Google 可能会定期收集位置数据,并以匿名方式使用这类数据,从而提高位置信息精确度并改善基于地理位置的服务。<ph name="BEGIN_LINK1" />了解详情<ph name="END_LINK1" /></translation>
-<translation id="2956070239128776395">某个区段嵌套在分组中:<ph name="ERROR_LINE" /></translation>
+<translation id="2956070239128776395">有区段嵌套在分组中:<ph name="ERROR_LINE" /></translation>
 <translation id="2958721676848865875">打包扩展程序警告</translation>
 <translation id="2959842337402130152">存储空间不足,因此无法恢复。请从设备中释放 <ph name="SPACE_REQUIRED" /> 空间,然后重试。</translation>
 <translation id="296026337010986570">大功告成!已移除有害软件。要想重新开启扩展程序,请前往&lt;a href="chrome://extensions"&gt;扩展程序&lt;/a&gt;页面。</translation>
@@ -1419,6 +1422,7 @@
 <translation id="3090193911106258841">正在存取音频和视频输入</translation>
 <translation id="3090819949319990166">无法将外部 crx 文件复制到 <ph name="TEMP_CRX_FILE" />。</translation>
 <translation id="3090871774332213558">“<ph name="DEVICE_NAME" />”已配对</translation>
+<translation id="3092699946856346803">请插入 SIM 卡,然后重试</translation>
 <translation id="3101709781009526431">日期和时间</translation>
 <translation id="310671807099593501">该网站正在使用蓝牙</translation>
 <translation id="3115147772012638511">正在等待存入缓存...</translation>
@@ -1526,6 +1530,7 @@
 <translation id="3281892622610078515">要隔离的文件和程序:</translation>
 <translation id="3282568296779691940">登录 Chrome</translation>
 <translation id="3285322247471302225">打开新的标签页(&amp;T)</translation>
+<translation id="3286654161521615710">Chrome 浏览器和 <ph name="DEVICE_TYPE" /> 启动器均使用搜索引擎</translation>
 <translation id="3286737518123001369">查看和删除您的安全密钥中存储的登录数据</translation>
 <translation id="3288047731229977326">以开发者模式运行的扩展程序可能会损害您的计算机。如果您不是开发者,那么,为安全起见,应停用以开发者模式运行的扩展程序。</translation>
 <translation id="3289856944988573801">要检查是否有更新,请使用以太网或 WLAN。</translation>
@@ -1868,6 +1873,7 @@
 <translation id="3775432569830822555">SSL 服务器证书</translation>
 <translation id="3775705724665058594">发送到您的设备</translation>
 <translation id="3776796446459804932">此扩展程序违反了 Chrome 网上应用店政策。</translation>
+<translation id="3777483481409781352">无法激活移动网络设备</translation>
 <translation id="3777806571986431400">扩展程序已启用</translation>
 <translation id="3778152852029592020">已取消下载。</translation>
 <translation id="3778208826288864398">此安全密钥已被锁定,因为您输错 PIN 码的次数过多。您需要重置此安全密钥。</translation>
@@ -2130,6 +2136,7 @@
 <translation id="4131410914670010031">黑白色</translation>
 <translation id="4136203100490971508">夜间模式将于日出时自动关闭</translation>
 <translation id="4138267921960073861">在登录屏幕上显示用户名和照片</translation>
+<translation id="4142052906269098341">使用手机解锁 <ph name="DEVICE_TYPE" />。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">获取更优质的视频并减少耗电量。视频仅会在支持 Cast 的屏幕上播放。</translation>
 <translation id="4145922204387553806">让 Google 助理为您显示与您屏幕上的内容相关的信息</translation>
 <translation id="4146026355784316281">始终使用系统查看器打开</translation>
@@ -2171,6 +2178,7 @@
 <translation id="42126664696688958">导出</translation>
 <translation id="42137655013211669">服务器禁止访问此资源。</translation>
 <translation id="4215350869199060536">糟糕,名称中包含非法符号!</translation>
+<translation id="4220648711404560261">激活时出错。</translation>
 <translation id="4225397296022057997">在所有网站上</translation>
 <translation id="4232375817808480934">配置 Kerberos</translation>
 <translation id="4235200303672858594">整个屏幕</translation>
@@ -2319,6 +2327,7 @@
 <translation id="4470957202018033307">外部存储偏好设置</translation>
 <translation id="447252321002412580">帮助我们改进 Chrome 的功能和性能</translation>
 <translation id="4474155171896946103">为所有标签页添加书签...</translation>
+<translation id="4474461121892222090">移动数据激活最多可能需要 15 分钟才能完成。</translation>
 <translation id="4475552974751346499">搜索下载内容</translation>
 <translation id="4476590490540813026">运动员</translation>
 <translation id="4477015793815781985">必须以 Ctrl 键、Alt 键或 ⌘ 键开头</translation>
@@ -2328,6 +2337,7 @@
 <translation id="4479877282574735775">正在配置虚拟机。这可能需要几分钟的时间。</translation>
 <translation id="4480590691557335796">Chrome 可以查找您计算机上的有害软件并将其移除</translation>
 <translation id="4481530544597605423">未配对的设备</translation>
+<translation id="4483579413421375386">针对该网站显示</translation>
 <translation id="4495419450179050807">不要在本页上显示</translation>
 <translation id="4500114933761911433">“<ph name="PLUGIN_NAME" />”崩溃了</translation>
 <translation id="450099669180426158">感叹号图标</translation>
@@ -2431,6 +2441,7 @@
 <translation id="4647697156028544508">请输入“<ph name="DEVICE_NAME" />”的 PIN:</translation>
 <translation id="4648491805942548247">权限不足</translation>
 <translation id="4648499713050786492">在添加用户前,请先解锁您的个人资料。</translation>
+<translation id="4650591383426000695">将手机与 <ph name="DEVICE_TYPE" /> 断开连接</translation>
 <translation id="4651484272688821107">无法加载包含演示模式资源的在线组件。</translation>
 <translation id="465878909996028221">浏览器重定向仅支持 http、https 和文件协议。</translation>
 <translation id="4659077111144409915">主帐号</translation>
@@ -2732,6 +2743,7 @@
 <translation id="5115309401544567011">请为您的 <ph name="DEVICE_TYPE" /> 接通电源。</translation>
 <translation id="5115338116365931134">SSO</translation>
 <translation id="5116628073786783676">音频存储为(&amp;V)...</translation>
+<translation id="5117139026559873716">断开手机与 <ph name="DEVICE_TYPE" /> 的连接。断开后,它们将无法再自动连接。</translation>
 <translation id="5117427536932535467">主题背景和壁纸</translation>
 <translation id="5117625797180141189">已成功打印 <ph name="DOCUMENT_NAME" /></translation>
 <translation id="5117930984404104619">监控其他扩展程序的行为(包括访问过的网址)</translation>
@@ -2961,6 +2973,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> 的索引</translation>
 <translation id="5463856536939868464">包含隐藏书签的菜单</translation>
 <translation id="5464632865477611176">运行一次</translation>
+<translation id="5464660706533281090">未成年用户无法更改此设置。</translation>
 <translation id="5466374726908360271">粘贴并搜索“<ph name="SEARCH_TERMS" />”</translation>
 <translation id="5471768120198416576">您好!这是文字转语音的语音。</translation>
 <translation id="5473333559083690127">请重新输入新的 PIN 码</translation>
@@ -3196,6 +3209,7 @@
 <translation id="5817918615728894473">配对</translation>
 <translation id="5821565227679781414">创建快捷方式</translation>
 <translation id="5825412242012995131">开启(推荐)</translation>
+<translation id="5826395379250998812">请将您的 <ph name="DEVICE_TYPE" /> 连接到手机。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">公用名 (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">正在打印...</translation>
@@ -3402,7 +3416,7 @@
 <translation id="6107012941649240045">颁发对象</translation>
 <translation id="6112294629795967147">触摸即可调整大小</translation>
 <translation id="6112727384379533756">添加票据</translation>
-<translation id="6112931163620622315">查看您的手机</translation>
+<translation id="6112931163620622315">请查看您的手机</translation>
 <translation id="6112952769866305444">修改用户,<ph name="PROFILE_NAME" />,<ph name="USERNAME" /></translation>
 <translation id="6113942107547980621">要使用 Smart Lock,请切换到您手机上的主要用户个人资料</translation>
 <translation id="6116338172782435947">查看复制到剪贴板的文字和图片</translation>
@@ -3417,6 +3431,7 @@
 <translation id="6129691635767514872">系统已从 Chrome 和同步的设备中移除了您所选的数据。不过,您的 Google 帐号在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能还有其他形式的浏览记录(例如,在其他 Google 服务中的搜索记录和活动记录)。</translation>
 <translation id="6129938384427316298">Netscape 证书评论</translation>
 <translation id="6129953537138746214">空格</translation>
+<translation id="6130024555057767093">除了您单独允许的网站以外,目前已屏蔽有关所有其他网站的通知。</translation>
 <translation id="6136114942382973861">关闭下载内容栏</translation>
 <translation id="6137767437444130246">用户证书</translation>
 <translation id="6138680304137685902">采用 SHA-384 算法的 X9.62 ECDSA 签名</translation>
@@ -3462,6 +3477,7 @@
 <translation id="620722923698527029">始终在关联的应用中打开这些类型的链接</translation>
 <translation id="6207282396926186323">安装<ph name="APP_NAME" />(Linux 应用)</translation>
 <translation id="6207937957461833379">国家/地区</translation>
+<translation id="6208521041562685716">正在激活移动数据</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />:同步功能无法正常运行</translation>
 <translation id="6212039847102026977">显示高级网络属性</translation>
 <translation id="6212168817037875041">关闭显示屏</translation>
@@ -3823,6 +3839,7 @@
 <translation id="677965093459947883">特小</translation>
 <translation id="6780439250949340171">管理其他设置</translation>
 <translation id="6781284683813954823">涂鸦链接</translation>
+<translation id="6781978626986383437">已取消 Linux 备份</translation>
 <translation id="6782111308708962316">阻止第三方网站保存和读取 Cookie 数据</translation>
 <translation id="6786747875388722282">扩展程序</translation>
 <translation id="6787839852456839824">键盘快捷键</translation>
@@ -3905,7 +3922,7 @@
 <translation id="6900284862687837908">后台应用:<ph name="BACKGROUND_APP_URL" /></translation>
 <translation id="6900651018461749106">重新登录后即可更新 <ph name="USER_EMAIL" /></translation>
 <translation id="6902066522699286937">要试听的语音</translation>
-<translation id="6902336033320348843">某个区段不受支持:<ph name="ERROR_LINE" /></translation>
+<translation id="6902336033320348843">有区段不受支持:<ph name="ERROR_LINE" /></translation>
 <translation id="6902837902700739466">将设备加入网域</translation>
 <translation id="6904344821472985372">撤消文件访问权限</translation>
 <translation id="6904655473976120856">按“应用”按钮即可退出</translation>
@@ -4110,6 +4127,7 @@
 <translation id="7197632491113152433">我们发现,您的帐号中有 <ph name="NUMBER_OF_APPS" /> 款可在此设备上使用的应用。</translation>
 <translation id="7199158086730159431">获取帮助(&amp;E)</translation>
 <translation id="7200083590239651963">选择配置</translation>
+<translation id="7201042526153088083">在 <ph name="DEVICE_TYPE" /> 上安装从 Google Play 下载的应用和游戏。&lt;a target="_blank" href="<ph name="URL" />"&gt;了解详情&lt;/a&gt;</translation>
 <translation id="720110658997053098">让此设备永久处于自助服务终端模式</translation>
 <translation id="7201118060536064622">已删除“<ph name="DELETED_ITEM_NAME" />”</translation>
 <translation id="7201420661433230412">查看文件</translation>
@@ -4134,6 +4152,7 @@
 <translation id="7229570126336867161">需要 EVDO</translation>
 <translation id="7230787553283372882">自定义文字大小</translation>
 <translation id="7232750842195536390">重命名失败</translation>
+<translation id="7234010996000898150">正在取消 Linux 恢复</translation>
 <translation id="7235716375204803342">正在获取活动…</translation>
 <translation id="7235737137505019098">您的安全密钥没有足够的空间来存储任何其他帐号。</translation>
 <translation id="7238585580608191973">SHA-256 指纹</translation>
@@ -4269,6 +4288,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{在新窗口中打开全部网址(&amp;N)}=1{在新窗口中打开 1 个网址(&amp;N)}other{在新窗口中打开全部(# 个)网址(&amp;N)}}</translation>
 <translation id="7434509671034404296">开发者</translation>
 <translation id="7436921188514130341">糟糕!重命名过程中出错了。</translation>
+<translation id="7437427339141948518">通知已关闭</translation>
 <translation id="7438976808740265764">自 2020 年 12 月开始,Flash Player 将不再受支持。</translation>
 <translation id="7441736921018636843">要更改此设置,请<ph name="BEGIN_LINK" />重置同步功能<ph name="END_LINK" />以移除同步密码</translation>
 <translation id="7441830548568730290">其他用户</translation>
@@ -4396,6 +4416,7 @@
 <translation id="7643932971554933646">允许网站查看文件?</translation>
 <translation id="7644543211198159466">颜色和主题背景</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" />(所有者)</translation>
+<translation id="7645681574855902035">正在取消 Linux 备份</translation>
 <translation id="7647403192093989392">近期无活动</translation>
 <translation id="7648142322539582331">请连接到互联网以设置家长控制</translation>
 <translation id="7648992873808071793">在此设备上存储文件</translation>
@@ -4846,6 +4867,7 @@
 <translation id="8256319818471787266">狗狗</translation>
 <translation id="8257950718085972371">继续禁止使用摄像头</translation>
 <translation id="8259239505248583312">开始使用</translation>
+<translation id="8259556432390118667">十六进制颜色值</translation>
 <translation id="8260126382462817229">请尝试重新登录</translation>
 <translation id="8260864402787962391">鼠标</translation>
 <translation id="8261378640211443080">该扩展程序未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />中,并可能是在您不知情的情况下添加的。</translation>
@@ -5098,6 +5120,7 @@
 <translation id="8662911384982557515">将您的主页更改为:<ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome 无法设置壁纸。</translation>
 <translation id="8663099077749055505">始终禁止在 <ph name="HOST" /> 上自动下载多个文件</translation>
+<translation id="8663534996262079772">要显示关于此网站的通知吗?</translation>
 <translation id="8664389313780386848">查看网页源代码(&amp;V)</translation>
 <translation id="8665180165765946056">备份完成</translation>
 <translation id="866611985033792019">信任该证书,以便标识电子邮件用户的身份</translation>
@@ -5303,7 +5326,7 @@
 <translation id="894871326938397531">退出隐身模式?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> 想查看您的安全密钥的品牌和型号</translation>
 <translation id="8951256747718668828">发生错误,因此无法完成恢复</translation>
-<translation id="8952831374766033534">某配置选项不受支持:<ph name="ERROR_LINE" /></translation>
+<translation id="8952831374766033534">有配置选项不受支持:<ph name="ERROR_LINE" /></translation>
 <translation id="895347679606913382">即将开始下载...</translation>
 <translation id="8956941634583033512">{0,plural, =1{请在 1 天内更新}other{请在 # 天内更新}}</translation>
 <translation id="895944840846194039">JavaScript 使用的内存</translation>
@@ -5387,6 +5410,7 @@
 <translation id="9065203028668620118">编辑</translation>
 <translation id="9066773882585798925">让系统大声朗读文字</translation>
 <translation id="9066782832737749352">文字转语音</translation>
+<translation id="9068849894565669697">选择颜色</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">蓝牙</translation>
 <translation id="9074836595010225693">USB鼠标已连接</translation>
@@ -5424,6 +5448,7 @@
 <translation id="9131487537093447019">向蓝牙设备发送消息,以及接收来自蓝牙设备的消息。</translation>
 <translation id="9134304429738380103">立即启用。</translation>
 <translation id="9137013805542155359">显示原始网页</translation>
+<translation id="9137157311132182254">首选搜索引擎</translation>
 <translation id="9137916601698928395">以 <ph name="USER" /> 身份打开链接</translation>
 <translation id="9138978632494473300">在以下位置添加快捷方式:</translation>
 <translation id="9140067245205650184">您使用的是不受支持的功能标记:<ph name="BAD_FLAG" />。稳定性和安全性会有所下降。</translation>
@@ -5496,6 +5521,7 @@
 <translation id="962802172452141067">书签文件夹树</translation>
 <translation id="964286338916298286">您的 IT 管理员已禁止您的设备享用 Chrome 附赠的好礼。</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{应用}other{应用}}</translation>
+<translation id="965211523698323809">通过您的 <ph name="DEVICE_TYPE" /> 收发短信。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">执行此操作会使您退出 Google 帐号。您对自己的书签、历史记录、密码及其他设置所做的更改将不再同步到您的 Google 帐号。但是,您的现有数据将会继续存储在您的 Google 帐号中并可通过 <ph name="BEGIN_LINK" />Google 信息中心<ph name="END_LINK" />进行管理。</translation>
 <translation id="967624055006145463">已存储的数据</translation>
 <translation id="968000525894980488">开启 Google Play 服务。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index a31c009ad..c1b1396 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -74,6 +74,7 @@
 <translation id="1094607894174825014">在以下裝置上要求的讀取或寫入作業使用了無效的偏移:「<ph name="DEVICE_NAME" />」。</translation>
 <translation id="1097658378307015415">請在登入前以訪客身分進入,啟用網路 <ph name="NETWORK_ID" /></translation>
 <translation id="1103523840287552314">一律翻譯<ph name="LANGUAGE" /></translation>
+<translation id="1104038495841596279">系統偵測不到你的 SIM 卡</translation>
 <translation id="1108600514891325577">停止(&amp;S)</translation>
 <translation id="1110155001042129815">等一下</translation>
 <translation id="1112420131909513020">背景分頁正在使用藍牙</translation>
@@ -756,6 +757,7 @@
 <translation id="2126167708562367080">你的管理員停用了同步功能。</translation>
 <translation id="2127372758936585790">低功率充電器</translation>
 <translation id="212862741129535676">頻率狀態占用率</translation>
+<translation id="212876957201860463">正在準備設定你的行動裝置...</translation>
 <translation id="2129825002735785149">更新外掛程式</translation>
 <translation id="2131077480075264">由於「<ph name="IMPORT_NAME" />」不允許,因此無法安裝「<ph name="APP_NAME" />」</translation>
 <translation id="21354425047973905">隱藏 PIN 碼</translation>
@@ -955,6 +957,7 @@
 <translation id="2413749388954403953">變更書籤使用者介面</translation>
 <translation id="241727068219398187">系統已採用你在 <ph name="TIME" />設定的 Google 密碼針對資料進行加密處理。加密的資料不包括 Google Pay 的付款方式和地址。</translation>
 <translation id="2419706071571366386">為了安全起見,當你未使用電腦時請登出帳戶。</translation>
+<translation id="2422125132043002186">已取消 Linux 還原作業</translation>
 <translation id="2423578206845792524">另存圖檔(&amp;V)...</translation>
 <translation id="2428510569851653187">說明分頁當掉時你正在執行的動作</translation>
 <translation id="2431027948063157455">無法載入 Google 助理,請檢查網路連線狀態並重試。</translation>
@@ -1423,6 +1426,7 @@
 <translation id="3090193911106258841">正在存取音訊和視訊輸入</translation>
 <translation id="3090819949319990166">無法將外部 crx 檔案複製到 <ph name="TEMP_CRX_FILE" />。</translation>
 <translation id="3090871774332213558">「<ph name="DEVICE_NAME" />」已配對</translation>
+<translation id="3092699946856346803">請插入 SIM 卡,然後再試一次</translation>
 <translation id="3101709781009526431">日期與時間</translation>
 <translation id="310671807099593501">網站正在使用藍牙</translation>
 <translation id="3115147772012638511">等候快取...</translation>
@@ -1530,7 +1534,8 @@
 <translation id="3281892622610078515">要隔離的檔案和程式:</translation>
 <translation id="3282568296779691940">登入 Chrome</translation>
 <translation id="3285322247471302225">新增分頁(&amp;T)</translation>
-<translation id="3286737518123001369">查看並刪除在你在安全金鑰上儲存的登入資料</translation>
+<translation id="3286654161521615710">由 Chrome 瀏覽器和 <ph name="DEVICE_TYPE" /> 啟動器所使用</translation>
+<translation id="3286737518123001369">查看並刪除安全金鑰儲存的登入資料</translation>
 <translation id="3288047731229977326">在開發人員模式中執行擴充功能可能會損害你的電腦。如果你不是開發人員,最好在開發人員模式中停用這些擴充功能,以策安全。</translation>
 <translation id="3289856944988573801">如要檢查更新,請使用乙太網路或 Wi-Fi。</translation>
 <translation id="3293644607209440645">傳送這個頁面</translation>
@@ -1874,6 +1879,7 @@
 <translation id="3775432569830822555">SSL 伺服器憑證</translation>
 <translation id="3775705724665058594">傳送至你的裝置</translation>
 <translation id="3776796446459804932">這個擴充功能違反了 Chrome 線上應用程式商店政策。</translation>
+<translation id="3777483481409781352">無法啟用行動裝置</translation>
 <translation id="3777806571986431400">擴充功能已啟用</translation>
 <translation id="3778152852029592020">下載作業已取消。</translation>
 <translation id="3778208826288864398">由於你輸入太多次錯誤的 PIN 碼,因此安全金鑰已遭到鎖定。你必須重設安全金鑰。</translation>
@@ -2136,6 +2142,7 @@
 <translation id="4131410914670010031">黑白</translation>
 <translation id="4136203100490971508">夜燈功能將於日出時自動關閉</translation>
 <translation id="4138267921960073861">在登入畫面中顯示使用者名稱和相片</translation>
+<translation id="4142052906269098341">用你的手機解鎖 <ph name="DEVICE_TYPE" />。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="4144218403971135344">取得畫質更高的影片,並降低耗電量。只能透過支援 Cast 的螢幕播放影片。</translation>
 <translation id="4145922204387553806">允許 Google 助理根據畫面上的內容顯示相關資訊</translation>
 <translation id="4146026355784316281">一律使用系統檢視器開啟</translation>
@@ -2177,6 +2184,7 @@
 <translation id="42126664696688958">匯出</translation>
 <translation id="42137655013211669">伺服器禁止存取這個資源。</translation>
 <translation id="4215350869199060536">糟糕,名稱中有非法符號!</translation>
+<translation id="4220648711404560261">啟用時發生錯誤。</translation>
 <translation id="4225397296022057997">在所有網站上</translation>
 <translation id="4232375817808480934">設定 Kerberos</translation>
 <translation id="4235200303672858594">整個畫面</translation>
@@ -2325,6 +2333,7 @@
 <translation id="4470957202018033307">外部儲存空間偏好設定</translation>
 <translation id="447252321002412580">協助改善 Chrome 的功能與效能</translation>
 <translation id="4474155171896946103">將所有分頁加入書籤...</translation>
+<translation id="4474461121892222090">系統最多可能要 15 分鐘,才能完成行動數據啟用。</translation>
 <translation id="4475552974751346499">搜尋下載內容</translation>
 <translation id="4476590490540813026">運動員</translation>
 <translation id="4477015793815781985">必須包含 Ctrl、Alt 或 ⌘ 鍵</translation>
@@ -2334,6 +2343,7 @@
 <translation id="4479877282574735775">正在設定虛擬機器,這可能需要幾分鐘的時間。</translation>
 <translation id="4480590691557335796">Chrome 可以找出電腦上有害的軟體並予以移除</translation>
 <translation id="4481530544597605423">解除配對的裝置</translation>
+<translation id="4483579413421375386">顯示這個網站的通知</translation>
 <translation id="4495419450179050807">不要顯示這個網頁</translation>
 <translation id="4500114933761911433">「<ph name="PLUGIN_NAME" />」當機了</translation>
 <translation id="450099669180426158">驚嘆號圖示</translation>
@@ -2437,6 +2447,7 @@
 <translation id="4647697156028544508">請輸入「<ph name="DEVICE_NAME" />」的 PIN:</translation>
 <translation id="4648491805942548247">權限不足</translation>
 <translation id="4648499713050786492">新增任何人之前,請先取消鎖定您的個人資料。</translation>
+<translation id="4650591383426000695">中斷手機與 <ph name="DEVICE_TYPE" /> 的連線</translation>
 <translation id="4651484272688821107">無法使用示範模式的資源載入線上元件。</translation>
 <translation id="465878909996028221">瀏覽器重新導向僅支援 http、https 和 file 通訊協定。</translation>
 <translation id="4659077111144409915">主要帳戶</translation>
@@ -2738,6 +2749,7 @@
 <translation id="5115309401544567011">請將 <ph name="DEVICE_TYPE" /> 接上電源。</translation>
 <translation id="5115338116365931134">單一登入 (SSO)</translation>
 <translation id="5116628073786783676">另存音訊(&amp;V)...</translation>
+<translation id="5117139026559873716">中斷手機與 <ph name="DEVICE_TYPE" /> 的連線。這兩個裝置將不再自動連線。</translation>
 <translation id="5117427536932535467">主題和桌布</translation>
 <translation id="5117625797180141189">「<ph name="DOCUMENT_NAME" />」列印完成</translation>
 <translation id="5117930984404104619">監控其他擴充功能的行為 (包括造訪過的網址)。</translation>
@@ -2967,6 +2979,7 @@
 <translation id="5463275305984126951"><ph name="LOCATION" /> 的索引</translation>
 <translation id="5463856536939868464">選單包含隱藏的書籤</translation>
 <translation id="5464632865477611176">執行 (僅限這次)</translation>
+<translation id="5464660706533281090">兒童使用者無法變更這項設定。</translation>
 <translation id="5466374726908360271">貼上「<ph name="SEARCH_TERMS" />」並執行搜尋 (&amp;S)</translation>
 <translation id="5471768120198416576">你好!這是文字轉語音的語音。</translation>
 <translation id="5473333559083690127">再次輸入新的 PIN 碼</translation>
@@ -3202,6 +3215,7 @@
 <translation id="5817918615728894473">配對</translation>
 <translation id="5821565227679781414">建立捷徑</translation>
 <translation id="5825412242012995131">啟用 (建議設定)</translation>
+<translation id="5826395379250998812">請將 <ph name="DEVICE_TYPE" /> 連線至手機。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="5826507051599432481">一般名稱 (CN)</translation>
 <translation id="5827266244928330802">Safari</translation>
 <translation id="5828633471261496623">列印中...</translation>
@@ -3423,6 +3437,7 @@
 <translation id="6129691635767514872">系統已將所選資料從 Chrome 和其他同步的裝置中移除。你的 Google 帳戶仍可能保留了其他類型的瀏覽記錄,例如其他 Google 服務中的搜尋和活動記錄 (可前往 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 查詢)。</translation>
 <translation id="6129938384427316298">Netscape 憑證評論</translation>
 <translation id="6129953537138746214">空格</translation>
+<translation id="6130024555057767093">目前系統已封鎖所有網站的通知,但你個別允許的網站除外。</translation>
 <translation id="6136114942382973861">關閉下載內容列</translation>
 <translation id="6137767437444130246">使用者憑證</translation>
 <translation id="6138680304137685902">使用 SHA-384 的 X9.62 ECDSA 簽章</translation>
@@ -3468,6 +3483,7 @@
 <translation id="620722923698527029">一律使用相關聯的應用程式開啟這類連結</translation>
 <translation id="6207282396926186323">安裝「<ph name="APP_NAME" />」(Linux 應用程式)</translation>
 <translation id="6207937957461833379">國家/地區</translation>
+<translation id="6208521041562685716">正在啟用行動數據</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />:同步處理功能無法正常運作</translation>
 <translation id="6212039847102026977">顯示進階網路屬性</translation>
 <translation id="6212168817037875041">關閉螢幕</translation>
@@ -3829,6 +3845,7 @@
 <translation id="677965093459947883">非常小</translation>
 <translation id="6780439250949340171">管理其他設定</translation>
 <translation id="6781284683813954823">Doodle 連結</translation>
+<translation id="6781978626986383437">已取消 Linux 備份作業</translation>
 <translation id="6782111308708962316">禁止第三方網站儲存及讀取 Cookie 資料</translation>
 <translation id="6786747875388722282">擴充功能</translation>
 <translation id="6787839852456839824">鍵盤快速鍵</translation>
@@ -4116,6 +4133,7 @@
 <translation id="7197632491113152433">你的帳戶中有 <ph name="NUMBER_OF_APPS" /> 個應用程式可在這部裝置上使用。</translation>
 <translation id="7199158086730159431">取得說明(&amp;E)</translation>
 <translation id="7200083590239651963">選取設定</translation>
+<translation id="7201042526153088083">在你的 <ph name="DEVICE_TYPE" /> 上透過 Google Play 安裝應用程式和遊戲。&lt;a target="_blank" href="<ph name="URL" />"&gt;瞭解詳情&lt;/a&gt;</translation>
 <translation id="720110658997053098">讓裝置永久使用 Kiosk 模式</translation>
 <translation id="7201118060536064622">已刪除「<ph name="DELETED_ITEM_NAME" />」</translation>
 <translation id="7201420661433230412">查看檔案</translation>
@@ -4140,6 +4158,7 @@
 <translation id="7229570126336867161">需要 EVDO</translation>
 <translation id="7230787553283372882">自訂文字大小</translation>
 <translation id="7232750842195536390">無法重新命名</translation>
+<translation id="7234010996000898150">正在取消 Linux 還原作業</translation>
 <translation id="7235716375204803342">正在擷取活動...</translation>
 <translation id="7235737137505019098">安全金鑰的空間不足,無法建立帳戶。</translation>
 <translation id="7238585580608191973">SHA-256 指紋</translation>
@@ -4275,6 +4294,7 @@
 <translation id="7433692219247014412">{COUNT,plural, =0{在新視窗中開啟所有書籤(&amp;N)}=1{在新視窗中開啟(&amp;N)}other{在新視窗中開啟全部 # 個書籤(&amp;N)}}</translation>
 <translation id="7434509671034404296">開發人員選項</translation>
 <translation id="7436921188514130341">糟糕!重新命名過程中發生錯誤。</translation>
+<translation id="7437427339141948518">通知功能已關閉</translation>
 <translation id="7438976808740265764">2020 年 12 月之後,系統將停止支援 Flash Player。</translation>
 <translation id="7441736921018636843">如要變更這項設定,請<ph name="BEGIN_LINK" />重設同步處理功能<ph name="END_LINK" />以移除同步處理通關密語</translation>
 <translation id="7441830548568730290">其他使用者</translation>
@@ -4403,6 +4423,7 @@
 <translation id="7643932971554933646">要允許網站查看檔案嗎?</translation>
 <translation id="7644543211198159466">顏色和主題</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (擁有者)</translation>
+<translation id="7645681574855902035">正在取消 Linux 備份作業</translation>
 <translation id="7647403192093989392">最近沒有活動</translation>
 <translation id="7648142322539582331">請連線至網際網路,以設定家長監護功能</translation>
 <translation id="7648992873808071793">在這個裝置上儲存檔案</translation>
@@ -4853,6 +4874,7 @@
 <translation id="8256319818471787266">小黃</translation>
 <translation id="8257950718085972371">繼續封鎖存取攝影機</translation>
 <translation id="8259239505248583312">開始使用</translation>
+<translation id="8259556432390118667">十六進位顏色值</translation>
 <translation id="8260126382462817229">請嘗試重新登入</translation>
 <translation id="8260864402787962391">滑鼠</translation>
 <translation id="8261378640211443080">這個擴充功能未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> 中,可能在你不知情的情況下加入瀏覽器。</translation>
@@ -5105,6 +5127,7 @@
 <translation id="8662911384982557515">將你的首頁變更為:<ph name="HOME_PAGE" /></translation>
 <translation id="8662978096466608964">Chrome 無法設定桌布。</translation>
 <translation id="8663099077749055505">一律禁止在 <ph name="HOST" /> 自動下載多個檔案</translation>
+<translation id="8663534996262079772">要顯示此網站的通知嗎?</translation>
 <translation id="8664389313780386848">檢視網頁原始碼(&amp;V)</translation>
 <translation id="8665180165765946056">備份完成</translation>
 <translation id="866611985033792019">信任這個用於識別電子郵件使用者的憑證</translation>
@@ -5394,6 +5417,7 @@
 <translation id="9065203028668620118">編輯</translation>
 <translation id="9066773882585798925">讓系統朗讀文字內容</translation>
 <translation id="9066782832737749352">文字轉語音</translation>
+<translation id="9068849894565669697">選取顏色</translation>
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">藍牙</translation>
 <translation id="9074836595010225693">已連接 USB 滑鼠</translation>
@@ -5431,6 +5455,7 @@
 <translation id="9131487537093447019">透過藍牙裝置收發訊息。</translation>
 <translation id="9134304429738380103">是,我同意。</translation>
 <translation id="9137013805542155359">顯示原文</translation>
+<translation id="9137157311132182254">偏好的搜尋引擎</translation>
 <translation id="9137916601698928395">以 <ph name="USER" /> 身分開啟連結</translation>
 <translation id="9138978632494473300">在以下位置新增捷徑:</translation>
 <translation id="9140067245205650184">你正在使用不受支援的功能標幟:<ph name="BAD_FLAG" />。這可能會危及穩定性與安全性。</translation>
@@ -5503,6 +5528,7 @@
 <translation id="962802172452141067">書籤資料夾樹狀結構</translation>
 <translation id="964286338916298286">你的 IT 管理員已為你的裝置停用 Chrome 好康優惠。</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{應用程式}other{應用程式}}</translation>
+<translation id="965211523698323809">透過你的 <ph name="DEVICE_TYPE" /> 收發簡訊。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="967007123645306417">你將登出自己的 Google 帳戶。你的書籤、歷史記錄、密碼和其他設定的變更將不會再同步到你的 Google 帳戶。不過,你的現有資料仍會儲存在你的 Google 帳戶中,並可透過 <ph name="BEGIN_LINK" />Google 資訊主頁<ph name="END_LINK" />管理。</translation>
 <translation id="967624055006145463">已儲存的資料</translation>
 <translation id="968000525894980488">開啟 Google Play 服務。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index 1e85e779..8ad0380 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -7,7 +7,7 @@
 <translation id="1051826050538111504">Schädliche Software wurde auf Ihrem Computer gefunden. Chrome kann diese Software entfernen, Ihre Einstellungen wiederherstellen und Erweiterungen deaktivieren, sodass Ihr Browser wieder wie gewohnt funktioniert.</translation>
 <translation id="1065672644894730302">Ihre Einstellungen können nicht gelesen werden. Einige Funktionen sind möglicherweise nicht verfügbar und Änderungen an Einstellungen werden nicht gespeichert.</translation>
 <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> hat zuvor Chrome verwendet</translation>
-<translation id="1097330777386562916">Alle Cookies und Websitedaten beim Beenden von Chrome löschen</translation>
+<translation id="1097330777386562916">Cookies und Websitedaten beim Beenden von Chrome löschen</translation>
 <translation id="1104959162601287462">Über &amp;Chrome OS</translation>
 <translation id="110877069173485804">Dies ist Ihr persönlicher Chrome-Browser</translation>
 <translation id="1142745911746664600">Chrome kann nicht aktualisiert werden</translation>
@@ -27,7 +27,7 @@
 <translation id="1590588151039584890">Zum Aktualisieren muss Chrome auf diesem Computer geschlossen werden. Nicht gespeicherte Änderungen von anderen Nutzern, die auf diesem Computer angemeldet sind, gehen dann eventuell verloren.</translation>
 <translation id="1619887657840448962">Um Chrome sicherer zu machen, haben wir die folgende Erweiterung deaktiviert. Sie ist nicht im <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> aufgeführt und wurde möglicherweise ohne Ihr Wissen hinzugefügt.</translation>
 <translation id="1628000112320670027">Hilfe für Chrome aufrufen</translation>
-<translation id="1635734105302489219">Beim Beenden von Chrome werden Cookies gelöscht. Ändern Sie <ph name="COOKIE_SETTINGS_LINK" />, wenn die Synchronisierung fortgesetzt werden soll.</translation>
+<translation id="1635734105302489219">Cookies werden gelöscht, wenn Sie Chrome beenden. Ändern Sie <ph name="COOKIE_SETTINGS_LINK" />, wenn die Synchronisierung fortgesetzt werden soll.</translation>
 <translation id="1662639173275167396">Chrome OS und <ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" /> werden durch zusätzliche <ph name="BEGIN_LINK_CROS_OSS" />Open-Source-Software<ph name="END_LINK_CROS_OSS" /> möglich gemacht.</translation>
 <translation id="1674870198290878346">Link in Chrome-Inkognito-Fenster öffnen</translation>
 <translation id="1682634494516646069">Google Chrome kann im folgenden Datenverzeichnis weder lesen noch schreiben: <ph name="USER_DATA_DIRECTORY" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb
index 5d30bc2..ff15daa1 100644
--- a/chrome/app/resources/google_chrome_strings_es.xtb
+++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -29,7 +29,7 @@
 <translation id="1590588151039584890">Para actualizar, es necesario que Chrome deje de estar en uso en este ordenador. Es posible que otros usuarios que hayan iniciado sesión en este ordenador pierdan los cambios que no han guardado.</translation>
 <translation id="1619887657840448962">Para aumentar la seguridad de Chrome, hemos inhabilitado la siguiente extensión que no figura en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que puede haberse añadido sin tu conocimiento.</translation>
 <translation id="1628000112320670027">Obtener ayuda de Chrome</translation>
-<translation id="1635734105302489219">Borras las cookies al salir de Chrome. Para continuar la sincronización, cambia esta <ph name="COOKIE_SETTINGS_LINK" />.</translation>
+<translation id="1635734105302489219">Las cookies se borran al salir de Chrome. Para continuar la sincronización, cambia <ph name="COOKIE_SETTINGS_LINK" />.</translation>
 <translation id="1662639173275167396">Chrome OS se ha creado gracias a <ph name="BEGIN_LINK_CROS_OSS" />software libre<ph name="END_LINK_CROS_OSS" /> adicional, como <ph name="BEGIN_LINK_LINUX_OSS" />Linux (beta)<ph name="END_LINK_LINUX_OSS" />.</translation>
 <translation id="1674870198290878346">Abrir enlace en una ventana de incó&amp;gnito de Chrome</translation>
 <translation id="1682634494516646069">Google Chrome no puede leer el directorio de datos ni escribir en él:
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb
index a3746e9..fb72fdeb 100644
--- a/chrome/app/resources/google_chrome_strings_fil.xtb
+++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -9,7 +9,7 @@
 
 Maaaring hindi available ang ilang tampok at hindi mase-save ang mga pagbabago sa mga kagustuhan.</translation>
 <translation id="1088300314857992706">Chrome ang dating ginagamit ng <ph name="USER_EMAIL_ADDRESS" /></translation>
-<translation id="1097330777386562916">I-clear ang cookies at data ng site kapag umalis ka ng Chrome</translation>
+<translation id="1097330777386562916">I-clear ang cookies at data ng site kapag umalis ka sa Chrome</translation>
 <translation id="1104959162601287462">Tungkol sa &amp;Chrome OS</translation>
 <translation id="110877069173485804">Ito ang iyong Chrome</translation>
 <translation id="1142745911746664600">Hindi ma-update ang Chrome</translation>
@@ -29,7 +29,7 @@
 <translation id="1590588151039584890">Para i-update, kailangang tumigil sa pagtakbo ng Chrome sa computer na ito. Puwedeng magdulot ito sa iba pang user na naka-log in sa computer na ito na mawala ang mga hindi naka-save na pagbabago.</translation>
 <translation id="1619887657840448962">Upang mas gawing ligtas ang Chrome, na-disable namin ang sumusunod na extension na hindi nakalista sa <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na maaaring naidagdag nang hindi mo nalalalaman.</translation>
 <translation id="1628000112320670027">Humingi ng tulong sa Chrome</translation>
-<translation id="1635734105302489219">Naki-clear mo ang cookies kapag umalis ka sa Chrome Para patuloy na mag-sync, baguhin ang <ph name="COOKIE_SETTINGS_LINK" /> na ito.</translation>
+<translation id="1635734105302489219">Maki-clear mo ang cookies kapag umalis ka sa Chrome. Para patuloy na mag-sync, baguhin ang <ph name="COOKIE_SETTINGS_LINK" /> na ito.</translation>
 <translation id="1662639173275167396">Ginagawang posible ang Chrome OS ng karagdagang <ph name="BEGIN_LINK_CROS_OSS" />open source na software<ph name="END_LINK_CROS_OSS" />, gayundin ng <ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />.</translation>
 <translation id="1674870198290878346">Buksan ang link sa Inco&amp;gnito Window ng Chrome</translation>
 <translation id="1682634494516646069">Hindi makapagbasa at makapagsulat ang Google Chrome sa direktoryo nito ng data:
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb
index dc93b82..a75b116 100644
--- a/chrome/app/resources/google_chrome_strings_fr.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -56,7 +56,7 @@
 <translation id="2246246234298806438">Impossible d'afficher l'aperçu d'impression dans Google Chrome, car la visionneuse de documents PDF intégrée est absente.</translation>
 <translation id="2252923619938421629">Aidez-nous à améliorer Google Chrome en nous signalant vos paramètres.</translation>
 <translation id="2286950485307333924">Vous êtes connecté à Chrome</translation>
-<translation id="2290014774651636340">Les clés d'API Google sont manquantes. Certaines fonctionnalités de Google Chrome vont être désactivées.</translation>
+<translation id="2290014774651636340">Les clés API Google sont manquantes. Certaines fonctionnalités de Google Chrome vont être désactivées.</translation>
 <translation id="2290095356545025170">Voulez-vous vraiment désinstaller Google Chrome ?</translation>
 <translation id="2309047409763057870">Ceci est une installation secondaire de Google Chrome. Vous ne pouvez pas le définir comme navigateur par défaut.</translation>
 <translation id="2346876346033403680">Un utilisateur s'est récemment connecté à Google Chrome sur cet ordinateur en tant que <ph name="ACCOUNT_EMAIL_LAST" />. S'il ne s'agit pas de votre compte, veuillez créer un utilisateur Google Chrome pour séparer vos informations.
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb
index 1ff9cd9..6370315 100644
--- a/chrome/app/resources/google_chrome_strings_id.xtb
+++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -7,7 +7,7 @@
 <translation id="1051826050538111504">Ada software berbahaya di komputer Anda. Chrome dapat menghapusnya, memulihkan setelan Anda, dan menonaktifkan ekstensi agar browser berfungsi kembali secara normal.</translation>
 <translation id="1065672644894730302">Preferensi Anda tidak dapat dibaca. Beberapa fitur mungkin tidak tersedia dan perubahan pada preferensi tidak akan disimpan.</translation>
 <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> sebelumnya menggunakan Chrome</translation>
-<translation id="1097330777386562916">Bersihkan cookie dan data situs ketika Anda keluar dari Chrome</translation>
+<translation id="1097330777386562916">Hapus cookie dan data situs ketika Anda keluar dari Chrome</translation>
 <translation id="1104959162601287462">Tentang OS &amp;Chrome</translation>
 <translation id="110877069173485804">Ini Chrome Anda</translation>
 <translation id="1142745911746664600">Tidak dapat mengupdate Chrome</translation>
@@ -27,7 +27,7 @@
 <translation id="1590588151039584890">Untuk menjalankan update, Chrome harus ditutup di komputer ini. Proses ini dapat menyebabkan pengguna lain yang login ke komputer ini kehilangan perubahan yang belum tersimpan.</translation>
 <translation id="1619887657840448962">Agar Chrome lebih aman, kami menonaktifkan ekstensi berikut yang tidak tercantum dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa sepengetahuan Anda.</translation>
 <translation id="1628000112320670027">Dapatkan bantuan Chrome</translation>
-<translation id="1635734105302489219">Anda membersihkan cookie ketika keluar dari Chrome. Agar tetap tersinkron, ubah <ph name="COOKIE_SETTINGS_LINK" /> ini.</translation>
+<translation id="1635734105302489219">Anda menghapus cookie ketika keluar dari Chrome. Agar tetap tersinkron, ubah <ph name="COOKIE_SETTINGS_LINK" /> ini.</translation>
 <translation id="1662639173275167396">Chrome OS terwujud karena adanya <ph name="BEGIN_LINK_CROS_OSS" />software open source<ph name="END_LINK_CROS_OSS" /> tambahan, seperti <ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />.</translation>
 <translation id="1674870198290878346">Buka Link di Jendela Sa&amp;maran Chrome</translation>
 <translation id="1682634494516646069">Google Chrome tidak dapat membaca dan menulis ke direktori datanya: <ph name="USER_DATA_DIRECTORY" /></translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb
index 483f68d..f23efce 100644
--- a/chrome/app/resources/google_chrome_strings_ml.xtb
+++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -29,7 +29,7 @@
 <translation id="1590588151039584890">അപ്‌ഡേറ്റ് ചെയ്യാൻ, ഈ കമ്പ്യൂട്ടറിൽ Chrome റൺ ചെയ്യുന്നത് നിർത്തേണ്ടതുണ്ട്. ഈ കമ്പ്യൂട്ടറിൽ ലോഗിൻ ചെയ്‌തിരിക്കുന്ന മറ്റ് ഉപയോക്താക്കളുടെ സംരക്ഷിക്കാത്ത മാറ്റങ്ങൾ നഷ്‌ടപ്പെടാൻ ഇത് കാരണമായേക്കാം.</translation>
 <translation id="1619887657840448962">Chrome സുരക്ഷിതമാക്കാൻ, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റ് ചെയ്യാത്ത ചില വിപുലീകരണങ്ങൾ ഞങ്ങൾ പ്രവർത്തനരഹിതമാക്കി, അവ നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation>
 <translation id="1628000112320670027">Chrome ഉപയോഗിക്കുന്നതിനുള്ള സഹായം തേടുക</translation>
-<translation id="1635734105302489219">Chrome-ൽ നിന്ന് പുറത്തുകടക്കുമ്പോൾ കുക്കികൾ മായ്‌ക്കുക. സമന്വയിപ്പിക്കുന്നത് തുടരാൻ, <ph name="COOKIE_SETTINGS_LINK" /> ഇത് മാറ്റുക.</translation>
+<translation id="1635734105302489219">Chrome-ൽ നിന്ന് പുറത്തുകടക്കുമ്പോൾ കുക്കികൾ മായുന്നു. സമന്വയിപ്പിക്കുന്നത് തുടരാൻ, <ph name="COOKIE_SETTINGS_LINK" /> ഇത് മാറ്റുക.</translation>
 <translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (ബീറ്റ)<ph name="END_LINK_LINUX_OSS" /> പോലെ അധിക <ph name="BEGIN_LINK_CROS_OSS" />ഓപ്പൺ സോഴ്‌സ് സോഫ്‌റ്റ്‌വെയർ<ph name="END_LINK_CROS_OSS" /> ഉപയോഗിച്ചാണ് Chrome OS സാധ്യമാക്കിയിട്ടുള്ളത്.</translation>
 <translation id="1674870198290878346">Chrome അദൃശ്യ വിൻഡോയിൽ ലിങ്ക് തുറക്കുക</translation>
 <translation id="1682634494516646069">Google Chrome-ന് ഇതിന്റെ ഡാറ്റാ ഡയറക്റ്ററി വായിക്കാനോ അതിൽ എഴുതാനോ കഴിയില്ല:
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb
index 57b963c..81a226ca 100644
--- a/chrome/app/resources/google_chrome_strings_sl.xtb
+++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -9,7 +9,7 @@
 
 Nekatere funkcije morda niso na voljo in spremembe nastavitev ne bodo shranjene.</translation>
 <translation id="1088300314857992706">Uporabnik <ph name="USER_EMAIL_ADDRESS" /> je prej uporabljal Chrome</translation>
-<translation id="1097330777386562916">Izbris piškotkov in podatkov spletnih mesti, ko zaprete Chrome</translation>
+<translation id="1097330777386562916">Izbris piškotkov in podatkov spletnih mest, ko zaprete Chrome</translation>
 <translation id="1104959162601287462">O &amp;sistemu Chrome OS</translation>
 <translation id="110877069173485804">To je vaš Chrome</translation>
 <translation id="1142745911746664600">Chroma ni mogoče posodobiti</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb
index ba89f88c..524aeb0b 100644
--- a/chrome/app/resources/google_chrome_strings_ta.xtb
+++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -27,7 +27,7 @@
 <translation id="1590588151039584890">புதுப்பிப்பதற்கு இந்தக் கம்ப்யூட்டரில் Chrome இயங்குவதை நிறுத்த வேண்டும். இதனால் உள்நுழைந்துள்ள பிற பயனர்கள் தங்களின் சேமிக்கப்படாத மாற்றங்களை இழக்கக்கூடும்.</translation>
 <translation id="1619887657840448962">Chromeஐப் பாதுகாப்பானதாக்க, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> இல் பட்டியலிடப்படாத பின்வரும் நீட்டிப்பை முடக்கியுள்ளோம், மேலும் அது உங்களுக்குத் தெரியாமல் சேர்க்கப்பட்டிருக்கலாம்.</translation>
 <translation id="1628000112320670027">Chrome தொடர்பான உதவி பெறுக</translation>
-<translation id="1635734105302489219">Chromeமை விட்டு வெளியேறும்போது குக்கீகளை அழிக்கிறீர்கள். ஒத்திசைவைத் தொடர இந்த <ph name="COOKIE_SETTINGS_LINK" /> மாற்றவும்.</translation>
+<translation id="1635734105302489219">Chromeமை விட்டு வெளியேறும்போது குக்கீகளை அழிக்கிறீர்கள். ஒத்திசைவைத் தொடர இந்த <ph name="COOKIE_SETTINGS_LINK" /> ஐ மாற்றவும்.</translation>
 <translation id="1662639173275167396">Chrome OS, <ph name="BEGIN_LINK_LINUX_OSS" />Linuxஸைப் (பீட்டா)<ph name="END_LINK_LINUX_OSS" /> போலவே கூடுதல் <ph name="BEGIN_LINK_CROS_OSS" />ஓப்பன் சோர்ஸ் மென்பொருளால்<ph name="END_LINK_CROS_OSS" /> உருவாக்கப்பட்டுள்ளது.</translation>
 <translation id="1674870198290878346">Chrome மறை&amp;நிலை சாளரத்தில் இணைப்பைத் திற</translation>
 <translation id="1682634494516646069">பின்வரும் தரவுக் கோப்பகத்தில் Google Chrome படிக்கவும் எழுதவும் செய்யாது:<ph name="USER_DATA_DIRECTORY" /></translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb
index b39b6cc..d7ad091 100644
--- a/chrome/app/resources/google_chrome_strings_th.xtb
+++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -27,7 +27,7 @@
 <translation id="1590588151039584890">Chrome ต้องหยุดทำงานในคอมพิวเตอร์เครื่องนี้ก่อนจึงจะอัปเดตได้ การดำเนินการนี้อาจทำให้ผู้ใช้ที่อยู่ในระบบของคอมพิวเตอร์เครื่องนี้สูญเสียการเปลี่ยนแปลงที่ยังไม่ได้บันทึก</translation>
 <translation id="1619887657840448962">เพื่อให้ Chrome ปลอดภัยขึ้น เราได้ปิดส่วนขยายต่อไปนี้ซึ่งไม่ได้แสดงอยู่ใน <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> และอาจมีการเพิ่มเข้ามาโดยที่คุณไม่รู้ตัว</translation>
 <translation id="1628000112320670027">รับความช่วยเหลือเกี่ยวกับ Chrome</translation>
-<translation id="1635734105302489219">คุณจะล้างคุ้กกี้เมื่อปิด Chrome หากต้องการเก็บการซิงค์ไว้ ให้เปลี่ยน<ph name="COOKIE_SETTINGS_LINK" />นี้</translation>
+<translation id="1635734105302489219">คุณจะล้างคุ้กกี้เมื่อปิด Chrome หากต้องการซิงค์ต่อไป ให้เปลี่ยน<ph name="COOKIE_SETTINGS_LINK" />นี้</translation>
 <translation id="1662639173275167396">Chrome OS เกิดขึ้นได้ด้วยการสนับสนุนจาก<ph name="BEGIN_LINK_CROS_OSS" />ซอฟต์แวร์โอเพนซอร์ส<ph name="END_LINK_CROS_OSS" />เพิ่มเติม เช่นเดียวกับ <ph name="BEGIN_LINK_LINUX_OSS" />Linux (เบต้า)<ph name="END_LINK_LINUX_OSS" /></translation>
 <translation id="1674870198290878346">เปิดลิงก์ในหน้าต่างที่ไม่ระบุตัวตนของ Chrome</translation>
 <translation id="1682634494516646069">Google Chrome ไม่สามารถอ่านและเขียนข้อมูลในไดเรกทอรีข้อมูล: <ph name="USER_DATA_DIRECTORY" /></translation>
diff --git a/chrome/app/settings_chromium_strings.grdp b/chrome/app/settings_chromium_strings.grdp
index 0ac3ec4e..82e048f 100644
--- a/chrome/app/settings_chromium_strings.grdp
+++ b/chrome/app/settings_chromium_strings.grdp
@@ -57,6 +57,12 @@
     </message>
   </if>
 
+  <!-- Main Page -->
+  <message name="IDS_SETTINGS_BROWSER_SETTINGS_BANNER" desc="Banner displayed in settings page that links to Browser settings.">
+    If a setting doesn't show on this page, try your <ph name="LINK_BEGIN">&lt;a target="_blank" href="$1<ex>https://google.com/</ex>"&gt;</ph>
+    Chromium browser settings<ph name="LINK_END">&lt;/a&gt;</ph>.
+  </message>
+
   <!-- Privacy Page -->
   <message name="IDS_SETTINGS_IMPROVE_BROWSING_EXPERIENCE" desc="The text in the options panel that describes how we use web services to improve browsing experience.">
     Chromium may use web services to improve your browsing experience. You may optionally disable these services. <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
diff --git a/chrome/app/settings_google_chrome_strings.grdp b/chrome/app/settings_google_chrome_strings.grdp
index 413cf6f..73c36697 100644
--- a/chrome/app/settings_google_chrome_strings.grdp
+++ b/chrome/app/settings_google_chrome_strings.grdp
@@ -57,6 +57,12 @@
     </message>
   </if>
 
+  <!-- Main Page -->
+  <message name="IDS_SETTINGS_BROWSER_SETTINGS_BANNER" desc="Banner displayed in settings page that links to Browser settings.">
+    If a setting doesn't show on this page, try your <ph name="LINK_BEGIN">&lt;a target="_blank" href="$1<ex>https://google.com/</ex>"&gt;</ph>
+    Chrome browser settings<ph name="LINK_END">&lt;/a&gt;</ph>.
+  </message>
+
   <!-- Privacy Page -->
   <message name="IDS_SETTINGS_IMPROVE_BROWSING_EXPERIENCE" desc="The text in the options panel that describes how we use web services to improve browsing experience.">
     Google Chrome may use web services to improve your browsing experience. You may optionally disable these services. <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index df6fd66..499fcdbf 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -929,6 +929,8 @@
     "optimization_guide/optimization_guide_keyed_service.h",
     "optimization_guide/optimization_guide_keyed_service_factory.cc",
     "optimization_guide/optimization_guide_keyed_service_factory.h",
+    "optimization_guide/optimization_guide_web_contents_observer.cc",
+    "optimization_guide/optimization_guide_web_contents_observer.h",
     "page_load_metrics/metrics_navigation_throttle.cc",
     "page_load_metrics/metrics_navigation_throttle.h",
     "page_load_metrics/metrics_web_contents_observer.cc",
@@ -2108,8 +2110,8 @@
     "//media/midi",
     "//media/mojo:buildflags",
     "//media/mojo/common",
-    "//media/mojo/interfaces:mirror_service_remoting",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom:mirror_service_remoting",
+    "//media/mojo/mojom:remoting",
     "//media/mojo/services",
     "//media/webrtc",
     "//mojo/core/embedder",
@@ -2859,7 +2861,7 @@
       "//components/send_tab_to_self",
       "//components/signin/internal/identity_manager",  # see android/signin/DEPS
       "//media/mojo/clients",
-      "//media/mojo/interfaces:constants",
+      "//media/mojo/mojom:constants",
       "//rlz:rlz_utils",
       "//sandbox",
       "//sandbox:sandbox_buildflags",
@@ -3612,6 +3614,8 @@
       "sync/sync_error_notifier_ash.h",
       "sync/sync_error_notifier_factory_ash.cc",
       "sync/sync_error_notifier_factory_ash.h",
+      "sync/wifi_configuration_sync_service_factory.cc",
+      "sync/wifi_configuration_sync_service_factory.h",
       "task_manager/providers/arc/arc_process_task.cc",
       "task_manager/providers/arc/arc_process_task.h",
       "task_manager/providers/arc/arc_process_task_provider.cc",
@@ -3631,6 +3635,7 @@
       "//chrome/services/cups_proxy",
       "//chrome/services/cups_proxy/public/mojom",
       "//chromeos/components/account_manager",
+      "//chromeos/components/sync_wifi",
       "//chromeos/services/assistant/public:feature_flags",
       "//chromeos/services/assistant/public/cpp:prefs",
       "//chromeos/services/cellular_setup",
@@ -3753,6 +3758,10 @@
       ]
     }
 
+    if (is_multi_dll_chrome) {
+      defines += [ "CHROME_MULTIPLE_DLL_BROWSER" ]
+    }
+
     if (is_chrome_branded) {
       deps += [
         "//chrome/browser/win/conflicts:module_list_proto",
@@ -4524,7 +4533,7 @@
       "media/output_protection_impl.cc",
       "media/output_protection_impl.h",
     ]
-    deps += [ "//media/mojo/interfaces" ]
+    deps += [ "//media/mojo/mojom" ]
 
     if (enable_widevine) {
       if (enable_widevine_cdm_component) {
@@ -4557,7 +4566,7 @@
 
     if (mojo_media_host == "browser") {
       deps += [
-        "//media/mojo/interfaces:constants",
+        "//media/mojo/mojom:constants",
         "//media/mojo/services",
       ]
     }
@@ -5406,6 +5415,8 @@
     "ssl/ssl_client_auth_requestor_mock.h",
     "subresource_filter/test_ruleset_publisher.cc",
     "subresource_filter/test_ruleset_publisher.h",
+    "translate/translate_test_utils.cc",
+    "translate/translate_test_utils.h",
   ]
 
   configs += [ "//build/config:precompiled_headers" ]
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index c4a94791..1201884 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -901,34 +901,6 @@
      base::size(kTranslateBubbleUIButton), nullptr}};
 #endif  // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS
 
-const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin0px[] = {
-    {OmniboxFieldTrial::kUIVerticalMarginParam, "0"}};
-const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin2px[] = {
-    {OmniboxFieldTrial::kUIVerticalMarginParam, "2"}};
-const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin4px[] = {
-    {OmniboxFieldTrial::kUIVerticalMarginParam, "4"}};
-const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin6px[] = {
-    {OmniboxFieldTrial::kUIVerticalMarginParam, "6"}};
-const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin8px[] = {
-    {OmniboxFieldTrial::kUIVerticalMarginParam, "8"}};
-const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin10px[] = {
-    {OmniboxFieldTrial::kUIVerticalMarginParam, "10"}};
-
-const FeatureEntry::FeatureVariation kOmniboxUIVerticalMarginVariations[] = {
-    {"0px vertical margin", kOmniboxUIVerticalMargin0px,
-     base::size(kOmniboxUIVerticalMargin0px), nullptr},
-    {"2px vertical margin", kOmniboxUIVerticalMargin2px,
-     base::size(kOmniboxUIVerticalMargin2px), nullptr},
-    {"4px vertical margin", kOmniboxUIVerticalMargin4px,
-     base::size(kOmniboxUIVerticalMargin4px), nullptr},
-    {"6px vertical margin", kOmniboxUIVerticalMargin6px,
-     base::size(kOmniboxUIVerticalMargin6px), nullptr},
-    {"8px vertical margin", kOmniboxUIVerticalMargin8px,
-     base::size(kOmniboxUIVerticalMargin8px), nullptr},
-    {"10px vertical margin", kOmniboxUIVerticalMargin10px,
-     base::size(kOmniboxUIVerticalMargin10px), nullptr},
-};
-
 const FeatureEntry::FeatureParam kMarkHttpAsDangerous[] = {
     {security_state::features::kMarkHttpAsFeatureParameterName,
      security_state::features::kMarkHttpAsParameterDangerous}};
@@ -2822,20 +2794,6 @@
                                     kOmniboxMaxURLMatchesVariations,
                                     "OmniboxMaxURLMatchesVariations")},
 
-    {"omnibox-ui-vertical-margin",
-     flag_descriptions::kOmniboxUIVerticalMarginName,
-     flag_descriptions::kOmniboxUIVerticalMarginDescription, kOsDesktop,
-     FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kUIExperimentVerticalMargin,
-                                    kOmniboxUIVerticalMarginVariations,
-                                    "OmniboxUIVerticalMarginVariations")},
-
-    {"omnibox-ui-vertical-margin-limit-to-non-touch-only",
-     flag_descriptions::kOmniboxUIVerticalMarginLimitToNonTouchOnlyName,
-     flag_descriptions::kOmniboxUIVerticalMarginLimitToNonTouchOnlyDescription,
-     kOsDesktop,
-     FEATURE_VALUE_TYPE(
-         omnibox::kUIExperimentVerticalMarginLimitToNonTouchOnly)},
-
     {"omnibox-ui-show-suggestion-favicons",
      flag_descriptions::kOmniboxUIShowSuggestionFaviconsName,
      flag_descriptions::kOmniboxUIShowSuggestionFaviconsDescription,
@@ -2895,6 +2853,10 @@
      flag_descriptions::kResourceLoadSchedulerDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kResourceLoadScheduler)},
 
+    {"prefetch-redirect-error", flag_descriptions::kPrefetchRedirectErrorName,
+     flag_descriptions::kPrefetchRedirectErrorDescription, kOsAll,
+     FEATURE_VALUE_TYPE(blink::features::kPrefetchRedirectError)},
+
 #if defined(OS_ANDROID)
     {"omnibox-spare-renderer", flag_descriptions::kOmniboxSpareRendererName,
      flag_descriptions::kOmniboxSpareRendererDescription, kOsAndroid,
@@ -3533,7 +3495,7 @@
      flag_descriptions::kEnableChromeOsAccountManagerName,
      flag_descriptions::kEnableChromeOsAccountManagerDescription,
      kOsCrOS | kExpireM77,
-     FEATURE_VALUE_TYPE(chromeos::switches::kAccountManager)},
+     FEATURE_VALUE_TYPE(chromeos::features::kAccountManager)},
 #endif
 
 #if defined(OS_CHROMEOS)
@@ -3633,7 +3595,7 @@
     {"enable-native-google-assistant",
      flag_descriptions::kEnableGoogleAssistantName,
      flag_descriptions::kEnableGoogleAssistantDescription, kOsCrOS | kExpireM77,
-     FEATURE_VALUE_TYPE(chromeos::switches::kAssistantFeature)},
+     FEATURE_VALUE_TYPE(chromeos::features::kAssistantFeature)},
 
     {"enable-assistant-dsp", flag_descriptions::kEnableGoogleAssistantDspName,
      flag_descriptions::kEnableGoogleAssistantDspDescription,
@@ -3764,16 +3726,6 @@
      FEATURE_VALUE_TYPE(features::kForceEnableSystemAec)},
 #endif  // defined(OS_MACOSX) || defined(OS_CHROMEOS)
 
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
-    {"autofill-always-show-server-cards-in-sync-transport",
-     flag_descriptions::kAutofillAlwaysShowServerCardsInSyncTransportName,
-     flag_descriptions::
-         kAutofillAlwaysShowServerCardsInSyncTransportDescription,
-     kOsMac | kOsWin | kOsLinux | kExpireM77,
-     FEATURE_VALUE_TYPE(
-         autofill::features::kAutofillAlwaysShowServerCardsInSyncTransport)},
-#endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
-
 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_MACOSX)
     {"enable-custom-mac-paper-sizes",
      flag_descriptions::kEnableCustomMacPaperSizesName,
@@ -4224,7 +4176,7 @@
     {"enable-parental-controls-settings",
      flag_descriptions::kEnableParentalControlsSettingsName,
      flag_descriptions::kEnableParentalControlsSettingsDescription, kOsCrOS,
-     FEATURE_VALUE_TYPE(chromeos::switches::kParentalControlsSettings)},
+     FEATURE_VALUE_TYPE(chromeos::features::kParentalControlsSettings)},
 #endif  // defined(OS_CHROMEOS)
 
     {"mouse-subframe-no-implicit-capture",
diff --git a/chrome/browser/android/compositor/tab_content_manager.cc b/chrome/browser/android/compositor/tab_content_manager.cc
index 8478551..ebeb0dd8 100644
--- a/chrome/browser/android/compositor/tab_content_manager.cc
+++ b/chrome/browser/android/compositor/tab_content_manager.cc
@@ -41,7 +41,6 @@
 
 namespace {
 
-const size_t kMaxReadbacks = 1;
 using TabReadbackCallback = base::OnceCallback<void(float, const SkBitmap&)>;
 
 }  // namespace
@@ -226,8 +225,7 @@
   TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
   DCHECK(tab_android);
   const int tab_id = tab_android->GetAndroidId();
-  if (pending_tab_readbacks_.find(tab_id) != pending_tab_readbacks_.end() ||
-      pending_tab_readbacks_.size() >= kMaxReadbacks) {
+  if (pending_tab_readbacks_.find(tab_id) != pending_tab_readbacks_.end()) {
     return nullptr;
   }
 
diff --git a/chrome/browser/android/download/download_media_parser.cc b/chrome/browser/android/download/download_media_parser.cc
index acc1e879..b263d55 100644
--- a/chrome/browser/android/download/download_media_parser.cc
+++ b/chrome/browser/android/download/download_media_parser.cc
@@ -18,8 +18,8 @@
 #include "media/base/overlay_info.h"
 #include "media/base/video_thumbnail_decoder.h"
 #include "media/mojo/clients/mojo_video_decoder.h"
-#include "media/mojo/interfaces/constants.mojom.h"
-#include "media/mojo/interfaces/media_service.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
+#include "media/mojo/mojom/media_service.mojom.h"
 #include "media/mojo/services/media_interface_provider.h"
 #include "media/renderers/paint_canvas_video_renderer.h"
 #include "media/video/gpu_video_accelerator_factories.h"
diff --git a/chrome/browser/android/download/download_media_parser.h b/chrome/browser/android/download/download_media_parser.h
index 49ec1b4..eff196c 100644
--- a/chrome/browser/android/download/download_media_parser.h
+++ b/chrome/browser/android/download/download_media_parser.h
@@ -22,7 +22,7 @@
 #include "chrome/services/media_gallery_util/public/cpp/media_parser_provider.h"
 #include "chrome/services/media_gallery_util/public/mojom/media_parser.mojom.h"
 #include "media/base/media_log.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 
 namespace media {
 class GpuVideoAcceleratorFactories;
diff --git a/chrome/browser/app_controller_mac.h b/chrome/browser/app_controller_mac.h
index 12bcfbc..35984ff 100644
--- a/chrome/browser/app_controller_mac.h
+++ b/chrome/browser/app_controller_mac.h
@@ -30,7 +30,6 @@
 class QuitWithAppsController;
 class ScopedKeepAlive;
 @class ShareMenuController;
-class TabMenuBridge;
 
 // The application controller object, created by loading the MainMenu nib.
 // This handles things like responding to menus when there are no windows
@@ -72,8 +71,6 @@
   // Controller for the macOS system share menu.
   base::scoped_nsobject<ShareMenuController> shareMenuController_;
 
-  std::unique_ptr<TabMenuBridge> tabMenuBridge_;
-
   // If we're told to open URLs (in particular, via |-application:openFiles:| by
   // Launch Services) before we've launched the browser, we queue them up in
   // |startupUrls_| so that they can go in the first browser window/tab.
@@ -165,7 +162,6 @@
 
 - (BookmarkMenuBridge*)bookmarkMenuBridge;
 - (HistoryMenuBridge*)historyMenuBridge;
-- (TabMenuBridge*)tabMenuBridge;
 
 // Initializes the AppShimMenuController. This enables changing the menu bar for
 // apps.
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index 79e8e17..cf6c32db 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -75,7 +75,6 @@
 #include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h"
 #import "chrome/browser/ui/cocoa/profiles/profile_menu_controller.h"
 #import "chrome/browser/ui/cocoa/share_menu_controller.h"
-#import "chrome/browser/ui/cocoa/tab_menu_bridge.h"
 #include "chrome/browser/ui/extensions/application_launch.h"
 #include "chrome/browser/ui/startup/startup_browser_creator.h"
 #include "chrome/browser/ui/startup/startup_browser_creator_impl.h"
@@ -610,19 +609,8 @@
 
 - (void)windowDidBecomeMain:(NSNotification*)notify {
   Browser* browser = chrome::FindBrowserWithWindow([notify object]);
-  if (!browser)
-    return;
-
-  if (browser->is_type_tabbed()) {
-    tabMenuBridge_ = std::make_unique<TabMenuBridge>(
-        browser->tab_strip_model(),
-        [[NSApp mainMenu] itemWithTag:IDC_TAB_MENU]);
-    tabMenuBridge_->BuildMenu();
-  } else {
-    tabMenuBridge_.reset();
-  }
-
-  [self windowChangedToProfile:browser->profile()->GetOriginalProfile()];
+  if (browser)
+    [self windowChangedToProfile:browser->profile()->GetOriginalProfile()];
 }
 
 - (void)windowDidResignMain:(NSNotification*)notify {
@@ -1559,10 +1547,6 @@
   return historyMenuBridge_.get();
 }
 
-- (TabMenuBridge*)tabMenuBridge {
-  return tabMenuBridge_.get();
-}
-
 - (void)initAppShimMenuController {
   if (!appShimMenuController_)
     appShimMenuController_.reset([[AppShimMenuController alloc] init]);
diff --git a/chrome/browser/apps/app_service/arc_apps.cc b/chrome/browser/apps/app_service/arc_apps.cc
index 8913983..91fcbc8 100644
--- a/chrome/browser/apps/app_service/arc_apps.cc
+++ b/chrome/browser/apps/app_service/arc_apps.cc
@@ -22,8 +22,8 @@
 #include "chrome/grit/component_extension_resources.h"
 #include "components/arc/app_permissions/arc_app_permissions_bridge.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/app.mojom.h"
-#include "components/arc/common/app_permissions.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
+#include "components/arc/mojom/app_permissions.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/system_connector.h"
 #include "extensions/grit/extensions_browser_resources.h"
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index 3a7885a..2aca452 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -28,12 +28,12 @@
 #include "build/build_config.h"
 #include "chrome/browser/autofill/autofill_uitest.h"
 #include "chrome/browser/autofill/autofill_uitest_util.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/metrics/subprocess_metrics_provider.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_io_data.h"
 #include "chrome/browser/translate/chrome_translate_client.h"
 #include "chrome/browser/translate/translate_service.h"
+#include "chrome/browser/translate/translate_test_utils.h"
 #include "chrome/browser/ui/autofill/chrome_autofill_client.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
@@ -57,9 +57,8 @@
 #include "components/translate/core/browser/translate_manager.h"
 #include "components/translate/core/common/translate_switches.h"
 #include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_types.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/render_widget_host_view.h"
@@ -1912,16 +1911,15 @@
       "利";
 
   // Set up an observer to be able to wait for the bubble to be shown.
-  content::Source<content::WebContents> source(GetWebContents());
-  content::WindowedNotificationObserver language_detected_signal(
-      chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, source);
+  translate::TranslateWaiter language_waiter(
+      GetWebContents(),
+      translate::TranslateWaiter::WaitEvent::kLanguageDetermined);
 
   SetTestUrlResponse(kForm);
   ASSERT_NO_FATAL_FAILURE(
       ui_test_utils::NavigateToURL(browser(), GetTestUrl()));
 
-  // Wait for the translate bubble to appear.
-  language_detected_signal.Wait();
+  language_waiter.Wait();
 
   // Verify current translate step.
   const TranslateBubbleModel* model =
@@ -1933,16 +1931,14 @@
   translate::test_utils::PressTranslate(browser());
 
   // Wait for translation.
-  content::WindowedNotificationObserver translation_observer(
-      chrome::NOTIFICATION_PAGE_TRANSLATED,
-      content::NotificationService::AllSources());
+  translate::TranslateWaiter translate_waiter(
+      GetWebContents(), translate::TranslateWaiter::WaitEvent::kPageTranslated);
 
   // Simulate the translate script being retrieved.
   // Pass fake google.translate lib as the translate script.
   SimulateURLFetch();
 
-  // Simulate the render notifying the translation has been done.
-  translation_observer.Wait();
+  translate_waiter.Wait();
 
   TryBasicFormFill();
 }
diff --git a/chrome/browser/banners/app_banner_manager.cc b/chrome/browser/banners/app_banner_manager.cc
index 98dcd7f5..ee551ce 100644
--- a/chrome/browser/banners/app_banner_manager.cc
+++ b/chrome/browser/banners/app_banner_manager.cc
@@ -541,7 +541,6 @@
   blink::mojom::AppBannerController* controller_ptr = controller.get();
   controller_ptr->BannerPromptRequest(
       std::move(banner_proxy), mojo::MakeRequest(&event_), {GetBannerType()},
-      /*require_gesture=*/true,
       base::BindOnce(&AppBannerManager::OnBannerPromptReply, GetWeakPtr(),
                      std::move(controller)));
 }
diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h
index 9c61a9e..c001b762 100644
--- a/chrome/browser/browser_process.h
+++ b/chrome/browser/browser_process.h
@@ -91,10 +91,6 @@
 class PolicyService;
 }
 
-namespace prefs {
-class InProcessPrefServiceFactory;
-}
-
 namespace printing {
 class BackgroundPrintingManager;
 class PrintJobManager;
@@ -276,8 +272,6 @@
   virtual shell_integration::DefaultWebClientState
   CachedDefaultWebClientState() = 0;
 
-  virtual prefs::InProcessPrefServiceFactory* pref_service_factory() const = 0;
-
  private:
   DISALLOW_COPY_AND_ASSIGN(BrowserProcess);
 };
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 7c53f64..bb4b772 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -233,8 +233,6 @@
   browser_policy_connector_ =
       chrome_feature_list_creator_->TakeChromeBrowserPolicyConnector();
   created_browser_policy_connector_ = true;
-  pref_service_factory_ =
-      chrome_feature_list_creator_->TakePrefServiceFactory();
 
   platform_part_ = std::make_unique<BrowserProcessPlatformPart>();
   // Most work should be done in Init().
@@ -888,11 +886,6 @@
   return cached_default_web_client_state_;
 }
 
-prefs::InProcessPrefServiceFactory* BrowserProcessImpl::pref_service_factory()
-    const {
-  return pref_service_factory_.get();
-}
-
 // static
 void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
   registry->RegisterBooleanPref(prefs::kDefaultBrowserSettingEnabled,
diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h
index c02e294..dadcf85 100644
--- a/chrome/browser/browser_process_impl.h
+++ b/chrome/browser/browser_process_impl.h
@@ -193,7 +193,6 @@
       override;
   shell_integration::DefaultWebClientState CachedDefaultWebClientState()
       override;
-  prefs::InProcessPrefServiceFactory* pref_service_factory() const override;
 
   static void RegisterPrefs(PrefRegistrySimple* registry);
 
@@ -401,7 +400,6 @@
 
   std::unique_ptr<resource_coordinator::ResourceCoordinatorParts>
       resource_coordinator_parts_;
-  std::unique_ptr<prefs::InProcessPrefServiceFactory> pref_service_factory_;
 
   std::unique_ptr<SecureOriginPrefsObserver> secure_origin_prefs_observer_;
   std::unique_ptr<SiteIsolationPrefsObserver> site_isolation_prefs_observer_;
diff --git a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
index e8d8bdd..6ea0ceb 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover_browsertest.cc
@@ -67,7 +67,7 @@
 #include "google_apis/gaia/gaia_urls.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 #include "media/base/media_switches.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "media/mojo/services/video_decode_perf_history.h"
 #include "net/cookies/canonical_cookie.h"
 #include "net/dns/mock_host_resolver.h"
diff --git a/chrome/browser/certificate_manager_model.cc b/chrome/browser/certificate_manager_model.cc
index a183b2d..b140b5d 100644
--- a/chrome/browser/certificate_manager_model.cc
+++ b/chrome/browser/certificate_manager_model.cc
@@ -299,9 +299,7 @@
   }
 
   // chromeos::PolicyCertificateProvider::Observer
-  void OnPolicyProvidedCertsChanged(
-      const net::CertificateList& all_server_and_authority_certs,
-      const net::CertificateList& web_trusted_certs) override {
+  void OnPolicyProvidedCertsChanged() override {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     Refresh();
   }
diff --git a/chrome/browser/certificate_manager_model_unittest.cc b/chrome/browser/certificate_manager_model_unittest.cc
index 0c3d8cb..5551587 100644
--- a/chrome/browser/certificate_manager_model_unittest.cc
+++ b/chrome/browser/certificate_manager_model_unittest.cc
@@ -233,14 +233,8 @@
   }
 
   void NotifyObservers() {
-    net::CertificateList all_server_and_authority_certs =
-        GetAllServerAndAuthorityCertificates();
-    net::CertificateList trust_anchors = GetWebTrustedCertificates();
-
-    for (auto& observer : observer_list_) {
-      observer.OnPolicyProvidedCertsChanged(all_server_and_authority_certs,
-                                            trust_anchors);
-    }
+    for (auto& observer : observer_list_)
+      observer.OnPolicyProvidedCertsChanged();
   }
 
  private:
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index d9a1c7e9..b59fe6a 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -13,6 +13,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/command_line.h"
+#include "base/files/file_util.h"
 #include "base/files/scoped_file.h"
 #include "base/i18n/base_i18n_switches.h"
 #include "base/i18n/character_encoding.h"
@@ -36,7 +37,6 @@
 #include "chrome/app/chrome_content_browser_overlay_manifest.h"
 #include "chrome/app/chrome_content_gpu_overlay_manifest.h"
 #include "chrome/app/chrome_content_renderer_overlay_manifest.h"
-#include "chrome/app/chrome_content_utility_overlay_manifest.h"
 #include "chrome/browser/accessibility/accessibility_labels_service.h"
 #include "chrome/browser/accessibility/accessibility_labels_service_factory.h"
 #include "chrome/browser/after_startup_task_utils.h"
@@ -250,9 +250,6 @@
 #include "components/safe_browsing/features.h"
 #include "components/safe_browsing/password_protection/password_protection_navigation_throttle.h"
 #include "components/security_interstitials/content/origin_policy_ui.h"
-#include "components/services/heap_profiling/heap_profiling_service.h"
-#include "components/services/heap_profiling/public/cpp/settings.h"
-#include "components/services/heap_profiling/public/mojom/constants.mojom.h"
 #include "components/services/quarantine/public/mojom/quarantine.mojom.h"
 #include "components/services/quarantine/quarantine_service.h"
 #include "components/signin/public/base/signin_pref_names.h"
@@ -333,8 +330,6 @@
 #include "services/network/public/cpp/is_potentially_trustworthy.h"
 #include "services/network/public/cpp/network_switches.h"
 #include "services/network/public/cpp/resource_request.h"
-#include "services/preferences/public/cpp/in_process_service_factory.h"
-#include "services/preferences/public/mojom/preferences.mojom.h"
 #include "services/service_manager/embedder/switches.h"
 #include "services/service_manager/public/cpp/connector.h"
 #include "services/service_manager/public/mojom/connector.mojom.h"
@@ -602,7 +597,7 @@
 #endif
 
 #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
-#include "media/mojo/interfaces/constants.mojom.h"      // nogncheck
+#include "media/mojo/mojom/constants.mojom.h"      // nogncheck
 #include "media/mojo/services/media_service_factory.h"  // nogncheck
 #endif
 
@@ -725,6 +720,14 @@
 };
 #endif
 
+#if defined(OS_WIN) && !defined(COMPONENT_BUILD)
+// Enables pre-launch Code Integrity Guard (CIG) for Chrome renderers, when
+// running on Windows 10 1511 and above. See
+// https://blogs.windows.com/blog/tag/code-integrity-guard/.
+const base::Feature kRendererCodeIntegrity{"RendererCodeIntegrity",
+                                           base::FEATURE_DISABLED_BY_DEFAULT};
+#endif  // defined(OS_WIN) && !defined(COMPONENT_BUILD)
+
 enum AppLoadedInTabSource {
   // A platform app page tried to load one of its own URLs in a tab.
   APP_LOADED_IN_TAB_SOURCE_APP = 0,
@@ -1085,6 +1088,30 @@
   }
 }
 
+#if defined(OS_WIN) && !defined(COMPONENT_BUILD)
+// Returns the full path to |module_name|. Both dev builds (where |module_name|
+// is in the current executable's directory) and proper installs (where
+// |module_name| is in a versioned sub-directory of the current executable's
+// directory) are supported. The identified file is not guaranteed to exist.
+base::FilePath GetModulePath(base::StringPiece16 module_name) {
+  base::FilePath exe_dir;
+  const bool has_path = base::PathService::Get(base::DIR_EXE, &exe_dir);
+  DCHECK(has_path);
+
+  // Look for the module in a versioned sub-directory of the current
+  // executable's directory and return the path if it can be read. This is the
+  // expected location of modules for proper installs.
+  const base::FilePath module_path =
+      exe_dir.AppendASCII(chrome::kChromeVersion).Append(module_name);
+  if (base::PathExists(module_path))
+    return module_path;
+
+  // Otherwise, return the path to the module in the current executable's
+  // directory. This is the expected location of modules for dev builds.
+  return exe_dir.Append(module_name);
+}
+#endif  // defined(OS_WIN) && !defined(COMPONENT_BUILD)
+
 }  // namespace
 
 std::string GetUserAgent() {
@@ -1164,6 +1191,8 @@
 // static
 void ChromeContentBrowserClient::RegisterLocalStatePrefs(
     PrefRegistrySimple* registry) {
+  registry->RegisterFilePathPref(prefs::kDiskCacheDir, base::FilePath());
+  registry->RegisterIntegerPref(prefs::kDiskCacheSize, 0);
   registry->RegisterStringPref(prefs::kIsolateOrigins, std::string());
   registry->RegisterBooleanPref(prefs::kSitePerProcess, false);
   registry->RegisterBooleanPref(prefs::kTabLifecyclesEnabled, true);
@@ -2647,12 +2676,15 @@
   // heuristics based on available disk size. These are implemented in
   // disk_cache::PreferredCacheSize in net/disk_cache/cache_util.cc.
   int64_t size_in_bytes = 0;
-  PrefService* prefs = Profile::FromBrowserContext(context)->GetPrefs();
-  DCHECK(prefs);
-  size_in_bytes = prefs->GetInteger(prefs::kDiskCacheSize);
-  base::FilePath disk_cache_dir = prefs->GetFilePath(prefs::kDiskCacheDir);
-  if (!disk_cache_dir.empty())
-    cache_path = disk_cache_dir.Append(cache_path.BaseName());
+  DCHECK(g_browser_process);
+  PrefService* local_state = g_browser_process->local_state();
+  if (local_state) {
+    size_in_bytes = local_state->GetInteger(prefs::kDiskCacheSize);
+    base::FilePath disk_cache_dir =
+        local_state->GetFilePath(prefs::kDiskCacheDir);
+    if (!disk_cache_dir.empty())
+      cache_path = disk_cache_dir.Append(cache_path.BaseName());
+  }
   return content::GeneratedCodeCacheSettings(true, size_in_bytes, cache_path);
 }
 
@@ -3650,17 +3682,52 @@
 
 bool ChromeContentBrowserClient::PreSpawnRenderer(
     sandbox::TargetPolicy* policy) {
-  // This code is duplicated in nacl_exe_win_64.cc.
   // Allow the server side of a pipe restricted to the "chrome.nacl."
   // namespace so that it cannot impersonate other system or other chrome
-  // service pipes.
-  sandbox::ResultCode result = policy->AddRule(
-      sandbox::TargetPolicy::SUBSYS_NAMED_PIPES,
-      sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY,
-      L"\\\\.\\pipe\\chrome.nacl.*");
+  // service pipes. This is also done in nacl_broker_listener.cc.
+  sandbox::ResultCode result =
+      policy->AddRule(sandbox::TargetPolicy::SUBSYS_NAMED_PIPES,
+                      sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY,
+                      L"\\\\.\\pipe\\chrome.nacl.*");
   if (result != sandbox::SBOX_ALL_OK)
     return false;
-  return result == sandbox::SBOX_ALL_OK;
+
+#if !defined(COMPONENT_BUILD)
+  if (!base::FeatureList::IsEnabled(kRendererCodeIntegrity))
+    return true;
+
+  // Only enable signing mitigation if launching from chrome.exe.
+  base::FilePath exe_path;
+  if (!base::PathService::Get(base::FILE_EXE, &exe_path))
+    return true;
+  if (chrome::kBrowserProcessExecutableName != exe_path.BaseName().value())
+    return true;
+
+  sandbox::MitigationFlags mitigations = policy->GetProcessMitigations();
+  mitigations |= sandbox::MITIGATION_FORCE_MS_SIGNED_BINS;
+  result = policy->SetProcessMitigations(mitigations);
+  if (result != sandbox::SBOX_ALL_OK)
+    return false;
+
+  // Allow loading Chrome's DLLs. The name of this depends on whether
+  // is_multi_dll_chrome is defined or not. For multi-DLL Chrome,
+  // chrome_child.dll is loaded, but for single-DLL Chrome, it would be the
+  // same DLL as the browser process.
+#if defined(CHROME_MULTIPLE_DLL_BROWSER)
+  constexpr auto* child_dll_path = chrome::kChildDll;
+#else
+  constexpr auto* child_dll_path = chrome::kBrowserResourcesDll;
+#endif
+  for (const auto* dll : {child_dll_path, chrome::kElfDll}) {
+    result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_SIGNED_BINARY,
+                             sandbox::TargetPolicy::SIGNED_ALLOW_LOAD,
+                             GetModulePath(dll).value().c_str());
+    if (result != sandbox::SBOX_ALL_OK)
+      return false;
+  }
+#endif  // !defined(COMPONENT_BUILD)
+
+  return true;
 }
 #endif  // defined(OS_WIN)
 
@@ -3901,16 +3968,6 @@
     const service_manager::Identity& identity,
     mojo::PendingReceiver<service_manager::mojom::Service>* receiver) {
   const std::string& service_name = identity.name();
-  if (service_name == prefs::mojom::kLocalStateServiceName) {
-    if (!g_browser_process || !g_browser_process->pref_service_factory())
-      return;
-
-    service_manager::Service::RunAsyncUntilTermination(
-        g_browser_process->pref_service_factory()->CreatePrefService(
-            std::move(*receiver)));
-    return;
-  }
-
 #if defined(OS_WIN)
   bool run_quarantine_service_in_process =
       !base::FeatureList::IsEnabled(quarantine::kOutOfProcessQuarantine);
@@ -3976,16 +4033,6 @@
 #endif  // defined(OS_CHROMEOS)
 }
 
-void ChromeContentBrowserClient::RunServiceInstanceOnIOThread(
-    const service_manager::Identity& identity,
-    mojo::PendingReceiver<service_manager::mojom::Service>* receiver) {
-  if (identity.name() == heap_profiling::mojom::kServiceName) {
-    heap_profiling::HeapProfilingService::GetServiceFactory().Run(
-        std::move(*receiver));
-    return;
-  }
-}
-
 base::Optional<service_manager::Manifest>
 ChromeContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
   if (name == content::mojom::kBrowserServiceName)
@@ -3994,8 +4041,6 @@
     return GetChromeContentGpuOverlayManifest();
   if (name == content::mojom::kRendererServiceName)
     return GetChromeContentRendererOverlayManifest();
-  if (name == content::mojom::kUtilityServiceName)
-    return GetChromeContentUtilityOverlayManifest();
   return base::nullopt;
 }
 
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index 763c35e..670a66290 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -400,10 +400,6 @@
       const service_manager::Identity& identity,
       mojo::PendingReceiver<service_manager::mojom::Service>* receiver)
       override;
-  void RunServiceInstanceOnIOThread(
-      const service_manager::Identity& identity,
-      mojo::PendingReceiver<service_manager::mojom::Service>* receiver)
-      override;
   base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
       base::StringPiece name) override;
   std::vector<service_manager::Manifest> GetExtraServiceManifests() override;
diff --git a/chrome/browser/chrome_notification_types.h b/chrome/browser/chrome_notification_types.h
index e2df7f6..abe75f3 100644
--- a/chrome/browser/chrome_notification_types.h
+++ b/chrome/browser/chrome_notification_types.h
@@ -57,12 +57,6 @@
   // the source is Source<WebContents>.
   NOTIFICATION_TAB_LANGUAGE_DETERMINED,
 
-  // Sent when a page has been translated. The source is the tab for that page
-  // (Source<WebContents>) and the details are the language the page was
-  // originally in and the language it was translated to
-  // (std::pair<std::string, std::string>).
-  NOTIFICATION_PAGE_TRANSLATED,
-
   // The user has changed the browser theme. The source is a
   // Source<ThemeService>. There are no details.
   NOTIFICATION_BROWSER_THEME_CHANGED,
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index d70f8852..8ce28ba 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -144,8 +144,8 @@
     "//chromeos/timezone",
     "//chromeos/tpm",
     "//components/arc",
-    "//components/arc/common:struct_traits",
     "//components/arc/media_session",
+    "//components/arc/mojom:mojom_traits",
     "//components/browser_sync",
     "//components/captive_portal",
     "//components/component_updater:crl_set_remover",
@@ -225,7 +225,7 @@
     "//gpu/ipc/host",
     "//gpu/ipc/service",
     "//media",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/cpp/platform",
     "//mojo/public/cpp/system",
     "//net",
diff --git a/chrome/browser/chromeos/DEPS b/chrome/browser/chromeos/DEPS
index 20c35e9..f8dbe04 100644
--- a/chrome/browser/chromeos/DEPS
+++ b/chrome/browser/chromeos/DEPS
@@ -12,7 +12,7 @@
   "+mash/public/mojom",
   "+media/audio/sounds",  # For system sounds
   "+media/base/media_switches.h",  # For media command line switches.
-  "+media/mojo/interfaces",  # For platform verification mojom interface.
+  "+media/mojo/mojom",  # For platform verification mojom interface.
   "+remoting/host/it2me",  # For CRD host in remote command
   "+services/device/public",
   "+services/metrics/public",
diff --git a/chrome/browser/chromeos/account_manager/account_manager_policy_controller_browsertest.cc b/chrome/browser/chromeos/account_manager/account_manager_policy_controller_browsertest.cc
index e5b5f1e..0cd175d 100644
--- a/chrome/browser/chromeos/account_manager/account_manager_policy_controller_browsertest.cc
+++ b/chrome/browser/chromeos/account_manager/account_manager_policy_controller_browsertest.cc
@@ -14,8 +14,8 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/components/account_manager/account_manager_factory.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_pref_names.h"
-#include "chromeos/constants/chromeos_switches.h"
 #include "components/user_manager/scoped_user_manager.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -33,7 +33,7 @@
   ~AccountManagerPolicyControllerTest() override = default;
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    scoped_feature_list_.InitAndEnableFeature(switches::kAccountManager);
+    scoped_feature_list_.InitAndEnableFeature(features::kAccountManager);
   }
 
   void SetUpOnMainThread() override {
diff --git a/chrome/browser/chromeos/account_manager/account_manager_util.cc b/chrome/browser/chromeos/account_manager/account_manager_util.cc
index 9fee4bc7..92389c8 100644
--- a/chrome/browser/chromeos/account_manager/account_manager_util.cc
+++ b/chrome/browser/chromeos/account_manager/account_manager_util.cc
@@ -13,13 +13,13 @@
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chromeos/components/account_manager/account_manager.h"
 #include "chromeos/components/account_manager/account_manager_factory.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 
 namespace chromeos {
 
 bool IsAccountManagerAvailable(const Profile* const profile) {
-  if (!switches::IsAccountManagerEnabled())
+  if (!features::IsAccountManagerEnabled())
     return false;
 
   // Signin Profile does not have any accounts associated with it.
diff --git a/chrome/browser/chromeos/apps/apk_web_app_installer.h b/chrome/browser/chromeos/apps/apk_web_app_installer.h
index 5b7835eefd..63ad487 100644
--- a/chrome/browser/chromeos/apps/apk_web_app_installer.h
+++ b/chrome/browser/chromeos/apps/apk_web_app_installer.h
@@ -13,7 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/common/web_application_info.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class GURL;
 class Profile;
diff --git a/chrome/browser/chromeos/apps/apk_web_app_service.cc b/chrome/browser/chromeos/apps/apk_web_app_service.cc
index 3d3ed76f..77dca130 100644
--- a/chrome/browser/chromeos/apps/apk_web_app_service.cc
+++ b/chrome/browser/chromeos/apps/apk_web_app_service.cc
@@ -15,7 +15,7 @@
 #include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/common/chrome_features.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/scoped_user_pref_update.h"
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h
index 234531e..bd136340 100644
--- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h
+++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h
@@ -15,7 +15,7 @@
 #include "chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h"
 #include "chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
-#include "components/arc/common/accessibility_helper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "ui/accessibility/ax_action_handler.h"
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_unittest.cc b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_unittest.cc
index b90477d..1e2a28d 100644
--- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_unittest.cc
+++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_unittest.cc
@@ -21,7 +21,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/views/chrome_views_test_base.h"
 #include "chromeos/constants/chromeos_switches.h"
-#include "components/arc/common/accessibility_helper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/exo/shell_surface.h"
 #include "components/exo/shell_surface_util.h"
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_info_data.h b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_info_data.h
index 95d82fc..46e3f16 100644
--- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_info_data.h
+++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_info_data.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_CHROMEOS_ARC_ACCESSIBILITY_ARC_ACCESSIBILITY_INFO_DATA_H_
 #define CHROME_BROWSER_CHROMEOS_ARC_ACCESSIBILITY_ARC_ACCESSIBILITY_INFO_DATA_H_
 
-#include "components/arc/common/accessibility_helper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
 
 namespace ui {
 struct AXNodeData;
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_util.cc b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_util.cc
index aa30d8d..43f7de8 100644
--- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_util.cc
+++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_util.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_util.h"
 
-#include "components/arc/common/accessibility_helper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
 
 namespace arc {
 
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h
index 504651c..83c23522 100644
--- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h
+++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_info_data.h"
-#include "components/arc/common/accessibility_helper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
 #include "ui/accessibility/ax_action_handler.h"
 #include "ui/accessibility/ax_node.h"
 #include "ui/accessibility/ax_node_data.h"
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc_unittest.cc b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc_unittest.cc
index bab29d1..889e620 100644
--- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc_unittest.cc
+++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc_unittest.cc
@@ -6,7 +6,7 @@
 
 #include "chrome/browser/chromeos/arc/accessibility/accessibility_node_info_data_wrapper.h"
 #include "chrome/browser/chromeos/arc/accessibility/accessibility_window_info_data_wrapper.h"
-#include "components/arc/common/accessibility_helper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/accessibility/platform/ax_android_constants.h"
 
diff --git a/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcut_item.h b/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcut_item.h
index 4a53e1b..d42a276 100644
--- a/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcut_item.h
+++ b/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcut_item.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/strings/string16.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "ui/gfx/image/image_skia.h"
 
 namespace arc {
diff --git a/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.h b/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.h
index dc81ab6..44f2fe6 100644
--- a/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.h
+++ b/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcut_item.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 namespace arc {
 
diff --git a/chrome/browser/chromeos/arc/arc_optin_uma.h b/chrome/browser/chromeos/arc/arc_optin_uma.h
index e327466..addaafa5 100644
--- a/chrome/browser/chromeos/arc/arc_optin_uma.h
+++ b/chrome/browser/chromeos/arc/arc_optin_uma.h
@@ -7,8 +7,8 @@
 
 #include <ostream>
 
-#include "components/arc/common/app.mojom.h"
-#include "components/arc/common/auth.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
+#include "components/arc/mojom/auth.mojom.h"
 
 class Profile;
 
diff --git a/chrome/browser/chromeos/arc/arc_util.cc b/chrome/browser/chromeos/arc/arc_util.cc
index efa3df92..006b669 100644
--- a/chrome/browser/chromeos/arc/arc_util.cc
+++ b/chrome/browser/chromeos/arc/arc_util.cc
@@ -36,7 +36,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profiles_state.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/arc/arc_features.h"
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_util.h"
@@ -601,7 +601,7 @@
 
   // Demo Mode is the only public session scenario that can launch Play.
   return chromeos::DemoSession::IsDeviceInDemoMode() &&
-         chromeos::switches::ShouldShowPlayStoreInDemoMode();
+         chromeos::features::ShouldShowPlayStoreInDemoMode();
 }
 
 bool ShouldStartArcSilentlyForManagedProfile(const Profile* profile) {
diff --git a/chrome/browser/chromeos/arc/arc_util_unittest.cc b/chrome/browser/chromeos/arc/arc_util_unittest.cc
index d2b2c8f..07d14f6e 100644
--- a/chrome/browser/chromeos/arc/arc_util_unittest.cc
+++ b/chrome/browser/chromeos/arc/arc_util_unittest.cc
@@ -30,7 +30,7 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/fake_oobe_configuration_client.h"
 #include "chromeos/tpm/stub_install_attributes.h"
@@ -711,7 +711,7 @@
 
 TEST_F(ChromeArcUtilTest, ArcStartModeDefaultDemoModeWithPlayStore) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatureState(chromeos::switches::kShowPlayInDemoMode,
+  feature_list.InitWithFeatureState(chromeos::features::kShowPlayInDemoMode,
                                     true /* enabled */);
   auto* command_line = base::CommandLine::ForCurrentProcess();
   command_line->InitFromArgv({"", "--arc-availability=installed"});
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service.h b/chrome/browser/chromeos/arc/auth/arc_auth_service.h
index d4f1636..1b0df67 100644
--- a/chrome/browser/chromeos/arc/auth/arc_auth_service.h
+++ b/chrome/browser/chromeos/arc/auth/arc_auth_service.h
@@ -16,7 +16,7 @@
 #include "base/optional.h"
 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
 #include "chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.h"
-#include "components/arc/common/auth.mojom.h"
+#include "components/arc/mojom/auth.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
diff --git a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
index 1e6c2ecb..af6f281 100644
--- a/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
+++ b/chrome/browser/chromeos/arc/auth/arc_auth_service_browsertest.cc
@@ -40,7 +40,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/testing_profile.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/cryptohome/cryptohome_parameters.h"
 #include "components/account_id/account_id.h"
 #include "components/arc/arc_features.h"
@@ -550,7 +550,7 @@
 
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        chromeos::switches::kAccountManager);
+        chromeos::features::kAccountManager);
     ArcAuthServiceTest::SetUp();
   }
 
diff --git a/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc b/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc
index 684a56b..4f49573c 100644
--- a/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc
+++ b/chrome/browser/chromeos/arc/auth/arc_background_auth_code_fetcher.cc
@@ -132,8 +132,8 @@
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = GURL(kAuthTokenExchangeEndPoint);
   resource_request->load_flags =
-      net::LOAD_DISABLE_CACHE | net::LOAD_BYPASS_CACHE |
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+      net::LOAD_DISABLE_CACHE | net::LOAD_BYPASS_CACHE;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request->method = "POST";
   resource_request->headers.SetHeader(kGetAuthCodeKey, kGetAuthCodeValue);
   simple_url_loader_ = network::SimpleURLLoader::Create(
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
index 72598f5..e818eaa 100644
--- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
+++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
@@ -18,8 +18,8 @@
 #include "base/threading/thread_checker.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_task_queue.h"
-#include "components/arc/common/bluetooth.mojom.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "device/bluetooth/bluetooth_adapter.h"
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc
index c2001ede..077ce30 100644
--- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc
+++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc
@@ -15,7 +15,7 @@
 #include "base/system/sys_info.h"
 #include "base/test/scoped_task_environment.h"
 #include "components/arc/bluetooth/bluetooth_type_converters.h"
-#include "components/arc/common/bluetooth.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_bluetooth_instance.h"
diff --git a/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h b/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h
index 1b501d1..f23b2f3 100644
--- a/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h
+++ b/chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h
@@ -14,7 +14,7 @@
 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
 #include "chrome/browser/sessions/session_restore_observer.h"
 #include "components/account_id/account_id.h"
-#include "components/arc/common/boot_phase_monitor.mojom.h"
+#include "components/arc/mojom/boot_phase_monitor.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/chrome/browser/chromeos/arc/cast_receiver/arc_cast_receiver_service.h b/chrome/browser/chromeos/arc/cast_receiver/arc_cast_receiver_service.h
index f764b500..b4ac94f 100644
--- a/chrome/browser/chromeos/arc/cast_receiver/arc_cast_receiver_service.h
+++ b/chrome/browser/chromeos/arc/cast_receiver/arc_cast_receiver_service.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
-#include "components/arc/common/cast_receiver.mojom.h"
+#include "components/arc/mojom/cast_receiver.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.h b/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.h
index 8979e6e4..356d507 100644
--- a/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.h
+++ b/chrome/browser/chromeos/arc/enterprise/arc_enterprise_reporting_service.h
@@ -10,7 +10,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/enterprise_reporting.mojom.h"
+#include "components/arc/mojom/enterprise_reporting.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
diff --git a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_installer_unittest.cc b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_installer_unittest.cc
index 2fcc785..baa1591 100644
--- a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_installer_unittest.cc
+++ b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_installer_unittest.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/chromeos/arc/policy/arc_policy_bridge.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/policy.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/fake_policy_instance.h"
 #include "components/policy/core/common/remote_commands/remote_commands_queue.h"
diff --git a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge.h b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge.h
index 83e73cb..8e93a6c0 100644
--- a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge.h
+++ b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/memory/weak_ptr.h"
-#include "components/arc/common/cert_store.mojom.h"
+#include "components/arc/mojom/cert_store.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
diff --git a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc
index bb83cd4..13b85a4 100644
--- a/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc
+++ b/chrome/browser/chromeos/arc/enterprise/cert_store/arc_cert_store_bridge_browsertest.cc
@@ -30,7 +30,7 @@
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/cert_store.mojom.h"
+#include "components/arc/mojom/cert_store.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/policy/policy_constants.h"
diff --git a/chrome/browser/chromeos/arc/file_system_watcher/arc_file_system_watcher_service.h b/chrome/browser/chromeos/arc/file_system_watcher/arc_file_system_watcher_service.h
index 647c02a5..09ff18f 100644
--- a/chrome/browser/chromeos/arc/file_system_watcher/arc_file_system_watcher_service.h
+++ b/chrome/browser/chromeos/arc/file_system_watcher/arc_file_system_watcher_service.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h
index a5000f9a..1649b3c 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h
@@ -19,7 +19,7 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "storage/browser/fileapi/async_file_util.h"
 #include "storage/browser/fileapi/watcher_manager.h"
 
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
index 030633e..b3463898 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
@@ -16,7 +16,7 @@
 #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_file_system_instance.h"
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h
index 4f5f301a..8b2b72b 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "base/files/file_path.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 
 class GURL;
 
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h b/chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h
index 0192d1d..8efd452 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h
+++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h
@@ -17,7 +17,7 @@
 #include "base/observer_list.h"
 #include "chrome/browser/chromeos/arc/fileapi/arc_select_files_handler.h"
 #include "chrome/browser/chromeos/arc/fileapi/file_stream_forwarder.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "storage/browser/fileapi/watcher_manager.h"
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h
index ca9ac20..40f5bcd 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h
+++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h
@@ -18,7 +18,7 @@
 #include "base/observer_list.h"
 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
 #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "storage/browser/fileapi/watcher_manager.h"
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc
index 2258bb5..e752869 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner_unittest.cc
@@ -13,7 +13,7 @@
 #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_file_system_instance.h"
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler.h b/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler.h
index 0ca5e3e3..9d392da 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler.h
+++ b/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler.h
@@ -12,7 +12,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/views/select_file_dialog_extension.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "content/public/browser/render_frame_host.h"
 #include "ui/shell_dialogs/select_file_dialog.h"
 
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler_unittest.cc
index 91e3354..61bbe74 100644
--- a/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler_unittest.cc
+++ b/chrome/browser/chromeos/arc/fileapi/arc_select_files_handler_unittest.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/ui/chrome_select_file_policy.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile_manager.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/chromeos/arc/input_method_manager/DEPS b/chrome/browser/chromeos/arc/input_method_manager/DEPS
deleted file mode 100644
index cc628a8..0000000
--- a/chrome/browser/chromeos/arc/input_method_manager/DEPS
+++ /dev/null
@@ -1,7 +0,0 @@
-specific_include_rules = {
-  # TODO(mash): Remove. http://crbug.com/890677
-  "arc_input_method_manager_service_unittest\.cc": [
-    "+ash/keyboard/keyboard_controller_impl.h",
-    "+ash/shell.h",
-  ],
-}
diff --git a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_bridge.h b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_bridge.h
index 959baeb..c10ea29 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_bridge.h
+++ b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_bridge.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "components/arc/common/input_method_manager.mojom.h"
+#include "components/arc/mojom/input_method_manager.mojom.h"
 
 namespace arc {
 
diff --git a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc
index 8f7c5c0..60c3734d 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc
+++ b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc
@@ -24,7 +24,7 @@
 #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client.h"
 #include "chrome/common/pref_names.h"
 #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
-#include "components/arc/common/ime_struct_traits.h"
+#include "components/arc/mojom/ime_mojom_traits.h"
 #include "components/crx_file/id_util.h"
 #include "components/prefs/pref_service.h"
 #include "ui/base/ime/chromeos/component_extension_ime_manager.h"
diff --git a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.h b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.h
index 79ab5d90..340fbe5f 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.h
+++ b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.h
@@ -16,7 +16,7 @@
 #include "chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_bridge.h"
 #include "chrome/browser/chromeos/arc/input_method_manager/input_connection_impl.h"
 #include "chrome/browser/chromeos/input_method/input_method_engine.h"
-#include "components/arc/common/input_method_manager.mojom.h"
+#include "components/arc/mojom/input_method_manager.mojom.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
diff --git a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service_unittest.cc b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service_unittest.cc
index 3eb9d4c..35e206f 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service_unittest.cc
+++ b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service_unittest.cc
@@ -12,7 +12,6 @@
 #include "ash/public/cpp/ash_pref_names.h"
 #include "ash/public/cpp/keyboard/keyboard_switches.h"
 #include "ash/public/cpp/tablet_mode.h"
-#include "ash/public/cpp/test/shell_test_api.h"
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
@@ -24,11 +23,11 @@
 #include "chrome/browser/chromeos/arc/input_method_manager/test_input_method_manager_bridge.h"
 #include "chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client_test_helper.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/test/base/chrome_ash_test_base.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/test/test_browser_context.h"
 #include "components/crx_file/id_util.h"
+#include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/ime/chromeos/extension_ime_util.h"
 #include "ui/base/ime/chromeos/mock_input_method_manager.h"
@@ -43,6 +42,39 @@
 
 namespace im = chromeos::input_method;
 
+class FakeTabletMode : public ash::TabletMode {
+ public:
+  FakeTabletMode() = default;
+  ~FakeTabletMode() override = default;
+
+  // ash::TabletMode overrides:
+  void AddObserver(ash::TabletModeObserver* observer) override {
+    observer_ = observer;
+  }
+
+  void RemoveObserver(ash::TabletModeObserver* observer) override {
+    observer_ = nullptr;
+  }
+
+  bool InTabletMode() const override { return in_tablet_mode; }
+
+  void SetEnabledForTest(bool enabled) override {
+    bool changed = (in_tablet_mode != enabled);
+    in_tablet_mode = enabled;
+
+    if (changed && observer_) {
+      if (in_tablet_mode)
+        observer_->OnTabletModeStarted();
+      else
+        observer_->OnTabletModeEnded();
+    }
+  }
+
+ private:
+  ash::TabletModeObserver* observer_ = nullptr;
+  bool in_tablet_mode = false;
+};
+
 // The fake im::InputMethodManager for testing.
 class TestInputMethodManager : public im::MockInputMethodManager {
  public:
@@ -169,9 +201,7 @@
   DISALLOW_COPY_AND_ASSIGN(TestIMEInputContextHandler);
 };
 
-// TODO(crbug.com/890677): Stop inheriting ChromeAshTestBase once ash::Shell
-// dependency is removed from ArcInputMethodManagerService.
-class ArcInputMethodManagerServiceTest : public ChromeAshTestBase {
+class ArcInputMethodManagerServiceTest : public testing::Test {
  protected:
   ArcInputMethodManagerServiceTest()
       : arc_service_manager_(std::make_unique<ArcServiceManager>()) {}
@@ -186,23 +216,20 @@
   TestingProfile* profile() { return profile_.get(); }
 
   void ToggleTabletMode(bool enabled) {
-    ash::ShellTestApi().SetTabletModeEnabledForTest(enabled);
+    tablet_mode_controller_->SetEnabledForTest(enabled);
   }
 
   void SetUp() override {
-    ChromeAshTestBase::SetUp();
     ui::IMEBridge::Initialize();
     input_method_manager_ = new TestInputMethodManager();
     chromeos::input_method::InputMethodManager::Initialize(
         input_method_manager_);
     profile_ = std::make_unique<TestingProfile>();
 
-    // Create a test widget so that enabling tablet mode does not show app list
-    // whose search box could mess with the tests.
-    widget_ = CreateTestWidget();
+    tablet_mode_controller_ = std::make_unique<FakeTabletMode>();
 
     chrome_keyboard_controller_client_test_helper_ =
-        ChromeKeyboardControllerClientTestHelper::InitializeForAsh();
+        ChromeKeyboardControllerClientTestHelper::InitializeWithFake();
     chrome_keyboard_controller_client_test_helper_->SetProfile(profile_.get());
 
     service_ = ArcInputMethodManagerService::GetForBrowserContextForTesting(
@@ -216,18 +243,20 @@
     test_bridge_ = nullptr;
     service_->Shutdown();
     chrome_keyboard_controller_client_test_helper_.reset();
+    tablet_mode_controller_.reset();
     profile_.reset();
     chromeos::input_method::InputMethodManager::Shutdown();
     ui::IMEBridge::Shutdown();
-    ChromeAshTestBase::TearDown();
   }
 
  private:
+  content::TestBrowserThreadBundle thread_bundle_;
+
   std::unique_ptr<ArcServiceManager> arc_service_manager_;
   std::unique_ptr<TestingProfile> profile_;
   std::unique_ptr<ChromeKeyboardControllerClientTestHelper>
       chrome_keyboard_controller_client_test_helper_;
-  std::unique_ptr<views::Widget> widget_;
+  std::unique_ptr<FakeTabletMode> tablet_mode_controller_;
   TestInputMethodManager* input_method_manager_ = nullptr;
   TestInputMethodManagerBridge* test_bridge_ = nullptr;  // Owned by |service_|
   ArcInputMethodManagerService* service_ = nullptr;
diff --git a/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl.h b/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl.h
index 4f95f5a..fdffcde 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl.h
+++ b/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl.h
@@ -15,7 +15,7 @@
 #include "base/timer/timer.h"
 #include "chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_bridge.h"
 #include "chrome/browser/chromeos/input_method/input_method_engine.h"
-#include "components/arc/common/input_method_manager.mojom.h"
+#include "components/arc/mojom/input_method_manager.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace arc {
diff --git a/chrome/browser/chromeos/arc/input_method_manager/test_input_method_manager_bridge.h b/chrome/browser/chromeos/arc/input_method_manager/test_input_method_manager_bridge.h
index 24a574f..415c238 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/test_input_method_manager_bridge.h
+++ b/chrome/browser/chromeos/arc/input_method_manager/test_input_method_manager_bridge.h
@@ -11,7 +11,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_bridge.h"
-#include "components/arc/common/input_method_manager.mojom.h"
+#include "components/arc/mojom/input_method_manager.mojom.h"
 
 namespace arc {
 
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h
index 0752b7e..455c4245 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h
@@ -8,8 +8,8 @@
 #include <utility>
 #include <vector>
 
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "ui/base/page_transition_types.h"
 
 class GURL;
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
index 85d1355..d304cc9 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.cc
@@ -38,9 +38,9 @@
 #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/backup_settings.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
 #include "components/arc/intent_helper/font_size_util.h"
+#include "components/arc/mojom/backup_settings.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/language/core/browser/pref_names.h"
 #include "components/onc/onc_pref_names.h"
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h
index b4314302..63b9fff 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/chrome/browser/chromeos/arc/intent_helper/custom_tab_session_impl.h b/chrome/browser/chromeos/arc/intent_helper/custom_tab_session_impl.h
index 97901f44..03b338c5 100644
--- a/chrome/browser/chromeos/arc/intent_helper/custom_tab_session_impl.h
+++ b/chrome/browser/chromeos/arc/intent_helper/custom_tab_session_impl.h
@@ -11,7 +11,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/timer/elapsed_timer.h"
 #include "chrome/browser/ui/ash/arc_custom_tab_modal_dialog_host.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace ash {
diff --git a/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.cc b/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.cc
index 519809d..5bc6b8d0 100644
--- a/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.cc
+++ b/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.cc
@@ -17,9 +17,9 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/arc/arc_features.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
 #include "components/arc/metrics/arc_metrics_constants.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/renderer_context_menu/render_view_context_menu_proxy.h"
 #include "content/public/common/context_menu_params.h"
diff --git a/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.h b/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.h
index de8254b..588d229 100644
--- a/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.h
+++ b/chrome/browser/chromeos/arc/intent_helper/start_smart_selection_action_menu.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/renderer_context_menu/render_view_context_menu_observer.h"
 #include "ui/gfx/image/image.h"
 
diff --git a/chrome/browser/chromeos/arc/kiosk/arc_kiosk_bridge.h b/chrome/browser/chromeos/arc/kiosk/arc_kiosk_bridge.h
index 321b00d..a6a83af0 100644
--- a/chrome/browser/chromeos/arc/kiosk/arc_kiosk_bridge.h
+++ b/chrome/browser/chromeos/arc/kiosk/arc_kiosk_bridge.h
@@ -8,7 +8,7 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "components/arc/common/kiosk.mojom.h"
+#include "components/arc/mojom/kiosk.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc
index 58af5e3..89a150e 100644
--- a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc
+++ b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc
@@ -13,7 +13,7 @@
 #include "chromeos/dbus/arc_oemcrypto_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
-#include "components/arc/common/protected_buffer_manager.mojom.h"
+#include "components/arc/mojom/protected_buffer_manager.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h
index 4dcf6de..7ee8c7ae 100644
--- a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h
+++ b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h
@@ -10,8 +10,8 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/arc/common/oemcrypto.mojom.h"
-#include "components/arc/common/oemcrypto_daemon.mojom.h"
+#include "components/arc/mojom/oemcrypto.mojom.h"
+#include "components/arc/mojom/oemcrypto_daemon.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/chrome/browser/chromeos/arc/pip/arc_pip_bridge.h b/chrome/browser/chromeos/arc/pip/arc_pip_bridge.h
index 8913d17..94f5505 100644
--- a/chrome/browser/chromeos/arc/pip/arc_pip_bridge.h
+++ b/chrome/browser/chromeos/arc/pip/arc_pip_bridge.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "components/arc/common/pip.mojom.h"
+#include "components/arc/mojom/pip.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/prefs/pref_change_registrar.h"
diff --git a/chrome/browser/chromeos/arc/policy/arc_policy_bridge.h b/chrome/browser/chromeos/arc/policy/arc_policy_bridge.h
index 6ecdbd5..6f806ea1 100644
--- a/chrome/browser/chromeos/arc/policy/arc_policy_bridge.h
+++ b/chrome/browser/chromeos/arc/policy/arc_policy_bridge.h
@@ -17,7 +17,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/time/time.h"
-#include "components/arc/common/policy.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/policy/core/common/policy_namespace.h"
diff --git a/chrome/browser/chromeos/arc/print/arc_print_service.cc b/chrome/browser/chromeos/arc/print/arc_print_service.cc
index 21904aa2..94f44ca 100644
--- a/chrome/browser/chromeos/arc/print/arc_print_service.cc
+++ b/chrome/browser/chromeos/arc/print/arc_print_service.cc
@@ -30,7 +30,7 @@
 #include "chrome/browser/printing/printer_query.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
-#include "components/arc/common/print_common.mojom.h"
+#include "components/arc/mojom/print_common.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/browser_task_traits.h"
diff --git a/chrome/browser/chromeos/arc/print/arc_print_service.h b/chrome/browser/chromeos/arc/print/arc_print_service.h
index 9aacfacb..7624d06d 100644
--- a/chrome/browser/chromeos/arc/print/arc_print_service.h
+++ b/chrome/browser/chromeos/arc/print/arc_print_service.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_CHROMEOS_ARC_PRINT_ARC_PRINT_SERVICE_H_
 #define CHROME_BROWSER_CHROMEOS_ARC_PRINT_ARC_PRINT_SERVICE_H_
 
-#include "components/arc/common/print.mojom.h"
+#include "components/arc/mojom/print.mojom.h"
 
 namespace content {
 class BrowserContext;
diff --git a/chrome/browser/chromeos/arc/print/print_mojom_traits.h b/chrome/browser/chromeos/arc/print/print_mojom_traits.h
index a228f169..8340573 100644
--- a/chrome/browser/chromeos/arc/print/print_mojom_traits.h
+++ b/chrome/browser/chromeos/arc/print/print_mojom_traits.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "components/arc/common/print_common.mojom.h"
+#include "components/arc/mojom/print_common.mojom.h"
 #include "printing/backend/print_backend.h"
 #include "printing/page_range.h"
 #include "ui/gfx/geometry/size.h"
diff --git a/chrome/browser/chromeos/arc/print_spooler/arc_print_spooler_bridge.h b/chrome/browser/chromeos/arc/print_spooler/arc_print_spooler_bridge.h
index 74a2cced..1ccc05cd 100644
--- a/chrome/browser/chromeos/arc/print_spooler/arc_print_spooler_bridge.h
+++ b/chrome/browser/chromeos/arc/print_spooler/arc_print_spooler_bridge.h
@@ -8,7 +8,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/arc/common/print_spooler.mojom.h"
+#include "components/arc/mojom/print_spooler.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/chrome/browser/chromeos/arc/process/arc_process.h b/chrome/browser/chromeos/arc/process/arc_process.h
index 54dbd0e..978ccc95 100644
--- a/chrome/browser/chromeos/arc/process/arc_process.h
+++ b/chrome/browser/chromeos/arc/process/arc_process.h
@@ -12,7 +12,7 @@
 #include <vector>
 
 #include "base/process/process_handle.h"
-#include "components/arc/common/process.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
 
 namespace arc {
 
diff --git a/chrome/browser/chromeos/arc/process/arc_process_service.h b/chrome/browser/chromeos/arc/process/arc_process_service.h
index f54be5c..35173ff7 100644
--- a/chrome/browser/chromeos/arc/process/arc_process_service.h
+++ b/chrome/browser/chromeos/arc/process/arc_process_service.h
@@ -17,7 +17,7 @@
 #include "base/process/process_iterator.h"
 #include "base/sequenced_task_runner.h"
 #include "chrome/browser/chromeos/arc/process/arc_process.h"
-#include "components/arc/common/process.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "services/resource_coordinator/public/cpp/memory_instrumentation/global_memory_dump.h"
diff --git a/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_bridge.h b/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_bridge.h
index 930a8c16..514ab73 100644
--- a/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_bridge.h
+++ b/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_bridge.h
@@ -11,7 +11,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/media/webrtc/desktop_media_picker.h"
-#include "components/arc/common/screen_capture.mojom.h"
+#include "components/arc/mojom/screen_capture.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/desktop_media_id.h"
 
diff --git a/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_session.h b/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_session.h
index 236e3f53..99c74f7 100644
--- a/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_session.h
+++ b/chrome/browser/chromeos/arc/screen_capture/arc_screen_capture_session.h
@@ -10,7 +10,7 @@
 #include <string>
 
 #include "base/macros.h"
-#include "components/arc/common/screen_capture.mojom.h"
+#include "components/arc/mojom/screen_capture.mojom.h"
 #include "components/viz/common/gl_helper.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "ui/compositor/compositor_animation_observer.h"
diff --git a/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h b/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h
index 1d2e57b..2b86ae6c 100644
--- a/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h
+++ b/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h
@@ -17,7 +17,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/trace_event/trace_event.h"
-#include "components/arc/common/tracing.mojom.h"
+#include "components/arc/mojom/tracing.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "services/tracing/public/cpp/base_agent.h"
diff --git a/chrome/browser/chromeos/arc/tts/arc_tts_service.h b/chrome/browser/chromeos/arc/tts/arc_tts_service.h
index c25efff..27b9e09 100644
--- a/chrome/browser/chromeos/arc/tts/arc_tts_service.h
+++ b/chrome/browser/chromeos/arc/tts/arc_tts_service.h
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "base/macros.h"
-#include "components/arc/common/tts.mojom.h"
+#include "components/arc/mojom/tts.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/chrome/browser/chromeos/arc/user_session/arc_user_session_service.h b/chrome/browser/chromeos/arc/user_session/arc_user_session_service.h
index 068a1e90..11e46cdc 100644
--- a/chrome/browser/chromeos/arc/user_session/arc_user_session_service.h
+++ b/chrome/browser/chromeos/arc/user_session/arc_user_session_service.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_CHROMEOS_ARC_USER_SESSION_ARC_USER_SESSION_SERVICE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/session_manager/core/session_manager_observer.h"
diff --git a/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc b/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc
index e2bdff5..9027a9f0 100644
--- a/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc
+++ b/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc
@@ -17,9 +17,9 @@
 #include "base/task/post_task.h"
 #include "base/threading/thread_checker.h"
 #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
-#include "components/arc/common/video_decode_accelerator.mojom.h"
-#include "components/arc/common/video_encode_accelerator.mojom.h"
-#include "components/arc/common/video_protected_buffer_allocator.mojom.h"
+#include "components/arc/mojom/video_decode_accelerator.mojom.h"
+#include "components/arc/mojom/video_encode_accelerator.mojom.h"
+#include "components/arc/mojom/video_protected_buffer_allocator.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.h b/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.h
index a072555..7a1c25e 100644
--- a/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.h
+++ b/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_CHROMEOS_ARC_VIDEO_GPU_ARC_VIDEO_SERVICE_HOST_H_
 
 #include "base/macros.h"
-#include "components/arc/common/video.mojom.h"
+#include "components/arc/mojom/video.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 
diff --git a/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc b/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc
index 37ae6c0..1623338 100644
--- a/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc
+++ b/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc
@@ -15,7 +15,7 @@
 #include "chrome/browser/chromeos/assistant/assistant_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_util.h"
 #include "components/language/core/browser/pref_names.h"
@@ -49,7 +49,7 @@
   arc::ArcSessionManager::Get()->AddObserver(this);
   g_voice_interaction_controller_client_instance = this;
 
-  if (chromeos::switches::IsAssistantEnabled()) {
+  if (chromeos::features::IsAssistantEnabled()) {
     voice_interaction_state_ = ash::mojom::VoiceInteractionState::NOT_READY;
   }
 }
diff --git a/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h b/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h
index 6f7e950..c515c1da 100644
--- a/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h
+++ b/chrome/browser/chromeos/arc/wallpaper/arc_wallpaper_service.h
@@ -12,7 +12,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/image_decoder.h"
-#include "components/arc/common/wallpaper.mojom.h"
+#include "components/arc/mojom/wallpaper.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/chrome/browser/chromeos/assistant/assistant_util.cc b/chrome/browser/chromeos/assistant/assistant_util.cc
index f036913..ba9b93ec6 100644
--- a/chrome/browser/chromeos/assistant/assistant_util.cc
+++ b/chrome/browser/chromeos/assistant/assistant_util.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
 #include "components/language/core/browser/pref_names.h"
@@ -24,7 +25,7 @@
 
 ash::mojom::AssistantAllowedState IsAssistantAllowedForProfile(
     const Profile* profile) {
-  if (!chromeos::switches::IsAssistantEnabled())
+  if (!chromeos::features::IsAssistantEnabled())
     return ash::mojom::AssistantAllowedState::DISALLOWED_BY_FLAG;
 
   if (!chromeos::ProfileHelper::IsPrimaryProfile(profile))
diff --git a/chrome/browser/chromeos/assistant/assistant_util_unittest.cc b/chrome/browser/chromeos/assistant/assistant_util_unittest.cc
index 0b3e2be..08f2a11 100644
--- a/chrome/browser/chromeos/assistant/assistant_util_unittest.cc
+++ b/chrome/browser/chromeos/assistant/assistant_util_unittest.cc
@@ -16,7 +16,7 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/account_id/account_id.h"
 #include "components/language/core/browser/pref_names.h"
 #include "components/prefs/testing_pref_service.h"
@@ -150,7 +150,7 @@
 
   void SetUp() override {
     command_line_ = std::make_unique<base::test::ScopedCommandLine>();
-    feature_list_.InitAndEnableFeature(chromeos::switches::kAssistantFeature);
+    feature_list_.InitAndEnableFeature(chromeos::features::kAssistantFeature);
 
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
     profile_manager_ = std::make_unique<TestingProfileManager>(
diff --git a/chrome/browser/chromeos/attestation/attestation_ca_client.cc b/chrome/browser/chromeos/attestation/attestation_ca_client.cc
index ab464bc..48ab210 100644
--- a/chrome/browser/chromeos/attestation/attestation_ca_client.cc
+++ b/chrome/browser/chromeos/attestation/attestation_ca_client.cc
@@ -145,9 +145,8 @@
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = GURL(url);
   resource_request->method = "POST";
-  resource_request->load_flags = net::LOAD_DO_NOT_SEND_COOKIES |
-                                 net::LOAD_DO_NOT_SAVE_COOKIES |
-                                 net::LOAD_DISABLE_CACHE;
+  resource_request->load_flags = net::LOAD_DISABLE_CACHE;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
 
   auto url_loader = network::SimpleURLLoader::Create(
       std::move(resource_request), traffic_annotation);
diff --git a/chrome/browser/chromeos/authpolicy/auth_policy_credentials_manager.cc b/chrome/browser/chromeos/authpolicy/auth_policy_credentials_manager.cc
index 066d453..4ddbf80 100644
--- a/chrome/browser/chromeos/authpolicy/auth_policy_credentials_manager.cc
+++ b/chrome/browser/chromeos/authpolicy/auth_policy_credentials_manager.cc
@@ -26,7 +26,7 @@
 #include "chrome/grit/theme_resources.h"
 #include "chromeos/components/account_manager/account_manager.h"
 #include "chromeos/components/account_manager/account_manager_factory.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/dbus/auth_policy/auth_policy_client.h"
 #include "chromeos/network/network_handler.h"
 #include "chromeos/network/network_state.h"
@@ -50,7 +50,7 @@
 // |profile| is a non-owning pointer to |Profile|.
 // |account_id| is the |AccountId| for the Device Account.
 void SetupAccountManager(Profile* profile, const AccountId& account_id) {
-  if (!switches::IsAccountManagerEnabled())
+  if (!features::IsAccountManagerEnabled())
     return;
 
   AccountManagerFactory* factory =
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc
index 7506c06..a1b0fb3 100644
--- a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc
+++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc
@@ -23,7 +23,7 @@
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/system_clock/system_clock_client.h"
 #include "components/account_id/account_id.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/session_manager/core/session_manager.h"
 #include "content/public/test/test_browser_thread_bundle.h"
diff --git a/chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service.cc b/chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service.cc
index 1f4777d8..58d455b 100644
--- a/chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service.cc
+++ b/chrome/browser/chromeos/cryptauth/client_app_metadata_provider_service.cc
@@ -210,7 +210,7 @@
       device_sync::
           kCryptAuthGcmInstanceIdAuthorizedEntity /* authorized_entity */,
       kInstanceIdScope /* scope */,
-      std::map<std::string, std::string>() /* options */, false /* is_lazy */,
+      std::map<std::string, std::string>() /* options */, {} /* flags */,
       base::Bind(&ClientAppMetadataProviderService::OnInstanceIdTokenFetched,
                  weak_ptr_factory_.GetWeakPtr(), bluetooth_adapter,
                  hardware_info, instance_id));
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
index ca7ae99..1b6a100 100644
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
@@ -584,9 +584,19 @@
   pref_change_registrar_->Add(prefs::kUse24HourClock, callback);
   pref_change_registrar_->Add(
       crostini::prefs::kCrostiniEnabled,
-      base::BindRepeating(&EventRouter::OnCrostiniEnabledChanged,
-                          weak_factory_.GetWeakPtr(),
-                          crostini::kCrostiniDefaultVmName));
+      base::BindRepeating(
+          &EventRouter::OnCrostiniChanged, weak_factory_.GetWeakPtr(),
+          crostini::kCrostiniDefaultVmName, crostini::prefs::kCrostiniEnabled,
+          file_manager_private::CROSTINI_EVENT_TYPE_ENABLE,
+          file_manager_private::CROSTINI_EVENT_TYPE_DISABLE));
+  pref_change_registrar_->Add(
+      crostini::prefs::kUserCrostiniRootAccessAllowedByPolicy,
+      base::BindRepeating(
+          &EventRouter::OnCrostiniChanged, weak_factory_.GetWeakPtr(),
+          crostini::kCrostiniDefaultVmName,
+          crostini::prefs::kUserCrostiniRootAccessAllowedByPolicy,
+          file_manager_private::CROSTINI_EVENT_TYPE_ROOT_ACCESS_ALLOW,
+          file_manager_private::CROSTINI_EVENT_TYPE_ROOT_ACCESS_DISALLOW));
   pref_change_registrar_->Add(arc::prefs::kArcEnabled, callback);
   pref_change_registrar_->Add(arc::prefs::kArcHasAccessToRemovableMedia,
                               callback);
@@ -1145,15 +1155,17 @@
   }
 }
 
-void EventRouter::OnCrostiniEnabledChanged(const std::string& vm_name) {
+void EventRouter::OnCrostiniChanged(
+    const std::string& vm_name,
+    const std::string& pref_name,
+    extensions::api::file_manager_private::CrostiniEventType pref_true,
+    extensions::api::file_manager_private::CrostiniEventType pref_false) {
   for (const auto& extension_id : GetEventListenerExtensionIds(
            profile_, file_manager_private::OnCrostiniChanged::kEventName)) {
     file_manager_private::CrostiniEvent event;
     event.vm_name = vm_name;
     event.event_type =
-        profile_->GetPrefs()->GetBoolean(crostini::prefs::kCrostiniEnabled)
-            ? file_manager_private::CROSTINI_EVENT_TYPE_ENABLE
-            : file_manager_private::CROSTINI_EVENT_TYPE_DISABLE;
+        profile_->GetPrefs()->GetBoolean(pref_name) ? pref_true : pref_false;
     DispatchEventToExtension(
         profile_, extension_id,
         extensions::events::FILE_MANAGER_PRIVATE_ON_CROSTINI_CHANGED,
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.h b/chrome/browser/chromeos/extensions/file_manager/event_router.h
index bf42d5c2..cda9c696 100644
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.h
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.h
@@ -209,8 +209,12 @@
       const std::string& file_system_name,
       const std::string& full_path);
 
-  // Called when a VM is enabled/disabled.
-  void OnCrostiniEnabledChanged(const std::string& vm_name);
+  // Called for Crostini events when the specified pref value changes.
+  void OnCrostiniChanged(
+      const std::string& vm_name,
+      const std::string& pref_name,
+      extensions::api::file_manager_private::CrostiniEventType pref_true,
+      extensions::api::file_manager_private::CrostiniEventType pref_false);
 
   base::Time last_copy_progress_event_;
 
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.cc
index 712b09d..1587fea7b 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.cc
@@ -16,8 +16,8 @@
 #include "chrome/browser/ui/views/select_file_dialog_extension.h"
 #include "chrome/common/extensions/api/file_manager_private.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/browser_thread.h"
 #include "net/base/mime_util.h"
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.h b/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.h
index 6bfcf7a..9299d62 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_dialog.h
@@ -11,8 +11,8 @@
 #include <vector>
 
 #include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 
 namespace ui {
 struct SelectedFileInfo;
diff --git a/chrome/browser/chromeos/extensions/info_private_api.cc b/chrome/browser/chromeos/extensions/info_private_api.cc
index b0c214f..9cc5f69 100644
--- a/chrome/browser/chromeos/extensions/info_private_api.cc
+++ b/chrome/browser/chromeos/extensions/info_private_api.cc
@@ -25,7 +25,7 @@
 #include "chrome/browser/chromeos/system/timezone_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/devicetype.h"
 #include "chromeos/network/device_state.h"
 #include "chromeos/network/network_handler.h"
@@ -390,7 +390,7 @@
 
   if (property_name == kPropertyAssistantStatus) {
     return std::make_unique<base::Value>(
-        chromeos::switches::IsAssistantEnabled() ? kAssistantStatusSupported
+        chromeos::features::IsAssistantEnabled() ? kAssistantStatusSupported
                                                  : kAssistantStatusUnsupported);
   }
 
diff --git a/chrome/browser/chromeos/extensions/info_private_apitest.cc b/chrome/browser/chromeos/extensions/info_private_apitest.cc
index 8125bb0..0b3ccd9 100644
--- a/chrome/browser/chromeos/extensions/info_private_apitest.cc
+++ b/chrome/browser/chromeos/extensions/info_private_apitest.cc
@@ -15,7 +15,7 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/settings/cros_settings_names.h"
 #include "chromeos/tpm/stub_install_attributes.h"
 #include "components/arc/arc_util.h"
@@ -143,7 +143,7 @@
 IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, AssistantSupported) {
   // Enable native Assistant.
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(chromeos::switches::kAssistantFeature);
+  feature_list.InitAndEnableFeature(chromeos::features::kAssistantFeature);
 
   ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
                                         "assistant supported"))
@@ -153,7 +153,7 @@
 IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, AssistantUnsupported) {
   // Disable native Assistant.
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndDisableFeature(chromeos::switches::kAssistantFeature);
+  feature_list.InitAndDisableFeature(chromeos::features::kAssistantFeature);
 
   ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
                                         "assistant unsupported"))
diff --git a/chrome/browser/chromeos/file_manager/arc_file_tasks.cc b/chrome/browser/chromeos/file_manager/arc_file_tasks.cc
index d85d9775..9a23338 100644
--- a/chrome/browser/chromeos/file_manager/arc_file_tasks.cc
+++ b/chrome/browser/chromeos/file_manager/arc_file_tasks.cc
@@ -24,11 +24,11 @@
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/common/extensions/api/file_manager_private.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/file_system.mojom.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
 #include "components/arc/intent_helper/intent_constants.h"
 #include "components/arc/metrics/arc_metrics_constants.h"
+#include "components/arc/mojom/file_system.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/entry_info.h"
diff --git a/chrome/browser/chromeos/file_manager/documents_provider_root_manager.cc b/chrome/browser/chromeos/file_manager/documents_provider_root_manager.cc
index 7378712c1..1152431 100644
--- a/chrome/browser/chromeos/file_manager/documents_provider_root_manager.cc
+++ b/chrome/browser/chromeos/file_manager/documents_provider_root_manager.cc
@@ -17,7 +17,7 @@
 #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/arc/arc_features.h"
-#include "components/arc/common/bitmap.mojom.h"
+#include "components/arc/mojom/bitmap.mojom.h"
 #include "content/public/browser/browser_thread.h"
 #include "ui/gfx/codec/png_codec.h"
 #include "ui/gfx/image/image_skia_operations.h"
diff --git a/chrome/browser/chromeos/file_manager/documents_provider_root_manager.h b/chrome/browser/chromeos/file_manager/documents_provider_root_manager.h
index 0adf2f6..5861494d 100644
--- a/chrome/browser/chromeos/file_manager/documents_provider_root_manager.h
+++ b/chrome/browser/chromeos/file_manager/documents_provider_root_manager.h
@@ -13,7 +13,7 @@
 #include "base/observer_list.h"
 #include "base/optional.h"
 #include "chrome/browser/chromeos/arc/fileapi/arc_file_system_bridge.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/chromeos/fileapi/recent_arc_media_source.cc b/chrome/browser/chromeos/fileapi/recent_arc_media_source.cc
index c7cf972..8614822 100644
--- a/chrome/browser/chromeos/fileapi/recent_arc_media_source.cc
+++ b/chrome/browser/chromeos/fileapi/recent_arc_media_source.cc
@@ -22,7 +22,7 @@
 #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h"
 #include "chrome/browser/chromeos/fileapi/recent_file.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "content/public/browser/browser_thread.h"
 #include "storage/browser/fileapi/external_mount_points.h"
 
diff --git a/chrome/browser/chromeos/fileapi/recent_arc_media_source_unittest.cc b/chrome/browser/chromeos/fileapi/recent_arc_media_source_unittest.cc
index 8f5bca10..ea0bf35 100644
--- a/chrome/browser/chromeos/fileapi/recent_arc_media_source_unittest.cc
+++ b/chrome/browser/chromeos/fileapi/recent_arc_media_source_unittest.cc
@@ -17,7 +17,7 @@
 #include "chrome/browser/chromeos/fileapi/recent_source.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_file_system_instance.h"
diff --git a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
index 45b5bbf..6e3e856 100644
--- a/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
+++ b/chrome/browser/chromeos/login/oobe_interactive_ui_test.cc
@@ -38,6 +38,7 @@
 #include "chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h"
 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
 #include "chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/dbus/update_engine_client.h"
 #include "chromeos/system/fake_statistics_provider.h"
@@ -377,7 +378,7 @@
               << params_.ToString();
 
     if (params_.arc_state != ArcState::kNotAvailable)
-      feature_list_.InitAndEnableFeature(switches::kAssistantFeature);
+      feature_list_.InitAndEnableFeature(features::kAssistantFeature);
   }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc
index 0f57b1b4..88e9812 100644
--- a/chrome/browser/chromeos/login/reset_browsertest.cc
+++ b/chrome/browser/chromeos/login/reset_browsertest.cc
@@ -329,13 +329,15 @@
   EXPECT_EQ(0, update_engine_client_->rollback_call_count());
 }
 
-IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, PRE_ViewsLogic) {
+// See http://crbug.com/990362 for details.
+IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, DISABLED_PRE_ViewsLogic) {
   PrefService* prefs = g_browser_process->local_state();
   prefs->SetBoolean(prefs::kFactoryResetRequested, true);
   update_engine_client_->set_can_rollback_check_result(false);
 }
 
-IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, ViewsLogic) {
+// See http://crbug.com/990362 for details.
+IN_PROC_BROWSER_TEST_F(ResetFirstAfterBootTest, DISABLED_ViewsLogic) {
   PrefService* prefs = g_browser_process->local_state();
 
   // Rollback unavailable. Show and cancel.
diff --git a/chrome/browser/chromeos/login/saml/in_session_password_change_manager_unittest.cc b/chrome/browser/chromeos/login/saml/in_session_password_change_manager_unittest.cc
index b4c4c8ca..96ff96bc 100644
--- a/chrome/browser/chromeos/login/saml/in_session_password_change_manager_unittest.cc
+++ b/chrome/browser/chromeos/login/saml/in_session_password_change_manager_unittest.cc
@@ -96,7 +96,7 @@
 
   content::TestBrowserThreadBundle test_environment_{
       base::test::ScopedTaskEnvironment::MainThreadType::UI,
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   TestingProfileManager profile_manager_{TestingBrowserProcess::GetGlobal()};
   TestingProfile* profile_;
 
diff --git a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
index de850a2..2f84ad0 100644
--- a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
+++ b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h"
 #include "chromeos/assistant/buildflags.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 
 namespace chromeos {
 namespace {
@@ -45,7 +45,7 @@
   }
 
 #if BUILDFLAG(ENABLE_CROS_ASSISTANT)
-  if (chromeos::switches::IsAssistantEnabled() &&
+  if (chromeos::features::IsAssistantEnabled() &&
       ::assistant::IsAssistantAllowedForProfile(
           ProfileManager::GetActiveUserProfile()) ==
           ash::mojom::AssistantAllowedState::ALLOWED) {
diff --git a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen_browsertest.cc
index 2f9a7305..9d05478 100644
--- a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen_browsertest.cc
@@ -27,6 +27,7 @@
 #include "chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h"
 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
 #include "chrome/common/chrome_paths.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
 #include "chromeos/services/assistant/public/features.h"
@@ -336,7 +337,7 @@
   ~AssistantOptInFlowTest() override = default;
 
   virtual void InitializeFeatureList() {
-    feature_list_.InitAndEnableFeature(switches::kAssistantFeature);
+    feature_list_.InitAndEnableFeature(features::kAssistantFeature);
   }
 
   void SetUp() override {
@@ -505,7 +506,7 @@
   ~AssistantOptInFlowTestWithDisabledAssistant() override = default;
 
   void InitializeFeatureList() override {
-    feature_list_.InitAndDisableFeature(switches::kAssistantFeature);
+    feature_list_.InitAndDisableFeature(features::kAssistantFeature);
   }
 };
 
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc
index cf66964e..9593fdd 100644
--- a/chrome/browser/chromeos/login/session/user_session_manager.cc
+++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -1173,7 +1173,7 @@
   base::FilePath profile_path =
       ProfileHelper::GetProfilePathByUserIdHash(user_context_.GetUserIDHash());
 
-  if (switches::IsAccountManagerEnabled() &&
+  if (features::IsAccountManagerEnabled() &&
       ProfileHelper::IsRegularProfilePath(profile_path)) {
     chromeos::InitializeAccountManager(
         profile_path,
@@ -1347,7 +1347,7 @@
     }
 
     bool should_use_legacy_flow = false;
-    if (!switches::IsAccountManagerEnabled()) {
+    if (!features::IsAccountManagerEnabled()) {
       // Always use the legacy flow if Account Manager has not been enabled yet.
       should_use_legacy_flow = true;
     } else if (!identity_manager
diff --git a/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc b/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc
index d95d0a9..4b77080 100644
--- a/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc
+++ b/chrome/browser/chromeos/login/signin/oauth2_login_manager.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/signin/account_id_from_account_info.h"
 #include "chrome/browser/signin/chrome_device_id_helper.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_switches.h"
 #include "components/signin/public/base/signin_metrics.h"
 #include "components/signin/public/identity_manager/accounts_mutator.h"
@@ -164,7 +165,7 @@
   const CoreAccountInfo primary_account_info =
       identity_manager->GetPrimaryAccountInfo();
 
-  if (switches::IsAccountManagerEnabled()) {
+  if (features::IsAccountManagerEnabled()) {
     // If Account Manager is enabled, we already have the refresh token at this
     // point, and will not get any additional callbacks from Account Manager or
     // Identity Manager about refresh tokens. Manually call
diff --git a/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc b/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc
index aaf53eac..c89cf61 100644
--- a/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc
+++ b/chrome/browser/chromeos/login/sync_consent_interactive_ui_test.cc
@@ -21,7 +21,7 @@
 #include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h"
 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
 #include "chrome/grit/generated_resources.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/test_utils.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -267,7 +267,7 @@
   SyncConsentPolicyDisabledTest() {
     // Assistant feature contains an OOBE page which is irrelevant for this
     // test.
-    feature_list_.InitAndDisableFeature(switches::kAssistantFeature);
+    feature_list_.InitAndDisableFeature(features::kAssistantFeature);
   }
   ~SyncConsentPolicyDisabledTest() = default;
 
diff --git a/chrome/browser/chromeos/login/users/multi_profile_user_controller_unittest.cc b/chrome/browser/chromeos/login/users/multi_profile_user_controller_unittest.cc
index 2e20692..88d2b87 100644
--- a/chrome/browser/chromeos/login/users/multi_profile_user_controller_unittest.cc
+++ b/chrome/browser/chromeos/login/users/multi_profile_user_controller_unittest.cc
@@ -430,9 +430,7 @@
   net::CertificateList certificates;
   certificates.push_back(
       net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"));
-  service->OnPolicyProvidedCertsChanged(
-      certificates /* all_server_and_authority_certs */,
-      certificates /* trust_anchors */);
+  service->SetPolicyTrustAnchorsForTesting(/*trust_anchors=*/certificates);
   EXPECT_TRUE(service->has_policy_certificates());
   EXPECT_FALSE(controller()->IsUserAllowedInSession(
       test_users_[1].GetUserEmail(), &reason));
diff --git a/chrome/browser/chromeos/note_taking_helper.h b/chrome/browser/chromeos/note_taking_helper.h
index e1e93fa..16ea231 100644
--- a/chrome/browser/chromeos/note_taking_helper.h
+++ b/chrome/browser/chromeos/note_taking_helper.h
@@ -15,8 +15,8 @@
 #include "base/observer_list.h"
 #include "base/scoped_observer.h"
 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_observer.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_observer.h"
diff --git a/chrome/browser/chromeos/note_taking_helper_unittest.cc b/chrome/browser/chromeos/note_taking_helper_unittest.cc
index 960a44e..3fb317d 100644
--- a/chrome/browser/chromeos/note_taking_helper_unittest.cc
+++ b/chrome/browser/chromeos/note_taking_helper_unittest.cc
@@ -32,8 +32,8 @@
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_intent_helper_instance.h"
diff --git a/chrome/browser/chromeos/policy/app_install_event_log_collector.h b/chrome/browser/chromeos/policy/app_install_event_log_collector.h
index f2f00d6..cbe7d6cc9 100644
--- a/chrome/browser/chromeos/policy/app_install_event_log_collector.h
+++ b/chrome/browser/chromeos/policy/app_install_event_log_collector.h
@@ -17,7 +17,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
 #include "chromeos/dbus/power/power_manager_client.h"
-#include "components/arc/common/policy.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
 #include "services/network/public/cpp/network_connection_tracker.h"
 
 class Profile;
diff --git a/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc b/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc
index df13fdd..9ed3295 100644
--- a/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc
+++ b/chrome/browser/chromeos/policy/app_install_event_log_collector_unittest.cc
@@ -22,7 +22,7 @@
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/shill/shill_service_client.h"
 #include "chromeos/network/network_handler.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/testing_pref_service.h"
diff --git a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
index 038279f..05499da 100644
--- a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
+++ b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
@@ -2361,9 +2361,7 @@
     explicit CertsObserver(base::OnceClosure on_change)
         : on_change_(std::move(on_change)) {}
 
-    void OnPolicyProvidedCertsChanged(
-        const net::CertificateList& all_server_and_authority_certs,
-        const net::CertificateList& trust_anchors) override {
+    void OnPolicyProvidedCertsChanged() override {
       std::move(on_change_).Run();
     }
 
diff --git a/chrome/browser/chromeos/policy/network_configuration_updater.cc b/chrome/browser/chromeos/policy/network_configuration_updater.cc
index 177d614..6b09eec0 100644
--- a/chrome/browser/chromeos/policy/network_configuration_updater.cc
+++ b/chrome/browser/chromeos/policy/network_configuration_updater.cc
@@ -276,14 +276,8 @@
 }
 
 void NetworkConfigurationUpdater::NotifyPolicyProvidedCertsChanged() {
-  net::CertificateList all_server_and_authority_certs =
-      GetAllServerAndAuthorityCertificates();
-  net::CertificateList trust_anchors = GetWebTrustedCertificates();
-
-  for (auto& observer : observer_list_) {
-    observer.OnPolicyProvidedCertsChanged(all_server_and_authority_certs,
-                                          trust_anchors);
-  }
+  for (auto& observer : observer_list_)
+    observer.OnPolicyProvidedCertsChanged();
 }
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc b/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc
index 4e4f520..ee27c6ee 100644
--- a/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc
+++ b/chrome/browser/chromeos/policy/network_configuration_updater_unittest.cc
@@ -83,22 +83,15 @@
   DISALLOW_COPY_AND_ASSIGN(FakeUser);
 };
 
-class FakePolicyProvidedCertsObserver
+class MockPolicyProvidedCertsObserver
     : public chromeos::PolicyCertificateProvider::Observer {
  public:
-  FakePolicyProvidedCertsObserver() {}
+  MockPolicyProvidedCertsObserver() = default;
 
-  void OnPolicyProvidedCertsChanged(
-      const net::CertificateList& all_server_and_authority_certs,
-      const net::CertificateList& trust_anchors) override {
-    all_server_and_authority_certs_ = all_server_and_authority_certs;
-    trust_anchors_ = trust_anchors;
-  }
-  net::CertificateList all_server_and_authority_certs_;
-  net::CertificateList trust_anchors_;
+  MOCK_METHOD0(OnPolicyProvidedCertsChanged, void());
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(FakePolicyProvidedCertsObserver);
+  DISALLOW_COPY_AND_ASSIGN(MockPolicyProvidedCertsObserver);
 };
 
 class FakeNetworkDeviceHandler : public chromeos::FakeNetworkDeviceHandler {
@@ -532,9 +525,8 @@
           false /* do not allow trusted certs from policy */,
           false /* set certificate importer */);
 
-  // Certificates with the "Web" trust flag set should not be forwarded to
-  // observers.
-  FakePolicyProvidedCertsObserver observer;
+  MockPolicyProvidedCertsObserver observer;
+  EXPECT_CALL(observer, OnPolicyProvidedCertsChanged());
   updater->AddPolicyProvidedCertsObserver(&observer);
 
   PolicyMap policy;
@@ -549,7 +541,7 @@
   EXPECT_EQ(2u, updater->GetCertificatesWithoutWebTrust().size());
   EXPECT_EQ(2u, updater->GetAllServerAndAuthorityCertificates().size());
 
-  EXPECT_TRUE(observer.trust_anchors_.empty());
+  Mock::VerifyAndClearExpectations(&observer);
   updater->RemovePolicyProvidedCertsObserver(&observer);
 }
 
@@ -564,9 +556,8 @@
           true /* allow trusted certs from policy */,
           false /* set certificate importer */);
 
-  // Certificates with the "Web" trust flag set should be forwarded to
-  // observers.
-  FakePolicyProvidedCertsObserver observer;
+  MockPolicyProvidedCertsObserver observer;
+  EXPECT_CALL(observer, OnPolicyProvidedCertsChanged());
   updater->AddPolicyProvidedCertsObserver(&observer);
 
   PolicyMap policy;
@@ -582,12 +573,11 @@
   EXPECT_EQ(1u, updater->GetCertificatesWithoutWebTrust().size());
   EXPECT_EQ(2u, updater->GetAllServerAndAuthorityCertificates().size());
 
-  EXPECT_EQ(1u, observer.trust_anchors_.size());
   updater->RemovePolicyProvidedCertsObserver(&observer);
 }
 
 TEST_F(NetworkConfigurationUpdaterTest,
-       AllowTrustedCertificatesFromPolicyOnUpdate) {
+       WebTrustedCertificatesFromPolicyOnUpdate) {
   // Ignore network configuration changes.
   EXPECT_CALL(network_config_handler_, SetPolicy(_, _, _, _))
       .Times(AnyNumber());
@@ -597,7 +587,8 @@
       CreateNetworkConfigurationUpdaterForUserPolicy(
           true /* allow trusted certs from policy */,
           false /* set certificate importer */);
-  FakePolicyProvidedCertsObserver observer;
+  MockPolicyProvidedCertsObserver observer;
+  EXPECT_CALL(observer, OnPolicyProvidedCertsChanged()).Times(0);
   updater->AddPolicyProvidedCertsObserver(&observer);
 
   MarkPolicyProviderInitialized();
@@ -605,10 +596,13 @@
 
   // Verify that the returned certificate list is empty.
   EXPECT_TRUE(updater->GetWebTrustedCertificates().empty());
-  EXPECT_TRUE(observer.trust_anchors_.empty());
   EXPECT_TRUE(updater->GetCertificatesWithoutWebTrust().empty());
   EXPECT_TRUE(updater->GetAllServerAndAuthorityCertificates().empty());
 
+  // No call has been made to the policy-provided certificates observer.
+  Mock::VerifyAndClearExpectations(&observer);
+  EXPECT_CALL(observer, OnPolicyProvidedCertsChanged());
+
   // Change to ONC policy with web trust certs.
   PolicyMap policy;
   policy.Set(key::kOpenNetworkConfiguration, POLICY_LEVEL_MANDATORY,
@@ -617,10 +611,7 @@
   UpdateProviderPolicy(policy);
   base::RunLoop().RunUntilIdle();
 
-  // Certificates with the "Web" trust flag set will be returned and forwarded
-  // to observers.
   EXPECT_EQ(1u, updater->GetWebTrustedCertificates().size());
-  EXPECT_EQ(1u, observer.trust_anchors_.size());
   EXPECT_EQ(1u, updater->GetCertificatesWithoutWebTrust().size());
   EXPECT_EQ(2u, updater->GetAllServerAndAuthorityCertificates().size());
 
diff --git a/chrome/browser/chromeos/policy/policy_cert_service.cc b/chrome/browser/chromeos/policy/policy_cert_service.cc
index 5330c81..a1336fe 100644
--- a/chrome/browser/chromeos/policy/policy_cert_service.cc
+++ b/chrome/browser/chromeos/policy/policy_cert_service.cc
@@ -45,29 +45,21 @@
       weak_ptr_factory_(this) {}
 
 void PolicyCertService::StartObservingPolicyCerts() {
-  // Don't notify the network service since it will get the initial list of
-  // trust anchors in NetworkContextParams::initial_trust_anchors.
-  StartObservingPolicyCertsInternal(false /* notify */);
-}
-
-void PolicyCertService::OnPolicyProvidedCertsChanged(
-    const net::CertificateList& all_server_and_authority_certs,
-    const net::CertificateList& trust_anchors) {
-  OnPolicyProvidedCertsChangedInternal(all_server_and_authority_certs,
-                                       trust_anchors, true /* notify */);
-}
-
-void PolicyCertService::StartObservingPolicyCertsInternal(bool notify) {
   net_conf_updater_->AddPolicyProvidedCertsObserver(this);
 
-  // Set the current list of policy-provided server and authority certificates,
-  // and the current list of trust anchors.
-  net::CertificateList all_server_and_authority_certs =
-      net_conf_updater_->GetAllServerAndAuthorityCertificates();
-  net::CertificateList trust_anchors =
-      net_conf_updater_->GetWebTrustedCertificates();
-  OnPolicyProvidedCertsChangedInternal(all_server_and_authority_certs,
-                                       trust_anchors, notify);
+  // Retrieve the initial list of policy-provided server and authority
+  // certificates, and the initial list of trust anchors. Don't notify the
+  // network service since it will get the initial list of trust anchors in
+  // NetworkContextParams::initial_trust_anchors.
+  OnPolicyProvidedCertsChangedInternal(
+      net_conf_updater_->GetAllServerAndAuthorityCertificates(),
+      net_conf_updater_->GetWebTrustedCertificates(), false /* notify */);
+}
+
+void PolicyCertService::OnPolicyProvidedCertsChanged() {
+  OnPolicyProvidedCertsChangedInternal(
+      net_conf_updater_->GetAllServerAndAuthorityCertificates(),
+      net_conf_updater_->GetWebTrustedCertificates(), true /* notify */);
 }
 
 void PolicyCertService::OnPolicyProvidedCertsChangedInternal(
@@ -116,9 +108,8 @@
   weak_ptr_factory_.InvalidateWeakPtrs();
   if (net_conf_updater_)
     net_conf_updater_->RemovePolicyProvidedCertsObserver(this);
-  OnPolicyProvidedCertsChanged(
-      net::CertificateList() /* all_server_and_authority_certs */,
-      net::CertificateList() /* trust_anchors */);
+  OnPolicyProvidedCertsChangedInternal(
+      net::CertificateList(), net::CertificateList(), true /* notify */);
   net_conf_updater_ = NULL;
 }
 
@@ -129,4 +120,15 @@
   return base::WrapUnique(new PolicyCertService(user_id, user_manager));
 }
 
+void PolicyCertService::SetPolicyTrustAnchorsForTesting(
+    const net::CertificateList& trust_anchors) {
+  // Only allow this call in an instance that has been created through
+  // PolicyCertService::CreateForTesting.
+  CHECK_EQ(nullptr, profile_);
+  CHECK_EQ(nullptr, net_conf_updater_);
+
+  all_server_and_authority_certs_ = trust_anchors;
+  trust_anchors_ = trust_anchors;
+}
+
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/policy_cert_service.h b/chrome/browser/chromeos/policy/policy_cert_service.h
index 14a20a0..1d7842e 100644
--- a/chrome/browser/chromeos/policy/policy_cert_service.h
+++ b/chrome/browser/chromeos/policy/policy_cert_service.h
@@ -64,10 +64,8 @@
   }
   const net::CertificateList& trust_anchors() const { return trust_anchors_; }
 
-  // UserNetworkConfigurationUpdater::PolicyProvidedCertsObserver:
-  void OnPolicyProvidedCertsChanged(
-      const net::CertificateList& all_server_and_authority_certs,
-      const net::CertificateList& trust_anchors) override;
+  // PolicyCertificateProvider::Observer:
+  void OnPolicyProvidedCertsChanged() override;
 
   // KeyedService:
   void Shutdown() override;
@@ -76,11 +74,16 @@
       const std::string& user_id,
       user_manager::UserManager* user_manager);
 
+  // Sets the profile-wide policy-provided trust anchors reported by this
+  // PolicyCertService. This is only callable for instances created through
+  // CreateForTesting.
+  void SetPolicyTrustAnchorsForTesting(
+      const net::CertificateList& trust_anchors);
+
  private:
   PolicyCertService(const std::string& user_id,
                     user_manager::UserManager* user_manager);
 
-  void StartObservingPolicyCertsInternal(bool notify);
   void OnPolicyProvidedCertsChangedInternal(
       const net::CertificateList& all_server_and_authority_certs,
       const net::CertificateList& trust_anchors,
diff --git a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc
index 26661a8..cbf6a4c1 100644
--- a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc
+++ b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc
@@ -242,8 +242,7 @@
 
   auto ice_request = std::make_unique<network::ResourceRequest>();
   ice_request->url = GURL(kICEConfigURL);
-  ice_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  ice_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
 
   ice_request->headers.SetHeader(net::HttpRequestHeaders::kAuthorization,
                                  "Bearer " + oauth_token);
diff --git a/chrome/browser/chromeos/policy/remote_commands/user_command_arc_job.cc b/chrome/browser/chromeos/policy/remote_commands/user_command_arc_job.cc
index f67493a..9373595 100644
--- a/chrome/browser/chromeos/policy/remote_commands/user_command_arc_job.cc
+++ b/chrome/browser/chromeos/policy/remote_commands/user_command_arc_job.cc
@@ -15,7 +15,7 @@
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/arc/policy/arc_policy_bridge.h"
 #include "chrome/browser/profiles/profile.h"
-#include "components/arc/common/policy.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 
 namespace policy {
diff --git a/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc b/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc
index f3d30bb..e79401cb 100644
--- a/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc
+++ b/chrome/browser/chromeos/policy/site_isolation_flag_handling_browsertest.cc
@@ -321,6 +321,12 @@
 }
 
 IN_PROC_BROWSER_TEST_P(SiteIsolationFlagHandlingTest, FlagHandlingTest) {
+  // Skip tests where expected_request_restart is true.
+  // See crbug.com/990817 for more details.
+  if (GetParam().expected_request_restart) {
+    return;
+  }
+
   // Start user sign-in. We can't use |LoginPolicyTestBase::LogIn|, because
   // it waits for a user session start unconditionally, which will not happen if
   // chrome requests a restart to set user-session flags.
diff --git a/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc b/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc
index 2ac3539..a6ea925 100644
--- a/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc
+++ b/chrome/browser/chromeos/policy/status_collector/child_status_collector.cc
@@ -46,7 +46,7 @@
 #include "chromeos/settings/timezone_settings.h"
 #include "chromeos/system/statistics_provider.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/enterprise_reporting.mojom.h"
+#include "components/arc/mojom/enterprise_reporting.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
diff --git a/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc b/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc
index 0e0b48d..ed45477 100644
--- a/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc
+++ b/chrome/browser/chromeos/policy/status_collector/device_status_collector.cc
@@ -74,7 +74,7 @@
 #include "chromeos/settings/timezone_settings.h"
 #include "chromeos/system/statistics_provider.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/enterprise_reporting.mojom.h"
+#include "components/arc/mojom/enterprise_reporting.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "components/policy/core/common/cloud/cloud_policy_util.h"
diff --git a/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc b/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc
index c2cfac4..129c5832 100644
--- a/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc
+++ b/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc
@@ -94,11 +94,7 @@
   WebTrustedCertsChangedObserver() = default;
 
   // chromeos::PolicyCertificateProvider::Observer
-  void OnPolicyProvidedCertsChanged(
-      const net::CertificateList& all_server_and_authority_certs,
-      const net::CertificateList& trust_anchors) override {
-    run_loop_.Quit();
-  }
+  void OnPolicyProvidedCertsChanged() override { run_loop_.Quit(); }
 
   void Wait() { run_loop_.Run(); }
 
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
index cac8585..ac42085 100644
--- a/chrome/browser/chromeos/preferences.cc
+++ b/chrome/browser/chromeos/preferences.cc
@@ -573,6 +573,8 @@
 
   registry->RegisterBooleanPref(prefs::kStartupBrowserWindowLaunchSuppressed,
                                 false);
+
+  registry->RegisterBooleanPref(prefs::kSettingsShowBrowserBanner, true);
 }
 
 void Preferences::InitUserPrefs(sync_preferences::PrefServiceSyncable* prefs) {
diff --git a/chrome/browser/chromeos/printing/OWNERS b/chrome/browser/chromeos/printing/OWNERS
index 30b660c..24e01ad 100644
--- a/chrome/browser/chromeos/printing/OWNERS
+++ b/chrome/browser/chromeos/printing/OWNERS
@@ -1,4 +1,4 @@
 file://chromeos/printing/OWNERS
 
-#TEAM: cros-printing-dev@chromium.org
-#COMPONENT: Internals>Printing>CUPS
+# TEAM: cros-printing-dev@chromium.org
+# COMPONENT: Internals>Printing>CUPS
diff --git a/chrome/browser/content_index/content_index_provider_impl.cc b/chrome/browser/content_index/content_index_provider_impl.cc
index aad3de5..5b0e5fc 100644
--- a/chrome/browser/content_index/content_index_provider_impl.cc
+++ b/chrome/browser/content_index/content_index_provider_impl.cc
@@ -321,18 +321,19 @@
     return;
   }
 
-  storage_partition->GetContentIndexContext()->GetIcon(
+  storage_partition->GetContentIndexContext()->GetIcons(
       components.service_worker_registration_id, components.description_id,
-      base::BindOnce(&ContentIndexProviderImpl::DidGetIcon,
+      base::BindOnce(&ContentIndexProviderImpl::DidGetIcons,
                      weak_ptr_factory_.GetWeakPtr(), id, std::move(callback)));
 }
 
-void ContentIndexProviderImpl::DidGetIcon(const ContentId& id,
-                                          VisualsCallback callback,
-                                          SkBitmap icon) {
+void ContentIndexProviderImpl::DidGetIcons(const ContentId& id,
+                                           VisualsCallback callback,
+                                           std::vector<SkBitmap> icons) {
   auto visuals =
       std::make_unique<offline_items_collection::OfflineItemVisuals>();
-  visuals->icon = gfx::Image::CreateFrom1xBitmap(icon);
+  if (!icons.empty())
+    visuals->icon = gfx::Image::CreateFrom1xBitmap(std::move(icons.front()));
   std::move(callback).Run(id, std::move(visuals));
 }
 
diff --git a/chrome/browser/content_index/content_index_provider_impl.h b/chrome/browser/content_index/content_index_provider_impl.h
index d060d2c..572e98a 100644
--- a/chrome/browser/content_index/content_index_provider_impl.h
+++ b/chrome/browser/content_index/content_index_provider_impl.h
@@ -64,9 +64,9 @@
  private:
   friend class ContentIndexProviderImplTest;
 
-  void DidGetIcon(const offline_items_collection::ContentId& id,
-                  VisualsCallback callback,
-                  SkBitmap icon);
+  void DidGetIcons(const offline_items_collection::ContentId& id,
+                   VisualsCallback callback,
+                   std::vector<SkBitmap> icons);
   void DidGetEntryToOpen(base::Optional<content::ContentIndexEntry> entry);
 
   Profile* profile_;
diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.cc b/chrome/browser/custom_handlers/protocol_handler_registry.cc
index 34273ed..62646ec 100644
--- a/chrome/browser/custom_handlers/protocol_handler_registry.cc
+++ b/chrome/browser/custom_handlers/protocol_handler_registry.cc
@@ -15,7 +15,6 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/stl_util.h"
-#include "base/task/post_task.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile_io_data.h"
 #include "chrome/common/custom_handlers/protocol_handler.h"
@@ -23,10 +22,7 @@
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
 #include "components/user_prefs/user_prefs.h"
-#include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/child_process_security_policy.h"
-#include "net/base/network_delegate.h"
-#include "net/url_request/url_request_redirect_job.h"
 
 using content::BrowserThread;
 using content::ChildProcessSecurityPolicy;
@@ -75,64 +71,6 @@
 
 }  // namespace
 
-// IOThreadDelegate ------------------------------------------------------------
-
-ProtocolHandlerRegistry::IOThreadDelegate::IOThreadDelegate(bool)
-    : enabled_(true) {}
-ProtocolHandlerRegistry::IOThreadDelegate::~IOThreadDelegate() {}
-
-bool ProtocolHandlerRegistry::IOThreadDelegate::IsHandledProtocol(
-    const std::string& scheme) const {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  return enabled_ && !LookupHandler(default_handlers_, scheme).IsEmpty();
-}
-
-void ProtocolHandlerRegistry::IOThreadDelegate::ClearDefault(
-    const std::string& scheme) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  default_handlers_.erase(scheme);
-}
-
-void ProtocolHandlerRegistry::IOThreadDelegate::SetDefault(
-    const ProtocolHandler& handler) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  ClearDefault(handler.protocol());
-  default_handlers_.insert(std::make_pair(handler.protocol(), handler));
-}
-
-GURL ProtocolHandlerRegistry::IOThreadDelegate::Translate(
-    const GURL& url) const {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  return TranslateUrl(default_handlers_, url);
-}
-
-// Create a new job for the supplied |URLRequest| if a default handler
-// is registered and the associated handler is able to interpret
-// the url from |request|.
-net::URLRequestJob* ProtocolHandlerRegistry::IOThreadDelegate::MaybeCreateJob(
-    net::URLRequest* request, net::NetworkDelegate* network_delegate) const {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
-  GURL translated_url(Translate(request->url()));
-  if (translated_url.is_empty())
-    return nullptr;
-
-  return new net::URLRequestRedirectJob(
-      request, network_delegate, translated_url,
-      net::URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT,
-      "Protocol Handler Registry");
-}
-
-void ProtocolHandlerRegistry::IOThreadDelegate::Enable() {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  enabled_ = true;
-}
-
-void ProtocolHandlerRegistry::IOThreadDelegate::Disable() {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  enabled_ = false;
-}
-
 // Delegate --------------------------------------------------------------------
 
 ProtocolHandlerRegistry::Delegate::~Delegate() {}
@@ -187,8 +125,7 @@
       delegate_(delegate),
       enabled_(true),
       is_loading_(false),
-      is_loaded_(false),
-      io_thread_delegate_(new IOThreadDelegate(enabled_)) {}
+      is_loaded_(false) {}
 
 bool ProtocolHandlerRegistry::SilentlyHandleRegisterHandlerRequest(
     const ProtocolHandler& handler) {
@@ -267,9 +204,6 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   default_handlers_.erase(scheme);
-  base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO},
-                           base::BindOnce(&IOThreadDelegate::ClearDefault,
-                                          io_thread_delegate_, scheme));
   Save();
   NotifyChanged();
 }
@@ -529,11 +463,6 @@
       // NOTE We pass a copy because SetDefault() modifies handlers.
       SetDefault(ProtocolHandler(handlers[0]));
     } else {
-      base::PostTaskWithTraits(
-          FROM_HERE, {BrowserThread::IO},
-          base::BindOnce(&IOThreadDelegate::ClearDefault, io_thread_delegate_,
-                         q->second.protocol()));
-
       default_handlers_.erase(q);
     }
   }
@@ -570,10 +499,6 @@
     return;
   }
   enabled_ = true;
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::IO},
-      base::BindOnce(&IOThreadDelegate::Enable, io_thread_delegate_));
-
   ProtocolHandlerMap::const_iterator p;
   for (p = default_handlers_.begin(); p != default_handlers_.end(); ++p) {
     delegate_->RegisterExternalHandler(p->first);
@@ -588,9 +513,6 @@
     return;
   }
   enabled_ = false;
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::IO},
-      base::BindOnce(&IOThreadDelegate::Disable, io_thread_delegate_));
 
   ProtocolHandlerMap::const_iterator p;
   for (p = default_handlers_.begin(); p != default_handlers_.end(); ++p) {
@@ -678,9 +600,6 @@
   default_handlers_.erase(handler.protocol());
   default_handlers_.insert(std::make_pair(handler.protocol(), handler));
   PromoteHandler(handler);
-  base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO},
-                           base::BindOnce(&IOThreadDelegate::SetDefault,
-                                          io_thread_delegate_, handler));
 }
 
 void ProtocolHandlerRegistry::InsertHandler(const ProtocolHandler& handler) {
diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.h b/chrome/browser/custom_handlers/protocol_handler_registry.h
index 443488f..b73dbceb5 100644
--- a/chrome/browser/custom_handlers/protocol_handler_registry.h
+++ b/chrome/browser/custom_handlers/protocol_handler_registry.h
@@ -20,9 +20,6 @@
 #include "chrome/common/custom_handlers/protocol_handler.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/browser_thread.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_job.h"
-#include "net/url_request/url_request_job_factory.h"
 
 namespace user_prefs {
 class PrefRegistrySyncable;
@@ -65,59 +62,6 @@
     virtual void OnProtocolHandlerRegistryChanged() = 0;
   };
 
-  // IOThreadDelegate is an IO thread specific object. Access to the class
-  // should all be done via the IO thread. The registry living on the UI thread
-  // makes a best effort to update the IO object after local updates are
-  // completed.
-  class IOThreadDelegate : public base::RefCountedThreadSafe<IOThreadDelegate> {
-   public:
-    // Creates a new instance. If |enabled| is true the registry is considered
-    // enabled on the IO thread.
-    explicit IOThreadDelegate(bool enabled);
-
-    // Returns true if the protocol has a default protocol handler.
-    // Should be called only from the IO thread.
-    bool IsHandledProtocol(const std::string& scheme) const;
-
-    // Clears the default for the provided protocol.
-    // Should be called only from the IO thread.
-    void ClearDefault(const std::string& scheme);
-
-    // Makes this ProtocolHandler the default handler for its protocol.
-    // Should be called only from the IO thread.
-    void SetDefault(const ProtocolHandler& handler);
-
-    // Returns a translated URL if |url| is handled by a protocol handler,
-    // otherwise it returns an empty URL.
-    GURL Translate(const GURL& url) const;
-
-    // Creates a URL request job for the given request if there is a matching
-    // protocol handler, returns NULL otherwise.
-    net::URLRequestJob* MaybeCreateJob(
-        net::URLRequest* request,
-        net::NetworkDelegate* network_delegate) const;
-
-    // Indicate that the registry has been enabled in the IO thread's
-    // copy of the data.
-    void Enable();
-
-    // Indicate that the registry has been disabled in the IO thread's copy of
-    // the data.
-    void Disable();
-
-   private:
-    friend class base::RefCountedThreadSafe<IOThreadDelegate>;
-    virtual ~IOThreadDelegate();
-
-    // Copy of protocol handlers use only on the IO thread.
-    ProtocolHandlerRegistry::ProtocolHandlerMap default_handlers_;
-
-    // Is the registry enabled on the IO thread.
-    bool enabled_;
-
-    DISALLOW_COPY_AND_ASSIGN(IOThreadDelegate);
-  };
-
   // Creates a new instance. Assumes ownership of |delegate|.
   ProtocolHandlerRegistry(content::BrowserContext* context, Delegate* delegate);
   ~ProtocolHandlerRegistry() override;
@@ -245,10 +189,6 @@
 
   bool enabled() const { return enabled_; }
 
-  scoped_refptr<IOThreadDelegate> io_thread_delegate() {
-    return io_thread_delegate_;
-  }
-
   // Add a predefined protocol handler. This has to be called before the first
   // load command was issued, otherwise the command will be ignored.
   void AddPredefinedHandler(const ProtocolHandler& handler);
@@ -396,10 +336,6 @@
   // AddPredefinedHandler will be rejected.
   bool is_loaded_;
 
-  // Copy of registry data for use on the IO thread. Changes to the registry
-  // are posted to the IO thread where updates are applied to this object.
-  scoped_refptr<IOThreadDelegate> io_thread_delegate_;
-
   base::ObserverList<Observer> observers_;
 
   // Makes it possible to invalidate the callback for the
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc
index 68604a6..46f81c3e 100644
--- a/chrome/browser/devtools/devtools_sanity_browsertest.cc
+++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -43,7 +43,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
-#include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
@@ -787,21 +786,22 @@
       DevToolsWindowTesting::Get(windows[2])->main_web_contents());
   // Try to close second devtools.
   {
+    content::WindowedNotificationObserver cancel_browser(
+        chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
+        content::NotificationService::AllSources());
     chrome::CloseWindow(DevToolsWindowTesting::Get(windows[1])->browser());
     CancelModalDialog();
-    base::RunLoop().RunUntilIdle();
-    // The second devtools hasn't closed.
-    EXPECT_EQ(windows[1],
-              DevToolsWindow::GetInstanceForInspectedWebContents(
-                  DevToolsWindowTesting::Get(windows[0])->main_web_contents()));
+    cancel_browser.Wait();
   }
   // Try to close browser window.
   {
+    content::WindowedNotificationObserver cancel_browser(
+        chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
+        content::NotificationService::AllSources());
     chrome::CloseWindow(browser());
     AcceptModalDialog();
     CancelModalDialog();
-    base::RunLoop().RunUntilIdle();
-    EXPECT_EQ(browser(), BrowserList::GetInstance()->get(0));
+    cancel_browser.Wait();
   }
   // Try to exit application.
   {
diff --git a/chrome/browser/download/download_ui_model.cc b/chrome/browser/download/download_ui_model.cc
index f774bf26..01851cf4 100644
--- a/chrome/browser/download/download_ui_model.cc
+++ b/chrome/browser/download/download_ui_model.cc
@@ -9,6 +9,7 @@
 #include "base/time/time.h"
 #include "chrome/browser/download/offline_item_utils.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/download/public/common/download_danger_type.h"
@@ -277,8 +278,10 @@
     case download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT: {
       bool request_ap_verdicts = false;
 #if BUILDFLAG(FULL_SAFE_BROWSING)
-      request_ap_verdicts = safe_browsing::AdvancedProtectionStatusManager::
-          RequestsAdvancedProtectionVerdicts(profile());
+      request_ap_verdicts =
+          safe_browsing::AdvancedProtectionStatusManagerFactory::GetForProfile(
+              profile())
+              ->RequestsAdvancedProtectionVerdicts();
 #endif
       return l10n_util::GetStringFUTF16(
           request_ap_verdicts
diff --git a/chrome/browser/download/notification/download_item_notification.cc b/chrome/browser/download/notification/download_item_notification.cc
index 9c50946..451c0094 100644
--- a/chrome/browser/download/notification/download_item_notification.cc
+++ b/chrome/browser/download/notification/download_item_notification.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/notifications/notification_display_service_factory.h"
 #include "chrome/browser/notifications/notification_handler.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/chromium_strings.h"
@@ -711,8 +712,9 @@
     }
     case download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT: {
       bool requests_ap_verdicts =
-          safe_browsing::AdvancedProtectionStatusManager::
-              RequestsAdvancedProtectionVerdicts(profile());
+          safe_browsing::AdvancedProtectionStatusManagerFactory::GetForProfile(
+              profile())
+              ->RequestsAdvancedProtectionVerdicts();
       return l10n_util::GetStringFUTF16(
           requests_ap_verdicts
               ? IDS_PROMPT_UNCOMMON_DOWNLOAD_CONTENT_IN_ADVANCED_PROTECTION
diff --git a/chrome/browser/enterprise_reporting/report_scheduler_unittest.cc b/chrome/browser/enterprise_reporting/report_scheduler_unittest.cc
index 1f01d088..eaa13c76 100644
--- a/chrome/browser/enterprise_reporting/report_scheduler_unittest.cc
+++ b/chrome/browser/enterprise_reporting/report_scheduler_unittest.cc
@@ -104,7 +104,7 @@
  public:
   ReportSchedulerTest()
       : scoped_task_environment_(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         local_state_(TestingBrowserProcess::GetGlobal()) {}
   ~ReportSchedulerTest() override = default;
   void SetUp() override {
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn
index c9e1491..9699236 100644
--- a/chrome/browser/extensions/BUILD.gn
+++ b/chrome/browser/extensions/BUILD.gn
@@ -422,8 +422,6 @@
     "blacklist_factory.h",
     "blacklist_state_fetcher.cc",
     "blacklist_state_fetcher.h",
-    "bookmark_app_extension_util.cc",
-    "bookmark_app_extension_util.h",
     "browser_context_keyed_service_factories.cc",
     "browser_context_keyed_service_factories.h",
     "browser_extension_window_controller.cc",
diff --git a/chrome/browser/extensions/OWNERS b/chrome/browser/extensions/OWNERS
index 0d40771..f73de85 100644
--- a/chrome/browser/extensions/OWNERS
+++ b/chrome/browser/extensions/OWNERS
@@ -3,11 +3,6 @@
 per-file *networking*=stevenjb@chromium.org
 per-file *networking*=tbarzic@chromium.org
 
-per-file bookmark_app_*=calamity@chromium.org
-per-file bookmark_app_*=dominickn@chromium.org
-per-file bookmark_app_*=mgiuca@chromium.org
-per-file bookmark_app_*=ortuno@chromium.org
-
 per-file extension_gcm_app_handler*=file://chrome/browser/extensions/api/gcm/OWNERS
 
 # For adding/renaming files for Chrome OS apps APIs.
diff --git a/chrome/browser/extensions/api/instance_id/instance_id_api.cc b/chrome/browser/extensions/api/instance_id/instance_id_api.cc
index 1f6eb29..15ab8552 100644
--- a/chrome/browser/extensions/api/instance_id/instance_id_api.cc
+++ b/chrome/browser/extensions/api/instance_id/instance_id_api.cc
@@ -132,7 +132,7 @@
   GetInstanceID()->GetToken(
       params->get_token_params.authorized_entity,
       params->get_token_params.scope, options,
-      /*is_lazy=*/false,
+      /*flags=*/{},
       base::Bind(&InstanceIDGetTokenFunction::GetTokenCompleted, this));
 
   return RespondLater();
diff --git a/chrome/browser/extensions/api/management/management_apitest.cc b/chrome/browser/extensions/api/management/management_apitest.cc
index 7d76485f..807f141 100644
--- a/chrome/browser/extensions/api/management/management_apitest.cc
+++ b/chrome/browser/extensions/api/management/management_apitest.cc
@@ -158,26 +158,22 @@
   ~InstallReplacementWebAppApiTest() override = default;
 
  protected:
+  static const char kManifest[];
+  static const char kAppManifest[];
+
   void SetUpOnMainThread() override {
     ExtensionManagementApiTest::SetUpOnMainThread();
     https_test_server_.ServeFilesFromDirectory(test_data_dir_);
     ASSERT_TRUE(https_test_server_.Start());
   }
 
-  void RunTest(const char* web_app_path,
+  void RunTest(const char* manifest,
+               const char* web_app_path,
                const char* background_script,
                bool from_webstore) {
-    static constexpr char kManifest[] =
-        R"({
-            "name": "Management API Test",
-            "version": "0.1",
-            "manifest_version": 2,
-            "background": { "scripts": ["background.js"] },
-            "replacement_web_app": "%s"
-          })";
     extensions::TestExtensionDir extension_dir;
     extension_dir.WriteManifest(base::StringPrintf(
-        kManifest, https_test_server_.GetURL(web_app_path).spec().c_str()));
+        manifest, https_test_server_.GetURL(web_app_path).spec().c_str()));
     extension_dir.WriteFile(FILE_PATH_LITERAL("background.js"),
                             background_script);
     extensions::ResultCatcher catcher;
@@ -196,6 +192,26 @@
   net::EmbeddedTestServer https_test_server_;
 };
 
+const char InstallReplacementWebAppApiTest::kManifest[] =
+    R"({
+          "name": "Management API Test",
+          "version": "0.1",
+          "manifest_version": 2,
+          "background": { "scripts": ["background.js"] },
+          "replacement_web_app": "%s"
+        })";
+
+const char InstallReplacementWebAppApiTest::kAppManifest[] =
+    R"({
+          "name": "Management API Test",
+          "version": "0.1",
+          "manifest_version": 2,
+          "app": {
+            "background": { "scripts": ["background.js"] }
+          },
+          "replacement_web_app": "%s"
+        })";
+
 IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWebstore) {
   static constexpr char kBackground[] = R"(
   chrome.management.installReplacementWebApp(function() {
@@ -204,7 +220,8 @@
     chrome.test.notifyPass();
   });)";
 
-  RunTest("/management/install_replacement_web_app/good_web_app/index.html",
+  RunTest(kManifest,
+          "/management/install_replacement_web_app/good_web_app/index.html",
           kBackground, false /* from_webstore */);
 }
 
@@ -216,7 +233,8 @@
     chrome.test.notifyPass();
   });)";
 
-  RunTest("/management/install_replacement_web_app/good_web_app/index.html",
+  RunTest(kManifest,
+          "/management/install_replacement_web_app/good_web_app/index.html",
           kBackground, true /* from_webstore */);
 }
 
@@ -230,7 +248,8 @@
            });
          });)";
 
-  RunTest("/management/install_replacement_web_app/bad_web_app/index.html",
+  RunTest(kManifest,
+          "/management/install_replacement_web_app/bad_web_app/index.html",
           kBackground, true /* from_webstore */);
 }
 
@@ -265,7 +284,44 @@
       web_app::WebAppProviderBase::GetProviderBase(browser()->profile());
   EXPECT_FALSE(provider->registrar().IsInstalled(good_web_app_url));
 
-  RunTest(kGoodWebAppURL, kBackground, true /* from_webstore */);
+  RunTest(kManifest, kGoodWebAppURL, kBackground, true /* from_webstore */);
+  EXPECT_TRUE(provider->registrar().IsInstalled(good_web_app_url));
+  chrome::SetAutoAcceptPWAInstallConfirmationForTesting(false);
+}
+
+IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest,
+                       InstallableWebAppInPlatformApp) {
+  static constexpr char kBackground[] =
+      R"(chrome.test.runTests([
+           function runInstall() {
+             chrome.test.runWithUserGesture(function() {
+               chrome.management.installReplacementWebApp(function() {
+                 chrome.test.assertNoLastError();
+                 chrome.test.succeed();
+               });
+             });
+           },
+           function runInstallWhenAlreadyInstalled() {
+             chrome.test.runWithUserGesture(function() {
+               chrome.management.installReplacementWebApp(function() {
+                 chrome.test.assertLastError(
+                     'Web app is already installed.');
+                 chrome.test.succeed();
+               });
+             });
+           }
+         ]);)";
+  static constexpr char kGoodWebAppURL[] =
+      "/management/install_replacement_web_app/good_web_app/index.html";
+
+  chrome::SetAutoAcceptPWAInstallConfirmationForTesting(true);
+  const GURL good_web_app_url = https_test_server_.GetURL(kGoodWebAppURL);
+
+  auto* provider =
+      web_app::WebAppProviderBase::GetProviderBase(browser()->profile());
+  EXPECT_FALSE(provider->registrar().IsInstalled(good_web_app_url));
+
+  RunTest(kAppManifest, kGoodWebAppURL, kBackground, true /* from_webstore */);
   EXPECT_TRUE(provider->registrar().IsInstalled(good_web_app_url));
   chrome::SetAutoAcceptPWAInstallConfirmationForTesting(false);
 }
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
index 6ac4a7e..158b881 100644
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -473,6 +473,8 @@
       settings_api::PrefType::PREF_TYPE_BOOLEAN;
   (*s_whitelist)[ash::prefs::kLockScreenMediaKeysEnabled] =
       settings_api::PrefType::PREF_TYPE_BOOLEAN;
+  (*s_whitelist)[::prefs::kSettingsShowBrowserBanner] =
+      settings_api::PrefType::PREF_TYPE_BOOLEAN;
 
   // Bluetooth & Internet settings.
   (*s_whitelist)[chromeos::kAllowBluetooth] =
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index c63a132..6d021ad5 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -1799,7 +1799,7 @@
   // Observe the WebContents' lifetime and navigations.
   Observe(contents);
   // Wait until the language is determined.
-  chrome_translate_client->translate_driver().AddObserver(this);
+  chrome_translate_client->translate_driver()->AddObserver(this);
   is_observing_ = true;
 
   return RespondLater();
@@ -1829,7 +1829,7 @@
   if (is_observing_) {
     ChromeTranslateClient::FromWebContents(web_contents())
         ->translate_driver()
-        .RemoveObserver(this);
+        ->RemoveObserver(this);
     Observe(nullptr);
   }
 
diff --git a/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc b/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc
index 8123b0c..0a076f31 100644
--- a/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc
@@ -27,6 +27,14 @@
 void SetLockedFullscreenState(Browser* browser, bool locked) {
   UMA_HISTOGRAM_BOOLEAN("Extensions.LockedFullscreenStateRequest", locked);
 
+  // Disable ChromeVox before entering locked fullscreen.  Quickfix for
+  // crbug.com/957950.
+  auto* const accessibility_manager = chromeos::AccessibilityManager::Get();
+  if (locked && accessibility_manager &&
+      accessibility_manager->IsSpokenFeedbackEnabled()) {
+    accessibility_manager->EnableSpokenFeedback(false);
+  }
+
   aura::Window* window = browser->window()->GetNativeWindow();
   // TRUSTED_PINNED is used here because that one locks the window fullscreen
   // without allowing the user to exit (as opposed to regular PINNED).
diff --git a/chrome/browser/extensions/bookmark_app_extension_util.cc b/chrome/browser/extensions/bookmark_app_extension_util.cc
deleted file mode 100644
index e90dc3b3..0000000
--- a/chrome/browser/extensions/bookmark_app_extension_util.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/bookmark_app_extension_util.h"
-
-#include "build/build_config.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h"
-#include "chrome/common/chrome_features.h"
-#include "chrome/common/chrome_switches.h"
-
-#if defined(OS_MACOSX)
-#include "chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.h"
-#endif
-
-namespace extensions {
-
-bool CanBookmarkAppRevealAppShim() {
-#if defined(OS_MACOSX)
-  return true;
-#else   // defined(OS_MACOSX)
-  return false;
-#endif  // !defined(OS_MACOSX)
-}
-
-void BookmarkAppRevealAppShim(Profile* profile, const Extension* extension) {
-  DCHECK(CanBookmarkAppRevealAppShim());
-#if defined(OS_MACOSX)
-  if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
-          ::switches::kDisableHostedAppShimCreation)) {
-    Profile* current_profile = profile->GetOriginalProfile();
-    web_app::RevealAppShimInFinderForApp(current_profile, extension);
-  }
-#endif  // defined(OS_MACOSX)
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/extensions/bookmark_app_extension_util.h b/chrome/browser/extensions/bookmark_app_extension_util.h
deleted file mode 100644
index 843bb98..0000000
--- a/chrome/browser/extensions/bookmark_app_extension_util.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_EXTENSIONS_BOOKMARK_APP_EXTENSION_UTIL_H_
-#define CHROME_BROWSER_EXTENSIONS_BOOKMARK_APP_EXTENSION_UTIL_H_
-
-class Profile;
-
-namespace extensions {
-
-class Extension;
-
-bool CanBookmarkAppRevealAppShim();
-void BookmarkAppRevealAppShim(Profile* profile, const Extension* extension);
-
-}  // namespace extensions
-
-#endif  // CHROME_BROWSER_EXTENSIONS_BOOKMARK_APP_EXTENSION_UTIL_H_
diff --git a/chrome/browser/extensions/content_script_apitest.cc b/chrome/browser/extensions/content_script_apitest.cc
index a0686ab..13ee519 100644
--- a/chrome/browser/extensions/content_script_apitest.cc
+++ b/chrome/browser/extensions/content_script_apitest.cc
@@ -32,6 +32,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
+#include "content/public/common/content_features.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "content/public/test/test_utils.h"
@@ -498,7 +499,21 @@
 
 IN_PROC_BROWSER_TEST_F(ContentScriptApiTest, ContentScriptBypassPageCSP) {
   ASSERT_TRUE(StartEmbeddedTestServer());
-  ASSERT_TRUE(RunExtensionTest("content_scripts/bypass_page_csp")) << message_;
+  extensions::ResultCatcher catcher;
+  ASSERT_TRUE(RunExtensionTest("content_scripts/bypass_page_csp"))
+      << catcher.message();
+  EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
+}
+
+IN_PROC_BROWSER_TEST_F(ContentScriptApiTest,
+                       ContentScriptBypassPageTrustedTypes) {
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeature(features::kTrustedDOMTypes);
+  ASSERT_TRUE(StartEmbeddedTestServer());
+  extensions::ResultCatcher catcher;
+  ASSERT_TRUE(RunExtensionTest("content_scripts/bypass_page_trusted_types"))
+      << catcher.message();
+  EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
 }
 
 // Test that when injecting a blocking content script, other scripts don't run
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc
index 1170374..07d40ff4 100644
--- a/chrome/browser/extensions/updater/extension_updater_unittest.cc
+++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc
@@ -136,10 +136,7 @@
 
 const char kAuthUserQueryKey[] = "authuser";
 
-int kExpectedLoadFlags =
-    net::LOAD_DO_NOT_SEND_COOKIES |
-    net::LOAD_DO_NOT_SAVE_COOKIES |
-    net::LOAD_DISABLE_CACHE;
+int kExpectedLoadFlags = net::LOAD_DISABLE_CACHE;
 
 int kExpectedLoadFlagsForDownloadWithCookies = net::LOAD_DISABLE_CACHE;
 
@@ -1255,6 +1252,8 @@
     helper.test_url_loader_factory().SetInterceptor(base::BindLambdaForTesting(
         [&](const network::ResourceRequest& request) {
           EXPECT_TRUE(request.load_flags == kExpectedLoadFlags);
+          EXPECT_EQ(network::mojom::CredentialsMode::kOmit,
+                    request.credentials_mode);
         }));
     for (int i = 0; i <= ExtensionDownloader::kMaxRetries; ++i) {
       // All fetches will fail.
diff --git a/chrome/browser/favicon/favicon_utils.cc b/chrome/browser/favicon/favicon_utils.cc
index 81a9cc3c0..19b5793 100644
--- a/chrome/browser/favicon/favicon_utils.cc
+++ b/chrome/browser/favicon/favicon_utils.cc
@@ -96,7 +96,7 @@
 gfx::Image GetDefaultFavicon() {
   const ui::NativeTheme* native_theme =
       ui::NativeTheme::GetInstanceForNativeUi();
-  bool is_dark = native_theme && native_theme->SystemDarkModeEnabled();
+  bool is_dark = native_theme && native_theme->ShouldUseDarkColors();
   int resource_id = is_dark ? IDR_DEFAULT_FAVICON_DARK : IDR_DEFAULT_FAVICON;
   return ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
       resource_id);
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 88b4cc1..675e71c 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -119,7 +119,7 @@
   },
   {
     "name": "arc-boot-completed-broadcast",
-    "owners": [ "//components/arc/common/ARC_SECURITY_OWNERS" ],
+    "owners": [ "//components/arc/mojom/ARC_SECURITY_OWNERS" ],
     "expiry_milestone": 76
   },
   {
@@ -2611,16 +2611,6 @@
     "expiry_milestone": 76
   },
   {
-    "name": "omnibox-ui-vertical-margin",
-    "owners": [ "tommycli", "chrome-omnibox-team@google.com" ],
-    "expiry_milestone": 76
-  },
-  {
-    "name": "omnibox-ui-vertical-margin-limit-to-non-touch-only",
-    "owners": [ "tommycli", "chrome-omnibox-team@google.com" ],
-    "expiry_milestone": 76
-  },
-  {
     "name": "omnibox-wrap-popup-position",
     "owners": [ "krb", "chrome-omnibox-team@google.com" ],
     "expiry_milestone": 78
@@ -2733,6 +2723,11 @@
     "expiry_milestone": 80
   },
   {
+    "name": "prefetch-redirect-error",
+    "owners": [ "dom", "yhirano" ],
+    "expiry_milestone": 83
+  },
+  {
     "name": "postscript-printing",
     "owners": [ "//printing/OWNERS" ],
     "expiry_milestone": 76
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 9e4ca3f..9e5fbb7 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1410,16 +1410,6 @@
     "In the omnibox dropdown, shows titles before URLs when both are "
     "available.";
 
-const char kOmniboxUIVerticalMarginName[] = "Omnibox UI Vertical Margin";
-const char kOmniboxUIVerticalMarginDescription[] =
-    "Changes the vertical margin in the Omnibox UI.";
-
-const char kOmniboxUIVerticalMarginLimitToNonTouchOnlyName[] =
-    "Omnibox UI Vertical Margin - Limit to Non-Touch Only";
-const char kOmniboxUIVerticalMarginLimitToNonTouchOnlyDescription[] =
-    "Limits the vertical margin UI experiment to non-touch devices only. Has "
-    "no effect if the Omnibox Vertical Margin experiment is not enabled.";
-
 const char kOmniboxZeroSuggestionsOnNTPName[] =
     "Omnibox Zero Suggestions on New Tab Page";
 const char kOmniboxZeroSuggestionsOnNTPDescription[] =
@@ -1609,6 +1599,12 @@
     "Uses the resource load scheduler in blink to throttle resource load "
     "requests.";
 
+const char kPrefetchRedirectErrorName[] =
+    "Prefetch requests use \"error\" redirect mode";
+const char kPrefetchRedirectErrorDescription[] =
+    "Prefetch requests will not follow redirect responses, and instead be "
+    "logged as errors. Redirect responses are still stored in the cache.";
+
 const char kSafeBrowsingUseAPDownloadVerdictsName[] =
     "Request Advanced Protection verdicts when inspecting downloads";
 const char kSafeBrowsingUseAPDownloadVerdictsDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 7031feb..1304df5 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -851,12 +851,6 @@
 extern const char kOmniboxUISwapTitleAndUrlName[];
 extern const char kOmniboxUISwapTitleAndUrlDescription[];
 
-extern const char kOmniboxUIVerticalMarginName[];
-extern const char kOmniboxUIVerticalMarginDescription[];
-
-extern const char kOmniboxUIVerticalMarginLimitToNonTouchOnlyName[];
-extern const char kOmniboxUIVerticalMarginLimitToNonTouchOnlyDescription[];
-
 extern const char kOmniboxZeroSuggestionsOnNTPName[];
 extern const char kOmniboxZeroSuggestionsOnNTPDescription[];
 
@@ -964,6 +958,9 @@
 extern const char kResourceLoadSchedulerName[];
 extern const char kResourceLoadSchedulerDescription[];
 
+extern const char kPrefetchRedirectErrorName[];
+extern const char kPrefetchRedirectErrorDescription[];
+
 extern const char kSafeBrowsingUseAPDownloadVerdictsName[];
 extern const char kSafeBrowsingUseAPDownloadVerdictsDescription[];
 
diff --git a/chrome/browser/global_keyboard_shortcuts_mac_browsertest.mm b/chrome/browser/global_keyboard_shortcuts_mac_browsertest.mm
index ba3f1c1..b917cd9 100644
--- a/chrome/browser/global_keyboard_shortcuts_mac_browsertest.mm
+++ b/chrome/browser/global_keyboard_shortcuts_mac_browsertest.mm
@@ -230,10 +230,10 @@
   // this code can't modify it.
   NSMenu* main_menu = [NSApp mainMenu];
   ASSERT_NE(nil, main_menu);
-  NSMenuItem* tab_menu = [main_menu itemWithTitle:@"Tab"];
-  ASSERT_NE(nil, tab_menu);
-  ASSERT_TRUE(tab_menu.hasSubmenu);
-  NSMenuItem* next_item = [tab_menu.submenu itemWithTag:IDC_SELECT_NEXT_TAB];
+  NSMenuItem* window_menu = [main_menu itemWithTitle:@"Window"];
+  ASSERT_NE(nil, window_menu);
+  ASSERT_TRUE(window_menu.hasSubmenu);
+  NSMenuItem* next_item = [window_menu.submenu itemWithTag:IDC_SELECT_NEXT_TAB];
   ASSERT_NE(nil, next_item);
   [next_item setKeyEquivalent:@"2"];
   [next_item setKeyEquivalentModifierMask:NSCommandKeyMask];
diff --git a/chrome/browser/history/history_tab_helper_unittest.cc b/chrome/browser/history/history_tab_helper_unittest.cc
index 0c69d7e..9ea005b9 100644
--- a/chrome/browser/history/history_tab_helper_unittest.cc
+++ b/chrome/browser/history/history_tab_helper_unittest.cc
@@ -81,7 +81,6 @@
   content::NavigationEntry* entry =
       web_contents()->GetController().GetLastCommittedEntry();
   ASSERT_NE(nullptr, entry);
-  ASSERT_TRUE(web_contents()->IsLoading());
 
   web_contents()->UpdateTitleForEntry(entry, base::UTF8ToUTF16("title1"));
   EXPECT_EQ("title1", QueryPageTitleFromHistory(page_url_));
@@ -93,7 +92,6 @@
   content::NavigationEntry* entry =
       web_contents()->GetController().GetLastCommittedEntry();
   ASSERT_NE(nullptr, entry);
-  ASSERT_TRUE(web_contents()->IsLoading());
 
   // The first 10 title updates are accepted and update history, as per
   // history::kMaxTitleChanges.
diff --git a/chrome/browser/language/translate_frame_binder.cc b/chrome/browser/language/translate_frame_binder.cc
index b32ff94..6ca4e0e 100644
--- a/chrome/browser/language/translate_frame_binder.cc
+++ b/chrome/browser/language/translate_frame_binder.cc
@@ -28,7 +28,7 @@
   if (!translate_client)
     return;
 
-  translate_client->translate_driver().AddBinding(std::move(request));
+  translate_client->translate_driver()->AddBinding(std::move(request));
 }
 
 }  // namespace language
diff --git a/chrome/browser/lifetime/browser_close_manager_browsertest.cc b/chrome/browser/lifetime/browser_close_manager_browsertest.cc
index c9243da6..813fb304 100644
--- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc
+++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc
@@ -77,14 +77,12 @@
 // trying to close it, to avoid flakiness. https://crbug.com/519646
 void AcceptClose() {
   GetNextDialog()->AcceptAppModalDialog();
-  base::RunLoop().RunUntilIdle();
 }
 
 // Note: call |PrepareForDialog| on the relevant WebContents or Browser before
 // trying to close it, to avoid flakiness. https://crbug.com/519646
 void CancelClose() {
   GetNextDialog()->CancelAppModalDialog();
-  base::RunLoop().RunUntilIdle();
 }
 
 class RepeatedNotificationObserver : public content::NotificationObserver {
@@ -306,7 +304,7 @@
   }
 
   void WaitForAllBrowsersToClose() {
-    while (!BrowserList::GetInstance()->empty())
+    for (size_t i = 0U; i < browsers_.size(); ++i)
       ui_test_utils::WaitForBrowserToClose();
   }
 
@@ -318,13 +316,16 @@
       browser(), embedded_test_server()->GetURL("/beforeunload.html")));
   PrepareForDialog(browser());
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browser()->tab_strip_model()->count());
 
   chrome::CloseAllBrowsersAndQuit();
-  GetNextDialog()->AcceptAppModalDialog();
+  ASSERT_NO_FATAL_FAILURE(AcceptClose());
   ui_test_utils::WaitForBrowserToClose();
   EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
   EXPECT_TRUE(BrowserList::GetInstance()->empty());
@@ -336,15 +337,18 @@
       browser(), embedded_test_server()->GetURL("/beforeunload.html")));
   PrepareForDialog(browser());
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
   chrome::CloseAllBrowsersAndQuit();
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browser()->tab_strip_model()->count());
 
   chrome::CloseAllBrowsersAndQuit();
   chrome::CloseAllBrowsersAndQuit();
-  GetNextDialog()->AcceptAppModalDialog();
+  ASSERT_NO_FATAL_FAILURE(AcceptClose());
   ui_test_utils::WaitForBrowserToClose();
   EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
   EXPECT_TRUE(BrowserList::GetInstance()->empty());
@@ -358,8 +362,11 @@
       ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)));
   PrepareForDialog(browser());
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
 
   browser()->tab_strip_model()
@@ -409,8 +416,11 @@
 
   // Cancel shutdown on the first beforeunload event.
   {
+    RepeatedNotificationObserver cancel_observer(
+        chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
     chrome::CloseAllBrowsersAndQuit();
     ASSERT_NO_FATAL_FAILURE(CancelClose());
+    cancel_observer.Wait();
   }
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
@@ -418,9 +428,12 @@
 
   // Cancel shutdown on the second beforeunload event.
   {
+    RepeatedNotificationObserver cancel_observer(
+        chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
     chrome::CloseAllBrowsersAndQuit();
     ASSERT_NO_FATAL_FAILURE(AcceptClose());
     ASSERT_NO_FATAL_FAILURE(CancelClose());
+    cancel_observer.Wait();
   }
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
@@ -452,14 +465,17 @@
   // the dialog is guaranteed to show.
   PrepareForDialog(browsers_[0]->tab_strip_model()->GetWebContentsAt(1));
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   // All tabs should still be open.
   EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count());
 
   chrome::CloseAllBrowsersAndQuit();
-  GetNextDialog()->AcceptAppModalDialog();
+  ASSERT_NO_FATAL_FAILURE(AcceptClose());
   ui_test_utils::WaitForBrowserToClose();
   EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
   EXPECT_TRUE(BrowserList::GetInstance()->empty());
@@ -482,8 +498,11 @@
   // the dialog is guaranteed to show.
   PrepareForDialog(browsers_[1]);
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   // All windows should still be open.
   EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
@@ -527,8 +546,11 @@
   PrepareForDialog(
       browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex));
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
 
   // All tabs should still be open.
@@ -536,7 +558,7 @@
 
   // Quit, this time accepting close confirmation dialog.
   chrome::CloseAllBrowsersAndQuit();
-  GetNextDialog()->AcceptAppModalDialog();
+  ASSERT_NO_FATAL_FAILURE(AcceptClose());
   ui_test_utils::WaitForBrowserToClose();
   EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
   EXPECT_TRUE(BrowserList::GetInstance()->empty());
@@ -557,7 +579,7 @@
 IN_PROC_BROWSER_TEST_F(BrowserCloseManagerBrowserTest,
                        MAYBE_TestBeforeUnloadMultipleSlowWindows) {
   const int kBrowserCount = 5;
-  const int kResponsiveBrowserIndex = 2;
+  const int kResposiveBrowserIndex = 2;
   // Create multiple browsers with all tabs except one responding after
   // RenderViewHostImpl::kUnloadTimeoutMS .
   // Minimum configuration is just one browser with slow tab and then
@@ -569,16 +591,19 @@
       browsers_.push_back(CreateBrowser(browser()->profile()));
     ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
         browsers_[i],
-        embedded_test_server()->GetURL((i == kResponsiveBrowserIndex)
+        embedded_test_server()->GetURL((i == kResposiveBrowserIndex)
                                            ? "/beforeunload.html"
                                            : "/beforeunload_slow.html")));
   }
   // Disable the hang monitor in the tab that is not expected to hang, so that
   // the dialog is guaranteed to show.
-  PrepareForDialog(browsers_[kResponsiveBrowserIndex]);
+  PrepareForDialog(browsers_[kResposiveBrowserIndex]);
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1);
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
 
   // All windows should still be open.
@@ -623,6 +648,8 @@
       browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
   PrepareForDialog(browsers_[0]);
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
   chrome::CloseAllBrowsersAndQuit();
   browsers_.push_back(CreateBrowser(browser()->profile()));
   ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
@@ -630,6 +657,7 @@
   PrepareForDialog(browsers_[1]);
   ASSERT_NO_FATAL_FAILURE(AcceptClose());
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
   EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
@@ -677,6 +705,8 @@
   PrepareForDialog(browsers_[0]);
   PrepareForDialog(browsers_[1]);
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
   chrome::CloseAllBrowsersAndQuit();
   ASSERT_NO_FATAL_FAILURE(AcceptClose());
   AddBlankTabAndShow(browsers_[0]);
@@ -689,6 +719,7 @@
   PrepareForDialog(browsers_[1]);
   ASSERT_NO_FATAL_FAILURE(AcceptClose());
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count());
   EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count());
@@ -752,7 +783,7 @@
   chrome::CloseWindow(browser2);
   // Just to be sure CloseWindow doesn't have asynchronous tasks
   // that could have an impact.
-  base::RunLoop().RunUntilIdle();
+  content::RunAllPendingInMessageLoop();
 
   // Closing browser shouldn't happen because of beforeunload handler.
   EXPECT_EQ(2u, BrowserList::GetInstance()->size());
@@ -767,11 +798,14 @@
                   ->NeedToFireBeforeUnload());
   // Accept closing the first tab.
   ASSERT_NO_FATAL_FAILURE(AcceptClose());
+  // Just to be sure accepting a dialog doesn't have asynchronous tasks
+  // that could have an impact.
+  content::RunAllPendingInMessageLoop();
   // It shouldn't close the whole window/browser.
   EXPECT_EQ(2u, BrowserList::GetInstance()->size());
   EXPECT_EQ(2, browser2->tab_strip_model()->count());
   // Accept closing the second tab.
-  GetNextDialog()->AcceptAppModalDialog();
+  ASSERT_NO_FATAL_FAILURE(AcceptClose());
   ui_test_utils::WaitForBrowserToClose();
   // Now the second window/browser should be closed.
   EXPECT_EQ(1u, BrowserList::GetInstance()->size());
@@ -799,6 +833,8 @@
       browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
   PrepareForDialog(browsers_[0]);
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
   chrome::CloseAllBrowsersAndQuit();
 
   browsers_.push_back(CreateBrowser(browser()->profile()));
@@ -808,6 +844,7 @@
   browsers_[1]->tab_strip_model()->CloseAllTabs();
   ASSERT_NO_FATAL_FAILURE(CancelClose());
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
   EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
@@ -828,6 +865,8 @@
       browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
   PrepareForDialog(browsers_[0]);
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
   chrome::CloseAllBrowsersAndQuit();
 
   browsers_.push_back(CreateBrowser(browser()->profile()));
@@ -837,6 +876,7 @@
   ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
   ASSERT_NO_FATAL_FAILURE(CancelClose());
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
   EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
@@ -861,10 +901,13 @@
   PrepareForDialog(browsers_[0]);
   PrepareForDialog(browsers_[1]);
 
+  RepeatedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
   chrome::CloseAllBrowsersAndQuit();
 
   ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
   ASSERT_NO_FATAL_FAILURE(CancelClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
   EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
   EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
@@ -1096,9 +1139,13 @@
       browser(), embedded_test_server()->GetURL("/beforeunload.html")));
   PrepareForDialog(browser());
 
+  content::WindowedNotificationObserver cancel_observer(
+      chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
+      content::NotificationService::AllSources());
   TestBrowserCloseManager::AttemptClose(
       TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE);
   ASSERT_NO_FATAL_FAILURE(AcceptClose());
+  cancel_observer.Wait();
   EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
 
   TestBrowserCloseManager::AttemptClose(
diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/chrome/browser/local_discovery/service_discovery_client_mac.mm
index dfc1f080..5208dcd 100644
--- a/chrome/browser/local_discovery/service_discovery_client_mac.mm
+++ b/chrome/browser/local_discovery/service_discovery_client_mac.mm
@@ -34,6 +34,7 @@
 
 - (id)initWithContainer:
         (ServiceWatcherImplMac::NetServiceBrowserContainer*)serviceWatcherImpl;
+- (void)clearDiscoveredServices;
 
 @end
 
@@ -196,6 +197,10 @@
   // already gone.
   // https://crbug.com/657495, https://openradar.appspot.com/28943305
   [browser_ setDelegate:nil];
+
+  // Ensure the delegate clears all references to itself, which it had added as
+  // discovered services were reported to it.
+  [delegate_ clearDiscoveredServices];
 }
 
 void ServiceWatcherImplMac::NetServiceBrowserContainer::Start() {
@@ -459,6 +464,14 @@
   return self;
 }
 
+- (void)clearDiscoveredServices {
+  for (NSNetService* netService in services_.get()) {
+    [netService stopMonitoring];
+    [netService setDelegate:nil];
+  }
+  [services_ removeAllObjects];
+}
+
 - (void)netServiceBrowser:(NSNetServiceBrowser*)netServiceBrowser
            didFindService:(NSNetService*)netService
                moreComing:(BOOL)moreServicesComing {
@@ -481,7 +494,9 @@
         base::SysNSStringToUTF8([netService name]));
 
     // Stop monitoring this service for updates.
-    [[services_ objectAtIndex:index] stopMonitoring];
+    DCHECK_EQ(netService, [services_ objectAtIndex:index]);
+    [netService stopMonitoring];
+    [netService setDelegate:nil];
     [services_ removeObjectAtIndex:index];
   }
 }
diff --git a/chrome/browser/media/DEPS b/chrome/browser/media/DEPS
index cdf60f47..7ee3cb7e 100644
--- a/chrome/browser/media/DEPS
+++ b/chrome/browser/media/DEPS
@@ -6,7 +6,7 @@
   "+media/cdm/cdm_proxy.h",
   "+media/cdm/supported_cdm_versions.h",
   "+media/media_buildflags.h",
-  "+media/mojo/interfaces",
+  "+media/mojo/mojom",
   # safe_dial_device_description_parser_unittest.cc needs DataDecoderService.
   "+services/data_decoder/data_decoder_service.h",
   "+services/data_decoder/public",
diff --git a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc
index 92be759..8ebfbc2b 100644
--- a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc
+++ b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_unittest.cc
@@ -139,7 +139,7 @@
 
  protected:
   content::TestBrowserThreadBundle test_browser_thread_bundle_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   base::test::ScopedFeatureList scoped_feature_list_;
   std::unique_ptr<TestingProfile> profile_;
   MediaDrmOriginIdManager* origin_id_manager_;
diff --git a/chrome/browser/media/android/cdm/media_drm_storage_factory.h b/chrome/browser/media/android/cdm/media_drm_storage_factory.h
index bf14e774..8f34a28 100644
--- a/chrome/browser/media/android/cdm/media_drm_storage_factory.h
+++ b/chrome/browser/media/android/cdm/media_drm_storage_factory.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_MEDIA_ANDROID_CDM_MEDIA_DRM_STORAGE_FACTORY_H_
 #define CHROME_BROWSER_MEDIA_ANDROID_CDM_MEDIA_DRM_STORAGE_FACTORY_H_
 
-#include "media/mojo/interfaces/media_drm_storage.mojom.h"
+#include "media/mojo/mojom/media_drm_storage.mojom.h"
 
 namespace content {
 class RenderFrameHost;
diff --git a/chrome/browser/media/cast_mirroring_service_host_browsertest.cc b/chrome/browser/media/cast_mirroring_service_host_browsertest.cc
index 5ab2f335..0f90d53 100644
--- a/chrome/browser/media/cast_mirroring_service_host_browsertest.cc
+++ b/chrome/browser/media/cast_mirroring_service_host_browsertest.cc
@@ -22,8 +22,8 @@
 #include "media/capture/mojom/video_capture.mojom.h"
 #include "media/capture/mojom/video_capture_types.mojom.h"
 #include "media/capture/video_capture_types.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
diff --git a/chrome/browser/media/cast_remoting_connector.h b/chrome/browser/media/cast_remoting_connector.h
index 13ed4611..30a16a2e 100644
--- a/chrome/browser/media/cast_remoting_connector.h
+++ b/chrome/browser/media/cast_remoting_connector.h
@@ -13,9 +13,9 @@
 #include "base/supports_user_data.h"
 #include "components/prefs/pref_change_registrar.h"
 #include "components/sessions/core/session_id.h"
-#include "media/mojo/interfaces/mirror_service_remoting.mojom.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
-#include "media/mojo/interfaces/remoting_common.mojom.h"
+#include "media/mojo/mojom/mirror_service_remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
+#include "media/mojo/mojom/remoting_common.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace content {
diff --git a/chrome/browser/media/cast_remoting_connector_unittest.cc b/chrome/browser/media/cast_remoting_connector_unittest.cc
index 6953a46..e609e804 100644
--- a/chrome/browser/media/cast_remoting_connector_unittest.cc
+++ b/chrome/browser/media/cast_remoting_connector_unittest.cc
@@ -19,8 +19,8 @@
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/test/test_browser_thread_bundle.h"
-#include "media/mojo/interfaces/mirror_service_remoting.mojom.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/mirror_service_remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/media/output_protection_impl.h b/chrome/browser/media/output_protection_impl.h
index 6da6ae9..d082a64 100644
--- a/chrome/browser/media/output_protection_impl.h
+++ b/chrome/browser/media/output_protection_impl.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_MEDIA_OUTPUT_PROTECTION_IMPL_H_
 
 #include "content/public/browser/frame_service_base.h"
-#include "media/mojo/interfaces/output_protection.mojom.h"
+#include "media/mojo/mojom/output_protection.mojom.h"
 
 class OutputProtectionProxy;
 
diff --git a/chrome/browser/media/platform_verification_impl.h b/chrome/browser/media/platform_verification_impl.h
index 9d23a2d..05b86cbd 100644
--- a/chrome/browser/media/platform_verification_impl.h
+++ b/chrome/browser/media/platform_verification_impl.h
@@ -10,7 +10,7 @@
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
 #include "content/public/browser/frame_service_base.h"
-#include "media/mojo/interfaces/platform_verification.mojom.h"
+#include "media/mojo/mojom/platform_verification.mojom.h"
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/attestation/platform_verification_flow.h"
diff --git a/chrome/browser/media/webrtc/desktop_capture_devices_util.cc b/chrome/browser/media/webrtc/desktop_capture_devices_util.cc
index 118b8703..b430355fc 100644
--- a/chrome/browser/media/webrtc/desktop_capture_devices_util.cc
+++ b/chrome/browser/media/webrtc/desktop_capture_devices_util.cc
@@ -16,7 +16,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "content/public/browser/browser_thread.h"
 #include "media/audio/audio_device_description.h"
-#include "media/mojo/interfaces/display_media_information.mojom.h"
+#include "media/mojo/mojom/display_media_information.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace {
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
index 5c2e6bd6..4d3a4bf 100644
--- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
+++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
@@ -273,8 +273,7 @@
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = GURL(kUploadURL);
   resource_request->method = "POST";
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
 
   // Create a new mojo pipe. It's safe to pass this around and use
   // immediately, even though it needs to finish initialization on the UI
diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc
index a89794d6..87ae131 100644
--- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc
+++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc
@@ -488,8 +488,7 @@
   resource_request->url = !upload_url_for_testing_.is_empty()
                               ? upload_url_for_testing_
                               : GURL(kUploadURL);
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request->method = "POST";
   std::unique_ptr<network::SimpleURLLoader> simple_url_loader =
       network::SimpleURLLoader::Create(std::move(resource_request),
diff --git a/chrome/browser/metrics/chrome_feature_list_creator.cc b/chrome/browser/metrics/chrome_feature_list_creator.cc
index 23c9b9a..c0694512 100644
--- a/chrome/browser/metrics/chrome_feature_list_creator.cc
+++ b/chrome/browser/metrics/chrome_feature_list_creator.cc
@@ -120,14 +120,9 @@
       std::make_unique<policy::ChromeBrowserPolicyConnector>();
 #endif  // defined(OS_CHROMEOS)
 
-  pref_service_factory_ =
-      std::make_unique<prefs::InProcessPrefServiceFactory>();
-  auto delegate = pref_service_factory_->CreateDelegate();
-  delegate->InitPrefRegistry(pref_registry.get());
-
   local_state_ = chrome_prefs::CreateLocalState(
       local_state_file, browser_policy_connector_->GetPolicyService(),
-      std::move(pref_registry), false, std::move(delegate),
+      std::move(pref_registry), false, nullptr /* delegate */,
       browser_policy_connector_.get());
 
 // TODO(asvitkine): This is done here so that the pref is set before
diff --git a/chrome/browser/metrics/desktop_platform_features_metrics_provider.cc b/chrome/browser/metrics/desktop_platform_features_metrics_provider.cc
index 011922c..6daf864b 100644
--- a/chrome/browser/metrics/desktop_platform_features_metrics_provider.cc
+++ b/chrome/browser/metrics/desktop_platform_features_metrics_provider.cc
@@ -30,8 +30,8 @@
   ui::NativeTheme* theme = ui::NativeTheme::GetInstanceForNativeUi();
   DarkModeStatus status = DarkModeStatus::kUnavailable;
   if (theme->SystemDarkModeSupported()) {
-    status = theme->SystemDarkModeEnabled() ? DarkModeStatus::kDark
-                                            : DarkModeStatus::kLight;
+    status = theme->ShouldUseDarkColors() ? DarkModeStatus::kDark
+                                          : DarkModeStatus::kLight;
   }
   UMA_HISTOGRAM_ENUMERATION("Browser.DarkModeStatus", status);
 }
diff --git a/chrome/browser/net/file_downloader.cc b/chrome/browser/net/file_downloader.cc
index f07e273..cbb75e64 100644
--- a/chrome/browser/net/file_downloader.cc
+++ b/chrome/browser/net/file_downloader.cc
@@ -35,8 +35,7 @@
       local_path_(path) {
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = url;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   simple_url_loader_ = network::SimpleURLLoader::Create(
       std::move(resource_request), traffic_annotation);
   simple_url_loader_->SetRetryOptions(
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc
index 27ebbc3..97ea0ee 100644
--- a/chrome/browser/net/profile_network_context_service.cc
+++ b/chrome/browser/net/profile_network_context_service.cc
@@ -429,18 +429,19 @@
 
   // Configure on-disk storage for non-OTR profiles. OTR profiles just use
   // default behavior (in memory storage, default sizes).
-  PrefService* prefs = profile_->GetPrefs();
   if (!in_memory) {
+    PrefService* local_state = g_browser_process->local_state();
     // Configure the HTTP cache path and size.
     base::FilePath base_cache_path;
     chrome::GetUserCacheDirectory(path, &base_cache_path);
-    base::FilePath disk_cache_dir = prefs->GetFilePath(prefs::kDiskCacheDir);
+    base::FilePath disk_cache_dir =
+        local_state->GetFilePath(prefs::kDiskCacheDir);
     if (!disk_cache_dir.empty())
       base_cache_path = disk_cache_dir.Append(base_cache_path.BaseName());
     network_context_params->http_cache_path =
         base_cache_path.Append(chrome::kCacheDirname);
     network_context_params->http_cache_max_size =
-        prefs->GetInteger(prefs::kDiskCacheSize);
+        local_state->GetInteger(prefs::kDiskCacheSize);
 
     // Currently this just contains HttpServerProperties, but that will likely
     // change.
diff --git a/chrome/browser/net/profile_network_context_service_browsertest.cc b/chrome/browser/net/profile_network_context_service_browsertest.cc
index f773037..bcc5359 100644
--- a/chrome/browser/net/profile_network_context_service_browsertest.cc
+++ b/chrome/browser/net/profile_network_context_service_browsertest.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string_split.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/net/profile_network_context_service.h"
 #include "chrome/browser/net/profile_network_context_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -164,7 +165,7 @@
 IN_PROC_BROWSER_TEST_F(ProfileNetworkContextServiceDiskCacheBrowsertest,
                        DiskCacheLocation) {
   // Make sure command line switch is hooked up to the pref.
-  ASSERT_EQ(TempPath(), browser()->profile()->GetPrefs()->GetFilePath(
+  ASSERT_EQ(TempPath(), g_browser_process->local_state()->GetFilePath(
                             prefs::kDiskCacheDir));
 
   // Run a request that caches the response, to give the network service time to
@@ -195,7 +196,7 @@
 IN_PROC_BROWSER_TEST_F(ProfileNetworkContextServiceDiskCacheBrowsertest,
                        DiskCacheSize) {
   // Make sure command line switch is hooked up to the pref.
-  ASSERT_EQ(kCacheSize, browser()->profile()->GetPrefs()->GetInteger(
+  ASSERT_EQ(kCacheSize, g_browser_process->local_state()->GetInteger(
                             prefs::kDiskCacheSize));
 
   // We don't have a great way of directly checking that the disk cache has the
diff --git a/chrome/browser/notifications/notification_trigger_scheduler_unittest.cc b/chrome/browser/notifications/notification_trigger_scheduler_unittest.cc
index 6b666f7..88172838 100644
--- a/chrome/browser/notifications/notification_trigger_scheduler_unittest.cc
+++ b/chrome/browser/notifications/notification_trigger_scheduler_unittest.cc
@@ -39,7 +39,7 @@
  protected:
   NotificationTriggerSchedulerTest()
       : thread_bundle_(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {}
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
 
   class ProfileTestData {
    public:
diff --git a/chrome/browser/notifications/scheduler/internal/BUILD.gn b/chrome/browser/notifications/scheduler/internal/BUILD.gn
index 8b0d12c..bfd2e3a6 100644
--- a/chrome/browser/notifications/scheduler/internal/BUILD.gn
+++ b/chrome/browser/notifications/scheduler/internal/BUILD.gn
@@ -77,6 +77,7 @@
     "impression_history_tracker_unittest.cc",
     "impression_store_unittest.cc",
     "init_aware_scheduler_unittest.cc",
+    "notification_scheduler_unittest.cc",
     "notification_store_unittest.cc",
     "proto_conversion_unittest.cc",
     "scheduled_notification_manager_unittest.cc",
diff --git a/chrome/browser/notifications/scheduler/internal/impression_history_tracker_unittest.cc b/chrome/browser/notifications/scheduler/internal/impression_history_tracker_unittest.cc
index d78bb4a..2e44085 100644
--- a/chrome/browser/notifications/scheduler/internal/impression_history_tracker_unittest.cc
+++ b/chrome/browser/notifications/scheduler/internal/impression_history_tracker_unittest.cc
@@ -16,7 +16,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using testing::_;
+using ::testing::_;
 using ::testing::Invoke;
 using StoreEntries = std::vector<std::unique_ptr<notifications::ClientState>>;
 
diff --git a/chrome/browser/notifications/scheduler/internal/notification_scheduler_unittest.cc b/chrome/browser/notifications/scheduler/internal/notification_scheduler_unittest.cc
new file mode 100644
index 0000000..36bf889
--- /dev/null
+++ b/chrome/browser/notifications/scheduler/internal/notification_scheduler_unittest.cc
@@ -0,0 +1,166 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/notifications/scheduler/internal/notification_scheduler.h"
+
+#include <map>
+#include <memory>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/test/scoped_task_environment.h"
+#include "chrome/browser/notifications/scheduler/internal/notification_scheduler_context.h"
+#include "chrome/browser/notifications/scheduler/internal/scheduler_config.h"
+#include "chrome/browser/notifications/scheduler/public/notification_scheduler_client_registrar.h"
+#include "chrome/browser/notifications/scheduler/test/mock_background_task_coordinator.h"
+#include "chrome/browser/notifications/scheduler/test/mock_display_agent.h"
+#include "chrome/browser/notifications/scheduler/test/mock_display_decider.h"
+#include "chrome/browser/notifications/scheduler/test/mock_impression_history_tracker.h"
+#include "chrome/browser/notifications/scheduler/test/mock_notification_background_task_scheduler.h"
+#include "chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.h"
+#include "chrome/browser/notifications/scheduler/test/mock_scheduled_notification_manager.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::InvokeWithoutArgs;
+using ::testing::NiceMock;
+
+namespace notifications {
+namespace {
+
+class NotificationSchedulerTest : public testing::Test {
+ public:
+  NotificationSchedulerTest()
+      : registrar_(nullptr),
+        impression_tracker_(nullptr),
+        notification_manager_(nullptr),
+        client_(nullptr) {}
+  ~NotificationSchedulerTest() override = default;
+
+  void SetUp() override {
+    auto registrar = std::make_unique<NotificationSchedulerClientRegistrar>();
+    auto task_coordinator =
+        std::make_unique<test::MockBackgroundTaskCoordinator>();
+    auto impression_tracker =
+        std::make_unique<NiceMock<test::MockImpressionHistoryTracker>>();
+    auto notification_manager =
+        std::make_unique<NiceMock<test::MockScheduledNotificationManager>>();
+    auto display_agent = std::make_unique<test::MockDisplayAgent>();
+    auto display_decider = std::make_unique<test::MockDisplayDecider>();
+    auto config = SchedulerConfig::Create();
+
+    registrar_ = registrar.get();
+    impression_tracker_ = impression_tracker.get();
+    notification_manager_ = notification_manager.get();
+
+    // Register mock clients.
+    auto client = std::make_unique<test::MockNotificationSchedulerClient>();
+    client_ = client.get();
+    registrar_->RegisterClient(SchedulerClientType::kTest1, std::move(client));
+
+    auto context = std::make_unique<NotificationSchedulerContext>(
+        std::move(registrar), std::move(task_coordinator),
+        std::move(impression_tracker), std::move(notification_manager),
+        std::move(display_agent), std::move(display_decider),
+        std::move(config));
+    notification_scheduler_ = NotificationScheduler::Create(std::move(context));
+  }
+
+ protected:
+  NotificationScheduler* scheduler() { return notification_scheduler_.get(); }
+
+  test::MockImpressionHistoryTracker* impression_tracker() {
+    return impression_tracker_;
+  }
+
+  test::MockScheduledNotificationManager* notification_manager() {
+    return notification_manager_;
+  }
+
+  test::MockNotificationSchedulerClient* client() { return client_; }
+
+ private:
+  base::test::ScopedTaskEnvironment scoped_task_environment_;
+  NotificationSchedulerClientRegistrar* registrar_;
+  test::MockImpressionHistoryTracker* impression_tracker_;
+  test::MockScheduledNotificationManager* notification_manager_;
+  test::MockNotificationSchedulerClient* client_;
+
+  std::unique_ptr<NotificationScheduler> notification_scheduler_;
+  DISALLOW_COPY_AND_ASSIGN(NotificationSchedulerTest);
+};
+
+// Tests successful initialization flow.
+TEST_F(NotificationSchedulerTest, InitSuccess) {
+  EXPECT_CALL(*impression_tracker(), Init(_, _))
+      .WillOnce(Invoke([](ImpressionHistoryTracker::Delegate* delegate,
+                          ImpressionHistoryTracker::InitCallback callback) {
+        std::move(callback).Run(true);
+      }));
+
+  EXPECT_CALL(*notification_manager(), Init(_, _))
+      .WillOnce(Invoke([](ScheduledNotificationManager::Delegate* delegate,
+                          ScheduledNotificationManager::InitCallback callback) {
+        std::move(callback).Run(true);
+      }));
+
+  base::RunLoop run_loop;
+  scheduler()->Init(base::BindOnce([](bool success) { EXPECT_TRUE(success); }));
+
+  EXPECT_CALL(*client(), OnSchedulerInitialized(true, _))
+      .WillOnce(InvokeWithoutArgs([&]() { run_loop.Quit(); }));
+
+  run_loop.Run();
+}
+
+// Tests the case when impression tracker failed to initialize.
+TEST_F(NotificationSchedulerTest, InitImpressionTrackerFailed) {
+  EXPECT_CALL(*impression_tracker(), Init(_, _))
+      .WillOnce(Invoke([](ImpressionHistoryTracker::Delegate* delegate,
+                          ImpressionHistoryTracker::InitCallback callback) {
+        // Impression tracker failed to load.
+        std::move(callback).Run(false);
+      }));
+
+  EXPECT_CALL(*notification_manager(), Init(_, _)).Times(0);
+
+  base::RunLoop run_loop;
+  scheduler()->Init(
+      base::BindOnce([](bool success) { EXPECT_FALSE(success); }));
+
+  EXPECT_CALL(*client(), OnSchedulerInitialized(false, _))
+      .WillOnce(InvokeWithoutArgs([&]() { run_loop.Quit(); }));
+
+  run_loop.Run();
+}
+
+// Tests the case when scheduled notification manager failed to initialize.
+TEST_F(NotificationSchedulerTest, InitScheduledNotificationManagerFailed) {
+  EXPECT_CALL(*impression_tracker(), Init(_, _))
+      .WillOnce(Invoke([](ImpressionHistoryTracker::Delegate* delegate,
+                          ImpressionHistoryTracker::InitCallback callback) {
+        std::move(callback).Run(true);
+      }));
+
+  EXPECT_CALL(*notification_manager(), Init(_, _))
+      .WillOnce(Invoke([](ScheduledNotificationManager::Delegate* delegate,
+                          ScheduledNotificationManager::InitCallback callback) {
+        // Scheduled notification manager failed to load.
+        std::move(callback).Run(false);
+      }));
+
+  base::RunLoop run_loop;
+  scheduler()->Init(
+      base::BindOnce([](bool success) { EXPECT_FALSE(success); }));
+
+  EXPECT_CALL(*client(), OnSchedulerInitialized(false, _))
+      .WillOnce(InvokeWithoutArgs([&]() { run_loop.Quit(); }));
+
+  run_loop.Run();
+}
+
+}  // namespace
+}  // namespace notifications
diff --git a/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc b/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc
index 2cf6152..5be9fcc 100644
--- a/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc
+++ b/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/notifications/scheduler/internal/scheduler_config.h"
 #include "chrome/browser/notifications/scheduler/internal/scheduler_utils.h"
 #include "chrome/browser/notifications/scheduler/public/notification_params.h"
+#include "chrome/browser/notifications/scheduler/public/notification_scheduler_constant.h"
 
 namespace notifications {
 namespace {
@@ -70,10 +71,16 @@
       return;
     }
 
+    if (notification_params->enable_ihnr_buttons) {
+      DCHECK(notification_params->notification_data.buttons.empty());
+      CreateInhrButtonsPair(&notification_params->notification_data.buttons);
+    }
+
     auto entry =
         std::make_unique<NotificationEntry>(notification_params->type, guid);
     entry->notification_data =
         std::move(notification_params->notification_data);
+
     entry->schedule_params = std::move(notification_params->schedule_params);
     auto* entry_ptr = entry.get();
     notifications_[type][guid] = std::move(entry);
@@ -271,6 +278,21 @@
     return notifications_[type][guid].get();
   }
 
+  // Create two default buttons {Helpful, Unhelpful} for notification.
+  void CreateInhrButtonsPair(std::vector<NotificationData::Button>* buttons) {
+    buttons->clear();
+    // TODO(hesen): Fill button text field with GRD string resource.
+    NotificationData::Button helpful_button;
+    helpful_button.type = ActionButtonType::kHelpful;
+    helpful_button.id = notifications::kDefaultHelpfulButtonId;
+    buttons->emplace_back(std::move(helpful_button));
+
+    NotificationData::Button unhelpful_button;
+    unhelpful_button.type = ActionButtonType::kUnhelpful;
+    unhelpful_button.id = notifications::kDefaultUnhelpfulButtonId;
+    buttons->emplace_back(std::move(unhelpful_button));
+  }
+
   NotificationStore notification_store_;
   std::unique_ptr<IconStore> icon_store_;
   const std::unordered_set<SchedulerClientType> clients_;
diff --git a/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager_unittest.cc b/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager_unittest.cc
index 2a3ff935..9da9547 100644
--- a/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager_unittest.cc
+++ b/chrome/browser/notifications/scheduler/internal/scheduled_notification_manager_unittest.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/notifications/scheduler/internal/notification_entry.h"
 #include "chrome/browser/notifications/scheduler/internal/scheduler_config.h"
 #include "chrome/browser/notifications/scheduler/public/notification_params.h"
+#include "chrome/browser/notifications/scheduler/public/notification_scheduler_constant.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -182,6 +183,7 @@
   schedule_params.priority = ScheduleParams::Priority::kHigh;
   auto params = std::make_unique<NotificationParams>(
       SchedulerClientType::kTest1, notification_data, schedule_params);
+  params->enable_ihnr_buttons = true;
   std::string guid = params->guid;
   EXPECT_FALSE(guid.empty());
 
@@ -204,6 +206,13 @@
   // TODO(xingliu): change these to compare with operator==.
   EXPECT_EQ(base::UTF16ToUTF8(entry->notification_data.title), kTitle);
   EXPECT_EQ(entry->schedule_params.priority, ScheduleParams::Priority::kHigh);
+
+  auto buttons = entry->notification_data.buttons;
+  EXPECT_EQ(buttons.size(), 2u);
+  EXPECT_EQ(buttons[0].id, notifications::kDefaultHelpfulButtonId);
+  EXPECT_EQ(buttons[0].type, ActionButtonType::kHelpful);
+  EXPECT_EQ(buttons[1].id, notifications::kDefaultUnhelpfulButtonId);
+  EXPECT_EQ(buttons[1].type, ActionButtonType::kUnhelpful);
 }
 
 // Test to schedule a notification without guid, we will auto generated one.
diff --git a/chrome/browser/notifications/scheduler/public/BUILD.gn b/chrome/browser/notifications/scheduler/public/BUILD.gn
index 0c98008..6a5175eb 100644
--- a/chrome/browser/notifications/scheduler/public/BUILD.gn
+++ b/chrome/browser/notifications/scheduler/public/BUILD.gn
@@ -23,6 +23,7 @@
     "notification_scheduler_client.h",
     "notification_scheduler_client_registrar.cc",
     "notification_scheduler_client_registrar.h",
+    "notification_scheduler_constant.h",
     "notification_scheduler_types.cc",
     "notification_scheduler_types.h",
     "schedule_params.cc",
diff --git a/chrome/browser/notifications/scheduler/public/notification_params.cc b/chrome/browser/notifications/scheduler/public/notification_params.cc
index 7b53c2a..1bc12f3 100644
--- a/chrome/browser/notifications/scheduler/public/notification_params.cc
+++ b/chrome/browser/notifications/scheduler/public/notification_params.cc
@@ -16,6 +16,7 @@
                                        ScheduleParams schedule_params)
     : type(type),
       guid(base::GenerateGUID()),
+      enable_ihnr_buttons(false),
       notification_data(std::move(notification_data)),
       schedule_params(std::move(schedule_params)) {}
 
diff --git a/chrome/browser/notifications/scheduler/public/notification_params.h b/chrome/browser/notifications/scheduler/public/notification_params.h
index 24889dc9..68513c0 100644
--- a/chrome/browser/notifications/scheduler/public/notification_params.h
+++ b/chrome/browser/notifications/scheduler/public/notification_params.h
@@ -26,6 +26,10 @@
   // An auto generated unique id of the scheduled notification.
   std::string guid;
 
+  // Will overwrite custom buttons in notification data with inline
+  // helpful/unhelpful buttons if set true.
+  bool enable_ihnr_buttons;
+
   // Data used to show the notification, such as text or title on the
   // notification.
   NotificationData notification_data;
diff --git a/chrome/browser/notifications/scheduler/public/notification_scheduler_constant.h b/chrome/browser/notifications/scheduler/public/notification_scheduler_constant.h
new file mode 100644
index 0000000..77a88ff0
--- /dev/null
+++ b/chrome/browser/notifications/scheduler/public/notification_scheduler_constant.h
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_PUBLIC_NOTIFICATION_SCHEDULER_CONSTANT_H_
+#define CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_PUBLIC_NOTIFICATION_SCHEDULER_CONSTANT_H_
+
+namespace notifications {
+
+constexpr char kDefaultHelpfulButtonId[] =
+    "NOTIFICATION_SCHEDULER_DEFAULT_HELPFUL_BUTTON_ID";
+constexpr char kDefaultUnhelpfulButtonId[] =
+    "NOTIFICATION_SCHEDULER_DEFAULT_UNHELPFUL_BUTTON_ID";
+
+}  // namespace notifications
+
+#endif  // CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_PUBLIC_NOTIFICATION_SCHEDULER_CONSTANT_H_
diff --git a/chrome/browser/notifications/scheduler/test/BUILD.gn b/chrome/browser/notifications/scheduler/test/BUILD.gn
index acf0805..ac7bef4d 100644
--- a/chrome/browser/notifications/scheduler/test/BUILD.gn
+++ b/chrome/browser/notifications/scheduler/test/BUILD.gn
@@ -20,6 +20,8 @@
     "mock_impression_history_tracker.h",
     "mock_notification_background_task_scheduler.cc",
     "mock_notification_background_task_scheduler.h",
+    "mock_notification_scheduler_client.cc",
+    "mock_notification_scheduler_client.h",
     "mock_scheduled_notification_manager.cc",
     "mock_scheduled_notification_manager.h",
     "test_utils.cc",
diff --git a/chrome/browser/notifications/scheduler/test/mock_impression_history_tracker.h b/chrome/browser/notifications/scheduler/test/mock_impression_history_tracker.h
index 09a2b9e..46d3f32 100644
--- a/chrome/browser/notifications/scheduler/test/mock_impression_history_tracker.h
+++ b/chrome/browser/notifications/scheduler/test/mock_impression_history_tracker.h
@@ -5,6 +5,9 @@
 #ifndef CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_TEST_MOCK_IMPRESSION_HISTORY_TRACKER_H_
 #define CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_TEST_MOCK_IMPRESSION_HISTORY_TRACKER_H_
 
+#include <map>
+#include <string>
+
 #include "chrome/browser/notifications/scheduler/internal/impression_history_tracker.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
@@ -24,6 +27,7 @@
   MOCK_METHOD2(GetImpressionDetail,
                void(SchedulerClientType,
                     ImpressionDetail::ImpressionDetailCallback));
+  MOCK_METHOD1(OnUserAction, void(const UserActionData&));
 };
 
 }  // namespace test
diff --git a/chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.cc b/chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.cc
new file mode 100644
index 0000000..6742b99
--- /dev/null
+++ b/chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.cc
@@ -0,0 +1,15 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.h"
+
+namespace notifications {
+namespace test {
+
+MockNotificationSchedulerClient::MockNotificationSchedulerClient() = default;
+
+MockNotificationSchedulerClient::~MockNotificationSchedulerClient() = default;
+
+}  // namespace test
+}  // namespace notifications
diff --git a/chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.h b/chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.h
new file mode 100644
index 0000000..a91c53a
--- /dev/null
+++ b/chrome/browser/notifications/scheduler/test/mock_notification_scheduler_client.h
@@ -0,0 +1,32 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_TEST_MOCK_NOTIFICATION_SCHEDULER_CLIENT_H_
+#define CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_TEST_MOCK_NOTIFICATION_SCHEDULER_CLIENT_H_
+
+#include <memory>
+#include <set>
+#include <string>
+
+#include "chrome/browser/notifications/scheduler/public/notification_scheduler_client.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace notifications {
+namespace test {
+
+class MockNotificationSchedulerClient : public NotificationSchedulerClient {
+ public:
+  MockNotificationSchedulerClient();
+  ~MockNotificationSchedulerClient() override;
+  MOCK_METHOD2(BeforeShowNotification,
+               void(std::unique_ptr<NotificationData>,
+                    NotificationDataCallback));
+  MOCK_METHOD2(OnSchedulerInitialized, void(bool, std::set<std::string>));
+  MOCK_METHOD1(OnUserAction, void(const UserActionData&));
+};
+
+}  // namespace test
+}  // namespace notifications
+
+#endif  // CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_TEST_MOCK_NOTIFICATION_SCHEDULER_CLIENT_H_
diff --git a/chrome/browser/ntp_snippets/OWNERS b/chrome/browser/ntp_snippets/OWNERS
index c7f9cc3f..f276860 100644
--- a/chrome/browser/ntp_snippets/OWNERS
+++ b/chrome/browser/ntp_snippets/OWNERS
@@ -1 +1,2 @@
 file://components/ntp_snippets/OWNERS
+# COMPONENT: UI>Browser>NewTabPage
diff --git a/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy.cc b/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy.cc
index 39ec3760..d6b8c61 100644
--- a/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy.cc
+++ b/chrome/browser/offline_pages/prefetch/prefetch_instance_id_proxy.cc
@@ -57,7 +57,7 @@
 
   instance_id->GetToken(
       kProdSenderId, kScopeGCM, std::map<std::string, std::string>(),
-      /*is_lazy=*/false,
+      /*flags=*/{},
       base::BindOnce(&PrefetchInstanceIDProxy::GotGCMToken,
                      weak_factory_.GetWeakPtr(), std::move(callback)));
 }
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
index f5aa110..2c8d7bb 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.cc
@@ -24,6 +24,7 @@
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/navigation_handle.h"
 
 namespace {
 
@@ -216,15 +217,14 @@
 
 void OptimizationGuideHintsManager::OnComponentHintsUpdated(
     base::OnceClosure update_closure,
-    bool hints_updated) {
+    bool hints_updated) const {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   // Record the result of updating the hints. This is used as a signal for the
   // hints being fully processed in testing.
-  // TODO(sophiechang): Change this back to just a Result suffix once we
-  // have the flag to not record the histogram in Previews.
-  LOCAL_HISTOGRAM_BOOLEAN("OptimizationGuide.UpdateComponentHints.Result2",
-                          hints_updated);
+  LOCAL_HISTOGRAM_BOOLEAN(
+      optimization_guide::kComponentHintsUpdatedResultHistogramString,
+      hints_updated);
 
   MaybeRunUpdateClosure(std::move(update_closure));
 }
@@ -235,3 +235,33 @@
       << "Only one update closure is supported at a time";
   next_update_closure_ = std::move(next_update_closure);
 }
+
+void OptimizationGuideHintsManager::LoadHintForNavigation(
+    content::NavigationHandle* navigation_handle,
+    base::OnceClosure callback) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  const auto& url = navigation_handle->GetURL();
+  if (!url.has_host()) {
+    std::move(callback).Run();
+    return;
+  }
+
+  hint_cache_->LoadHint(
+      url.host(),
+      base::BindOnce(&OptimizationGuideHintsManager::OnHintLoaded,
+                     ui_weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
+}
+
+void OptimizationGuideHintsManager::OnHintLoaded(
+    base::OnceClosure callback,
+    const optimization_guide::proto::Hint* loaded_hint) const {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  // Record the result of loading a hint. This is used as a signal for testing.
+  LOCAL_HISTOGRAM_BOOLEAN("OptimizationGuide.LoadedHint.Result", loaded_hint);
+
+  // Run the callback now that the hint is loaded. This is used as a signal by
+  // tests.
+  std::move(callback).Run();
+}
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h b/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
index d0e124a7..70844473 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager.h
@@ -16,11 +16,18 @@
 class FilePath;
 }  // namespace base
 
+namespace content {
+class NavigationHandle;
+}  // namespace content
+
 namespace leveldb_proto {
 class ProtoDatabaseProvider;
 }  // namespace leveldb_proto
 
 namespace optimization_guide {
+namespace proto {
+class Hint;
+}  // namespace proto
 class HintCache;
 class HintUpdateData;
 struct HintsComponentInfo;
@@ -51,6 +58,13 @@
   // is called and the corresponding hints have been updated.
   void ListenForNextUpdateForTesting(base::OnceClosure next_update_closure);
 
+  // Loads the hint if available.
+  // |callback| is run when the request has finished regardless of whether there
+  // was actually a hint for that load or not. The callback can be used as a
+  // signal for tests.
+  void LoadHintForNavigation(content::NavigationHandle* navigation_handle,
+                             base::OnceClosure callback);
+
  private:
   // Callback run after the hint cache is fully initialized. At this point, the
   // OptimizationGuideHintsManager is ready to process hints.
@@ -64,7 +78,11 @@
   // Called when the hints have been fully updated with the latest hints from
   // the Component Updater. This is used as a signal during tests.
   void OnComponentHintsUpdated(base::OnceClosure update_closure,
-                               bool hints_updated);
+                               bool hints_updated) const;
+
+  // Called when the request to load a hint has completed.
+  void OnHintLoaded(base::OnceClosure callback,
+                    const optimization_guide::proto::Hint* loaded_hint) const;
 
   // The OptimizationGuideService that this guide is listening to. Not owned.
   optimization_guide::OptimizationGuideService* const
diff --git a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
index 44deb17..bea4ff1 100644
--- a/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_hints_manager_unittest.cc
@@ -17,6 +17,7 @@
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/optimization_guide/proto_database_provider_test_base.h"
 #include "components/prefs/testing_pref_service.h"
+#include "content/public/test/mock_navigation_handle.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 
 class TestOptimizationGuideService
@@ -134,9 +135,17 @@
     ProcessHints(config, version);
   }
 
+  OptimizationGuideHintsManager* hints_manager() const {
+    return hints_manager_.get();
+  }
+
+  GURL url_with_hints() const {
+    return GURL("https://somedomain.org/news/whatever");
+  }
+
   base::FilePath temp_dir() const { return temp_dir_.GetPath(); }
 
-  TestingPrefServiceSimple* pref_service() { return pref_service_.get(); }
+  TestingPrefServiceSimple* pref_service() const { return pref_service_.get(); }
 
  protected:
   void RunUntilIdle() {
@@ -191,7 +200,7 @@
   // However, we still expect the local histogram for the hints being updated to
   // be recorded.
   histogram_tester.ExpectUniqueSample(
-      "OptimizationGuide.UpdateComponentHints.Result2", true, 1);
+      "OptimizationGuide.UpdateComponentHints.Result", true, 1);
 }
 
 TEST_F(OptimizationGuideHintsManagerTest,
@@ -207,7 +216,7 @@
   histogram_tester.ExpectTotalCount("OptimizationGuide.ProcessHintsResult", 0);
   // We also do not expect to update the component hints with bad hints either.
   histogram_tester.ExpectTotalCount(
-      "OptimizationGuide.UpdateComponentHints.Result2", 0);
+      "OptimizationGuide.UpdateComponentHints.Result", 0);
 }
 
 TEST_F(OptimizationGuideHintsManagerTest,
@@ -238,7 +247,7 @@
     // However, we still expect the local histogram for the hints being updated
     // to be recorded.
     histogram_tester.ExpectUniqueSample(
-        "OptimizationGuide.UpdateComponentHints.Result2", true, 1);
+        "OptimizationGuide.UpdateComponentHints.Result", true, 1);
   }
 
   // Test that a new component coming in does not update the component hints.
@@ -250,7 +259,7 @@
     histogram_tester.ExpectTotalCount("OptimizationGuide.ProcessHintsResult",
                                       0);
     histogram_tester.ExpectTotalCount(
-        "OptimizationGuide.UpdateComponentHints.Result2", 0);
+        "OptimizationGuide.UpdateComponentHints.Result", 0);
   }
 }
 
@@ -421,3 +430,50 @@
         optimization_guide::ProcessHintsComponentResult::kSuccess, 1);
   }
 }
+
+TEST_F(OptimizationGuideHintsManagerTest, LoadHintForNavigationWithHint) {
+  base::HistogramTester histogram_tester;
+  InitializeWithDefaultConfig("3.0.0.0");
+
+  content::MockNavigationHandle navigation_handle;
+  navigation_handle.set_url(url_with_hints());
+
+  base::RunLoop run_loop;
+  hints_manager()->LoadHintForNavigation(&navigation_handle,
+                                         run_loop.QuitClosure());
+  run_loop.Run();
+
+  histogram_tester.ExpectUniqueSample("OptimizationGuide.LoadedHint.Result",
+                                      true, 1);
+}
+
+TEST_F(OptimizationGuideHintsManagerTest, LoadHintForNavigationNoHint) {
+  base::HistogramTester histogram_tester;
+  InitializeWithDefaultConfig("3.0.0.0");
+
+  content::MockNavigationHandle navigation_handle;
+  navigation_handle.set_url(GURL("https://notinhints.com"));
+
+  base::RunLoop run_loop;
+  hints_manager()->LoadHintForNavigation(&navigation_handle,
+                                         run_loop.QuitClosure());
+  run_loop.Run();
+
+  histogram_tester.ExpectUniqueSample("OptimizationGuide.LoadedHint.Result",
+                                      false, 1);
+}
+
+TEST_F(OptimizationGuideHintsManagerTest, LoadHintForNavigationNoHost) {
+  base::HistogramTester histogram_tester;
+  InitializeWithDefaultConfig("3.0.0.0");
+
+  content::MockNavigationHandle navigation_handle;
+  navigation_handle.set_url(GURL("blargh"));
+
+  base::RunLoop run_loop;
+  hints_manager()->LoadHintForNavigation(&navigation_handle,
+                                         run_loop.QuitClosure());
+  run_loop.Run();
+
+  histogram_tester.ExpectTotalCount("OptimizationGuide.LoadedHint.Result", 0);
+}
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
index 2484396..3e49c63c 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
 
+#include "base/callback_forward.h"
 #include "base/files/file_path.h"
 #include "chrome/browser/optimization_guide/optimization_guide_hints_manager.h"
 #include "chrome/browser/profiles/profile.h"
@@ -11,6 +12,7 @@
 #include "components/optimization_guide/optimization_guide_service.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/navigation_handle.h"
 
 OptimizationGuideKeyedService::OptimizationGuideKeyedService(
     content::BrowserContext* browser_context)
@@ -36,6 +38,22 @@
       database_provider);
 }
 
+void OptimizationGuideKeyedService::RegisterOptimizationTypes(
+    std::vector<optimization_guide::proto::OptimizationType>
+        optimization_types) {
+  for (const auto optimization_type : optimization_types) {
+    registered_optimization_types_.insert(optimization_type);
+  }
+}
+
+void OptimizationGuideKeyedService::MaybeLoadHintForNavigation(
+    content::NavigationHandle* navigation_handle) {
+  if (!hints_manager_ || registered_optimization_types_.empty())
+    return;
+
+  hints_manager_->LoadHintForNavigation(navigation_handle, base::DoNothing());
+}
+
 void OptimizationGuideKeyedService::Shutdown() {
   if (hints_manager_) {
     hints_manager_->Shutdown();
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
index aed9b03..b6b4abeb 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.h
@@ -6,9 +6,12 @@
 #define CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_KEYED_SERVICE_H_
 
 #include <memory>
+#include <unordered_set>
+#include <vector>
 
 #include "base/macros.h"
 #include "components/keyed_service/core/keyed_service.h"
+#include "components/optimization_guide/proto/hints.pb.h"
 
 namespace base {
 class FilePath;
@@ -16,6 +19,7 @@
 
 namespace content {
 class BrowserContext;
+class NavigationHandle;
 }  // namespace content
 
 namespace leveldb_proto {
@@ -46,12 +50,25 @@
     return hints_manager_.get();
   }
 
+  // Registers the optimization types that intend to be queried during the
+  // session.
+  void RegisterOptimizationTypes(
+      std::vector<optimization_guide::proto::OptimizationType>
+          optimization_types);
+
+  // Prompts the load of the hint for the navigation, if there is at least one
+  // optimization type registered and there is a hint available.
+  void MaybeLoadHintForNavigation(content::NavigationHandle* navigation_handle);
+
   // KeyedService implementation.
   void Shutdown() override;
 
  private:
   std::unique_ptr<OptimizationGuideHintsManager> hints_manager_;
 
+  std::unordered_set<optimization_guide::proto::OptimizationType>
+      registered_optimization_types_;
+
   content::BrowserContext* browser_context_;
 
   DISALLOW_COPY_AND_ASSIGN(OptimizationGuideKeyedService);
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
index dce35c34..5f6c42a 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service_browsertest.cc
@@ -12,10 +12,13 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
 #include "components/optimization_guide/optimization_guide_features.h"
 #include "components/optimization_guide/proto/hints.pb.h"
 #include "components/optimization_guide/test_hints_component_creator.h"
 #include "content/public/test/browser_test_utils.h"
+#include "net/test/embedded_test_server/http_request.h"
+#include "net/test/embedded_test_server/http_response.h"
 
 namespace {
 
@@ -34,6 +37,22 @@
   return total;
 }
 
+// Retries fetching |histogram_name| until it contains at least |count| samples.
+int RetryForHistogramUntilCountReached(
+    const base::HistogramTester& histogram_tester,
+    const std::string& histogram_name,
+    int count) {
+  int total = 0;
+  while (true) {
+    base::ThreadPoolInstance::Get()->FlushForTesting();
+    base::RunLoop().RunUntilIdle();
+
+    total = GetTotalHistogramSamples(histogram_tester, histogram_name);
+    if (total >= count)
+      return total;
+  }
+}
+
 }  // namespace
 
 using OptimizationGuideKeyedServiceDisabledBrowserTest = InProcessBrowserTest;
@@ -74,6 +93,27 @@
     OptimizationGuideKeyedServiceDisabledBrowserTest::SetUp();
   }
 
+  void SetUpOnMainThread() override {
+    embedded_test_server()->RegisterRequestHandler(base::BindRepeating(
+        &OptimizationGuideKeyedServiceBrowserTest::HandleRequest,
+        base::Unretained(this)));
+    ASSERT_TRUE(embedded_test_server()->Start());
+    url_with_hints_ =
+        embedded_test_server()->GetURL("somehost.com", "/hashints/whatever");
+
+    PushHintsComponentAndWaitForCompletion();
+
+    OptimizationGuideKeyedServiceDisabledBrowserTest::SetUpOnMainThread();
+  }
+
+  void RegisterWithKeyedService() {
+    OptimizationGuideKeyedServiceFactory::GetForProfile(browser()->profile())
+        ->RegisterOptimizationTypes({optimization_guide::proto::NOSCRIPT});
+  }
+
+  GURL url_with_hints() { return url_with_hints_; }
+
+ private:
   void PushHintsComponentAndWaitForCompletion() {
     base::RunLoop run_loop;
     OptimizationGuideKeyedServiceFactory::GetForProfile(browser()->profile())
@@ -82,7 +122,8 @@
 
     const optimization_guide::HintsComponentInfo& component_info =
         test_hints_component_creator_.CreateHintsComponentInfoWithPageHints(
-            optimization_guide::proto::NOSCRIPT, {"somehost.com"}, "*", {});
+            optimization_guide::proto::NOSCRIPT, {url_with_hints_.host()}, "*",
+            {});
 
     g_browser_process->optimization_guide_service()->MaybeUpdateHintsComponent(
         component_info);
@@ -90,7 +131,18 @@
     run_loop.Run();
   }
 
- private:
+  std::unique_ptr<net::test_server::HttpResponse> HandleRequest(
+      const net::test_server::HttpRequest& request) {
+    std::unique_ptr<net::test_server::BasicHttpResponse> response;
+    if (request.GetURL().spec().find("redirect") != std::string::npos) {
+      response.reset(new net::test_server::BasicHttpResponse);
+      response->set_code(net::HTTP_FOUND);
+      response->AddCustomHeader("Location", url_with_hints().spec());
+    }
+    return std::move(response);
+  }
+
+  GURL url_with_hints_;
   base::test::ScopedFeatureList scoped_feature_list_;
   optimization_guide::testing::TestHintsComponentCreator
       test_hints_component_creator_;
@@ -98,16 +150,67 @@
   DISALLOW_COPY_AND_ASSIGN(OptimizationGuideKeyedServiceBrowserTest);
 };
 
-IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
-                       VerifyHintsReceivedWhenPushed) {
+IN_PROC_BROWSER_TEST_F(
+    OptimizationGuideKeyedServiceBrowserTest,
+    NavigateToPageWithHintsButNoRegistrationDoesNotAttemptToLoadHint) {
   base::HistogramTester histogram_tester;
 
-  PushHintsComponentAndWaitForCompletion();
+  ui_test_utils::NavigateToURL(browser(), url_with_hints());
 
-  // TODO(crbug/969558): Update browser test to better support multiple profile
-  // cases.
-  EXPECT_GT(
-      GetTotalHistogramSamples(
-          histogram_tester, "OptimizationGuide.UpdateComponentHints.Result2"),
-      0);
+  histogram_tester.ExpectTotalCount("OptimizationGuide.LoadedHint.Result", 0);
+}
+
+IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
+                       NavigateToPageWithHintsLoadsHint) {
+  RegisterWithKeyedService();
+
+  base::HistogramTester histogram_tester;
+
+  ui_test_utils::NavigateToURL(browser(), url_with_hints());
+
+  EXPECT_GT(RetryForHistogramUntilCountReached(
+                histogram_tester, "OptimizationGuide.LoadedHint.Result", 1),
+            0);
+  // There is a hint that matches this URL, so there should be an attempt to
+  // load a hint that succeeds.
+  histogram_tester.ExpectUniqueSample("OptimizationGuide.LoadedHint.Result",
+                                      true, 1);
+}
+
+IN_PROC_BROWSER_TEST_F(
+    OptimizationGuideKeyedServiceBrowserTest,
+    NavigateToPageThatRedirectsToUrlWithHintsShouldAttemptTwoLoads) {
+  RegisterWithKeyedService();
+
+  base::HistogramTester histogram_tester;
+
+  GURL first_url = embedded_test_server()->GetURL("/redirect");
+  ui_test_utils::NavigateToURL(browser(), first_url);
+
+  EXPECT_GE(RetryForHistogramUntilCountReached(
+                histogram_tester, "OptimizationGuide.LoadedHint.Result", 2),
+            2);
+  // Should attempt and fail to load a hint for the initial navigation.
+  histogram_tester.ExpectBucketCount("OptimizationGuide.LoadedHint.Result",
+                                     false, 1);
+  // Should attempt and succeed to load a hint once for the redirect.
+  histogram_tester.ExpectBucketCount("OptimizationGuide.LoadedHint.Result",
+                                     true, 1);
+}
+
+IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
+                       NavigateToPageWithoutHint) {
+  RegisterWithKeyedService();
+
+  base::HistogramTester histogram_tester;
+
+  ui_test_utils::NavigateToURL(browser(), GURL("https://nohints.com/"));
+
+  EXPECT_GE(RetryForHistogramUntilCountReached(
+                histogram_tester, "OptimizationGuide.LoadedHint.Result", 1),
+            1);
+  // There were no hints that match this URL, but there should still be an
+  // attempt to load a hint but still fail.
+  histogram_tester.ExpectUniqueSample("OptimizationGuide.LoadedHint.Result",
+                                      false, 1);
 }
diff --git a/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.cc b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.cc
new file mode 100644
index 0000000..8ea18a2
--- /dev/null
+++ b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.cc
@@ -0,0 +1,52 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
+
+#include "base/base64.h"
+#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
+#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "components/optimization_guide/proto/hints.pb.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/navigation_handle.h"
+
+OptimizationGuideWebContentsObserver::OptimizationGuideWebContentsObserver(
+    content::WebContents* web_contents)
+    : content::WebContentsObserver(web_contents) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  optimization_guide_keyed_service_ =
+      OptimizationGuideKeyedServiceFactory::GetForProfile(
+          Profile::FromBrowserContext(web_contents->GetBrowserContext()));
+}
+
+OptimizationGuideWebContentsObserver::~OptimizationGuideWebContentsObserver() =
+    default;
+
+void OptimizationGuideWebContentsObserver::DidStartNavigation(
+    content::NavigationHandle* navigation_handle) {
+  if (!navigation_handle->IsInMainFrame())
+    return;
+
+  if (!optimization_guide_keyed_service_)
+    return;
+
+  optimization_guide_keyed_service_->MaybeLoadHintForNavigation(
+      navigation_handle);
+}
+
+void OptimizationGuideWebContentsObserver::DidRedirectNavigation(
+    content::NavigationHandle* navigation_handle) {
+  if (!navigation_handle->IsInMainFrame())
+    return;
+
+  if (!optimization_guide_keyed_service_)
+    return;
+
+  optimization_guide_keyed_service_->MaybeLoadHintForNavigation(
+      navigation_handle);
+}
+
+WEB_CONTENTS_USER_DATA_KEY_IMPL(OptimizationGuideWebContentsObserver)
diff --git a/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h
new file mode 100644
index 0000000..38fa9cd
--- /dev/null
+++ b/chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h
@@ -0,0 +1,51 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_WEB_CONTENTS_OBSERVER_H_
+#define CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_WEB_CONTENTS_OBSERVER_H_
+
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/browser/web_contents_user_data.h"
+
+namespace content {
+class NavigationHandle;
+}  // namespace content
+
+class OptimizationGuideKeyedService;
+
+// Observes navigation events.
+class OptimizationGuideWebContentsObserver
+    : public content::WebContentsObserver,
+      public content::WebContentsUserData<
+          OptimizationGuideWebContentsObserver> {
+ public:
+  ~OptimizationGuideWebContentsObserver() override;
+
+ private:
+  friend class content::WebContentsUserData<
+      OptimizationGuideWebContentsObserver>;
+
+  explicit OptimizationGuideWebContentsObserver(
+      content::WebContents* web_contents);
+
+  // Overridden from content::WebContentsObserver.
+  void DidStartNavigation(
+      content::NavigationHandle* navigation_handle) override;
+  void DidRedirectNavigation(
+      content::NavigationHandle* navigation_handle) override;
+
+  // Initialized in constructor. It may be null if the
+  // OptimizationGuideKeyedService feature is not enabled.
+  OptimizationGuideKeyedService* optimization_guide_keyed_service_ = nullptr;
+
+  WEB_CONTENTS_USER_DATA_KEY_DECL();
+
+  DISALLOW_COPY_AND_ASSIGN(OptimizationGuideWebContentsObserver);
+};
+
+#endif  // CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_WEB_CONTENTS_OBSERVER_H_
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index 3f96466..98871ac 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -87,6 +87,7 @@
 
 #if BUILDFLAG(FULL_SAFE_BROWSING)
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/safe_browsing/chrome_password_protection_service.h"
 #include "ui/base/clipboard/clipboard.h"
 #include "ui/events/keycodes/keyboard_codes.h"
@@ -973,8 +974,9 @@
 
 bool ChromePasswordManagerClient::IsUnderAdvancedProtection() const {
 #if BUILDFLAG(FULL_SAFE_BROWSING)
-  return safe_browsing::AdvancedProtectionStatusManager::
-      IsUnderAdvancedProtection(profile_);
+  return safe_browsing::AdvancedProtectionStatusManagerFactory::GetForProfile(
+             profile_)
+      ->is_under_advanced_protection();
 #else
   return false;
 #endif
diff --git a/chrome/browser/performance_manager/graph/policies/working_set_trimmer_policy_chromeos_unittest.cc b/chrome/browser/performance_manager/graph/policies/working_set_trimmer_policy_chromeos_unittest.cc
index 158d96cb..d829c1c 100644
--- a/chrome/browser/performance_manager/graph/policies/working_set_trimmer_policy_chromeos_unittest.cc
+++ b/chrome/browser/performance_manager/graph/policies/working_set_trimmer_policy_chromeos_unittest.cc
@@ -54,7 +54,7 @@
  public:
   WorkingSetTrimmerPolicyChromeOSTest()
       : GraphTestHarness(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {}
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
   ~WorkingSetTrimmerPolicyChromeOSTest() override {}
 
   void SetUp() override {
diff --git a/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc b/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc
index cbc5380..0f229a0 100644
--- a/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc
+++ b/chrome/browser/performance_manager/observers/isolation_context_metrics_unittest.cc
@@ -52,7 +52,7 @@
   IsolationContextMetricsTest()
       : GraphTestHarness(
             base::test::ScopedTaskEnvironment::ThreadPoolExecutionMode::QUEUED,
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {}
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
 
   ~IsolationContextMetricsTest() override = default;
 
diff --git a/chrome/browser/policy/e2e_test/.vpython b/chrome/browser/policy/e2e_test/.vpython
index 36533163..3b319d1 100644
--- a/chrome/browser/policy/e2e_test/.vpython
+++ b/chrome/browser/policy/e2e_test/.vpython
@@ -11,7 +11,7 @@
 
 wheel: <
   name: "infra/celab/celab/windows-amd64"
-  version: "IhQLTIwNFOxhnKFZWQyr4I6GS8ehFvEFtaQaZmN7ubsC"
+  version: "MxUQe6cwcaLhKIoFnrYyH5Nn6mq0qMD7lxaPld0bqgoC"
 >
 
 # googleapiclient
diff --git a/chrome/browser/policy/e2e_test/infra/__init__.py b/chrome/browser/policy/e2e_test/infra/__init__.py
new file mode 100644
index 0000000..9226ba6
--- /dev/null
+++ b/chrome/browser/policy/e2e_test/infra/__init__.py
@@ -0,0 +1,5 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from chrome_ent_test_case import ChromeEnterpriseTestCase
\ No newline at end of file
diff --git a/chrome/browser/policy/e2e_test/infra/chrome_ent_test_case.py b/chrome/browser/policy/e2e_test/infra/chrome_ent_test_case.py
new file mode 100644
index 0000000..0e9b37a
--- /dev/null
+++ b/chrome/browser/policy/e2e_test/infra/chrome_ent_test_case.py
@@ -0,0 +1,202 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import random
+import string
+import subprocess
+import time
+
+from absl import flags
+from chrome_ent_test.infra.core import EnterpriseTestCase
+
+FLAGS = flags.FLAGS
+flags.DEFINE_string('chrome_installer', None,
+                    'The path to the chrome installer')
+flags.mark_flag_as_required('chrome_installer')
+
+flags.DEFINE_string(
+    'chromedriver', None,
+    'The path to the chromedriver executable. If not specified, '
+    'a chocholatey chromedriver packae will be installed and used.')
+
+
+class ChromeEnterpriseTestCase(EnterpriseTestCase):
+  """Base class for Chrome enterprise test cases."""
+
+  def InstallChrome(self, instance_name):
+    """Installs chrome.
+
+    Currently supports two types of installer:
+    - mini_installer.exe, and
+    - *.msi
+    """
+    file_name = self.UploadFile(instance_name, FLAGS.chrome_installer,
+                                r'c:\temp')
+
+    if file_name.lower().endswith('mini_installer.exe'):
+      dir = os.path.dirname(os.path.abspath(__file__))
+      self.UploadFile(instance_name, os.path.join(dir, 'installer_data'),
+                      r'c:\temp')
+      cmd = file_name + r' --installerdata=c:\temp\installer_data'
+    else:
+      cmd = 'msiexec /i %s' % file_name
+
+    self.RunCommand(instance_name, cmd)
+
+    cmd = (
+        r'powershell -File c:\cel\supporting_files\ensure_chromium_api_keys.ps1'
+        r' -Path gs://%s/api/key') % self.gsbucket
+    self.RunCommand(instance_name, cmd)
+
+  def SetPolicy(self, instance_name, policy_name, policy_value, policy_type):
+    r"""Sets a Google Chrome policy in registry.
+
+    Args:
+      policy_name: the policy name.
+        The name can contain \. In this case, the last segment will be the
+        real policy name, while anything before will be part of the key.
+    """
+    segments = policy_name.split('\\')
+    policy_name = segments[-1]
+
+    # The policy will be set for both Chrome and Chromium, since only
+    # googlers can build Chrome-branded executable.
+    keys = [
+        r'HKLM\Software\Policies\Google\Chrome',
+        r'HKLM\Software\Policies\Chromium'
+    ]
+    for key in keys:
+      if len(segments) >= 2:
+        key += '\\' + '\\'.join(segments[:-1])
+
+      cmd = (r"Set-GPRegistryValue -Name 'Default Domain Policy' "
+             "-Key %s -ValueName %s -Value %s -Type %s") % (
+                 key, policy_name, policy_value, policy_type)
+      self.clients[instance_name].RunPowershell(cmd)
+
+  def RemovePolicy(self, instance_name, policy_name):
+    """Removes a Google Chrome policy in registry.
+    Args:
+      policy_name: the policy name.
+    """
+    segments = policy_name.split('\\')
+    policy_name = segments[-1]
+
+    keys = [
+        r'HKLM\Software\Policies\Google\Chrome',
+        r'HKLM\Software\Policies\Chromium'
+    ]
+    for key in keys:
+      if len(segments) >= 2:
+        key += '\\' + '\\'.join(segments[:-1])
+
+      cmd = (r"Remove-GPRegistryValue -Name 'Default Domain Policy' "
+             "-Key %s -ValueName %s") % (key, policy_name)
+      self.clients[instance_name].RunPowershell(cmd)
+
+  def _installChocolatey(self, instance_name):
+    cmd = "Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
+    self.clients[instance_name].RunPowershell(cmd)
+
+  def InstallPackage(self, instance_name, package_name, package_version):
+    cmd = r'c:\ProgramData\chocolatey\bin\choco install %s -y --version %s' % (
+        package_name, package_version)
+    self.RunCommand(instance_name, cmd)
+
+  def InstallWebDriver(self, instance_name):
+    self._installChocolatey(instance_name)
+    self.InstallPackage(instance_name, 'python2', '2.7.15')
+    self.RunCommand(
+        instance_name,
+        r'c:\Python27\python.exe -m pip install selenium absl-py pywin32')
+    if FLAGS.chromedriver is None:
+      # chromedriver flag is not specified. In this case, install the chocolatey
+      # package
+      self.InstallPackage(instance_name, 'chromedriver', '74.0.3729.60')
+    else:
+      self.UploadFile(instance_name, FLAGS.chromedriver,
+                      'C:/ProgramData/chocolatey/lib/chromedriver/tools/')
+
+    dir = os.path.dirname(os.path.abspath(__file__))
+    self.UploadFile(instance_name, os.path.join(dir, 'test_util.py'),
+                    r'c:\temp')
+
+  def RunWebDriverTest(self, instance_name, test_file, args=[]):
+    """Runs a python webdriver test on an instance.
+
+    Args:
+      instance_name: name of the instance.
+      test_file: the path of the webdriver test file.
+      args: the list of arguments passed to the test.
+
+    Returns:
+      the output."""
+    # upload the test
+    file_name = self.UploadFile(instance_name, test_file, r'c:\temp')
+
+    # run the test
+    args = subprocess.list2cmdline(args)
+    cmd = r'c:\Python27\python.exe %s %s' % (file_name, args)
+    return self.RunCommand(instance_name, cmd)
+
+  def RunUITest(self, instance_name, test_file, timeout=300, args=[]):
+    """Runs a UI test on an instance.
+
+    Args:
+      instance_name: name of the instance.
+      test_file: the path of the UI test file.
+      timeout: the timeout in seconds. Default is 300,
+               i.e. 5 minutes.
+      args: the list of arguments passed to the test.
+
+    Returns:
+      the output."""
+    # upload the test
+    file_name = self.UploadFile(instance_name, test_file, r'c:\temp')
+
+    # run the test.
+    # note that '-u' flag is passed to enable unbuffered stdout and stderr.
+    # Without this flag, if the test is killed because of timeout, we will not
+    # get any output from stdout because the output is buffered. When this
+    # happens it makes debugging really hard.
+    args = subprocess.list2cmdline(args)
+    ui_test_cmd = r'c:\Python27\python.exe -u %s %s' % (file_name, args)
+    cmd = (r'python c:\cel\supporting_files\run_ui_test.py --timeout %s -- %s'
+          ) % (timeout, ui_test_cmd)
+    return self.RunCommand(instance_name, cmd)
+
+  def _generatePassword(self):
+    """Generates a random password."""
+    s = [random.choice(string.ascii_lowercase) for _ in range(4)]
+    s += [random.choice(string.ascii_uppercase) for _ in range(4)]
+    s += [random.choice(string.digits) for _ in range(4)]
+    random.shuffle(s)
+    return ''.join(s)
+
+  def _rebootInstance(self, instance_name):
+    self.RunCommand(instance_name, 'shutdown /r /t 0')
+
+    # wait a while for the instance to boot up
+    time.sleep(2 * 60)
+
+  def EnableUITest(self, instance_name):
+    """Configures the instance so that UI tests can be run on it."""
+    self.InstallWebDriver(instance_name)
+    self.InstallPackage(instance_name, 'sysinternals', '2019.6.29')
+    self.RunCommand(
+        instance_name,
+        r'c:\Python27\python.exe -m pip install pywinauto requests')
+
+    password = self._generatePassword()
+    user_name = 'ui_user'
+    cmd = (r'powershell -File c:\cel\supporting_files\enable_auto_logon.ps1 '
+           r'-userName %s -password %s') % (user_name, password)
+    self.RunCommand(instance_name, cmd)
+    self._rebootInstance(instance_name)
+
+    cmd = (r'powershell -File c:\cel\supporting_files\set_ui_agent.ps1 '
+           '-username %s') % user_name
+    self.RunCommand(instance_name, cmd)
+    self._rebootInstance(instance_name)
diff --git a/chrome/browser/policy/e2e_test/infra/installer_data b/chrome/browser/policy/e2e_test/infra/installer_data
new file mode 100644
index 0000000..75f0c017
--- /dev/null
+++ b/chrome/browser/policy/e2e_test/infra/installer_data
@@ -0,0 +1,18 @@
+{

+  "distribution":{

+     "make_chrome_default":true,

+     "system_level":true,

+     "multi_install":true,

+     "verbose_logging":true,

+     "chrome":true,

+     "require_eula":false,

+     "skip_first_run_ui":true,

+     "import_bookmarks":false,

+     "show_welcome_page":true,

+     "import_search_engine":false,

+     "import_history":false,

+     "alternate_shortcut_text":false,

+     "create_all_shortcuts":true,

+     "do_not_launch_chrome":true

+  }

+}
\ No newline at end of file
diff --git a/chrome/browser/policy/e2e_test/infra/test_util.py b/chrome/browser/policy/e2e_test/infra/test_util.py
new file mode 100644
index 0000000..50e93d2
--- /dev/null
+++ b/chrome/browser/policy/e2e_test/infra/test_util.py
@@ -0,0 +1,68 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Contains utility methods that can be used by python tests on Windows."""
+
+import os
+import time
+import win32con
+import win32gui
+from selenium import webdriver
+from selenium.webdriver.chrome.options import Options
+
+
+def _window_enum_handler(hwnd, window_list):
+  win_title = win32gui.GetWindowText(hwnd)
+  if 'Google Chrome' in win_title or 'Chromium' in win_title:
+    window_list.append(hwnd)
+
+
+def _get_chrome_windows():
+  """Gets the list of hwnd of Chrome windows."""
+  window_list = []
+  win32gui.EnumWindows(_window_enum_handler, window_list)
+  return window_list
+
+
+def shutdown_chrome():
+  """Shutdown Chrome cleanly.
+
+    Surprisingly there is no easy way in chromedriver to shutdown Chrome
+    cleanly on Windows. So we have to use win32 API to do that: we find
+    the chrome window first, then send WM_CLOSE message to it.
+  """
+  window_list = _get_chrome_windows()
+  if not window_list:
+    raise RuntimeError("Cannot find chrome windows")
+
+  for win in window_list:
+    win32gui.SendMessage(win, win32con.WM_CLOSE, 0, 0)
+
+  # wait a little bit for chrome processes to end.
+  # TODO: the right way is to wait until there are no chrome.exe processes.
+  time.sleep(2)
+
+
+def create_chrome_webdriver(chrome_options=None, incognito=False, prefs=None):
+  """Configures and returns a Chrome WebDriver object."
+
+  Args:
+    chrome_options: The default ChromeOptions to use.
+    incognito: Whether or not to launch Chrome in incognito mode.
+    prefs: Profile preferences. None for defaults.
+  """
+  if chrome_options == None:
+    chrome_options = Options()
+
+  if incognito:
+    chrome_options.add_argument('incognito')
+
+  if prefs != None:
+    chrome_options.add_experimental_option("prefs", prefs)
+
+  os.environ["CHROME_LOG_FILE"] = r"c:\temp\chrome_log.txt"
+
+  return webdriver.Chrome(
+      "C:/ProgramData/chocolatey/lib/chromedriver/tools/chromedriver.exe",
+      service_args=["--verbose", r"--log-path=c:\temp\chromedriver.log"],
+      chrome_options=chrome_options)
diff --git a/chrome/browser/policy/e2e_test/tests/allow_deleting_browser_history/allow_deleting_browser_history.py b/chrome/browser/policy/e2e_test/tests/allow_deleting_browser_history/allow_deleting_browser_history.py
index 30fb7333..a698818 100644
--- a/chrome/browser/policy/e2e_test/tests/allow_deleting_browser_history/allow_deleting_browser_history.py
+++ b/chrome/browser/policy/e2e_test/tests/allow_deleting_browser_history/allow_deleting_browser_history.py
@@ -4,8 +4,8 @@
 
 import os
 
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import before_all, environment, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
diff --git a/chrome/browser/policy/e2e_test/tests/apps_shortcut/apps_shortcut.py b/chrome/browser/policy/e2e_test/tests/apps_shortcut/apps_shortcut.py
index 9786f66..1970103 100644
--- a/chrome/browser/policy/e2e_test/tests/apps_shortcut/apps_shortcut.py
+++ b/chrome/browser/policy/e2e_test/tests/apps_shortcut/apps_shortcut.py
@@ -3,15 +3,15 @@
 # found in the LICENSE file.
 
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class AppsShortcutEnabledTest(ChromeEnterpriseTestCase):
   """Test the ShowAppsShortcutInBookmarkBar policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#ShowAppsShortcutInBookmarkBar"""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ShowAppsShortcutInBookmarkBar"""
 
   Policy = 'ShowAppsShortcutInBookmarkBar'
 
diff --git a/chrome/browser/policy/e2e_test/tests/bookmarkbar_enabled/bookmarkbar_enabled.py b/chrome/browser/policy/e2e_test/tests/bookmarkbar_enabled/bookmarkbar_enabled.py
index 9f80b8a..b33de5d2 100644
--- a/chrome/browser/policy/e2e_test/tests/bookmarkbar_enabled/bookmarkbar_enabled.py
+++ b/chrome/browser/policy/e2e_test/tests/bookmarkbar_enabled/bookmarkbar_enabled.py
@@ -6,8 +6,8 @@
 import os
 from absl import flags
 
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 FLAGS = flags.FLAGS
 
@@ -16,7 +16,7 @@
 class BookmarkBarEnabledTest(ChromeEnterpriseTestCase):
   """Test the BookmarkBarEnabled
 
-    https://www.chromium.org/administrators/policy-list-3#BookmarkBarEnabled.
+    https://cloud.google.com/docs/chrome-enterprise/policies/?policy=BookmarkBarEnabled.
 
     If this setting is left not set the user can decide to use this function
     or not.
diff --git a/chrome/browser/policy/e2e_test/tests/default_search_provider/default_search_provider.py b/chrome/browser/policy/e2e_test/tests/default_search_provider/default_search_provider.py
index c436b30b..e216935 100644
--- a/chrome/browser/policy/e2e_test/tests/default_search_provider/default_search_provider.py
+++ b/chrome/browser/policy/e2e_test/tests/default_search_provider/default_search_provider.py
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
diff --git a/chrome/browser/policy/e2e_test/tests/extension_blacklist/extension_blacklist.py b/chrome/browser/policy/e2e_test/tests/extension_blacklist/extension_blacklist.py
index 67a1ce0..d14b00fa 100644
--- a/chrome/browser/policy/e2e_test/tests/extension_blacklist/extension_blacklist.py
+++ b/chrome/browser/policy/e2e_test/tests/extension_blacklist/extension_blacklist.py
@@ -4,14 +4,14 @@
 
 import logging
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class ExtensionInstallBlacklistTest(ChromeEnterpriseTestCase):
   """Test the ExtensionInstallBlacklist policy.
-    https://www.chromium.org/administrators/policy-list-3#ExtensionInstallBlacklist"""
+    https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ExtensionInstallBlacklist"""
 
   @before_all
   def setup(self):
diff --git a/chrome/browser/policy/e2e_test/tests/extension_forcelist/extension_forcelist.py b/chrome/browser/policy/e2e_test/tests/extension_forcelist/extension_forcelist.py
index 5ab7bbc..546d176f 100644
--- a/chrome/browser/policy/e2e_test/tests/extension_forcelist/extension_forcelist.py
+++ b/chrome/browser/policy/e2e_test/tests/extension_forcelist/extension_forcelist.py
@@ -3,15 +3,15 @@
 # found in the LICENSE file.
 
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class ExtensionInstallForcelistTest(ChromeEnterpriseTestCase):
   """Test the ExtensionInstallForcelist policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#ExtensionInstallForcelist"""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ExtensionInstallForcelist"""
 
   # This is the extension id of the Google Keep extension.
   ExtensionId = 'lpcaedmchfhocbbapmcbpinfpgnhiddi'
diff --git a/chrome/browser/policy/e2e_test/tests/extension_whitelist/extension_whitelist.py b/chrome/browser/policy/e2e_test/tests/extension_whitelist/extension_whitelist.py
index 510ec67..c4e48dc9 100644
--- a/chrome/browser/policy/e2e_test/tests/extension_whitelist/extension_whitelist.py
+++ b/chrome/browser/policy/e2e_test/tests/extension_whitelist/extension_whitelist.py
@@ -4,14 +4,14 @@
 
 import logging
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class ExtensionInstallWhitelistTest(ChromeEnterpriseTestCase):
   """Test the ExtensionInstallBlacklist policy.
-    https://www.chromium.org/administrators/policy-list-3#ExtensionInstallWhitelist"""
+    https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ExtensionInstallWhitelist"""
 
   @before_all
   def setup(self):
diff --git a/chrome/browser/policy/e2e_test/tests/force_google_safe_search/force_google_safe_search.py b/chrome/browser/policy/e2e_test/tests/force_google_safe_search/force_google_safe_search.py
index 0da01b1..7955660 100644
--- a/chrome/browser/policy/e2e_test/tests/force_google_safe_search/force_google_safe_search.py
+++ b/chrome/browser/policy/e2e_test/tests/force_google_safe_search/force_google_safe_search.py
@@ -4,9 +4,9 @@
 
 import os
 import logging
-from chrome_ent_test.infra.core import environment, before_all, test
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from absl import flags
+from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 FLAGS = flags.FLAGS
 
diff --git a/chrome/browser/policy/e2e_test/tests/homepage/homepage.py b/chrome/browser/policy/e2e_test/tests/homepage/homepage.py
index 632c74b..f538d2d 100644
--- a/chrome/browser/policy/e2e_test/tests/homepage/homepage.py
+++ b/chrome/browser/policy/e2e_test/tests/homepage/homepage.py
@@ -5,9 +5,9 @@
 import os
 import logging
 import re
-from chrome_ent_test.infra.core import environment, before_all, test
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from absl import flags
+from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 FLAGS = flags.FLAGS
 
@@ -17,8 +17,8 @@
   """Test HomepageIsNewTabPage and HomepageLocation policies.
 
   See:
-     https://www.chromium.org/administrators/policy-list-3#HomepageLocation
-     https://www.chromium.org/administrators/policy-list-3#HomepageIsNewTabPage
+     https://cloud.google.com/docs/chrome-enterprise/policies/?policy=HomepageLocation
+     https://cloud.google.com/docs/chrome-enterprise/policies/?policy=HomepageIsNewTabPage
   """
 
   @before_all
diff --git a/chrome/browser/policy/e2e_test/tests/password_manager_enabled/password_manager_enabled.py b/chrome/browser/policy/e2e_test/tests/password_manager_enabled/password_manager_enabled.py
index ea290e3..a747fcf6 100644
--- a/chrome/browser/policy/e2e_test/tests/password_manager_enabled/password_manager_enabled.py
+++ b/chrome/browser/policy/e2e_test/tests/password_manager_enabled/password_manager_enabled.py
@@ -3,15 +3,15 @@
 # found in the LICENSE file.
 
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class PasswordManagerEnabledTest(ChromeEnterpriseTestCase):
   """Test the PasswordManagerEnabled policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#PasswordManagerEnabled"""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=PasswordManagerEnabled"""
 
   @before_all
   def setup(self):
diff --git a/chrome/browser/policy/e2e_test/tests/popups_allowed/popups_allowed.py b/chrome/browser/policy/e2e_test/tests/popups_allowed/popups_allowed.py
index ae7e0f9..b7d4454a 100644
--- a/chrome/browser/policy/e2e_test/tests/popups_allowed/popups_allowed.py
+++ b/chrome/browser/policy/e2e_test/tests/popups_allowed/popups_allowed.py
@@ -6,8 +6,8 @@
 import os
 from absl import flags
 
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 FLAGS = flags.FLAGS
 
@@ -16,7 +16,7 @@
 class PopupsAllowedForUrlsTest(ChromeEnterpriseTestCase):
   """Test the PopupsAllowedForUrls
 
-    https://www.chromium.org/administrators/policy-list-3#PopupsAllowedForUrls.
+    https://cloud.google.com/docs/chrome-enterprise/policies/?policy=PopupsAllowedForUrls.
     """
 
   @before_all
diff --git a/chrome/browser/policy/e2e_test/tests/restore_on_startup/restore_on_startup.py b/chrome/browser/policy/e2e_test/tests/restore_on_startup/restore_on_startup.py
index 33f513c..d38740b9 100644
--- a/chrome/browser/policy/e2e_test/tests/restore_on_startup/restore_on_startup.py
+++ b/chrome/browser/policy/e2e_test/tests/restore_on_startup/restore_on_startup.py
@@ -8,8 +8,8 @@
 
 from absl import flags
 
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 FLAGS = flags.FLAGS
 
@@ -18,7 +18,7 @@
 class RestoreOnStartupTest(ChromeEnterpriseTestCase):
   """Test the RestoreOnStartup policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#RestoreOnStartup."""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=RestoreOnStartup."""
 
   @before_all
   def setup(self):
diff --git a/chrome/browser/policy/e2e_test/tests/translate_enabled/translate_enabled.py b/chrome/browser/policy/e2e_test/tests/translate_enabled/translate_enabled.py
index 1083717..db909cb 100644
--- a/chrome/browser/policy/e2e_test/tests/translate_enabled/translate_enabled.py
+++ b/chrome/browser/policy/e2e_test/tests/translate_enabled/translate_enabled.py
@@ -4,15 +4,15 @@
 
 import logging
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class TranslateEnabledTest(ChromeEnterpriseTestCase):
   """Test the TranslateEnabled policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#TranslateEnabled"""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=TranslateEnabled"""
 
   @before_all
   def setup(self):
diff --git a/chrome/browser/policy/e2e_test/tests/url_blacklist/url_blacklist.py b/chrome/browser/policy/e2e_test/tests/url_blacklist/url_blacklist.py
index ccb435c..2ac8c23 100644
--- a/chrome/browser/policy/e2e_test/tests/url_blacklist/url_blacklist.py
+++ b/chrome/browser/policy/e2e_test/tests/url_blacklist/url_blacklist.py
@@ -4,15 +4,15 @@
 
 import logging
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class UrlBlacklistTest(ChromeEnterpriseTestCase):
   """Test the URLBlacklist policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#URLBlacklist"""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=URLBlacklist"""
 
   @before_all
   def setup(self):
diff --git a/chrome/browser/policy/e2e_test/tests/url_whitelist/url_whitelist.py b/chrome/browser/policy/e2e_test/tests/url_whitelist/url_whitelist.py
index 4176554..9185837 100644
--- a/chrome/browser/policy/e2e_test/tests/url_whitelist/url_whitelist.py
+++ b/chrome/browser/policy/e2e_test/tests/url_whitelist/url_whitelist.py
@@ -4,8 +4,8 @@
 
 import logging
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
@@ -14,8 +14,8 @@
 
   This policy provides exceptions to the URLBlacklist policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#URLBlacklist
-  and https://www.chromium.org/administrators/policy-list-3#URLWhitelist"""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=URLBlacklist
+  and https://cloud.google.com/docs/chrome-enterprise/policies/?policy=URLWhitelist"""
 
   @before_all
   def setup(self):
diff --git a/chrome/browser/policy/e2e_test/tests/user_data_dir/user_data_dir.py b/chrome/browser/policy/e2e_test/tests/user_data_dir/user_data_dir.py
index 6cdc1dc4..e8ab764 100644
--- a/chrome/browser/policy/e2e_test/tests/user_data_dir/user_data_dir.py
+++ b/chrome/browser/policy/e2e_test/tests/user_data_dir/user_data_dir.py
@@ -5,8 +5,8 @@
 import logging
 import os
 
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
diff --git a/chrome/browser/policy/e2e_test/tests/youtube_restrict/youtube_restrict.py b/chrome/browser/policy/e2e_test/tests/youtube_restrict/youtube_restrict.py
index 03651956..f04ab7f 100644
--- a/chrome/browser/policy/e2e_test/tests/youtube_restrict/youtube_restrict.py
+++ b/chrome/browser/policy/e2e_test/tests/youtube_restrict/youtube_restrict.py
@@ -4,15 +4,15 @@
 
 import logging
 import os
-from chrome_ent_test.ent_tests import ChromeEnterpriseTestCase
 from chrome_ent_test.infra.core import environment, before_all, test
+from infra import ChromeEnterpriseTestCase
 
 
 @environment(file="../policy_test.asset.textpb")
 class YouTubeRestrictTest(ChromeEnterpriseTestCase):
   """Test the ForceYouTubeRestrict policy.
 
-  See https://www.chromium.org/administrators/policy-list-3#ForceYouTubeRestrict"""
+  See https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ForceYouTubeRestrict"""
 
   RestrictedText = "This video is restricted. " \
       + "Try signing in with a Google Apps account."
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc
index 4d0de8504..a790a42 100644
--- a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc
+++ b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc
@@ -122,8 +122,7 @@
   auto request = std::make_unique<network::ResourceRequest>();
   request->url = request_->GetURL();
 
-  request->load_flags =
-      net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES;
+  request->credentials_mode = network::mojom::CredentialsMode::kOmit;
 
   request->headers.SetHeader(kCloudPrintOAuthHeaderKey,
                              GetOAuthHeaderValue(access_token_info.token));
diff --git a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
index fc3a11a5..b2127e4 100644
--- a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
+++ b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
@@ -171,9 +171,8 @@
         })");
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = url;
-  resource_request->load_flags = net::LOAD_DO_NOT_SEND_COOKIES |
-                                 net::LOAD_DO_NOT_SAVE_COOKIES |
-                                 net::LOAD_DISABLE_CACHE;
+  resource_request->load_flags = net::LOAD_DISABLE_CACHE;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request->method = "POST";
   resource_request->headers.SetHeader("Accept", "text/xml");
   simple_url_loader_ = network::SimpleURLLoader::Create(
diff --git a/chrome/browser/profile_resetter/reset_report_uploader.cc b/chrome/browser/profile_resetter/reset_report_uploader.cc
index a41afd5..fee0739 100644
--- a/chrome/browser/profile_resetter/reset_report_uploader.cc
+++ b/chrome/browser/profile_resetter/reset_report_uploader.cc
@@ -80,9 +80,8 @@
 
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = GetClientReportUrl(kResetReportUrl);
-  resource_request->load_flags = net::LOAD_DO_NOT_SEND_COOKIES |
-                                 net::LOAD_DO_NOT_SAVE_COOKIES |
-                                 net::LOAD_DISABLE_CACHE;
+  resource_request->load_flags = net::LOAD_DISABLE_CACHE;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request->method = "POST";
   std::unique_ptr<network::SimpleURLLoader> simple_url_loader =
       network::SimpleURLLoader::Create(std::move(resource_request),
diff --git a/chrome/browser/profiles/off_the_record_profile_io_data.cc b/chrome/browser/profiles/off_the_record_profile_io_data.cc
index 62856a20..9a3acc9 100644
--- a/chrome/browser/profiles/off_the_record_profile_io_data.cc
+++ b/chrome/browser/profiles/off_the_record_profile_io_data.cc
@@ -87,10 +87,6 @@
       profile_->GetPrefs());
   io_data_->safe_browsing_enabled()->MoveToSequence(
       base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
-  io_data_->safe_browsing_whitelist_domains()->Init(
-      prefs::kSafeBrowsingWhitelistDomains, profile_->GetPrefs());
-  io_data_->safe_browsing_whitelist_domains()->MoveToSequence(
-      base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
 #if BUILDFLAG(ENABLE_PLUGINS)
   io_data_->always_open_pdf_externally()->Init(
       prefs::kPluginsAlwaysOpenPdfExternally, profile_->GetPrefs());
diff --git a/chrome/browser/profiles/profile_activity_metrics_recorder_unittest.cc b/chrome/browser/profiles/profile_activity_metrics_recorder_unittest.cc
index 265cfbe..5f7940c 100644
--- a/chrome/browser/profiles/profile_activity_metrics_recorder_unittest.cc
+++ b/chrome/browser/profiles/profile_activity_metrics_recorder_unittest.cc
@@ -31,7 +31,7 @@
  public:
   ProfileActivityMetricsRecorderTest()
       : thread_bundle_(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         profile_manager_(TestingBrowserProcess::GetGlobal()) {
     base::SetRecordActionTaskRunner(thread_bundle_.GetMainThreadTaskRunner());
   }
diff --git a/chrome/browser/profiles/profile_browsertest.cc b/chrome/browser/profiles/profile_browsertest.cc
index 4e6f897..6aa069eb 100644
--- a/chrome/browser/profiles/profile_browsertest.cc
+++ b/chrome/browser/profiles/profile_browsertest.cc
@@ -585,13 +585,12 @@
   ASSERT_TRUE(mock_user_data_dir.CreateUniqueTempDir());
   base::FilePath profile_path =
       mock_user_data_dir.GetPath().Append(profile_name);
-  ProfileImpl* profile_impl = static_cast<ProfileImpl*>(browser()->profile());
 
   {
     base::ScopedTempDir temp_disk_cache_dir;
     ASSERT_TRUE(temp_disk_cache_dir.CreateUniqueTempDir());
-    profile_impl->GetPrefs()->SetFilePath(prefs::kDiskCacheDir,
-                                          temp_disk_cache_dir.GetPath());
+    g_browser_process->local_state()->SetFilePath(
+        prefs::kDiskCacheDir, temp_disk_cache_dir.GetPath());
   }
 }
 
diff --git a/chrome/browser/profiles/profile_downloader.cc b/chrome/browser/profiles/profile_downloader.cc
index 13b2d39af..071b5ef 100644
--- a/chrome/browser/profiles/profile_downloader.cc
+++ b/chrome/browser/profiles/profile_downloader.cc
@@ -214,8 +214,7 @@
 
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = image_url_to_fetch;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   if (!auth_token_.empty()) {
     resource_request->headers.SetHeader(
         net::HttpRequestHeaders::kAuthorization,
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index dd69852..9841fa6 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -440,9 +440,6 @@
 #if !defined(OS_ANDROID)
   registry->RegisterBooleanPref(prefs::kShowCastIconInToolbar, false);
 #endif  // !defined(OS_ANDROID)
-  // Initialize the cache prefs.
-  registry->RegisterFilePathPref(prefs::kDiskCacheDir, base::FilePath());
-  registry->RegisterIntegerPref(prefs::kDiskCacheSize, 0);
 }
 
 ProfileImpl::ProfileImpl(
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc
index 7d744e8..159b134 100644
--- a/chrome/browser/profiles/profile_impl_io_data.cc
+++ b/chrome/browser/profiles/profile_impl_io_data.cc
@@ -162,10 +162,6 @@
       pref_service);
   io_data_->safe_browsing_enabled()->MoveToSequence(
       base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
-  io_data_->safe_browsing_whitelist_domains()->Init(
-      prefs::kSafeBrowsingWhitelistDomains, pref_service);
-  io_data_->safe_browsing_whitelist_domains()->MoveToSequence(
-      base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
 #if BUILDFLAG(ENABLE_PLUGINS)
   io_data_->always_open_pdf_externally()->Init(
       prefs::kPluginsAlwaysOpenPdfExternally, pref_service);
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 285f9e09..657a5ec 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -266,9 +266,6 @@
       ProtocolHandlerRegistryFactory::GetForBrowserContext(profile);
   DCHECK(protocol_handler_registry);
 
-  protocol_handler_registry_io_thread_delegate_ =
-      protocol_handler_registry->io_thread_delegate();
-
 #if defined(OS_CHROMEOS)
   // Enable client certificates for the Chrome OS sign-in frame, if this feature
   // is not disabled by a flag.
@@ -319,15 +316,6 @@
   params->profile = profile;
   profile_params_ = std::move(params);
 
-  force_google_safesearch_.Init(prefs::kForceGoogleSafeSearch, pref_service);
-  force_google_safesearch_.MoveToSequence(
-      base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
-  force_youtube_restrict_.Init(prefs::kForceYouTubeRestrict, pref_service);
-  force_youtube_restrict_.MoveToSequence(
-      base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
-  allowed_domains_for_apps_.Init(prefs::kAllowedDomainsForApps, pref_service);
-  allowed_domains_for_apps_.MoveToSequence(
-      base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::IO}));
   signed_exchange_enabled_.Init(prefs::kSignedHTTPExchangeEnabled,
                                 pref_service);
   signed_exchange_enabled_.MoveToSequence(
@@ -580,11 +568,7 @@
 #if !defined(OS_CHROMEOS)
   signin_scoped_device_id_.Destroy();
 #endif
-  force_google_safesearch_.Destroy();
-  force_youtube_restrict_.Destroy();
-  allowed_domains_for_apps_.Destroy();
   safe_browsing_enabled_.Destroy();
-  safe_browsing_whitelist_domains_.Destroy();
   network_prediction_options_.Destroy();
   incognito_availibility_pref_.Destroy();
   signed_exchange_enabled_.Destroy();
diff --git a/chrome/browser/profiles/profile_io_data.h b/chrome/browser/profiles/profile_io_data.h
index 8672dc1..62a64479f 100644
--- a/chrome/browser/profiles/profile_io_data.h
+++ b/chrome/browser/profiles/profile_io_data.h
@@ -96,10 +96,6 @@
     return &safe_browsing_enabled_;
   }
 
-  StringListPrefMember* safe_browsing_whitelist_domains() const {
-    return &safe_browsing_whitelist_domains_;
-  }
-
   IntegerPrefMember* network_prediction_options() const {
     return &network_prediction_options_;
   }
@@ -128,18 +124,6 @@
 
   bool IsOffTheRecord() const;
 
-  BooleanPrefMember* force_google_safesearch() const {
-    return &force_google_safesearch_;
-  }
-
-  IntegerPrefMember* force_youtube_restrict() const {
-    return &force_youtube_restrict_;
-  }
-
-  StringPrefMember* allowed_domains_for_apps() const {
-    return &allowed_domains_for_apps_;
-  }
-
   IntegerPrefMember* incognito_availibility() const {
     return &incognito_availibility_pref_;
   }
@@ -166,11 +150,6 @@
     return data_reduction_proxy_io_data_.get();
   }
 
-  ProtocolHandlerRegistry::IOThreadDelegate*
-  protocol_handler_registry_io_thread_delegate() const {
-    return protocol_handler_registry_io_thread_delegate_.get();
-  }
-
   // Get platform ClientCertStore. May return nullptr.
   std::unique_ptr<net::ClientCertStore> CreateClientCertStore();
 
@@ -288,11 +267,7 @@
 #endif
 
   // Member variables which are pointed to by the various context objects.
-  mutable BooleanPrefMember force_google_safesearch_;
-  mutable IntegerPrefMember force_youtube_restrict_;
   mutable BooleanPrefMember safe_browsing_enabled_;
-  mutable StringListPrefMember safe_browsing_whitelist_domains_;
-  mutable StringPrefMember allowed_domains_for_apps_;
   mutable IntegerPrefMember network_prediction_options_;
   mutable IntegerPrefMember incognito_availibility_pref_;
   mutable BooleanPrefMember signed_exchange_enabled_;
@@ -311,9 +286,6 @@
   mutable std::unique_ptr<data_reduction_proxy::DataReductionProxyIOData>
       data_reduction_proxy_io_data_;
 
-  mutable scoped_refptr<ProtocolHandlerRegistry::IOThreadDelegate>
-      protocol_handler_registry_io_thread_delegate_;
-
 #if defined(OS_CHROMEOS)
   mutable std::string username_hash_;
   mutable SystemKeySlotUseType system_key_slot_use_type_;
diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.cc b/chrome/browser/push_messaging/push_messaging_service_impl.cc
index 3cb2ab9..ce505a8 100644
--- a/chrome/browser/push_messaging/push_messaging_service_impl.cc
+++ b/chrome/browser/push_messaging/push_messaging_service_impl.cc
@@ -631,7 +631,7 @@
       ->GetInstanceID(app_identifier.app_id())
       ->GetToken(NormalizeSenderInfo(application_server_key_string), kGCMScope,
                  std::map<std::string, std::string>() /* options */,
-                 false /* is_lazy */,
+                 {} /* flags */,
                  base::BindOnce(&PushMessagingServiceImpl::DidSubscribe,
                                 weak_factory_.GetWeakPtr(), app_identifier,
                                 application_server_key_string,
diff --git a/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc b/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc
index 1917623..04490ca3 100644
--- a/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc
@@ -27,6 +27,7 @@
 #include "components/ukm/content/source_url_recorder.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host.h"
+#include "content/public/test/navigation_simulator.h"
 #include "content/public/test/web_contents_tester.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_source.h"
@@ -322,7 +323,6 @@
 
   // Navigating the active tab doesn't trigger logging.
   WebContentsTester::For(test_contents_1)->NavigateAndCommit(kTestUrls[2]);
-  WebContentsTester::For(test_contents_1)->TestSetIsLoading(false);
   EXPECT_EQ(0, ukm_entry_checker_.NumNewEntriesRecorded(kEntryName));
 
   // Pinning the active tab doesn't trigger logging.
@@ -346,9 +346,12 @@
 
   // Navigating the background tab triggers logging once the page finishes
   // loading.
-  WebContentsTester::For(test_contents_2)->NavigateAndCommit(kTestUrls[0]);
+  auto navigation = content::NavigationSimulator::CreateBrowserInitiated(
+      kTestUrls[0], test_contents_2);
+  navigation->SetKeepLoading(true);
+  navigation->Commit();
   EXPECT_EQ(0, ukm_entry_checker_.NumNewEntriesRecorded(kEntryName));
-  WebContentsTester::For(test_contents_2)->TestSetIsLoading(false);
+  navigation->StopLoading();
   {
     SCOPED_TRACE("");
     ExpectNewEntry(GURL(kTestUrls[0]), kBasicMetricValues);
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc
index 8a0c272..8560740 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc
@@ -38,6 +38,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/referrer.h"
+#include "content/public/test/navigation_simulator.h"
 #include "content/public/test/web_contents_tester.h"
 #include "services/device/public/cpp/test/fake_usb_device_manager.h"
 #include "services/device/public/mojom/usb_manager.mojom.h"
@@ -116,7 +117,10 @@
     tester->SetLastActiveTime(NowTicks());
     ResourceCoordinatorTabHelper::CreateForWebContents(web_contents_);
     // Commit an URL to allow discarding.
-    tester->NavigateAndCommit(GURL("https://www.example.com"));
+    auto navigation = content::NavigationSimulator::CreateBrowserInitiated(
+        GURL("https://www.example.com"), web_contents_);
+    navigation->SetKeepLoading(true);
+    navigation->Commit();
 
     tab_strip_model_ =
         std::make_unique<TabStripModel>(&tab_strip_model_delegate_, profile());
diff --git a/chrome/browser/resource_coordinator/tab_load_tracker_unittest.cc b/chrome/browser/resource_coordinator/tab_load_tracker_unittest.cc
index de8cf4a0..514fa05b 100644
--- a/chrome/browser/resource_coordinator/tab_load_tracker_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_load_tracker_unittest.cc
@@ -17,6 +17,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/test/mock_render_process_host.h"
+#include "content/public/test/navigation_simulator.h"
 #include "content/public/test/web_contents_tester.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -28,6 +29,25 @@
 using testing::StrictMock;
 using LoadingState = TabLoadTracker::LoadingState;
 
+namespace {
+
+void NavigateAndFinishLoading(content::WebContents* web_contents,
+                              const GURL& url) {
+  content::NavigationSimulator::NavigateAndCommitFromBrowser(web_contents, url);
+}
+
+std::unique_ptr<content::NavigationSimulator> NavigateAndKeepLoading(
+    content::WebContents* web_contents,
+    const GURL& url) {
+  auto navigation =
+      content::NavigationSimulator::CreateBrowserInitiated(url, web_contents);
+  navigation->SetKeepLoading(true);
+  navigation->Commit();
+  return navigation;
+}
+
+}  // namespace
+
 // Test wrapper of TabLoadTracker that exposes some internals.
 class TestTabLoadTracker : public TabLoadTracker {
  public:
@@ -198,33 +218,28 @@
   }
 
 TEST_F(TabLoadTrackerTest, DetermineLoadingState) {
-  auto* tester1 = content::WebContentsTester::For(contents1());
-
   EXPECT_EQ(LoadingState::UNLOADED,
             tracker().DetermineLoadingState(contents1()));
 
   // Navigate to a page and expect it to be loading.
-  tester1->NavigateAndCommit(GURL("http://chromium.org"));
+  auto navigation =
+      NavigateAndKeepLoading(contents1(), GURL("http://chromium.org"));
   EXPECT_EQ(LoadingState::LOADING,
             tracker().DetermineLoadingState(contents1()));
 
   // Indicate that loading is finished and expect the state to transition.
-  tester1->TestSetIsLoading(false);
+  navigation->StopLoading();
   EXPECT_EQ(LoadingState::LOADED, tracker().DetermineLoadingState(contents1()));
 }
 
 void TabLoadTrackerTest::StateTransitionsTest(bool use_non_ui_tabs) {
   tracker().SetAllTabsAreNonUiTabs(use_non_ui_tabs);
 
-  auto* tester1 = content::WebContentsTester::For(contents1());
-  auto* tester2 = content::WebContentsTester::For(contents2());
-  auto* tester3 = content::WebContentsTester::For(contents3());
-
   // Set up the contents in UNLOADED, LOADING and LOADED states. This tests
   // each possible "entry" state.
-  tester2->NavigateAndCommit(GURL("http://foo.com"));
-  tester3->NavigateAndCommit(GURL("http://bar.com"));
-  tester3->TestSetIsLoading(false);
+  auto navigation_tab_2 =
+      NavigateAndKeepLoading(contents2(), GURL("http://foo.com"));
+  NavigateAndFinishLoading(contents3(), GURL("http://bar.com"));
 
   // Add the contents to the tracker.
   EXPECT_CALL(observer(), OnStartTracking(contents1(), LoadingState::UNLOADED));
@@ -268,7 +283,7 @@
   EXPECT_CALL(observer(),
               OnLoadingStateChange(contents2(), LoadingState::LOADING,
                                    LoadingState::LOADED));
-  tester2->TestSetIsLoading(false);
+  navigation_tab_2->StopLoading();
   // The state transition should only occur *after* the PAI signal.
   if (use_non_ui_tabs) {
     EXPECT_TAB_COUNTS(3, 1, 1, 1);
@@ -290,7 +305,8 @@
   EXPECT_CALL(observer(),
               OnLoadingStateChange(contents1(), LoadingState::UNLOADED,
                                    LoadingState::LOADING));
-  tester1->NavigateAndCommit(GURL("http://baz.com"));
+  auto navigation_tab_1 =
+      NavigateAndKeepLoading(contents1(), GURL("http://baz.com"));
   if (use_non_ui_tabs) {
     EXPECT_TAB_COUNTS(3, 0, 1, 2);
     EXPECT_UI_TAB_COUNTS(0, 0, 0, 0);
@@ -304,8 +320,8 @@
   EXPECT_CALL(observer(),
               OnLoadingStateChange(contents1(), LoadingState::LOADING,
                                    LoadingState::LOADED));
-  tester1->TestDidFailLoadWithError(GURL("http://baz.com"), 500,
-                                    base::UTF8ToUTF16("server error"));
+  navigation_tab_1->FailLoading(GURL("http://baz.com"), 500,
+                                base::UTF8ToUTF16("server error"));
   if (use_non_ui_tabs) {
     EXPECT_TAB_COUNTS(3, 0, 0, 3);
     EXPECT_UI_TAB_COUNTS(0, 0, 0, 0);
@@ -341,8 +357,7 @@
 }
 
 TEST_F(TabLoadTrackerTest, PrerenderContentsDoesNotChangeUiTabCounts) {
-  auto* tester1 = content::WebContentsTester::For(contents1());
-  tester1->NavigateAndCommit(GURL("http://baz.com"));
+  NavigateAndKeepLoading(contents1(), GURL("http://baz.com"));
 
   // Add the contents to the tracker.
   EXPECT_CALL(observer(), OnStartTracking(contents1(), LoadingState::LOADING));
@@ -390,8 +405,7 @@
 }
 
 TEST_F(TabLoadTrackerTest, SwapInUiTabContents) {
-  auto* tester1 = content::WebContentsTester::For(contents1());
-  tester1->NavigateAndCommit(GURL("http://baz.com"));
+  NavigateAndKeepLoading(contents1(), GURL("http://baz.com"));
 
   // Add the contents to the tracker.
   EXPECT_CALL(observer(), OnStartTracking(contents1(), LoadingState::LOADING));
@@ -437,8 +451,7 @@
 }
 
 TEST_F(TabLoadTrackerTest, SwapInUntrackedContents) {
-  auto* tester1 = content::WebContentsTester::For(contents1());
-  tester1->NavigateAndCommit(GURL("http://baz.com"));
+  NavigateAndKeepLoading(contents1(), GURL("http://baz.com"));
 
   // Add the contents to the tracker.
   EXPECT_CALL(observer(), OnStartTracking(contents1(), LoadingState::LOADING));
diff --git a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h
index bd817cd..fd551965 100644
--- a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h
+++ b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.h
@@ -25,7 +25,7 @@
 #include "chrome/browser/resource_coordinator/tab_manager.h"
 #include "chrome/browser/ui/browser_list_observer.h"
 #include "chromeos/dbus/debug_daemon_client.h"
-#include "components/arc/common/process.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 #include "ui/wm/public/activation_change_observer.h"
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/command_handler.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/command_handler.js
index 3f16cc7..ce199d0 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/command_handler.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/command_handler.js
@@ -268,8 +268,8 @@
           false);
       break;
     case 'showTtsSettings':
-      var ttsSettings = {url: 'chrome://settings/manageAccessibility/tts'};
-      chrome.windows.create(ttsSettings);
+      chrome.accessibilityPrivate.openSettingsSubpage(
+          'manageAccessibility/tts');
       break;
     default:
       break;
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
index 5937dfe..59a56a7 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fr.xtb
@@ -6,7 +6,7 @@
 <translation id="1012173283529841972">Élément de liste</translation>
 <translation id="1013742170491673792">recherche</translation>
 <translation id="1014370462248694370">Balayer l'écran vers la droite avec deux doigts</translation>
-<translation id="1022586497894531524">Est-ce la première fois que vous utilisez les commentaires audio de ChromeVox ? Ce didacticiel rapide explique les bases pour commencer à utiliser ChromeVox.</translation>
+<translation id="1022586497894531524">Est-ce la première fois que vous utilisez les commentaires audio de ChromeVox ? Ce tutoriel rapide explique les bases pour commencer à utiliser ChromeVox.</translation>
 <translation id="1023866615269196768">Cellule fractionnée</translation>
 <translation id="1025074108959230262">Mode permanent désactivé</translation>
 <translation id="1031961866430398710">puis</translation>
@@ -38,7 +38,7 @@
 <translation id="1206619573307042055">marquee</translation>
 <translation id="1213216066620407844">ChromeVox donne la parole à Google Chrome.</translation>
 <translation id="1225437811932752266">Félicitations ! Vous avez appris les bases pour utiliser ChromeVox. N'oubliez pas que vous pouvez ouvrir le menu de commandes ChromeVox à tout moment en appuyant sur la touche de recherche+point. Pour en savoir davantage sur ChromeVox et Chrome OS, consultez les articles ci-après.
-Une fois le didacticiel terminé, utilisez ChromeVox pour accéder au bouton de fermeture, puis cliquez sur ce dernier.</translation>
+Une fois le tutoriel terminé, utilisez ChromeVox pour accéder au bouton de fermeture, puis cliquez sur ce dernier.</translation>
 <translation id="1225969361094801578">Gris ardoise foncé</translation>
 <translation id="1229276918471378188">Renvoi précédent</translation>
 <translation id="1236794971743289975">Note de fin</translation>
@@ -201,7 +201,7 @@
 <translation id="2490721194269245365">Marron rosé</translation>
 <translation id="249330843868392562">Ouvrir les paramètres de synthèse vocale</translation>
 <translation id="2497706219848005458">Vert-jaune</translation>
-<translation id="2523609930580546572">Didacticiel ChromeVox</translation>
+<translation id="2523609930580546572">Tutoriel ChromeVox</translation>
 <translation id="2525706221823668172">Raccourcis clavier dans Chromebook</translation>
 <translation id="2549392850788122959">Le mappage du clavier <ph name="KEY" /> a été réinitialisé.</translation>
 <translation id="2553108862507765288">erreur grammaticale</translation>
@@ -221,7 +221,7 @@
 <translation id="2673280813984708147">modifie</translation>
 <translation id="267442004702508783">actualiser</translation>
 <translation id="2675533876313964202">Chartreuse</translation>
-<translation id="2684412629217766642">Fermer le didacticiel ChromeVox</translation>
+<translation id="2684412629217766642">Fermer le tutoriel ChromeVox</translation>
 <translation id="2697408785920771974">autoinl</translation>
 <translation id="2704429362613743330">{COUNT,plural, =1{parenthèse ouverte}one{# parenthèse ouverte}other{# parenthèses ouvertes}}</translation>
 <translation id="2705875883745373140">Non appuyé</translation>
@@ -257,7 +257,7 @@
 <translation id="2885764457467528513">{COUNT,plural, =1{minute}one{minute}other{minutes}}</translation>
 <translation id="2894654529758326923">Informations</translation>
 <translation id="2899328121302785497">{COUNT,plural, =1{accolade gauche}one{# accolade gauche}other{# accolades gauches}}</translation>
-<translation id="2911433807131383493">Ouvrir le didacticiel ChromeVox</translation>
+<translation id="2911433807131383493">Ouvrir le tutoriel ChromeVox</translation>
 <translation id="2912405967290226587">Balayer l'écran vers la droite avec trois doigts</translation>
 <translation id="2932083475399492303">Changer de type de ligne (ligne de structure et ligne de mise en page)</translation>
 <translation id="2942710183375260152">Bleu ardoise foncé</translation>
@@ -700,7 +700,7 @@
 <translation id="5851548754964597211">Liste d'onglets</translation>
 <translation id="5859752971144398932">Vous avez quitté la recherche.</translation>
 <translation id="5866042630553435010">Partiellement cochée</translation>
-<translation id="5867591286054666064">Lorsque vous utilisez ce didacticiel, appuyez sur n'importe quelle touche pour entendre le nom de la touche en question.</translation>
+<translation id="5867591286054666064">Lorsque vous utilisez ce tutoriel, appuyez sur n'importe quelle touche pour entendre le nom de la touche en question.</translation>
 <translation id="5869546221129391014">Grille</translation>
 <translation id="5876817486144482042">Diminuer le volume de la voix</translation>
 <translation id="5878908838135392163">Bleu poudre</translation>
diff --git a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_options.js b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_options.js
index 3d3a754..ae0862d 100644
--- a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_options.js
+++ b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_options.js
@@ -222,8 +222,8 @@
   setUpTtsButtonClickListener_: function() {
     let button = document.getElementById('ttsSettingsBtn');
     button.addEventListener('click', () => {
-      let url = 'chrome://settings/manageAccessibility/tts';
-      chrome.tabs.create({url: url});
+      chrome.accessibilityPrivate.openSettingsSubpage(
+          'manageAccessibility/tts');
     });
   }
 };
diff --git a/chrome/browser/resources/local_ntp/customize.js b/chrome/browser/resources/local_ntp/customize.js
index bf60446b..1cd8b90 100644
--- a/chrome/browser/resources/local_ntp/customize.js
+++ b/chrome/browser/resources/local_ntp/customize.js
@@ -2193,6 +2193,11 @@
     const tile = customize.createTileWithoutTitle(
         id, imageUrl, dataset, customize.colorTileInteraction,
         customize.tileOnKeyDownInteraction);
+    const label = configData.translatedStrings.colorLabelPrefix + ' ' +
+        colorArrayToHex(colorsColl[i].color);
+    tile.setAttribute('aria-label', label);
+    tile.setAttribute('title', label);
+
     $(customize.IDS.COLORS_MENU).appendChild(tile);
   }
 
diff --git a/chrome/browser/resources/local_ntp/externs.js b/chrome/browser/resources/local_ntp/externs.js
index 78f3f27..a520ad5 100644
--- a/chrome/browser/resources/local_ntp/externs.js
+++ b/chrome/browser/resources/local_ntp/externs.js
@@ -371,6 +371,7 @@
 configData.translatedStrings.backLabel;
 configData.translatedStrings.backgroundsUnavailable;
 configData.translatedStrings.clickToViewDoodle;
+configData.translatedStrings.colorLabelPrefix;
 configData.translatedStrings.connectionError;
 configData.translatedStrings.connectionErrorNoPeriod;
 configData.translatedStrings.copyLink;
diff --git a/chrome/browser/resources/local_ntp/local_ntp.html b/chrome/browser/resources/local_ntp/local_ntp.html
index a7eb7bc..6a90d88b 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.html
+++ b/chrome/browser/resources/local_ntp/local_ntp.html
@@ -314,7 +314,8 @@
               $i18n{uninstallButton}
             </button>
         </div>
-        <div id="color-picker-container" class="bg-sel-tile-bg">
+        <div id="color-picker-container" class="bg-sel-tile-bg"
+          aria-label="$i18n{colorPickerLabel}" title="$i18n{colorPickerLabel}">
           <div id="color-picker-tile" class="bg-sel-tile" tabindex="-1">
             <div id="left-semicircle"></div>
             <div id="color-picker-icon"></div>
@@ -322,7 +323,9 @@
             </input>
           </div>
         </div>
-        <div id="colors-default" class="bg-sel-tile-bg">
+        <div id="colors-default" class="bg-sel-tile-bg"
+          aria-label="$i18n{defaultThemeLabel}"
+          title="$i18n{defaultThemeLabel}">
           <div id="colors-default-icon" class="bg-sel-tile" tabindex="-1"></div>
         </div>
       </div>
diff --git a/chrome/browser/resources/omnibox/omnibox_output.js b/chrome/browser/resources/omnibox/omnibox_output.js
index fb578cad..ceccc7e 100644
--- a/chrome/browser/resources/omnibox/omnibox_output.js
+++ b/chrome/browser/resources/omnibox/omnibox_output.js
@@ -1054,6 +1054,10 @@
         ],
         OutputAnswerProperty),
     new Column(
+        ['S'], '', 'swapContentsAndDescription', false,
+        'Swap Contents and Description', ['swapContentsAndDescription'],
+        OutputBooleanProperty),
+    new Column(
         ['D'], '', 'allowedToBeDefaultMatch', true,
         'Can be Default\nA green checkmark indicates that the result can be ' +
             'the default match (i.e., can be the match that pressing enter ' +
diff --git a/chrome/browser/resources/omnibox/omnibox_output_column_widths.css b/chrome/browser/resources/omnibox/omnibox_output_column_widths.css
index beff890..45c8278 100644
--- a/chrome/browser/resources/omnibox/omnibox_output_column_widths.css
+++ b/chrome/browser/resources/omnibox/omnibox_output_column_widths.css
@@ -36,6 +36,7 @@
   width: 240%;
 }
 
+.header-swap-contents-and-description,
 .header-allowed-to-be-default-match,
 .header-starred,
 .header-has-tab-match,
diff --git a/chrome/browser/resources/settings/about_page/about_page.html b/chrome/browser/resources/settings/about_page/about_page.html
index 18c371c..37a173ce 100644
--- a/chrome/browser/resources/settings/about_page/about_page.html
+++ b/chrome/browser/resources/settings/about_page/about_page.html
@@ -23,6 +23,7 @@
 <if expr="chromeos">
 <link rel="import" href="detailed_build_info.html">
 <link rel="import" href="update_warning_dialog.html">
+<link rel="import" href="../chromeos/os_icons.html">
 <link rel="import" href="../settings_page/settings_subpage.html">
 <link rel="import" href="../reset_page/powerwash_dialog.html">
 </if>
diff --git a/chrome/browser/resources/settings/about_page/about_page.js b/chrome/browser/resources/settings/about_page/about_page.js
index 4899236f..7203d43 100644
--- a/chrome/browser/resources/settings/about_page/about_page.js
+++ b/chrome/browser/resources/settings/about_page/about_page.js
@@ -491,7 +491,7 @@
     // If Chrome OS has reached end of life, display a special icon and
     // ignore UpdateStatus.
     if (this.hasEndOfLife_) {
-      return 'settings:end-of-life';
+      return 'os-settings:end-of-life';
     }
     // </if>
 
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_section.js b/chrome/browser/resources/settings/autofill_page/passwords_section.js
index 1f552fd..864ce3f 100644
--- a/chrome/browser/resources/settings/autofill_page/passwords_section.js
+++ b/chrome/browser/resources/settings/autofill_page/passwords_section.js
@@ -156,11 +156,14 @@
   },
 
   /**
-   * The element to return focus to, when the currently active dialog is
-   * closed.
-   * @private {?HTMLElement}
+   * A stack of the elements that triggered dialog to open and should therefore
+   * receive focus when that dialog is closed. The bottom of the stack is the
+   * element that triggered the earliest open dialog and top of the stack is the
+   * element that triggered the most recent (i.e. active) dialog. If no dialog
+   * is open, the stack is empty.
+   * @private {!Array<Element>}
    */
-  activeDialogAnchor_: null,
+  activeDialogAnchorStack_: [],
 
   /**
    * @type {PasswordManagerProxy}
@@ -210,7 +213,7 @@
       this.tokenRequestManager_ = new settings.BlockingRequestManager();
     } else {
       this.tokenRequestManager_ = new settings.BlockingRequestManager(
-          () => this.showPasswordPromptDialog_ = true);
+          this.openPasswordPromptDialog_.bind(this));
     }
     // </if>
 
@@ -273,6 +276,12 @@
 
   onPasswordPromptClosed_: function() {
     this.showPasswordPromptDialog_ = false;
+    cr.ui.focusWithoutInk(assert(this.activeDialogAnchorStack_.pop()));
+  },
+
+  openPasswordPromptDialog_: function() {
+    this.activeDialogAnchorStack_.push(getDeepActiveElement());
+    this.showPasswordPromptDialog_ = true;
   },
   // </if>
 
@@ -290,8 +299,7 @@
   /** @private */
   onPasswordEditDialogClosed_: function() {
     this.showPasswordEditDialog_ = false;
-    cr.ui.focusWithoutInk(assert(this.activeDialogAnchor_));
-    this.activeDialogAnchor_ = null;
+    cr.ui.focusWithoutInk(assert(this.activeDialogAnchorStack_.pop()));
 
     // Trigger a re-evaluation of the activePassword as the visibility state of
     // the password might have changed.
@@ -376,7 +384,7 @@
     this.activePassword =
         /** @type {!PasswordListItemElement} */ (event.detail.listItem);
     menu.showAt(target);
-    this.activeDialogAnchor_ = target;
+    this.activeDialogAnchorStack_.push(target);
   },
 
   /**
@@ -389,7 +397,7 @@
         /** @type {!HTMLElement} */ (this.$$('#exportImportMenuButton'));
 
     menu.showAt(target);
-    this.activeDialogAnchor_ = target;
+    this.activeDialogAnchorStack_.push(target);
   },
 
   /**
@@ -413,8 +421,7 @@
   /** @private */
   onPasswordsExportDialogClosed_: function() {
     this.showPasswordsExportDialog_ = false;
-    cr.ui.focusWithoutInk(assert(this.activeDialogAnchor_));
-    this.activeDialogAnchor_ = null;
+    cr.ui.focusWithoutInk(assert(this.activeDialogAnchorStack_.pop()));
   },
 
   /**
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html
index bf85b1f..739b1b7b 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html
@@ -5,6 +5,7 @@
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
+<link rel="import" href="../chromeos/os_icons.html">
 <link rel="import" href="../icons.html">
 <link rel="import" href="../settings_shared_css.html">
 
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js
index ead6fe1..9ed885e 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.js
@@ -132,24 +132,24 @@
       case 'computer':
         return 'cr:computer';
       case 'phone':
-        return 'settings:smartphone';
+        return 'os-settings:smartphone';
       case 'audio':
       case 'carAudio':
-        return 'settings:headset';
+        return 'os-settings:headset';
       case 'video':
         return 'cr:videocam';
       case 'joystick':
       case 'gamepad':
-        return 'settings:gamepad';
+        return 'os-settings:gamepad';
       case 'keyboard':
       case 'keyboardMouseCombo':
-        return 'settings:keyboard';
+        return 'os-settings:keyboard';
       case 'tablet':
-        return 'settings:tablet';
+        return 'os-settings:tablet';
       case 'mouse':
-        return 'settings:mouse';
+        return 'os-settings:mouse';
       default:
-        return device.connected ? 'settings:bluetooth-connected' :
+        return device.connected ? 'os-settings:bluetooth-connected' :
                                   'cr:bluetooth';
     }
   },
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html
index 81f28b12..44dac770 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html
@@ -5,8 +5,8 @@
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
+<link rel="import" href="../chromeos/os_icons.html">
 <link rel="import" href="../i18n_setup.html">
-<link rel="import" href="../icons.html">
 <link rel="import" href="../prefs/prefs.html">
 <link rel="import" href="../prefs/prefs_behavior.html">
 <link rel="import" href="../settings_page/settings_animated_pages.html">
diff --git a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
index b841184..fd9aabb 100644
--- a/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
+++ b/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.js
@@ -172,7 +172,7 @@
     // Don't use |this.bluetoothToggleState_| here, since it has not been
     // updated yet to the latest value.
     if (!bluetoothToggleState) {
-      return 'settings:bluetooth-disabled';
+      return 'os-settings:bluetooth-disabled';
     }
     return 'cr:bluetooth';
   },
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html
index bf62308..712d1394 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html
@@ -4,6 +4,7 @@
 <link rel="import" href="../../about_page/detailed_build_info.html">
 <link rel="import" href="../../about_page/update_warning_dialog.html">
 <link rel="import" href="../../i18n_setup.html">
+<!-- TODO(crbug.com/986596): Don't use browser icons here. Fork them. -->
 <link rel="import" href="../../icons.html">
 <link rel="import" href="../../lifetime_browser_proxy.html">
 <link rel="import" href="../../prefs/prefs.html">
@@ -14,6 +15,7 @@
 <link rel="import" href="../../settings_page/settings_subpage.html">
 <link rel="import" href="../../settings_page_css.html">
 <link rel="import" href="../../settings_shared_css.html">
+<link rel="import" href="../os_icons.html">
 <link rel="import" href="../os_reset_page/os_powerwash_dialog.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js
index 85e4b1d9..f3e29ea 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.js
@@ -384,7 +384,7 @@
     // If Chrome OS has reached end of life, display a special icon and
     // ignore UpdateStatus.
     if (this.hasEndOfLife_) {
-      return 'settings:end-of-life';
+      return 'os-settings:end-of-life';
     }
 
     switch (this.currentUpdateStatusEvent_.status) {
diff --git a/chrome/browser/resources/settings/chromeos/os_icons.html b/chrome/browser/resources/settings/chromeos/os_icons.html
new file mode 100644
index 0000000..888b1bd
--- /dev/null
+++ b/chrome/browser/resources/settings/chromeos/os_icons.html
@@ -0,0 +1,69 @@
+<link rel="import" href="chrome://resources/html/polymer.html">
+
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-iconset-svg/iron-iconset-svg.html">
+
+<!--
+List icons here rather than importing large sets of (e.g. Polymer) icons.
+
+NOTE: Icons should be exported at 20x20 px and should not need viewBox.
+Many legacy icons were exported at 24px and use viewBox to scale down to 20px.
+These icons may appear blurry.
+-->
+<iron-iconset-svg name="os-settings" size="20">
+  <svg>
+    <defs>
+      <!-- Apps icon for Settings drawer -->
+      <g id="apps" viewBox="0 0 24 24">
+        <rect width="24" height="24"></rect>
+        <path d="M6 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 12c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-6 0c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0-6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 0c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4-8c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-4 2c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"></path>
+      </g>
+
+      <!-- Crostini Mascot icon for Settings drawer -->
+      <g id="crostini-mascot" fill-rule="evenodd" viewBox="0 0 24 24">
+        <rect width="24" height="24" fill="none"></rect>
+        <path d="M6.70994751,22.1802367 C3.77039152,20.9576222 1.88689678,18.4876617 1.82270453,14.1866283 C1.52620735,14.3410271 1.18877909,14.3669908 0.800057996,14.221322 C-0.312414045,13.804436 -0.0624529958,12.4120387 0.345560769,11.1705211 C0.68346303,10.142341 1.83735671,9.39181671 2.40240955,9.23479478 C3.71763772,4.05541221 6.80346772,0 12,0 C17.2584272,0 20.3654882,3.88805047 21.6436562,9.24850027 C22.2231374,9.43172978 23.3254781,10.1695473 23.6544392,11.1705211 C24.062453,12.4120387 24.312414,13.804436 23.199942,14.221322 C22.8112853,14.3669667 22.4739044,14.3410357 22.1774428,14.186705 C22.1189307,18.5169382 20.2342349,20.9750038 17.2936622,22.1879533 C17.3379726,22.2841737 17.3614392,22.3916932 17.3614392,22.5115654 C17.3614392,23.3336051 17.750632,24 14.8965517,24 C12.813813,24 12.4581871,23.5470722 12.4180882,23.0543665 C12.2796354,22.9647547 12.14026,22.8305157 12,22.8305157 C11.8594243,22.8305157 11.7197425,22.9755283 11.5809922,23.0650454 C11.536581,23.553597 11.171131,24 9.10344828,24 C6.24936798,24 6.63856075,23.3336051 6.63856075,22.5115654 C6.63856075,22.3884786 6.66330281,22.278416 6.70994751,22.1802367 Z M12,20.3378361 C17.4851654,20.3378361 19.4630542,17.934489 19.4630542,12.6147346 C19.4630542,8.20063746 17.6641739,4.14700996 14.6790451,3.47027327 C13.7222433,3.25336374 13.052482,5.61336212 12,5.61336212 C10.947518,5.61336212 10.1820765,3.25336374 9.32095491,3.47027327 C6.32316904,4.22539115 4.53694581,8.43392639 4.53694581,12.6147346 C4.53694581,17.6346061 6.51483457,20.3378361 12,20.3378361 Z M8.27586207,9.99377535 C7.59026721,9.99377535 7.03448276,9.42257974 7.03448276,8.71797424 C7.03448276,8.01336875 7.59026721,7.44217314 8.27586207,7.44217314 C8.96145693,7.44217314 9.51724138,8.01336875 9.51724138,8.71797424 C9.51724138,9.42257974 8.96145693,9.99377535 8.27586207,9.99377535 Z M15.7241379,9.99377535 C15.0385431,9.99377535 14.4827586,9.42257974 14.4827586,8.71797424 C14.4827586,8.01336875 15.0385431,7.44217314 15.7241379,7.44217314 C16.4097328,7.44217314 16.9655172,8.01336875 16.9655172,8.71797424 C16.9655172,9.42257974 16.4097328,9.99377535 15.7241379,9.99377535 Z M12.224615,10.6827627 L13.9283449,11.4510541 C14.2234366,11.5841248 14.3564393,11.9349546 14.2254148,12.2346546 C14.1996198,12.293657 14.1645229,12.3479919 14.1215061,12.39552 L12.4275305,14.2671455 C12.2090286,14.5085621 11.8392003,14.5243719 11.6014958,14.3024578 C11.5890079,14.2907994 11.5770255,14.2785946 11.5655826,14.265878 L9.87720766,12.3895636 C9.65939502,12.1475054 9.67603268,11.771949 9.91436891,11.5507349 C9.9604013,11.5080095 10.012868,11.4730393 10.0697797,11.4471502 L11.7484004,10.6835476 C11.8998356,10.6146599 12.0729604,10.6143745 12.224615,10.6827627 Z"></path>
+      </g>
+
+      <!-- Files section -->
+      <g id="folder-outline"><path d="M16 5h-4l-2-2H4c-1.1 0-1.99.9-1.99 2L2 15c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 10H4V7h12v8z"></path></g>
+
+      <!-- MultiDevice Settings UI -->
+      <g id="multidevice-better-together-suite" viewBox="0 0 24 24"><path d="M17,1.01 L7,1 C5.9,1 5,1.9 5,3 L5,21 C5,22.1 5.9,23 7,23 L17,23 C18.1,23 19,22.1 19,21 L19,3 C19,1.9 18.1,1.01 17,1.01 Z M17,21 L7,21 L7,20 L17,20 L17,21 Z M17,18 L7,18 L7,6 L17,6 L17,18 Z M7,4 L7,3 L17,3 L17,4 L7,4 Z"></path></g>
+      <g id="multidevice-smart-lock" viewBox="0 0 24 24"><path d="M18,9 L17,9 L17,7 C17,4.24 14.76,2 12,2 C9.24,2 7,4.24 7,7 L7,9 L6,9 C4.9,9 4,9.9 4,11 L4,21 C4,22.1 4.9,23 6,23 L18,23 C19.1,23 20,22.1 20,21 L20,11 C20,9.9 19.1,9 18,9 Z M9,7 C9,5.34 10.34,4 12,4 C13.66,4 15,5.34 15,7 L15,9 L9,9 L9,7 Z M18,21 L6,21 L6,11 L18,11 L18,21 Z M12,18 C13.1,18 14,17.1 14,16 C14,14.9 13.1,14 12,14 C10.9,14 10,14.9 10,16 C10,17.1 10.9,18 12,18 Z"></path></g>
+      <g id="multidevice-messages" viewBox="0 0 24 24"><path d="M19.9593506,2 C21.0593506,2 22,2.89658203 22,3.99658203 L22,16.0036621 C22,17.1036621 21.0593506,18.0036621 19.9593506,18.0036621 L6.00878906,18.0036621 L2.00878906,22.4 L2.01878906,3.99658203 C2.01878906,2.89658203 2.90878906,2 4.00878906,2 L19.9593506,2 Z M8,8.56896973 L4.5,12 L8,15.6103516 L8,13 L14,13 L14,11 L8,11 L8,8.56896973 Z M20.5688477,7 L17,3.57207031 L17,6 L11,6 L11,8 L17,8 L17,10.5720703 L20.5688477,7 Z"></path></g>
+
+      <!-- Material icon from http://icons/ -->
+      <g id="play-prism" viewBox="0 0 24 24"><path d="M20.18 10.88l-3.06-1.74L14.26 12l2.86 2.86 3.06-1.74c.55-.31.82-.71.82-1.12 0-.41-.27-.81-.82-1.12zM4.71 2.45l8.42 8.42 2.55-2.55-10.7-6.06c-.07-.04-.14-.07-.21-.1-.17-.07-.3.05-.15.21.03.02.06.05.09.08zm0 19.1l-.08.08c-.15.15-.02.28.15.21.07-.03.14-.06.21-.1l10.69-6.06-2.55-2.55s-7.2 7.21-8.42 8.42zM12 12L3.38 3.38c-.19-.19-.38-.07-.38.19v16.86c0 .26.19.38.38.19L12 12z"></path></g>
+
+      <!-- Plugin VM icon for Settings drawer -->
+      <g id="plugin-vm" viewBox="0 0 24 24"><path transform="scale(1.2)" d="M7 12v4H4V4a1 1 0 0 1 1-1h8a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3H7zm0-6v3h5a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1H7z"></path></g>
+
+      <!-- Keep alphabetized. -->
+
+      <!--
+      These icons are copied from Polymer's iron-icons and kept in sorted order.
+      See http://goo.gl/Y1OdAq for instructions on adding additional icons.
+      -->
+      <g id="access-time" viewBox="0 0 24 24"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g>
+      <g id="alert-device-out-of-range" fill="none" fill-rule="evenodd" viewBox="0 0 24 24"><path d="M-1-1h20v20H-1z"></path><path fill="#C53929" fill-rule="nonzero" d="M8.167 11.5h1.666v1.667H8.167V11.5zm0-6.667h1.666v5H8.167v-5zM8.992.667C4.392.667.667 4.4.667 9s3.725 8.333 8.325 8.333c4.608 0 8.341-3.733 8.341-8.333S13.6.667 8.992.667zm.008 15A6.665 6.665 0 0 1 2.333 9 6.665 6.665 0 0 1 9 2.333 6.665 6.665 0 0 1 15.667 9 6.665 6.665 0 0 1 9 15.667z"></path></g>
+      <g id="bluetooth-connected" viewBox="0 0 24 24"><path d="M7 12l-2-2-2 2 2 2 2-2zm10.71-4.29L12 2h-1v7.59L6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 5.83l1.88 1.88L13 9.59V5.83zm1.88 10.46L13 18.17v-3.76l1.88 1.88zM19 10l-2 2 2 2 2-2-2-2z"></path></g>
+      <g id="bluetooth-disabled" viewBox="0 0 24 24"><path d="M13 5.83l1.88 1.88-1.6 1.6 1.41 1.41 3.02-3.02L12 2h-1v5.03l2 2v-3.2zM5.41 4L4 5.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l4.29-4.29 2.3 2.29L20 18.59 5.41 4zM13 18.17v-3.76l1.88 1.88L13 18.17z"></path></g>
+      <g id="chevron-left" viewBox="0 0 24 24"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"</path></g>
+      <g id="end-of-life" viewBox="0 0 24 24"><path d="M4.574 2.916H4.55l.01.01.014-.01zM2.5 4.968v.023a.18.18 0 0 1 .01-.013l-.01-.01zm14.585 10.49v-.024l-.01.013.01.01zm.223 1.817l-.933-.95-4.106-4.11L8.026 7.99 3.675 3.635l-.942-.941-.712-.713L1 3.002l1.733 1.733A9.056 9.056 0 0 0 1.05 9.98c0 1.95.628 3.748 1.683 5.22.574.8 1.274 1.501 2.074 2.075a8.918 8.918 0 0 0 5.218 1.684 8.918 8.918 0 0 0 5.218-1.684L16.991 19l1.02-1.021-.703-.704zM15.243 2.684A8.922 8.922 0 0 0 10.025 1a8.922 8.922 0 0 0-5.218 1.684c-.005.003 4.135 4.16 4.135 4.16l1.083-1.814L15.042 11h-1.846l4.11 4.214a8.939 8.939 0 0 0 .011-10.456 9.021 9.021 0 0 0-2.074-2.074zM12 15H7.012v-3.989L4.5 11l2.227-1.876L12 14.6v.4z" fill="#DB4437" fill-rule="evenodd"></path></g>
+      <g id="gamepad" viewBox="0 0 24 24"><path d="M15 7.5V2H9v5.5l3 3 3-3zM7.5 9H2v6h5.5l3-3-3-3zM9 16.5V22h6v-5.5l-3-3-3 3zM16.5 9l-3 3 3 3H22V9h-5.5z"></path></g>
+      <g id="headset" viewBox="0 0 24 24"><path d="M12 1c-4.97 0-9 4.03-9 9v7c0 1.66 1.34 3 3 3h3v-8H5v-2c0-3.87 3.13-7 7-7s7 3.13 7 7v2h-4v8h3c1.66 0 3-1.34 3-3v-7c0-4.97-4.03-9-9-9z"></path></g>
+      <g id="keyboard" viewBox="0 0 24 24"><path d="M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"></path></g>
+      <g id="laptop-chromebook" viewBox="0 0 24 24"><path d="M22 18V3H2v15H0v2h24v-2h-2zm-8 0h-4v-1h4v1zm6-3H4V5h16v10z"></path></g>
+      <g id="mouse" viewBox="0 0 24 24"><path d="M13 1.07V9h7c0-4.08-3.05-7.44-7-7.93zM4 15c0 4.42 3.58 8 8 8s8-3.58 8-8v-4H4v4zm7-13.93C7.05 1.56 4 4.92 4 9h7V1.07z"></path></g>
+      <g id="network-wifi" viewBox="0 0 24 24"><path fill-opacity=".3" d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"></path><path d="M3.53 10.95l8.46 10.54.01.01.01-.01 8.46-10.54C20.04 10.62 16.81 8 12 8c-4.81 0-8.04 2.62-8.47 2.95z"></path></g>
+      <g id="signal-cellular-0-bar" viewBox="0 0 24 24"><path fill-opacity=".3" d="M2 22h20V2z"></path></g>
+      <g id="signal-cellular-1-bar" viewBox="0 0 24 24"><path fill-opacity=".3" d="M2 22h20V2z"></path><path d="M12 12L2 22h10z"></path></g>
+      <g id="signal-cellular-2-bar" viewBox="0 0 24 24"><path fill-opacity=".3" d="M2 22h20V2z"></path><path d="M14 10L2 22h12z"></path></g>
+      <g id="signal-cellular-3-bar" viewBox="0 0 24 24"><path fill-opacity=".3" d="M2 22h20V2z"></path><path d="M17 7L2 22h15z"></path></g>
+      <g id="signal-cellular-4-bar" viewBox="0 0 24 24"><path d="M2 22h20V2z"></path></g>
+      <g id="smartphone" viewBox="0 0 24 24"><path d="M17 1.01L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"></path></g>
+      <g id="tablet" viewBox="0 0 24 24"><path d="M21 4H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h18c1.1 0 1.99-.9 1.99-2L23 6c0-1.1-.9-2-2-2zm-2 14H5V6h14v12z"></path></g>
+      <!-- Keep alphabetized. -->
+    </defs>
+  </svg>
+</iron-iconset-svg>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html
index 8350b85d..16a9604 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html
+++ b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html
@@ -6,9 +6,11 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-selector/iron-selector.html">
+<!-- TODO(crbug.com/986596): Don't use browser icons here. Fork them. -->
 <link rel="import" href="../../icons.html">
 <link rel="import" href="../../route.html">
 <link rel="import" href="../../settings_shared_css.html">
+<link rel="import" href="../os_icons.html">
 
 <dom-module id="os-settings-menu">
   <template>
@@ -137,7 +139,7 @@
         role="navigation" on-click="onLinkClick_">
       <a href="/internet">
         <div class="item">
-          <iron-icon icon="settings:network-wifi"></iron-icon>
+          <iron-icon icon="os-settings:network-wifi"></iron-icon>
           $i18n{internetPageTitle}
         </div>
       </a>
@@ -150,7 +152,7 @@
       <a id="multidevice" href="/multidevice"
           hidden="[[isGuestMode_]]">
         <div class="item">
-          <iron-icon icon="settings:multidevice-better-together-suite">
+          <iron-icon icon="os-settings:multidevice-better-together-suite">
           </iron-icon>
           $i18n{multidevicePageTitle}
         </div>
@@ -170,7 +172,7 @@
       </a>
       <a href="/device">
         <div class="item">
-          <iron-icon icon="settings:laptop-chromebook"></iron-icon>
+          <iron-icon icon="os-settings:laptop-chromebook"></iron-icon>
           $i18n{devicePageTitle}
         </div>
       </a>
@@ -182,25 +184,25 @@
       </a>
       <a href="/apps" hidden="[[!showApps]]">
         <div class="item">
-          <iron-icon icon="settings:apps"></iron-icon>
+          <iron-icon icon="os-settings:apps"></iron-icon>
           $i18n{appsPageTitle}
         </div>
       </a>
       <a href="/androidApps" hidden="[[!showAndroidApps]]">
         <div class="item">
-          <iron-icon icon="settings:play-prism"></iron-icon>
+          <iron-icon icon="os-settings:play-prism"></iron-icon>
           $i18n{androidAppsPageTitle}
         </div>
       </a>
       <a href="/crostini" hidden="[[!showCrostini]]">
         <div class="item">
-          <iron-icon icon="settings:crostini-mascot"></iron-icon>
+          <iron-icon icon="os-settings:crostini-mascot"></iron-icon>
           $i18n{crostiniPageTitle}
         </div>
       </a>
       <a href="/pluginVm" hidden="[[!showPluginVm]]">
         <div class="item">
-          <iron-icon icon="settings:plugin-vm"></iron-icon>
+          <iron-icon icon="os-settings:plugin-vm"></iron-icon>
           $i18n{pluginVmPageTitle}
         </div>
       </a>
@@ -215,7 +217,7 @@
             role="navigation" on-click="onLinkClick_">
           <a href="/dateTime">
             <div class="item">
-              <iron-icon icon="settings:access-time"></iron-icon>
+              <iron-icon icon="os-settings:access-time"></iron-icon>
               $i18n{dateTimePageTitle}
             </div>
           </a>
@@ -233,7 +235,7 @@
           </a>
           <a href="/files" hidden="[[isGuestMode_]]">
             <div class="item">
-              <iron-icon icon="cr:file-download"></iron-icon>
+              <iron-icon icon="os-settings:folder-outline"></iron-icon>
               $i18n{filesPageTitle}
             </div>
           </a>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_settings_page/BUILD.gn
index e34d80d..11525a1 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_settings_page/BUILD.gn
@@ -17,6 +17,7 @@
     "../..:search_settings",
     "../../android_apps_page:android_apps_browser_proxy",
     "../../chrome_cleanup_page:chrome_cleanup_proxy",
+    "../../prefs:prefs_behavior",
     "../../settings_page:main_page_behavior",
     "//ui/webui/resources/js:load_time_data",
     "//ui/webui/resources/js:web_ui_listener_behavior",
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html
index e66c0e0..493c304 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html
@@ -18,19 +18,30 @@
 <link rel="import" href="../../bluetooth_page/bluetooth_page.html">
 <link rel="import" href="../../crostini_page/crostini_page.html">
 <link rel="import" href="../../plugin_vm_page/plugin_vm_page.html">
+<link rel="import" href="../../prefs/prefs_behavior.html">
 <link rel="import" href="../../device_page/device_page.html">
 <link rel="import" href="../../internet_page/internet_page.html">
 <link rel="import" href="../../multidevice_page/multidevice_page.html">
 
 <dom-module id="os-settings-page">
   <template>
-    <style include="settings-page-styles cr-hidden-style">
+    <style include="settings-page-styles cr-hidden-style settings-shared">
       :host([is-subpage-animating]) {
         /* Prevent an unwanted horizontal scrollbar when transitioning back from
          * a sub-page. */
         overflow: hidden;
       }
 
+      .banner {
+        @apply --cr-card-elevation;
+        align-items: center;
+        background-color: var(--cr-card-background-color);
+        border-radius: var(--cr-card-border-radius);
+        display: flex;
+        margin-bottom: var(--cr-section-vertical-margin);
+        margin-top: var(--cr-section-vertical-margin);
+      }
+
       #advancedToggle {
         --ink-color: currentColor;
         align-items: center;
@@ -50,13 +61,13 @@
         font-weight: 600;
       }
 
-      #secondaryUserBanner {
-        @apply --cr-card-elevation;
-        align-items: center;
-        background-color: white;
-        border-radius: 2px;
-        display: flex;
-        margin: 21px 0;
+      #browserSettingsBanner {
+        color: var(--cr-secondary-text-color);
+        font-weight: 500;
+      }
+
+      #openInNewBrowserSettingsIcon {
+        margin-inline-start: 0;
       }
 
       #secondaryUserIcon {
@@ -90,8 +101,24 @@
     </style>
     <template is="dom-if" if="[[showBasicPage_(
         currentRoute_, inSearchMode, hasExpandedSection_)]]">
+      <template is="dom-if"
+          if="[[prefs.settings.cros.show_browser_banner.value]]">
+        <div id="browserSettingsBanner" class="settings-box banner">
+          <div class="start">
+            <span>$i18nRaw{browserSettingsBannerText}</span>
+            <a href="chrome://settings" target="_blank">
+              <iron-icon id="openInNewBrowserSettingsIcon"
+                  icon="cr:open-in-new"></iron-icon>
+            </a>
+          </div>
+          <cr-icon-button class="icon-clear"
+              on-click="onHideBrowserSettingsBannerClick_">
+          </cr-icon-button>
+        </div>
+      </template>
       <div id="basicPage">
-        <div id="secondaryUserBanner" hidden="[[!showSecondaryUserBanner_]]">
+        <div id="secondaryUserBanner" class="banner"
+            hidden="[[!showSecondaryUserBanner_]]">
           <div id="secondaryUserIcon"></div>
           <div class="flex">$i18n{secondaryUserBannerText}</div>
         </div>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.js b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.js
index 026704bd..bd4558c 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.js
@@ -12,6 +12,7 @@
   behaviors: [
     settings.MainPageBehavior,
     settings.RouteObserverBehavior,
+    PrefsBehavior,
     WebUIListenerBehavior,
   ],
 
@@ -222,6 +223,11 @@
     return false;
   },
 
+  /** @private */
+  onHideBrowserSettingsBannerClick_: function() {
+    this.setPrefValue('settings.cros.show_browser_banner', false);
+  },
+
   /**
    * Hides everything but the newly expanded subpage.
    * @private
diff --git a/chrome/browser/resources/settings/device_page/display_overscan_dialog.html b/chrome/browser/resources/settings/device_page/display_overscan_dialog.html
index 514f8d7..7fcd324 100644
--- a/chrome/browser/resources/settings/device_page/display_overscan_dialog.html
+++ b/chrome/browser/resources/settings/device_page/display_overscan_dialog.html
@@ -5,7 +5,7 @@
 <link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
-<link rel="import" href="../icons.html">
+<link rel="import" href="../chromeos/os_icons.html">
 <link rel="import" href="../settings_shared_css.html">
 
 <dom-module id="settings-display-overscan-dialog">
@@ -55,7 +55,7 @@
               <iron-icon icon="cr:expand-less"></iron-icon>
             </div>
             <div class="layout horizontal">
-              <iron-icon icon="settings:chevron-left"></iron-icon>
+              <iron-icon icon="os-settings:chevron-left"></iron-icon>
               <iron-icon icon="cr:expand-more"></iron-icon>
               <iron-icon icon="cr:chevron-right"></iron-icon>
             </div>
diff --git a/chrome/browser/resources/settings/icons.html b/chrome/browser/resources/settings/icons.html
index 95339f3..cbf6938 100644
--- a/chrome/browser/resources/settings/icons.html
+++ b/chrome/browser/resources/settings/icons.html
@@ -4,6 +4,7 @@
 
 <!--
 List icons here rather than importing large sets of (e.g. Polymer) icons.
+NOTE: Chrome OS icons go in ./chromeos/os_icons.html.
 -->
 <iron-iconset-svg name="settings20" size="20">
   <svg>
@@ -17,6 +18,8 @@
   </svg>
 </iron-iconset-svg>
 
+<!-- NOTE: In the common case that the final icon will be 20x20, export the SVG
+     at 20px and place it in the section above. -->
 <iron-iconset-svg name="settings" size="24">
   <svg>
     <defs>
@@ -39,31 +42,6 @@
         <path fill="none" d="M1 1h22v22H1z"></path>
       </g>
 
-<if expr="chromeos">
-      <!-- Icons from http://icons/ -->
-      <g id="play-prism"><path d="M20.18 10.88l-3.06-1.74L14.26 12l2.86 2.86 3.06-1.74c.55-.31.82-.71.82-1.12 0-.41-.27-.81-.82-1.12zM4.71 2.45l8.42 8.42 2.55-2.55-10.7-6.06c-.07-.04-.14-.07-.21-.1-.17-.07-.3.05-.15.21.03.02.06.05.09.08zm0 19.1l-.08.08c-.15.15-.02.28.15.21.07-.03.14-.06.21-.1l10.69-6.06-2.55-2.55s-7.2 7.21-8.42 8.42zM12 12L3.38 3.38c-.19-.19-.38-.07-.38.19v16.86c0 .26.19.38.38.19L12 12z"></path></g>
-
-      <!-- Apps icon for Settings drawer -->
-      <g id="apps">
-        <rect width="24" height="24"></rect>
-        <path d="M6 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 12c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-6 0c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0-6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 0c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4-8c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-4 2c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6 6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"></path>
-      </g>
-
-      <!-- Crostini Mascot icon for Settings drawer -->
-      <g id="crostini-mascot" fill-rule="evenodd">
-        <rect width="24" height="24" fill="none"></rect>
-        <path d="M6.70994751,22.1802367 C3.77039152,20.9576222 1.88689678,18.4876617 1.82270453,14.1866283 C1.52620735,14.3410271 1.18877909,14.3669908 0.800057996,14.221322 C-0.312414045,13.804436 -0.0624529958,12.4120387 0.345560769,11.1705211 C0.68346303,10.142341 1.83735671,9.39181671 2.40240955,9.23479478 C3.71763772,4.05541221 6.80346772,0 12,0 C17.2584272,0 20.3654882,3.88805047 21.6436562,9.24850027 C22.2231374,9.43172978 23.3254781,10.1695473 23.6544392,11.1705211 C24.062453,12.4120387 24.312414,13.804436 23.199942,14.221322 C22.8112853,14.3669667 22.4739044,14.3410357 22.1774428,14.186705 C22.1189307,18.5169382 20.2342349,20.9750038 17.2936622,22.1879533 C17.3379726,22.2841737 17.3614392,22.3916932 17.3614392,22.5115654 C17.3614392,23.3336051 17.750632,24 14.8965517,24 C12.813813,24 12.4581871,23.5470722 12.4180882,23.0543665 C12.2796354,22.9647547 12.14026,22.8305157 12,22.8305157 C11.8594243,22.8305157 11.7197425,22.9755283 11.5809922,23.0650454 C11.536581,23.553597 11.171131,24 9.10344828,24 C6.24936798,24 6.63856075,23.3336051 6.63856075,22.5115654 C6.63856075,22.3884786 6.66330281,22.278416 6.70994751,22.1802367 Z M12,20.3378361 C17.4851654,20.3378361 19.4630542,17.934489 19.4630542,12.6147346 C19.4630542,8.20063746 17.6641739,4.14700996 14.6790451,3.47027327 C13.7222433,3.25336374 13.052482,5.61336212 12,5.61336212 C10.947518,5.61336212 10.1820765,3.25336374 9.32095491,3.47027327 C6.32316904,4.22539115 4.53694581,8.43392639 4.53694581,12.6147346 C4.53694581,17.6346061 6.51483457,20.3378361 12,20.3378361 Z M8.27586207,9.99377535 C7.59026721,9.99377535 7.03448276,9.42257974 7.03448276,8.71797424 C7.03448276,8.01336875 7.59026721,7.44217314 8.27586207,7.44217314 C8.96145693,7.44217314 9.51724138,8.01336875 9.51724138,8.71797424 C9.51724138,9.42257974 8.96145693,9.99377535 8.27586207,9.99377535 Z M15.7241379,9.99377535 C15.0385431,9.99377535 14.4827586,9.42257974 14.4827586,8.71797424 C14.4827586,8.01336875 15.0385431,7.44217314 15.7241379,7.44217314 C16.4097328,7.44217314 16.9655172,8.01336875 16.9655172,8.71797424 C16.9655172,9.42257974 16.4097328,9.99377535 15.7241379,9.99377535 Z M12.224615,10.6827627 L13.9283449,11.4510541 C14.2234366,11.5841248 14.3564393,11.9349546 14.2254148,12.2346546 C14.1996198,12.293657 14.1645229,12.3479919 14.1215061,12.39552 L12.4275305,14.2671455 C12.2090286,14.5085621 11.8392003,14.5243719 11.6014958,14.3024578 C11.5890079,14.2907994 11.5770255,14.2785946 11.5655826,14.265878 L9.87720766,12.3895636 C9.65939502,12.1475054 9.67603268,11.771949 9.91436891,11.5507349 C9.9604013,11.5080095 10.012868,11.4730393 10.0697797,11.4471502 L11.7484004,10.6835476 C11.8998356,10.6146599 12.0729604,10.6143745 12.224615,10.6827627 Z"></path>
-      </g>
-
-      <!-- Plugin VM icon for Settings drawer -->
-      <g id="plugin-vm"><path transform="scale(1.2)" d="M7 12v4H4V4a1 1 0 0 1 1-1h8a3 3 0 0 1 3 3v3a3 3 0 0 1-3 3H7zm0-6v3h5a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1H7z"></path></g>
-
-      <!-- Icons for MultiDevice Settings UI -->
-      <g id="multidevice-better-together-suite"><path d="M17,1.01 L7,1 C5.9,1 5,1.9 5,3 L5,21 C5,22.1 5.9,23 7,23 L17,23 C18.1,23 19,22.1 19,21 L19,3 C19,1.9 18.1,1.01 17,1.01 Z M17,21 L7,21 L7,20 L17,20 L17,21 Z M17,18 L7,18 L7,6 L17,6 L17,18 Z M7,4 L7,3 L17,3 L17,4 L7,4 Z"></path></g>
-      <g id="multidevice-smart-lock"><path d="M18,9 L17,9 L17,7 C17,4.24 14.76,2 12,2 C9.24,2 7,4.24 7,7 L7,9 L6,9 C4.9,9 4,9.9 4,11 L4,21 C4,22.1 4.9,23 6,23 L18,23 C19.1,23 20,22.1 20,21 L20,11 C20,9.9 19.1,9 18,9 Z M9,7 C9,5.34 10.34,4 12,4 C13.66,4 15,5.34 15,7 L15,9 L9,9 L9,7 Z M18,21 L6,21 L6,11 L18,11 L18,21 Z M12,18 C13.1,18 14,17.1 14,16 C14,14.9 13.1,14 12,14 C10.9,14 10,14.9 10,16 C10,17.1 10.9,18 12,18 Z"></path></g>
-      <g id="multidevice-messages"><path d="M19.9593506,2 C21.0593506,2 22,2.89658203 22,3.99658203 L22,16.0036621 C22,17.1036621 21.0593506,18.0036621 19.9593506,18.0036621 L6.00878906,18.0036621 L2.00878906,22.4 L2.01878906,3.99658203 C2.01878906,2.89658203 2.90878906,2 4.00878906,2 L19.9593506,2 Z M8,8.56896973 L4.5,12 L8,15.6103516 L8,13 L14,13 L14,11 L8,11 L8,8.56896973 Z M20.5688477,7 L17,3.57207031 L17,6 L11,6 L11,8 L17,8 L17,10.5720703 L20.5688477,7 Z"></path></g>
-</if>
-
       <!-- Protected Content SVG -->
       <g id="protected-content">
         <path d="M10,15 L6,11.1783439 L7.41,9.83121019 L10,12.2961783 L16.59,6 L18,7.3566879 L10,15 Z M21,3 L3,3 C1.89,3 1,3.89 1,5 L1,17 C1,18.1 1.89,19 3,19 L8,19 L8,21 L16,21 L16,19 L21,19 C22.1,19 22.99,18.1 22.99,17 L23,5 C23,3.89 22.1,3 21,3 Z M21,17 L3,17 L3,5 L21,5 L21,17 Z"></path>
@@ -73,50 +51,21 @@
       These icons are copied from Polymer's iron-icons and kept in sorted order.
       See http://goo.gl/Y1OdAq for instructions on adding additional icons.
       -->
-<if expr="chromeos">
-      <g id="access-time"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"></path></g>
-</if>
       <g id="accessibility"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"></path></g>
       <g id="apps"><path d="M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4zm6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z"></path></g>
       <g id="assignment"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"></path></g>
-<if expr="chromeos">
-      <g id="bluetooth-connected"><path d="M7 12l-2-2-2 2 2 2 2-2zm10.71-4.29L12 2h-1v7.59L6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 5.83l1.88 1.88L13 9.59V5.83zm1.88 10.46L13 18.17v-3.76l1.88 1.88zM19 10l-2 2 2 2 2-2-2-2z"></path></g>
-      <g id="bluetooth-disabled"><path d="M13 5.83l1.88 1.88-1.6 1.6 1.41 1.41 3.02-3.02L12 2h-1v5.03l2 2v-3.2zM5.41 4L4 5.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l4.29-4.29 2.3 2.29L20 18.59 5.41 4zM13 18.17v-3.76l1.88 1.88L13 18.17z"></path></g>
-      <g id="brightness-1"><circle cx="12" cy="12" r="10"></circle></g>
-</if>
 <if expr="not chromeos">
       <g id="build"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"></path></g>
 </if>
       <g id="check-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path></g>
-<if expr="chromeos">
-      <g id="chevron-left"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"</path></g>
-</if>
       <g id="clipboard"><path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z"></path></g>
       <g id="cloud"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"></path></g>
       <g id="code"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"></path></g>
       <g id="content-copy"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"></path></g>
-<if expr="chromeos">
-      <g id="devices-other"><path d="M3 6h18V4H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4v-2H3V6zm10 6H9v1.78c-.61.55-1 1.33-1 2.22s.39 1.67 1 2.22V20h4v-1.78c.61-.55 1-1.34 1-2.22s-.39-1.67-1-2.22V12zm-2 5.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM22 8h-6c-.5 0-1 .5-1 1v10c0 .5.5 1 1 1h6c.5 0 1-.5 1-1V9c0-.5-.5-1-1-1zm-1 10h-4v-8h4v8z"></path></g>
-</if>
       <g id="exit-to-app"><path d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"></path></g>
-<if expr="chromeos">
-      <g id="fingerprint"><path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2.57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.79 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z"></path></g>
-      <g id="gamepad"><path d="M15 7.5V2H9v5.5l3 3 3-3zM7.5 9H2v6h5.5l3-3-3-3zM9 16.5V22h6v-5.5l-3-3-3 3zM16.5 9l-3 3 3 3H22V9h-5.5z"></path></g>
-      <g id="headset"><path d="M12 1c-4.97 0-9 4.03-9 9v7c0 1.66 1.34 3 3 3h3v-8H5v-2c0-3.87 3.13-7 7-7s7 3.13 7 7v2h-4v8h3c1.66 0 3-1.34 3-3v-7c0-4.97-4.03-9-9-9z"></path></g>
-      <g id="keyboard"><path d="M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"></path></g>
-</if>
       <g id="language"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"></path></g>
-<if expr="chromeos">
-      <g id="laptop-chromebook"><path d="M22 18V3H2v15H0v2h24v-2h-2zm-8 0h-4v-1h4v1zm6-3H4V5h16v10z"></path></g>
-</if>
       <g id="midi"><path d="M21,19.1H3V5h18V19.1z M21,3H3C1.9,3,1,3.9,1,5v14c0,1.1,0.9,2,2,2h18c1.1,0,2-0.9,2-2V5C23,3.9,22.1,3,21,3z"></path><path fill="none" d="M21,19.1H3V5h18V19.1z M21,3H3C1.9,3,1,3.9,1,5v14c0,1.1,0.9,2,2,2h18c1.1,0,2-0.9,2-2V5C23,3.9,22.1,3,21,3z"></path><path d="M14,5h3v8h-3V5z"></path><path d="M15,12h1v8h-1V12z"></path><path fill="none" d="M0,0h24v24H0V0z"></path><rect x="7" y="5" width="3" height="8"></rect><rect x="8" y="12" width="1" height="8"></rect></g>
-<if expr="chromeos">
-      <g id="mouse"><path d="M13 1.07V9h7c0-4.08-3.05-7.44-7-7.93zM4 15c0 4.42 3.58 8 8 8s8-3.58 8-8v-4H4v4zm7-13.93C7.05 1.56 4 4.92 4 9h7V1.07z"></path></g>
-</if>
       <g id="music-note"><path d="M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z"></path></g>
-<if expr="chromeos">
-      <g id="network-wifi"><path fill-opacity=".3" d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"></path><path d="M3.53 10.95l8.46 10.54.01.01.01-.01 8.46-10.54C20.04 10.62 16.81 8 12 8c-4.81 0-8.04 2.62-8.47 2.95z"></path></g>
-</if>
       <g id="notifications"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"></path></g>
       <g id="pdf"><path d="M7 11.5h1v-1H7v1zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-9.5 8.5c0 .83-.67 1.5-1.5 1.5H7v2H5.5V9H8c.83 0 1.5.67 1.5 1.5v1zm10-1H17v1h1.5V13H17v2h-1.5V9h4v1.5zm-5 3c0 .83-.67 1.5-1.5 1.5h-2.5V9H13c.83 0 1.5.67 1.5 1.5v3zm-2.5 0h1v-3h-1v3z"></path><path fill="none" d="M0 0h24v24H0z"></path></g>
       <g id="palette"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"></path></g>
@@ -128,27 +77,12 @@
       <g id="rotate-right"><path d="M15.55 5.55L11 1v3.07C7.06 4.56 4 7.92 4 12s3.05 7.44 7 7.93v-2.02c-2.84-.48-5-2.94-5-5.91s2.16-5.43 5-5.91V10l4.55-4.45zM19.93 11c-.17-1.39-.72-2.73-1.62-3.89l-1.42 1.42c.54.75.88 1.6 1.02 2.47h2.02zM13 17.9v2.02c1.39-.17 2.74-.71 3.9-1.61l-1.44-1.44c-.75.54-1.59.89-2.46 1.03zm3.89-2.42l1.42 1.41c.9-1.16 1.45-2.5 1.62-3.89h-2.02c-.14.87-.48 1.72-1.02 2.48z"></path></g>
       <g id="sensors"><path d="M10 8.5c-0.8 0-1.5 0.7-1.5 1.5s0.7 1.5 1.5 1.5s1.5-0.7 1.5-1.5S10.8 8.5 10 8.5z M7.6 5.8 C6.2 6.7 5.2 8.2 5.2 10c0 1.8 1 3.4 2.4 4.2l0.8-1.4c-1-0.6-1.6-1.6-1.6-2.8c0-1.2 0.6-2.2 1.6-2.8L7.6 5.8z M14.8 10 c0-1.8-1-3.4-2.4-4.2l-0.8 1.4c0.9 0.6 1.6 1.6 1.6 2.8c0 1.2-0.6 2.2-1.6 2.8l0.8 1.4C13.8 13.4 14.8 11.8 14.8 10z M6 3 c-2.4 1.4-4 4-4 7c0 3 1.6 5.6 4 7l0.8-1.4c-1.9-1.1-3.2-3.2-3.2-5.6c0-2.4 1.3-4.5 3.2-5.6L6 3z M13.2 4.4 c1.9 1.1 3.2 3.2 3.2 5.6c0 2.4-1.3 4.5-3.2 5.6L14 17c2.4-1.4 4-4 4-7c0-3-1.6-5.6-4-7L13.2 4.4z"></path></g>
       <g id="serial-port"><path d="M22 9V7h-2V5c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-2h2v-2h-2v-2h2v-2h-2V9h2zm-4 10H4V5h14v14zM6 13h5v4H6zm6-6h4v3h-4zM6 7h5v5H6zm6 4h4v6h-4z"></path></g>
-<if expr="chromeos">
-      <g id="alert-device-out-of-range" fill="none" fill-rule="evenodd"><path d="M-1-1h20v20H-1z"></path><path fill="#C53929" fill-rule="nonzero" d="M8.167 11.5h1.666v1.667H8.167V11.5zm0-6.667h1.666v5H8.167v-5zM8.992.667C4.392.667.667 4.4.667 9s3.725 8.333 8.325 8.333c4.608 0 8.341-3.733 8.341-8.333S13.6.667 8.992.667zm.008 15A6.665 6.665 0 0 1 2.333 9 6.665 6.665 0 0 1 9 2.333 6.665 6.665 0 0 1 15.667 9 6.665 6.665 0 0 1 9 15.667z"></path></g>
-      <g id="signal-cellular-0-bar"><path fill-opacity=".3" d="M2 22h20V2z"></path></g>
-      <g id="signal-cellular-1-bar"><path fill-opacity=".3" d="M2 22h20V2z"></path><path d="M12 12L2 22h10z"></path></g>
-      <g id="signal-cellular-2-bar"><path fill-opacity=".3" d="M2 22h20V2z"></path><path d="M14 10L2 22h12z"></path></g>
-      <g id="signal-cellular-3-bar"><path fill-opacity=".3" d="M2 22h20V2z"></path><path d="M17 7L2 22h15z"></path></g>
-      <g id="signal-cellular-4-bar"><path d="M2 22h20V2z"></path></g>
-      <g id="smartphone"><path d="M17 1.01L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"></path></g>
-</if>
       <g id="supervisor-account"><path d="M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 16.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.66 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2.37-3.47C10.5 13.1 9.66 13 9 13z"></path></g>
       <g id="sync-disabled"><path d="M10 6.35V4.26c-.8.21-1.55.54-2.23.96l1.46 1.46c.25-.12.5-.24.77-.33zm-7.14-.94l2.36 2.36C4.45 8.99 4 10.44 4 12c0 2.21.91 4.2 2.36 5.64L4 20h6v-6l-2.24 2.24C6.68 15.15 6 13.66 6 12c0-1 .25-1.94.68-2.77l8.08 8.08c-.25.13-.5.25-.77.34v2.09c.8-.21 1.55-.54 2.23-.96l2.36 2.36 1.27-1.27L4.14 4.14 2.86 5.41zM20 4h-6v6l2.24-2.24C17.32 8.85 18 10.34 18 12c0 1-.25 1.94-.68 2.77l1.46 1.46C19.55 15.01 20 13.56 20 12c0-2.21-.91-4.2-2.36-5.64L20 4z"></path></g>
       <g id="sync-problem"><path d="M3 12c0 2.21.91 4.2 2.36 5.64L3 20h6v-6l-2.24 2.24C5.68 15.15 5 13.66 5 12c0-2.61 1.67-4.83 4-5.65V4.26C5.55 5.15 3 8.27 3 12zm8 5h2v-2h-2v2zM21 4h-6v6l2.24-2.24C18.32 8.85 19 10.34 19 12c0 2.61-1.67 4.83-4 5.65v2.09c3.45-.89 6-4.01 6-7.74 0-2.21-.91-4.2-2.36-5.64L21 4zm-10 9h2V7h-2v6z"></path></g>
-<if expr="chromeos">
-      <g id="tablet"><path d="M21 4H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h18c1.1 0 1.99-.9 1.99-2L23 6c0-1.1-.9-2-2-2zm-2 14H5V6h14v12z"></path></g>
-</if>
       <g id="usb"><path d="M15 7v4h1v2h-3V5h2l-3-4-3 4h2v8H8v-2.07c.7-.37 1.2-1.08 1.2-1.93 0-1.21-.99-2.2-2.2-2.2-1.21 0-2.2.99-2.2 2.2 0 .85.5 1.56 1.2 1.93V13c0 1.11.89 2 2 2h3v3.05c-.71.37-1.2 1.1-1.2 1.95 0 1.22.99 2.2 2.2 2.2 1.21 0 2.2-.98 2.2-2.2 0-.85-.49-1.58-1.2-1.95V15h3c1.11 0 2-.89 2-2v-2h1V7h-4z"></path></g>
       <g id="volume-up"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"></path></g>
       <g id="bluetooth-scanning"><path d="M14.24 12.01l2.32 2.32c.28-.72.44-1.51.44-2.33 0-.82-.16-1.59-.43-2.31l-2.33 2.32zm5.29-5.3l-1.26 1.26c.63 1.21.98 2.57.98 4.02s-.36 2.82-.98 4.02l1.2 1.2a9.936 9.936 0 0 0 1.54-5.31c-.01-1.89-.55-3.67-1.48-5.19zm-3.82 1L10 2H9v7.59L4.41 5 3 6.41 8.59 12 3 17.59 4.41 19 9 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM11 5.83l1.88 1.88L11 9.59V5.83zm1.88 10.46L11 18.17v-3.76l1.88 1.88z"></path></g>
-<if expr="chromeos">
-      <g id="end-of-life"><path d="M4.574 2.916H4.55l.01.01.014-.01zM2.5 4.968v.023a.18.18 0 0 1 .01-.013l-.01-.01zm14.585 10.49v-.024l-.01.013.01.01zm.223 1.817l-.933-.95-4.106-4.11L8.026 7.99 3.675 3.635l-.942-.941-.712-.713L1 3.002l1.733 1.733A9.056 9.056 0 0 0 1.05 9.98c0 1.95.628 3.748 1.683 5.22.574.8 1.274 1.501 2.074 2.075a8.918 8.918 0 0 0 5.218 1.684 8.918 8.918 0 0 0 5.218-1.684L16.991 19l1.02-1.021-.703-.704zM15.243 2.684A8.922 8.922 0 0 0 10.025 1a8.922 8.922 0 0 0-5.218 1.684c-.005.003 4.135 4.16 4.135 4.16l1.083-1.814L15.042 11h-1.846l4.11 4.214a8.939 8.939 0 0 0 .011-10.456 9.021 9.021 0 0 0-2.074-2.074zM12 15H7.012v-3.989L4.5 11l2.227-1.876L12 14.6v.4z" fill="#DB4437" fill-rule="evenodd"></path></g>
-</if>
 <if expr="not chromeos">
       <g id="web"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 14H4v-4h11v4zm0-5H4V9h11v4zm5 5h-4V9h4v9z"></path></g>
 </if>
diff --git a/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html b/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html
index 8e8b914..b9d257a 100644
--- a/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html
+++ b/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html
@@ -6,7 +6,7 @@
 <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
-<link rel="import" href="../icons.html">
+<link rel="import" href="../chromeos/os_icons.html">
 <link rel="import" href="../route.html">
 <link rel="import" href="../settings_shared_css.html">
 
@@ -87,7 +87,8 @@
           </div>
           <div class="flex"></div>
           <div id="host-device-lost-container" hidden$="[[!outOfRange]]">
-            <iron-icon icon="settings:alert-device-out-of-range"></iron-icon>
+            <iron-icon icon="os-settings:alert-device-out-of-range">
+            </iron-icon>
             $i18n{tetherPhoneOutOfRange}
           </div>
         </div>
diff --git a/chrome/browser/resources/settings/internet_page/tether_connection_dialog.js b/chrome/browser/resources/settings/internet_page/tether_connection_dialog.js
index 775051fa..2eeb332 100644
--- a/chrome/browser/resources/settings/internet_page/tether_connection_dialog.js
+++ b/chrome/browser/resources/settings/internet_page/tether_connection_dialog.js
@@ -111,7 +111,7 @@
     if (signalStrength === undefined) {
       signalStrength = 4;
     }
-    return 'settings:signal-cellular-' +
+    return 'os-settings:signal-cellular-' +
         Math.min(4, Math.max(signalStrength, 0)) + '-bar';
   },
 
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.html b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.html
index 12a3bc36e..adc498c 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.html
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.html
@@ -1,5 +1,7 @@
 <link rel="import" href="chrome://resources/html/cr.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
+<!-- Anyone using this behavior might be using the referenced icons. -->
+<link rel="import" href="../chromeos/os_icons.html">
 <link rel="import" href="../i18n_setup.html">
 <link rel="import" href="multidevice_constants.html">
 <script src="multidevice_feature_behavior.js"></script>
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js
index d4468ab..727822ca 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_feature_behavior.js
@@ -116,11 +116,11 @@
   getIconName: function(feature) {
     switch (feature) {
       case settings.MultiDeviceFeature.BETTER_TOGETHER_SUITE:
-        return 'settings:multidevice-better-together-suite';
+        return 'os-settings:multidevice-better-together-suite';
       case settings.MultiDeviceFeature.MESSAGES:
-        return 'settings:multidevice-messages';
+        return 'os-settings:multidevice-messages';
       case settings.MultiDeviceFeature.SMART_LOCK:
-        return 'settings:multidevice-smart-lock';
+        return 'os-settings:multidevice-smart-lock';
       default:
         return '';
     }
diff --git a/chrome/browser/resources/settings/os_settings_resources.grd b/chrome/browser/resources/settings/os_settings_resources.grd
index 4b86241..fa1e5af 100644
--- a/chrome/browser/resources/settings/os_settings_resources.grd
+++ b/chrome/browser/resources/settings/os_settings_resources.grd
@@ -456,6 +456,10 @@
                  file="icons.html"
                  type="chrome_html"
                  preprocess="true" />
+      <structure name="IDR_OS_SETTINGS_OS_ICONS"
+                 file="chromeos/os_icons.html"
+                 type="chrome_html"
+                 preprocess="true" />
       <structure name="IDR_OS_SETTINGS_POWERWASH_DIALOG_HTML"
                  file="chromeos/os_reset_page/os_powerwash_dialog.html"
                  type="chrome_html" />
diff --git a/chrome/browser/resources/settings/privacy_page/security_keys_subpage.js b/chrome/browser/resources/settings/privacy_page/security_keys_subpage.js
index b0eee41..53b441f 100644
--- a/chrome/browser/resources/settings/privacy_page/security_keys_subpage.js
+++ b/chrome/browser/resources/settings/privacy_page/security_keys_subpage.js
@@ -56,7 +56,7 @@
   /** @private */
   onCredentialManagementDialogClosed_: function() {
     this.showCredentialManagementDialog_ = false;
-    cr.ui.focusWithoutInk(this.$.credentialManagementButton);
+    cr.ui.focusWithoutInk(assert(this.$$('#credentialManagementButton')));
   },
 
   /** @private */
diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html b/chrome/browser/resources/settings/settings_menu/settings_menu.html
index b5fd4b8..4dabc3f 100644
--- a/chrome/browser/resources/settings/settings_menu/settings_menu.html
+++ b/chrome/browser/resources/settings/settings_menu/settings_menu.html
@@ -10,6 +10,11 @@
 <link rel="import" href="../route.html">
 <link rel="import" href="../settings_shared_css.html">
 
+<if expr="chromeos">
+<!-- TODO(crbug.com/986596): Remove OS icons when SplitSettings is complete. -->
+<link rel="import" href="../chromeos/os_icons.html">
+</if>
+
 <dom-module id="settings-menu">
   <template>
     <style include="settings-shared">
@@ -107,7 +112,7 @@
         role="navigation" on-click="onLinkClick_">
 <if expr="chromeos">
       <a href="/internet" hidden="[[!pageVisibility.internet]]">
-        <iron-icon icon="settings:network-wifi"></iron-icon>
+        <iron-icon icon="os-settings:network-wifi"></iron-icon>
         $i18n{internetPageTitle}
       </a>
       <a href="/bluetooth" hidden="[[!pageVisibility.bluetooth]]">
@@ -116,7 +121,7 @@
       </a>
       <a id="multidevice" href="/multidevice"
           hidden="[[!pageVisibility.multidevice]]">
-        <iron-icon icon="settings:multidevice-better-together-suite">
+        <iron-icon icon="os-settings:multidevice-better-together-suite">
         </iron-icon>
         $i18n{multidevicePageTitle}
       </a>
@@ -137,7 +142,7 @@
       </a>
 <if expr="chromeos">
       <a href="/device" hidden="[[!pageVisibility.device]]">
-        <iron-icon icon="settings:laptop-chromebook"></iron-icon>
+        <iron-icon icon="os-settings:laptop-chromebook"></iron-icon>
         $i18n{devicePageTitle}
       </a>
 </if>
@@ -147,15 +152,15 @@
       </a>
 <if expr="chromeos">
       <a href="/androidApps" hidden="[[!showAndroidApps]]">
-        <iron-icon icon="settings:play-prism"></iron-icon>
+        <iron-icon icon="os-settings:play-prism"></iron-icon>
         $i18n{androidAppsPageTitle}
       </a>
       <a href="/crostini" hidden="[[!showCrostini]]">
-        <iron-icon icon="settings:crostini-mascot"></iron-icon>
+        <iron-icon icon="os-settings:crostini-mascot"></iron-icon>
         $i18n{crostiniPageTitle}
       </a>
       <a href="/pluginVm" hidden="[[!showPluginVm]]">
-        <iron-icon icon="settings:plugin-vm"></iron-icon>
+        <iron-icon icon="os-settings:plugin-vm"></iron-icon>
         $i18n{pluginVmPageTitle}
       </a>
 </if>
@@ -183,7 +188,7 @@
             role="navigation" on-click="onLinkClick_">
 <if expr="chromeos">
           <a href="/dateTime" hidden="[[!pageVisibility.dateTime]]">
-            <iron-icon icon="settings:access-time"></iron-icon>
+            <iron-icon icon="os-settings:access-time"></iron-icon>
             $i18n{dateTimePageTitle}
           </a>
 </if>
diff --git a/chrome/browser/resources/settings/settings_resources.grd b/chrome/browser/resources/settings/settings_resources.grd
index d2b279a..682e3b8a 100644
--- a/chrome/browser/resources/settings/settings_resources.grd
+++ b/chrome/browser/resources/settings/settings_resources.grd
@@ -647,6 +647,14 @@
                  file="icons.html"
                  type="chrome_html"
                  preprocess="true" />
+      <if expr="chromeos">
+       <!-- TODO(crbug.com/986596): Remove OS icons when SplitSettings
+            is complete. -->
+        <structure name="IDR_SETTINGS_CHROMEOS_OS_ICONS"
+                  file="chromeos/os_icons.html"
+                  type="chrome_html"
+                  preprocess="true" />
+      </if>
       <structure name="IDR_SETTINGS_POWERWASH_DIALOG_HTML"
                  file="reset_page/powerwash_dialog.html"
                  type="chrome_html" />
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
index 24095fe..cf373da 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
@@ -36,22 +36,13 @@
 // AdvancedProtectionStatusManager
 ////////////////////////////////////////////////////////////////////////////////
 AdvancedProtectionStatusManager::AdvancedProtectionStatusManager(
-    Profile* profile)
-    : profile_(profile),
-      identity_manager_(nullptr),
-      access_token_fetcher_(nullptr),
-      is_under_advanced_protection_(false),
-      minimum_delay_(kMinimumRefreshDelay) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  if (profile_->IsOffTheRecord())
-    return;
-
-  Initialize();
-  MaybeRefreshOnStartUp();
-}
+    PrefService* pref_service,
+    signin::IdentityManager* identity_manager)
+    : AdvancedProtectionStatusManager(pref_service,
+                                      identity_manager,
+                                      kMinimumRefreshDelay) {}
 
 void AdvancedProtectionStatusManager::Initialize() {
-  identity_manager_ = IdentityManagerFactory::GetForProfile(profile_);
   SubscribeToSigninEvents();
 }
 
@@ -63,10 +54,9 @@
 
   is_under_advanced_protection_ = core_info.is_under_advanced_protection;
 
-  if (profile_->GetPrefs()->HasPrefPath(
-          prefs::kAdvancedProtectionLastRefreshInUs)) {
+  if (pref_service_->HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs)) {
     last_refreshed_ = base::Time::FromDeltaSinceWindowsEpoch(
-        base::TimeDelta::FromMicroseconds(profile_->GetPrefs()->GetInt64(
+        base::TimeDelta::FromMicroseconds(pref_service_->GetInt64(
             prefs::kAdvancedProtectionLastRefreshInUs)));
     if (is_under_advanced_protection_)
       ScheduleNextRefresh();
@@ -87,11 +77,11 @@
 AdvancedProtectionStatusManager::~AdvancedProtectionStatusManager() {}
 
 void AdvancedProtectionStatusManager::SubscribeToSigninEvents() {
-  IdentityManagerFactory::GetForProfile(profile_)->AddObserver(this);
+  identity_manager_->AddObserver(this);
 }
 
 void AdvancedProtectionStatusManager::UnsubscribeFromSigninEvents() {
-  IdentityManagerFactory::GetForProfile(profile_)->RemoveObserver(this);
+  identity_manager_->RemoveObserver(this);
 }
 
 bool AdvancedProtectionStatusManager::IsRefreshScheduled() {
@@ -100,9 +90,8 @@
 
 void AdvancedProtectionStatusManager::OnExtendedAccountInfoUpdated(
     const AccountInfo& info) {
-  // Ignore update if |profile_| is in incognito mode, or the updated account
-  // is not the primary account.
-  if (profile_->IsOffTheRecord() || !IsPrimaryAccount(info))
+  // Ignore update if the updated account is not the primary account.
+  if (!IsPrimaryAccount(info))
     return;
 
   if (info.is_under_advanced_protection) {
@@ -116,9 +105,6 @@
 
 void AdvancedProtectionStatusManager::OnExtendedAccountInfoRemoved(
     const AccountInfo& info) {
-  if (profile_->IsOffTheRecord())
-    return;
-
   // If user signed out primary account, cancel refresh.
   std::string primary_account_id = GetPrimaryAccountId();
   if (!primary_account_id.empty() && primary_account_id == info.account_id) {
@@ -182,7 +168,7 @@
 }
 
 void AdvancedProtectionStatusManager::RefreshAdvancedProtectionStatus() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   std::string primary_account_id = GetPrimaryAccountId();
   if (!identity_manager_ || primary_account_id.empty())
@@ -206,7 +192,7 @@
 }
 
 void AdvancedProtectionStatusManager::ScheduleNextRefresh() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   CancelFutureRefresh();
   base::Time now = base::Time::Now();
   const base::TimeDelta time_since_last_refresh =
@@ -227,44 +213,17 @@
 
 void AdvancedProtectionStatusManager::UpdateLastRefreshTime() {
   last_refreshed_ = base::Time::Now();
-  profile_->GetPrefs()->SetInt64(
+  pref_service_->SetInt64(
       prefs::kAdvancedProtectionLastRefreshInUs,
       last_refreshed_.ToDeltaSinceWindowsEpoch().InMicroseconds());
 }
 
-// static
-bool AdvancedProtectionStatusManager::IsUnderAdvancedProtection(
-    Profile* profile) {
-  Profile* original_profile =
-      profile->IsOffTheRecord() ? profile->GetOriginalProfile() : profile;
-
-  return original_profile &&
-         AdvancedProtectionStatusManagerFactory::GetInstance()
-             ->GetForBrowserContext(
-                 static_cast<content::BrowserContext*>(original_profile))
-             ->is_under_advanced_protection();
-}
-
-// static
-bool AdvancedProtectionStatusManager::RequestsAdvancedProtectionVerdicts(
-    Profile* profile) {
-  Profile* original_profile =
-      profile->IsOffTheRecord() ? profile->GetOriginalProfile() : profile;
-
-  if (!original_profile)
-    return false;
-
-  bool is_under_advanced_protection =
-      AdvancedProtectionStatusManagerFactory::GetInstance()
-          ->GetForBrowserContext(
-              static_cast<content::BrowserContext*>(original_profile))
-          ->is_under_advanced_protection();
-
+bool AdvancedProtectionStatusManager::RequestsAdvancedProtectionVerdicts() {
   static bool force_enabled =
       base::FeatureList::IsEnabled(kForceUseAPDownloadProtection);
   static bool enabled = base::FeatureList::IsEnabled(kUseAPDownloadProtection);
 
-  return force_enabled || (is_under_advanced_protection && enabled);
+  return force_enabled || (is_under_advanced_protection() && enabled);
 }
 
 bool AdvancedProtectionStatusManager::IsPrimaryAccount(
@@ -299,14 +258,16 @@
 }
 
 AdvancedProtectionStatusManager::AdvancedProtectionStatusManager(
-    Profile* profile,
+    PrefService* pref_service,
+    signin::IdentityManager* identity_manager,
     const base::TimeDelta& min_delay)
-    : profile_(profile),
-      identity_manager_(nullptr),
+    : pref_service_(pref_service),
+      identity_manager_(identity_manager),
       is_under_advanced_protection_(false),
       minimum_delay_(min_delay) {
-  if (profile_->IsOffTheRecord())
-    return;
+  DCHECK(identity_manager_);
+  DCHECK(pref_service_);
+
   Initialize();
   MaybeRefreshOnStartUp();
 }
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager.h b/chrome/browser/safe_browsing/advanced_protection_status_manager.h
index 08279280..0ce554a 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager.h
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_SAFE_BROWSING_ADVANCED_PROTECTION_STATUS_MANAGER_H_
 #define CHROME_BROWSER_SAFE_BROWSING_ADVANCED_PROTECTION_STATUS_MANAGER_H_
 
+#include "base/sequence_checker.h"
 #include "base/timer/timer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/public/identity_manager/access_token_info.h"
@@ -15,7 +16,7 @@
 class PrimaryAccountAccessTokenFetcher;
 }
 
-class Profile;
+class PrefService;
 
 namespace safe_browsing {
 
@@ -29,22 +30,18 @@
     : public KeyedService,
       public signin::IdentityManager::Observer {
  public:
-  explicit AdvancedProtectionStatusManager(Profile* profile);
+  AdvancedProtectionStatusManager(PrefService* pref_service,
+                                  signin::IdentityManager* identity_manager);
   ~AdvancedProtectionStatusManager() override;
 
-  // If the primary account of |profile| is under advanced protection.
-  static bool IsUnderAdvancedProtection(Profile* profile);
-
-  // If the primary account of |profile| is requesting advanced protection
-  // verdicts.
-  static bool RequestsAdvancedProtectionVerdicts(Profile* profile);
+  // If the primary account of associated profile is requesting advanced
+  // protection verdicts.
+  bool RequestsAdvancedProtectionVerdicts();
 
   bool is_under_advanced_protection() const {
     return is_under_advanced_protection_;
   }
 
-  Profile* profile() const { return profile_; }
-
   // KeyedService:
   void Shutdown() override;
 
@@ -69,9 +66,7 @@
   FRIEND_TEST_ALL_PREFIXES(AdvancedProtectionStatusManagerTest,
                            StayInAdvancedProtection);
   FRIEND_TEST_ALL_PREFIXES(AdvancedProtectionStatusManagerTest,
-                           AlreadySignedInAndUnderAPIncognito);
-  FRIEND_TEST_ALL_PREFIXES(AdvancedProtectionStatusManagerTest,
-                           AlreadySignedInAndNotUnderAPIncognito);
+                           AlreadySignedInAndNotUnderAP);
   FRIEND_TEST_ALL_PREFIXES(AdvancedProtectionStatusManagerTest,
                            AdvancedProtectionDisabledAfterSignin);
   FRIEND_TEST_ALL_PREFIXES(AdvancedProtectionStatusManagerTest,
@@ -128,18 +123,19 @@
   std::string GetPrimaryAccountId() const;
 
   // Only called in tests to set a customized minimum delay.
-  AdvancedProtectionStatusManager(Profile* profile,
+  AdvancedProtectionStatusManager(PrefService* pref_service,
+                                  signin::IdentityManager* identity_manager,
                                   const base::TimeDelta& min_delay);
 
-  Profile* const profile_;
+  SEQUENCE_CHECKER(sequence_checker_);
 
-  signin::IdentityManager* identity_manager_;
+  PrefService* pref_service_ = nullptr;
+  signin::IdentityManager* identity_manager_ = nullptr;
   std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher>
       access_token_fetcher_;
-  AccountTrackerService* account_tracker_service_;
 
   // Is the profile account under advanced protection.
-  bool is_under_advanced_protection_;
+  bool is_under_advanced_protection_ = false;
 
   base::OneShotTimer timer_;
   base::Time last_refreshed_;
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc
index 927b0ea..e72d17e 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.cc
@@ -1,8 +1,10 @@
 // Copyright 2018 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
+
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 
+#include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
 #include "chrome/browser/signin/identity_manager_factory.h"
@@ -13,10 +15,9 @@
 
 // static
 AdvancedProtectionStatusManager*
-AdvancedProtectionStatusManagerFactory::GetForBrowserContext(
-    content::BrowserContext* context) {
+AdvancedProtectionStatusManagerFactory::GetForProfile(Profile* profile) {
   return static_cast<AdvancedProtectionStatusManager*>(
-      GetInstance()->GetServiceForBrowserContext(context, /* create= */ true));
+      GetInstance()->GetServiceForBrowserContext(profile, /* create= */ true));
 }
 
 // static
@@ -37,8 +38,9 @@
 
 KeyedService* AdvancedProtectionStatusManagerFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
+  Profile* profile = Profile::FromBrowserContext(context);
   return new AdvancedProtectionStatusManager(
-      Profile::FromBrowserContext(context));
+      profile->GetPrefs(), IdentityManagerFactory::GetForProfile(profile));
 }
 
 bool AdvancedProtectionStatusManagerFactory::
@@ -46,4 +48,10 @@
   return true;
 }
 
+content::BrowserContext*
+AdvancedProtectionStatusManagerFactory::GetBrowserContextToUse(
+    content::BrowserContext* context) const {
+  return chrome::GetBrowserContextRedirectedInIncognito(context);
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h
index 3ed3aa1..3463240 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h
@@ -8,9 +8,7 @@
 #include "base/memory/singleton.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 
-namespace content {
-class BrowserContext;
-}
+class Profile;
 
 namespace safe_browsing {
 
@@ -21,14 +19,14 @@
 class AdvancedProtectionStatusManagerFactory
     : public BrowserContextKeyedServiceFactory {
  public:
-  static AdvancedProtectionStatusManager* GetForBrowserContext(
-      content::BrowserContext* context);
+  static AdvancedProtectionStatusManager* GetForProfile(Profile* profile);
 
   static AdvancedProtectionStatusManagerFactory* GetInstance();
 
  private:
   friend struct base::DefaultSingletonTraits<
       AdvancedProtectionStatusManagerFactory>;
+
   AdvancedProtectionStatusManagerFactory();
   ~AdvancedProtectionStatusManagerFactory() override;
 
@@ -36,6 +34,8 @@
   KeyedService* BuildServiceInstanceFor(
       content::BrowserContext* context) const override;
   bool ServiceIsCreatedWithBrowserContext() const override;
+  content::BrowserContext* GetBrowserContextToUse(
+      content::BrowserContext* context) const override;
 
   DISALLOW_COPY_AND_ASSIGN(AdvancedProtectionStatusManagerFactory);
 };
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager_factory_unittest.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory_unittest.cc
new file mode 100644
index 0000000..12b2ab5d
--- /dev/null
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager_factory_unittest.cc
@@ -0,0 +1,30 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
+
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace safe_browsing {
+
+// Check that AdvancedProtectionStatusManagerFactory returns the same object
+// for both off-the-record profile and regular profile.
+TEST(AdvancedProtectionStatusManagerFactoryTest, OffTheRecordUseSameService) {
+  content::TestBrowserThreadBundle thread_bundle;
+
+  TestingProfile::Builder builder;
+  std::unique_ptr<TestingProfile> testing_profile = builder.Build();
+
+  // The regular profile and the off-the-record profile must be different.
+  ASSERT_NE(testing_profile.get(), testing_profile->GetOffTheRecordProfile());
+
+  EXPECT_EQ(AdvancedProtectionStatusManagerFactory::GetForProfile(
+                testing_profile.get()),
+            AdvancedProtectionStatusManagerFactory::GetForProfile(
+                testing_profile->GetOffTheRecordProfile()));
+}
+
+}  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc
index 07bcf6f..2959014 100644
--- a/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/advanced_protection_status_manager_unittest.cc
@@ -6,15 +6,13 @@
 
 #include <string>
 
-#include "base/bind.h"
 #include "base/test/metrics/histogram_tester.h"
-#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
-#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
-#include "chrome/test/base/testing_profile.h"
+#include "base/test/scoped_task_environment.h"
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/common/safe_browsing_prefs.h"
 #include "components/signin/public/identity_manager/accounts_mutator.h"
-#include "content/public/test/test_browser_thread_bundle.h"
+#include "components/signin/public/identity_manager/identity_test_environment.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -35,97 +33,96 @@
 static const char* kTokenFetchStatusMetric =
     "SafeBrowsing.AdvancedProtection.TokenFetchStatus";
 
-class AdvancedProtectionStatusManagerTest : public testing::Test {
+// Helper class that ensure RegisterProfilePrefs() is called on the test
+// PrefService's registry before the IdentityTestEnvironment constructor
+// is invoked.
+class TestWithPrefService : public testing::Test {
  public:
-  AdvancedProtectionStatusManagerTest() {
-    testing_profile_ = IdentityTestEnvironmentProfileAdaptor::
-        CreateProfileForIdentityTestEnvironment();
+  TestWithPrefService() { RegisterProfilePrefs(pref_service_.registry()); }
 
-    identity_test_env_adaptor_ =
-        std::make_unique<IdentityTestEnvironmentProfileAdaptor>(
-            testing_profile_.get());
-  }
+ protected:
+  base::test::ScopedTaskEnvironment scoped_task_environment;
+  sync_preferences::TestingPrefServiceSyncable pref_service_;
+};
 
-  ~AdvancedProtectionStatusManagerTest() override {}
+class AdvancedProtectionStatusManagerTest : public TestWithPrefService {
+ public:
+  AdvancedProtectionStatusManagerTest()
+      : identity_test_env_(/*test_url_loader_factory=*/nullptr,
+                           &pref_service_) {}
 
   std::string SignIn(const std::string& email,
                      bool is_under_advanced_protection) {
-    AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email);
+    AccountInfo account_info = identity_test_env_.MakeAccountAvailable(email);
 
     account_info.is_under_advanced_protection = is_under_advanced_protection;
-    identity_test_env()->SetPrimaryAccount(account_info.email);
-    identity_test_env()->UpdateAccountInfoForAccount(account_info);
+    identity_test_env_.SetPrimaryAccount(account_info.email);
+    identity_test_env_.UpdateAccountInfoForAccount(account_info);
 
     return account_info.account_id;
   }
 
   void MakeOAuthTokenFetchSucceed(const std::string& account_id,
                                   bool is_under_advanced_protection) {
-    identity_test_env()
-        ->WaitForAccessTokenRequestIfNecessaryAndRespondWithToken(
-            account_id, "access_token",
-            base::Time::Now() + base::TimeDelta::FromHours(1),
-            is_under_advanced_protection ? kIdTokenAdvancedProtectionEnabled
-                                         : kIdTokenAdvancedProtectionDisabled);
+    identity_test_env_.WaitForAccessTokenRequestIfNecessaryAndRespondWithToken(
+        account_id, "access_token",
+        base::Time::Now() + base::TimeDelta::FromHours(1),
+        is_under_advanced_protection ? kIdTokenAdvancedProtectionEnabled
+                                     : kIdTokenAdvancedProtectionDisabled);
   }
 
   void MakeOAuthTokenFetchFail(const std::string& account_id,
                                bool is_transient_error) {
-    identity_test_env()
-        ->WaitForAccessTokenRequestIfNecessaryAndRespondWithError(
-            account_id,
-            GoogleServiceAuthError(
-                is_transient_error
-                    ? GoogleServiceAuthError::CONNECTION_FAILED
-                    : GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS));
-  }
-
-  signin::IdentityTestEnvironment* identity_test_env() {
-    return identity_test_env_adaptor_->identity_test_env();
+    identity_test_env_.WaitForAccessTokenRequestIfNecessaryAndRespondWithError(
+        account_id,
+        GoogleServiceAuthError(
+            is_transient_error
+                ? GoogleServiceAuthError::CONNECTION_FAILED
+                : GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS));
   }
 
  protected:
-  content::TestBrowserThreadBundle thread_bundle;
-  std::unique_ptr<TestingProfile> testing_profile_;
-  std::unique_ptr<IdentityTestEnvironmentProfileAdaptor>
-      identity_test_env_adaptor_;
+  signin::IdentityTestEnvironment identity_test_env_;
 };
 
 }  // namespace
 
 TEST_F(AdvancedProtectionStatusManagerTest, NotSignedInOnStartUp) {
-  ASSERT_FALSE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  ASSERT_FALSE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   ASSERT_TRUE(aps_manager.GetPrimaryAccountId().empty());
 
   // If user's not signed-in. No refresh is required.
   EXPECT_FALSE(aps_manager.is_under_advanced_protection());
   EXPECT_FALSE(aps_manager.IsRefreshScheduled());
-  EXPECT_FALSE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  EXPECT_FALSE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
   aps_manager.UnsubscribeFromSigninEvents();
 }
 
 TEST_F(AdvancedProtectionStatusManagerTest,
        SignedInLongTimeAgoRefreshFailTransientError) {
   base::HistogramTester histograms;
-  ASSERT_FALSE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  ASSERT_FALSE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
 
   // Simulates the situation where user signed in long time ago, thus
   // has no advanced protection status.
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ false);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ false);
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   base::RunLoop().RunUntilIdle();
   ASSERT_FALSE(aps_manager.GetPrimaryAccountId().empty());
 
   // Waits for access token request and respond with an error without advanced
   // protection set.
-  MakeOAuthTokenFetchFail(account_id, /* is_transient_error = */ true);
+  MakeOAuthTokenFetchFail(account_id,
+                          /* is_transient_error = */ true);
   EXPECT_FALSE(aps_manager.is_under_advanced_protection());
 
   EXPECT_THAT(histograms.GetAllSamples(kTokenFetchStatusMetric),
@@ -135,8 +132,8 @@
 
   // A retry should be scheduled.
   EXPECT_TRUE(aps_manager.IsRefreshScheduled());
-  EXPECT_FALSE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  EXPECT_FALSE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
   aps_manager.UnsubscribeFromSigninEvents();
 }
 
@@ -145,16 +142,18 @@
   base::HistogramTester histograms;
   // Simulates the situation where user signed in long time ago, thus
   // has no advanced protection status.
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ false);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ false);
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   base::RunLoop().RunUntilIdle();
   ASSERT_FALSE(aps_manager.GetPrimaryAccountId().empty());
 
   // Waits for access token request and respond with an error without advanced
   // protection set.
-  MakeOAuthTokenFetchFail(account_id, /* is_transient_error = */ false);
+  MakeOAuthTokenFetchFail(account_id,
+                          /* is_transient_error = */ false);
   EXPECT_FALSE(aps_manager.is_under_advanced_protection());
 
   EXPECT_THAT(
@@ -169,15 +168,16 @@
 }
 
 TEST_F(AdvancedProtectionStatusManagerTest, SignedInLongTimeAgoNotUnderAP) {
-  ASSERT_FALSE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  ASSERT_FALSE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
   base::HistogramTester histograms;
   // Simulates the situation where user signed in long time ago, thus
   // has no advanced protection status.
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ false);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ false);
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   ASSERT_FALSE(aps_manager.GetPrimaryAccountId().empty());
   base::RunLoop().RunUntilIdle();
   // Waits for access token request and respond with a token without advanced
@@ -187,8 +187,8 @@
 
   EXPECT_FALSE(aps_manager.is_under_advanced_protection());
   EXPECT_FALSE(aps_manager.IsRefreshScheduled());
-  EXPECT_TRUE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  EXPECT_TRUE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
 
   EXPECT_THAT(histograms.GetAllSamples(kTokenFetchStatusMetric),
               testing::ElementsAre(base::Bucket(0 /*NONE*/, 1)));
@@ -201,10 +201,11 @@
 TEST_F(AdvancedProtectionStatusManagerTest, SignedInLongTimeAgoUnderAP) {
   // Simulates the situation where user signed in long time ago, thus
   // has no advanced protection status yet.
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ false);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ false);
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   base::RunLoop().RunUntilIdle();
   // Waits for access token request and respond with a token without advanced
   // protection set.
@@ -213,22 +214,23 @@
 
   EXPECT_TRUE(aps_manager.is_under_advanced_protection());
   EXPECT_TRUE(aps_manager.IsRefreshScheduled());
-  EXPECT_TRUE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  EXPECT_TRUE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
   aps_manager.UnsubscribeFromSigninEvents();
 }
 
 TEST_F(AdvancedProtectionStatusManagerTest, AlreadySignedInAndUnderAP) {
-  testing_profile_->GetPrefs()->SetInt64(
+  pref_service_.SetInt64(
       prefs::kAdvancedProtectionLastRefreshInUs,
       base::Time::Now().ToDeltaSinceWindowsEpoch().InMicroseconds());
 
   // Simulates the situation where the user has already signed in and is
   // under advanced protection.
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ true);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ true);
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   ASSERT_FALSE(aps_manager.GetPrimaryAccountId().empty());
   ASSERT_TRUE(aps_manager.is_under_advanced_protection());
 
@@ -237,60 +239,36 @@
   aps_manager.UnsubscribeFromSigninEvents();
 }
 
-TEST_F(AdvancedProtectionStatusManagerTest,
-       AlreadySignedInAndUnderAPIncognito) {
-  testing_profile_->GetPrefs()->SetInt64(
-      prefs::kAdvancedProtectionLastRefreshInUs,
-      base::Time::Now().ToDeltaSinceWindowsEpoch().InMicroseconds());
-
-  // Simulates the situation where the user has already signed in and is
-  // under advanced protection.
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ true);
-  AdvancedProtectionStatusManagerFactory::GetForBrowserContext(
-      Profile::FromBrowserContext(testing_profile_.get()))
-      ->MaybeRefreshOnStartUp();
-
-  // Incognito profile should share the advanced protection status with the
-  // original profile.
-  EXPECT_TRUE(AdvancedProtectionStatusManager::IsUnderAdvancedProtection(
-      testing_profile_->GetOffTheRecordProfile()));
-  EXPECT_TRUE(AdvancedProtectionStatusManager::IsUnderAdvancedProtection(
-      testing_profile_.get()));
-}
-
-TEST_F(AdvancedProtectionStatusManagerTest,
-       AlreadySignedInAndNotUnderAPIncognito) {
-  testing_profile_->GetPrefs()->SetInt64(
+TEST_F(AdvancedProtectionStatusManagerTest, AlreadySignedInAndNotUnderAP) {
+  pref_service_.SetInt64(
       prefs::kAdvancedProtectionLastRefreshInUs,
       base::Time::Now().ToDeltaSinceWindowsEpoch().InMicroseconds());
 
   // Simulates the situation where the user has already signed in and is
   // NOT under advanced protection.
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ false);
-  AdvancedProtectionStatusManagerFactory::GetForBrowserContext(
-      Profile::FromBrowserContext(testing_profile_.get()))
-      ->MaybeRefreshOnStartUp();
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ false);
+  AdvancedProtectionStatusManager aps_manager(
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
 
   // Incognito profile should share the advanced protection status with the
   // original profile.
-  EXPECT_FALSE(AdvancedProtectionStatusManager::IsUnderAdvancedProtection(
-      testing_profile_->GetOffTheRecordProfile()));
-  EXPECT_FALSE(AdvancedProtectionStatusManager::IsUnderAdvancedProtection(
-      testing_profile_.get()));
+  EXPECT_FALSE(aps_manager.is_under_advanced_protection());
+  aps_manager.UnsubscribeFromSigninEvents();
 }
 
 TEST_F(AdvancedProtectionStatusManagerTest, StayInAdvancedProtection) {
   base::Time last_update = base::Time::Now();
-  testing_profile_->GetPrefs()->SetInt64(
+  pref_service_.SetInt64(
       prefs::kAdvancedProtectionLastRefreshInUs,
       last_update.ToDeltaSinceWindowsEpoch().InMicroseconds());
 
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ true);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ true);
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   ASSERT_FALSE(aps_manager.GetPrimaryAccountId().empty());
   ASSERT_TRUE(aps_manager.is_under_advanced_protection());
 
@@ -298,8 +276,7 @@
   aps_manager.OnGetIDToken(account_id, kIdTokenAdvancedProtectionEnabled);
   EXPECT_GT(
       base::Time::FromDeltaSinceWindowsEpoch(base::TimeDelta::FromMicroseconds(
-          testing_profile_->GetPrefs()->GetInt64(
-              prefs::kAdvancedProtectionLastRefreshInUs))),
+          pref_service_.GetInt64(prefs::kAdvancedProtectionLastRefreshInUs))),
       last_update);
   EXPECT_TRUE(aps_manager.IsRefreshScheduled());
   aps_manager.UnsubscribeFromSigninEvents();
@@ -309,18 +286,20 @@
 // Not applicable to Chrome OS.
 TEST_F(AdvancedProtectionStatusManagerTest, SignInAndSignOutEvent) {
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   ASSERT_FALSE(aps_manager.is_under_advanced_protection());
   ASSERT_TRUE(aps_manager.GetPrimaryAccountId().empty());
 
-  SignIn("test@test.com", /* is_under_advanced_protection = */ true);
+  SignIn("test@test.com",
+         /* is_under_advanced_protection = */ true);
   EXPECT_TRUE(aps_manager.is_under_advanced_protection());
   EXPECT_TRUE(aps_manager.IsRefreshScheduled());
 
-  identity_test_env()->ClearPrimaryAccount();
+  identity_test_env_.ClearPrimaryAccount();
   EXPECT_FALSE(aps_manager.is_under_advanced_protection());
-  EXPECT_TRUE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  EXPECT_TRUE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
   EXPECT_FALSE(aps_manager.IsRefreshScheduled());
   aps_manager.UnsubscribeFromSigninEvents();
 }
@@ -328,18 +307,18 @@
 
 TEST_F(AdvancedProtectionStatusManagerTest, AccountRemoval) {
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   ASSERT_FALSE(aps_manager.is_under_advanced_protection());
   ASSERT_TRUE(aps_manager.GetPrimaryAccountId().empty());
 
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ false);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ false);
   EXPECT_FALSE(aps_manager.is_under_advanced_protection());
   EXPECT_FALSE(aps_manager.IsRefreshScheduled());
 
   // Simulates account update.
-  identity_test_env()
-      ->identity_manager()
+  identity_test_env_.identity_manager()
       ->GetAccountsMutator()
       ->UpdateAccountInfo(account_id,
                           /*is_child_account=*/false,
@@ -349,13 +328,13 @@
 
   // This call is necessary to ensure that the account removal is fully
   // processed in this testing context.
-  identity_test_env()->EnableRemovalOfExtendedAccountInfo();
-  identity_test_env()->identity_manager()->GetAccountsMutator()->RemoveAccount(
+  identity_test_env_.EnableRemovalOfExtendedAccountInfo();
+  identity_test_env_.identity_manager()->GetAccountsMutator()->RemoveAccount(
       account_id,
       signin_metrics::SourceForRefreshTokenOperation::kUserMenu_RemoveAccount);
   EXPECT_FALSE(aps_manager.is_under_advanced_protection());
-  EXPECT_TRUE(testing_profile_->GetPrefs()->HasPrefPath(
-      prefs::kAdvancedProtectionLastRefreshInUs));
+  EXPECT_TRUE(
+      pref_service_.HasPrefPath(prefs::kAdvancedProtectionLastRefreshInUs));
   EXPECT_FALSE(aps_manager.IsRefreshScheduled());
   aps_manager.UnsubscribeFromSigninEvents();
 }
@@ -363,12 +342,13 @@
 TEST_F(AdvancedProtectionStatusManagerTest,
        AdvancedProtectionDisabledAfterSignin) {
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   // There is no account, so the timer should not run at startup.
   EXPECT_FALSE(aps_manager.IsRefreshScheduled());
 
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ true);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ true);
 
   // Now that we've signed into Advanced Protection, we should have a scheduled
   // refresh.
@@ -388,18 +368,19 @@
 
 TEST_F(AdvancedProtectionStatusManagerTest,
        StartupAfterLongWaitRefreshesImmediately) {
-  std::string account_id =
-      SignIn("test@test.com", /* is_under_advanced_protection = */ true);
+  std::string account_id = SignIn("test@test.com",
+                                  /* is_under_advanced_protection = */ true);
   base::RunLoop().RunUntilIdle();
 
   base::Time last_refresh_time =
       base::Time::Now() - base::TimeDelta::FromDays(1);
-  testing_profile_->GetPrefs()->SetInt64(
+  pref_service_.SetInt64(
       prefs::kAdvancedProtectionLastRefreshInUs,
       last_refresh_time.ToDeltaSinceWindowsEpoch().InMicroseconds());
 
   AdvancedProtectionStatusManager aps_manager(
-      testing_profile_.get(), base::TimeDelta() /*no min delay*/);
+      &pref_service_, identity_test_env_.identity_manager(),
+      base::TimeDelta() /*no min delay*/);
   ASSERT_FALSE(aps_manager.GetPrimaryAccountId().empty());
   ASSERT_TRUE(aps_manager.is_under_advanced_protection());
   EXPECT_TRUE(aps_manager.IsRefreshScheduled());
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc
index 23159681..baf0861f 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc
+++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc
@@ -191,9 +191,8 @@
 
   auto request = std::make_unique<network::ResourceRequest>();
   request->url = GetSRTDownloadURL();
-  request->load_flags = net::LOAD_DISABLE_CACHE |
-                        net::LOAD_DO_NOT_SEND_COOKIES |
-                        net::LOAD_DO_NOT_SAVE_COOKIES;
+  request->load_flags = net::LOAD_DISABLE_CACHE;
+  request->credentials_mode = network::mojom::CredentialsMode::kOmit;
 
   url_loader_ = network::SimpleURLLoader::Create(
       std::move(request), kChromeCleanerTrafficAnnotation);
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
index bdaab742..1d7f8464 100644
--- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc
+++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -22,6 +22,7 @@
 #include "chrome/browser/policy/chrome_browser_policy_connector.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/safe_browsing/safe_browsing_navigation_observer_manager.h"
 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
 #include "chrome/browser/safe_browsing/ui_manager.h"
@@ -1404,7 +1405,8 @@
 }
 
 bool ChromePasswordProtectionService::IsUnderAdvancedProtection() {
-  return AdvancedProtectionStatusManager::IsUnderAdvancedProtection(profile_);
+  return AdvancedProtectionStatusManagerFactory::GetForProfile(profile_)
+      ->is_under_advanced_protection();
 }
 
 gfx::Size ChromePasswordProtectionService::GetCurrentContentAreaSize() const {
diff --git a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
index 25fc341..50bb24a7 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
@@ -67,6 +67,16 @@
 const bool kFalse = false;
 const bool kTrue = true;
 
+std::unique_ptr<content::NavigationSimulator> NavigateAndKeepLoading(
+    content::WebContents* web_contents,
+    const GURL& url) {
+  auto navigation =
+      content::NavigationSimulator::CreateBrowserInitiated(url, web_contents);
+  navigation->SetKeepLoading(true);
+  navigation->Commit();
+  return navigation;
+}
+
 }  // namespace
 
 namespace safe_browsing {
@@ -898,7 +908,7 @@
 
   ExpectPreClassificationChecks(GURL(malware_verdict.url()), &kFalse, &kFalse,
                                 &kFalse, &kFalse, &kFalse, &kFalse);
-  NavigateAndCommit(GURL(malware_verdict.url()));
+  NavigateAndKeepLoading(web_contents(), GURL(malware_verdict.url()));
   WaitAndCheckPreClassificationChecks();
 
   ClientSideDetectionService::ClientReportMalwareRequestCallback cb;
@@ -1034,7 +1044,7 @@
   GURL url("http://host.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(&url);
@@ -1046,7 +1056,7 @@
   GURL url("http://host.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(&url);
@@ -1057,7 +1067,7 @@
   EXPECT_CALL(*csd_service_, IsPrivateIPAddress(_)).Times(0);
   GURL inpage("http://host.com/#foo");
   ExpectPreClassificationChecks(inpage, NULL, NULL, NULL, NULL, NULL, NULL);
-  NavigateAndCommit(inpage);
+  NavigateAndKeepLoading(web_contents(), inpage);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(NULL);
@@ -1070,6 +1080,7 @@
   auto navigation =
       content::NavigationSimulator::CreateBrowserInitiated(url, web_contents());
   navigation->SetContentsMimeType("application/xhtml+xml");
+  navigation->SetKeepLoading(true);
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
   navigation->Commit();
@@ -1084,7 +1095,7 @@
   GURL url1("http://host1.com/");
   ExpectPreClassificationChecks(url1, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
-  NavigateAndCommit(url1);
+  NavigateAndKeepLoading(web_contents(), url1);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(&url1);
@@ -1093,7 +1104,7 @@
   GURL url2("http://host2.com/");
   ExpectPreClassificationChecks(url2, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
-  NavigateAndCommit(url2);
+  NavigateAndKeepLoading(web_contents(), url2);
   // Re-override the binder for PhishingDetector because navigation causes
   // a new web InterfaceProvider to be created
   InitTestApi();
@@ -1114,6 +1125,7 @@
   auto navigation =
       content::NavigationSimulator::CreateBrowserInitiated(url, web_contents());
   navigation->SetContentsMimeType("image/jpeg");
+  navigation->SetKeepLoading(true);
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
   navigation->Commit();
@@ -1155,7 +1167,7 @@
   GURL url("http://host5.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kTrue, &kFalse, &kFalse, &kFalse,
                                 &kFalse);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(NULL);
@@ -1168,7 +1180,7 @@
   GURL url("http://host5.com/kill-switch");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(&url);
@@ -1182,7 +1194,7 @@
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kTrue, NULL,
                                 &kFalse);
 
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(&url);
@@ -1196,7 +1208,7 @@
   GURL url("http://host7.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse, &kTrue,
                                 &kFalse);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(NULL);
@@ -1208,7 +1220,7 @@
   GURL url("http://host.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kTrue);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(&url);
@@ -1220,7 +1232,7 @@
   GURL url("http://host.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse, &kTrue,
                                 &kTrue);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(NULL);
@@ -1231,7 +1243,7 @@
   GURL url("https://host.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(&url);
@@ -1243,7 +1255,7 @@
   GURL url("file://host.com/");
   ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse,
                                 &kFalse, &kFalse);
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(NULL);
@@ -1261,7 +1273,7 @@
   EXPECT_CALL(*ui_manager_.get(), DisplayBlockingPage(_))
       .WillOnce(SaveArg<0>(&resource));
 
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
   EXPECT_EQ(url, resource.url);
   EXPECT_EQ(url, resource.original_url);
@@ -1281,7 +1293,7 @@
   GURL url("http://example.com/");
   ExpectPreClassificationChecks(url, &kFalse, NULL, NULL, NULL, NULL, NULL);
 
-  NavigateAndCommit(url);
+  NavigateAndKeepLoading(web_contents(), url);
   WaitAndCheckPreClassificationChecks();
 
   fake_phishing_detector_.CheckMessage(NULL);
diff --git a/chrome/browser/safe_browsing/client_side_model_loader.cc b/chrome/browser/safe_browsing/client_side_model_loader.cc
index 2646d07..41b579ff 100644
--- a/chrome/browser/safe_browsing/client_side_model_loader.cc
+++ b/chrome/browser/safe_browsing/client_side_model_loader.cc
@@ -152,8 +152,7 @@
         })");
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = url_;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   url_loader_ = network::SimpleURLLoader::Create(std::move(resource_request),
                                                  traffic_annotation);
   url_loader_->DownloadToStringOfUnboundedSizeUntilCrashAndDie(
diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
index a764e74..eea09b5 100644
--- a/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
+++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/policy/chrome_browser_policy_connector.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/safe_browsing/download_protection/download_feedback_service.h"
 #include "chrome/browser/safe_browsing/download_protection/download_protection_service.h"
 #include "chrome/browser/safe_browsing/download_protection/download_protection_util.h"
@@ -190,11 +191,12 @@
     is_incognito_ = browser_context->IsOffTheRecord();
     is_under_advanced_protection_ =
         profile &&
-        AdvancedProtectionStatusManager::IsUnderAdvancedProtection(profile);
+        AdvancedProtectionStatusManagerFactory::GetForProfile(profile)
+            ->is_under_advanced_protection();
     requests_ap_verdicts_ =
         profile &&
-        AdvancedProtectionStatusManager::RequestsAdvancedProtectionVerdicts(
-            profile);
+        AdvancedProtectionStatusManagerFactory::GetForProfile(profile)
+            ->RequestsAdvancedProtectionVerdicts();
   }
 
   // If whitelist check passes, FinishRequest() will be called to avoid
diff --git a/chrome/browser/safe_browsing/download_protection/download_protection_service.cc b/chrome/browser/safe_browsing/download_protection/download_protection_service.cc
index 8fb76c02..bbf2132 100644
--- a/chrome/browser/safe_browsing/download_protection/download_protection_service.cc
+++ b/chrome/browser/safe_browsing/download_protection/download_protection_service.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/safe_browsing/download_protection/check_client_download_request.h"
 #include "chrome/browser/safe_browsing/download_protection/download_feedback_service.h"
 #include "chrome/browser/safe_browsing/download_protection/download_url_sb_client.h"
@@ -291,8 +292,8 @@
   Profile* profile = Profile::FromBrowserContext(
       content::DownloadItemUtils::GetBrowserContext(item));
   if (profile &&
-      AdvancedProtectionStatusManager::RequestsAdvancedProtectionVerdicts(
-          profile) &&
+      AdvancedProtectionStatusManagerFactory::GetForProfile(profile)
+          ->RequestsAdvancedProtectionVerdicts() &&
       item->GetDangerType() ==
           download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT) {
     learn_more_url = GURL(chrome::kAdvancedProtectionDownloadLearnMoreURL);
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
index b0baa85..c9df4b8 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
@@ -1866,7 +1866,6 @@
   base::test::ScopedFeatureList feature_list;
   std::vector<base::Feature> enable;
   enable.push_back(kCommittedSBInterstitials);
-  enable.push_back(kCheckByURLLoaderThrottle);
   feature_list.InitWithFeatures(enable, std::vector<base::Feature>());
   SetupWarningAndNavigate(browser());
   EXPECT_TRUE(IsShowingInterstitial(
diff --git a/chrome/browser/search/instant_service.cc b/chrome/browser/search/instant_service.cc
index 379fc9c..cc369c5 100644
--- a/chrome/browser/search/instant_service.cc
+++ b/chrome/browser/search/instant_service.cc
@@ -419,6 +419,7 @@
 void InstantService::UpdateBackgroundFromSync() {
   // Any incoming change to synced background data should clear the local image.
   pref_service_->SetBoolean(prefs::kNtpCustomBackgroundLocalToDevice, false);
+  RemoveLocalBackgroundImageCopy();
   UpdateThemeInfo();
 }
 
@@ -601,8 +602,8 @@
 
 void InstantService::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) {
   DCHECK_EQ(observed_theme, native_theme_);
-  // Force the theme information to rebuild so the correct using_dark_mode value
-  // is sent to the renderer.
+  // Force the theme information to rebuild so the correct using_dark_colors
+  // value is sent to the renderer.
   BuildThemeInfo();
   UpdateThemeInfo();
 }
@@ -661,7 +662,7 @@
   ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile_);
   theme_info_->using_default_theme = theme_service->UsingDefaultTheme();
 
-  theme_info_->using_dark_mode = native_theme_->SystemDarkModeEnabled();
+  theme_info_->using_dark_colors = native_theme_->ShouldUseDarkColors();
 
   // Get theme colors.
   const ui::ThemeProvider& theme_provider =
@@ -786,8 +787,12 @@
       pref_service_->GetDictionary(prefs::kNtpCustomBackgroundDict);
   GURL custom_background_url(
       background_info->FindKey(kNtpCustomBackgroundURL)->GetString());
-  std::string collection_id(
-      background_info->FindKey(kNtpCustomBackgroundCollectionId)->GetString());
+
+  std::string collection_id;
+  const base::Value* id_value =
+      background_info->FindKey(kNtpCustomBackgroundCollectionId);
+  if (id_value)
+    collection_id = id_value->GetString();
 
   // Set custom background information in theme info (attributions are
   // optional).
@@ -985,8 +990,11 @@
 void InstantService::RefreshBackgroundIfNeeded() {
   const base::DictionaryValue* background_info =
       profile_->GetPrefs()->GetDictionary(prefs::kNtpCustomBackgroundDict);
-  int64_t refresh_timestamp =
-      background_info->FindKey(kNtpCustomBackgroundRefreshTimestamp)->GetInt();
+  int64_t refresh_timestamp = 0;
+  const base::Value* timestamp_value =
+      background_info->FindKey(kNtpCustomBackgroundRefreshTimestamp);
+  if (timestamp_value)
+    refresh_timestamp = timestamp_value->GetInt();
   if (refresh_timestamp == 0)
     return;
 
diff --git a/chrome/browser/search/instant_service_unittest.cc b/chrome/browser/search/instant_service_unittest.cc
index 8abf1c4..73a7f5b 100644
--- a/chrome/browser/search/instant_service_unittest.cc
+++ b/chrome/browser/search/instant_service_unittest.cc
@@ -454,7 +454,7 @@
   EXPECT_TRUE(instant_service_->IsCustomBackgroundSet());
 }
 
-TEST_F(InstantServiceTest, SyncPrefOverridesLocalImage) {
+TEST_F(InstantServiceTest, SyncPrefOverridesAndRemovesLocalImage) {
   ASSERT_FALSE(instant_service_->IsCustomBackgroundSet());
   const GURL kUrl("https://www.foo.com/");
 
@@ -472,6 +472,7 @@
 
   EXPECT_TRUE(
       pref_service->GetBoolean(prefs::kNtpCustomBackgroundLocalToDevice));
+  EXPECT_TRUE(base::PathExists(path));
 
   // Update theme info via Sync.
   pref_service->SetUserPref(
@@ -483,6 +484,7 @@
   EXPECT_EQ(kUrl, theme_info->custom_background_url);
   EXPECT_FALSE(
       pref_service->GetBoolean(prefs::kNtpCustomBackgroundLocalToDevice));
+  EXPECT_FALSE(base::PathExists(path));
   EXPECT_TRUE(instant_service_->IsCustomBackgroundSet());
 }
 
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index 4b6a3ef..72068d9 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -295,6 +295,10 @@
               IDS_NEW_TAB_VOICE_OTHER_ERROR);
     AddString(translated_strings.get(), "voiceCloseTooltip",
               IDS_NEW_TAB_VOICE_CLOSE_TOOLTIP);
+
+    // Colors menu
+    AddString(translated_strings.get(), "colorLabelPrefix",
+              IDS_NTP_CUSTOMIZE_COLOR_LABEL_PREFIX);
   }
 
   return translated_strings;
@@ -1013,6 +1017,10 @@
         l10n_util::GetStringUTF8(IDS_NTP_CUSTOM_BG_BACK_LABEL);
     replacements["refreshDaily"] =
         l10n_util::GetStringUTF8(IDS_NTP_CUSTOM_BG_DAILY_REFRESH);
+    replacements["colorPickerLabel"] =
+        l10n_util::GetStringUTF8(IDS_NTP_CUSTOMIZE_COLOR_PICKER_LABEL);
+    replacements["defaultThemeLabel"] =
+        l10n_util::GetStringUTF8(IDS_NTP_CUSTOMIZE_DEFAULT_LABEL);
 
     replacements["bgPreloader"] = "";
     GURL custom_background_url = GetCustomBackgroundURL(profile_->GetPrefs());
diff --git a/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc b/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc
index d1e3150..6d00087 100644
--- a/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc
+++ b/chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.cc
@@ -76,7 +76,7 @@
 gfx::ImageSkia* GetImageSkia() {
   const ui::NativeTheme* native_theme =
       ui::NativeTheme::GetInstanceForNativeUi();
-  bool is_dark = native_theme && native_theme->SystemDarkModeEnabled();
+  bool is_dark = native_theme && native_theme->ShouldUseDarkColors();
   int resource_id = is_dark ? IDR_SEND_TAB_TO_SELF_ICON_DARK
                             : IDR_SEND_TAB_TO_SELF_ICON_LIGHT;
   return ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id);
diff --git a/chrome/browser/sharing/click_to_call/click_to_call_browsertest.cc b/chrome/browser/sharing/click_to_call/click_to_call_browsertest.cc
index 63f3e49..abf3e4e 100644
--- a/chrome/browser/sharing/click_to_call/click_to_call_browsertest.cc
+++ b/chrome/browser/sharing/click_to_call/click_to_call_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
+#include "base/strings/strcat.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind_test_util.h"
 #include "base/test/scoped_feature_list.h"
@@ -15,6 +16,7 @@
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/gcm/gcm_profile_service_factory.h"
 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
+#include "chrome/browser/sharing/click_to_call/click_to_call_constants.h"
 #include "chrome/browser/sharing/click_to_call/feature.h"
 #include "chrome/browser/sharing/features.h"
 #include "chrome/browser/sharing/sharing_device_info.h"
@@ -22,16 +24,21 @@
 #include "chrome/browser/sharing/sharing_service.h"
 #include "chrome/browser/sharing/sharing_service_factory.h"
 #include "chrome/browser/sharing/sharing_sync_preference.h"
+#include "chrome/browser/sync/device_info_sync_service_factory.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
 #include "chrome/browser/ui/browser.h"
 #include "components/gcm_driver/fake_gcm_profile_service.h"
 #include "components/sync/driver/profile_sync_service.h"
+#include "components/sync_device_info/device_info_sync_service.h"
+#include "components/sync_device_info/fake_device_info_tracker.h"
 #include "url/gurl.h"
 
 namespace {
 const char kTelUrl[] = "tel:+9876543210";
 }  // namespace
 
+// TODO(himanshujaju): refactor out SharingBrowserTest to be reused by other
+// features.
 class ClickToCallBrowserTest : public SyncTest {
  public:
   ClickToCallBrowserTest()
@@ -60,25 +67,52 @@
     gcm_service_ = static_cast<gcm::FakeGCMProfileService*>(
         gcm::GCMProfileServiceFactory::GetForProfile(GetProfile(0)));
     gcm_service_->set_collect(true);
+
+    sharing_service_ =
+        SharingServiceFactory::GetForBrowserContext(GetProfile(0));
   }
 
   void SetUpDevices(int count) {
     for (int i = 0; i < count; i++) {
       SharingService* service =
           SharingServiceFactory::GetForBrowserContext(GetProfile(i));
+      service->SetDeviceInfoTrackerForTesting(&fake_device_info_tracker_);
 
       base::RunLoop run_loop;
       service->RegisterDeviceInTesting(
-          std::string("TEST"),
           static_cast<int>(SharingDeviceCapability::kTelephony),
           base::BindLambdaForTesting([&](SharingDeviceRegistrationResult r) {
             ASSERT_EQ(SharingDeviceRegistrationResult::kSuccess, r);
             run_loop.Quit();
           }));
       run_loop.Run();
+      AwaitQuiescence();
+    }
+
+    syncer::DeviceInfoTracker* original_device_info_tracker =
+        DeviceInfoSyncServiceFactory::GetForProfile(GetProfile(0))
+            ->GetDeviceInfoTracker();
+    std::vector<std::unique_ptr<syncer::DeviceInfo>> original_devices =
+        original_device_info_tracker->GetAllDeviceInfo();
+    int device_id = 0;
+
+    for (auto& device : original_devices) {
+      std::unique_ptr<syncer::DeviceInfo> fake_device =
+          std::make_unique<syncer::DeviceInfo>(
+              device->guid(),
+              base::StrCat(
+                  {"testing_device_", base::NumberToString(device_id++)}),
+              device->chrome_version(), device->sync_user_agent(),
+              device->device_type(), device->signin_scoped_device_id(),
+              device->last_updated_timestamp(),
+              device->send_tab_to_self_receiving_enabled());
+      fake_device_info_tracker_.Add(fake_device.get());
+      device_infos_.push_back(std::move(fake_device));
     }
   }
 
+  // TODO(himanshujaju): try to move to static method in
+  // render_view_context_menu_test_util.cc
   std::unique_ptr<TestRenderViewContextMenu> InitRightClickMenu(
       const GURL& url,
       const base::string16& link_text) {
@@ -101,16 +135,26 @@
     return menu;
   }
 
-  void GetDeviceFCMToken(SharingService* sharing_service,
-                         const std::string& guid,
+  void GetDeviceFCMToken(const std::string& guid,
                          std::string* fcm_token) const {
-    auto devices = sharing_service->GetSyncPreferences()->GetSyncedDevices();
+    auto devices = sharing_service_->GetSyncPreferences()->GetSyncedDevices();
     auto it = devices.find(guid);
     ASSERT_NE(devices.end(), it);
     *fcm_token = it->second.fcm_token;
   }
 
-  gcm::FakeGCMProfileService* GetGCMService() const { return gcm_service_; }
+  void CheckLastSharingMessageSent(const std::string& fcm_token,
+                                   const GURL& url) const {
+    EXPECT_EQ(fcm_token, gcm_service_->last_receiver_id());
+    chrome_browser_sharing::SharingMessage sharing_message;
+    sharing_message.ParseFromString(
+        gcm_service_->last_web_push_message().payload);
+    ASSERT_TRUE(sharing_message.has_click_to_call_message());
+    EXPECT_EQ(url.GetContent(),
+              sharing_message.click_to_call_message().phone_number());
+  }
+
+  SharingService* sharing_service() const { return sharing_service_; }
 
  private:
   gcm::GCMProfileServiceFactory::ScopedTestingFactoryInstaller
@@ -118,20 +162,22 @@
   base::test::ScopedFeatureList scoped_feature_list_;
   gcm::FakeGCMProfileService* gcm_service_;
   content::WebContents* web_contents_;
+  syncer::FakeDeviceInfoTracker fake_device_info_tracker_;
+  std::vector<std::unique_ptr<syncer::DeviceInfo>> device_infos_;
+  SharingService* sharing_service_;
   DISALLOW_COPY_AND_ASSIGN(ClickToCallBrowserTest);
 };
 
-// TODO(himanshujaju): Add UI checks. Modularize common functions.
+// TODO(himanshujaju): Add UI checks.
 IN_PROC_BROWSER_TEST_F(ClickToCallBrowserTest,
                        ContextMenu_SingleDeviceAvailable) {
   SetUpDevices(/*count=*/1);
-  AwaitQuiescence();
 
-  SharingService* sharing_service =
-      SharingServiceFactory::GetForBrowserContext(GetProfile(0));
-  auto devices = sharing_service->GetDeviceCandidates(
+  auto devices = sharing_service()->GetDeviceCandidates(
       static_cast<int>(SharingDeviceCapability::kTelephony));
 
+  ASSERT_EQ(1u, devices.size());
+
   std::unique_ptr<TestRenderViewContextMenu> menu =
       InitRightClickMenu(GURL(kTelUrl), base::ASCIIToUTF16("Google"));
 
@@ -141,19 +187,12 @@
   EXPECT_FALSE(menu->IsItemPresent(
       IDC_CONTENT_CONTEXT_SHARING_CLICK_TO_CALL_MULTIPLE_DEVICES));
 
+  // Check fcm token and message sent.
   menu->ExecuteCommand(IDC_CONTENT_CONTEXT_SHARING_CLICK_TO_CALL_SINGLE_DEVICE,
                        0);
-
-  // Check SharingMessage and Receiver id
   std::string fcm_token;
-  GetDeviceFCMToken(sharing_service, devices[0].guid(), &fcm_token);
-  EXPECT_EQ(fcm_token, GetGCMService()->last_receiver_id());
-  chrome_browser_sharing::SharingMessage sharing_message;
-  sharing_message.ParseFromString(
-      GetGCMService()->last_web_push_message().payload);
-  ASSERT_TRUE(sharing_message.has_click_to_call_message());
-  EXPECT_EQ(GURL(kTelUrl).GetContent(),
-            sharing_message.click_to_call_message().phone_number());
+  GetDeviceFCMToken(devices[0].guid(), &fcm_token);
+  CheckLastSharingMessageSent(fcm_token, GURL(kTelUrl));
 }
 
 IN_PROC_BROWSER_TEST_F(ClickToCallBrowserTest, ContextMenu_NoDevicesAvailable) {
@@ -170,7 +209,6 @@
 IN_PROC_BROWSER_TEST_F(ClickToCallBrowserTest,
                        ContextMenu_DevicesAvailable_SyncTurnedOff) {
   SetUpDevices(/*count=*/1);
-  AwaitQuiescence();
   GetSyncService(0)->GetUserSettings()->SetSyncRequested(false);
 
   std::unique_ptr<TestRenderViewContextMenu> menu =
@@ -180,3 +218,38 @@
   EXPECT_FALSE(menu->IsItemPresent(
       IDC_CONTENT_CONTEXT_SHARING_CLICK_TO_CALL_MULTIPLE_DEVICES));
 }
+
+IN_PROC_BROWSER_TEST_F(ClickToCallBrowserTest,
+                       ContextMenu_MultipleDevicesAvailable) {
+  SetUpDevices(/*count=*/2);
+
+  auto devices = sharing_service()->GetDeviceCandidates(
+      static_cast<int>(SharingDeviceCapability::kTelephony));
+
+  ASSERT_EQ(2u, devices.size());
+
+  std::unique_ptr<TestRenderViewContextMenu> menu =
+      InitRightClickMenu(GURL(kTelUrl), base::ASCIIToUTF16("Google"));
+  EXPECT_FALSE(menu->IsItemPresent(
+      IDC_CONTENT_CONTEXT_SHARING_CLICK_TO_CALL_SINGLE_DEVICE));
+  ASSERT_TRUE(menu->IsItemPresent(
+      IDC_CONTENT_CONTEXT_SHARING_CLICK_TO_CALL_MULTIPLE_DEVICES));
+
+  ui::MenuModel* sub_menu_model = nullptr;
+  int device_id = -1;
+  ASSERT_TRUE(menu->GetMenuModelAndItemIndex(kSubMenuFirstDeviceCommandId,
+                                             &sub_menu_model, &device_id));
+  EXPECT_EQ(2, sub_menu_model->GetItemCount());
+  EXPECT_EQ(0, device_id);
+
+  for (auto& device : devices) {
+    EXPECT_EQ(kSubMenuFirstDeviceCommandId + device_id,
+              sub_menu_model->GetCommandIdAt(device_id));
+    sub_menu_model->ActivatedAt(device_id);
+
+    std::string fcm_token;
+    GetDeviceFCMToken(device.guid(), &fcm_token);
+    CheckLastSharingMessageSent(fcm_token, GURL(kTelUrl));
+    device_id++;
+  }
+}
diff --git a/chrome/browser/sharing/click_to_call/click_to_call_context_menu_observer.cc b/chrome/browser/sharing/click_to_call/click_to_call_context_menu_observer.cc
index 437173c..f21caf65c 100644
--- a/chrome/browser/sharing/click_to_call/click_to_call_context_menu_observer.cc
+++ b/chrome/browser/sharing/click_to_call/click_to_call_context_menu_observer.cc
@@ -148,10 +148,9 @@
 }
 
 gfx::ImageSkia ClickToCallContextMenuObserver::GetContextMenuIcon() const {
-  bool dark_mode_enabled =
-      ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled();
   const views::MenuConfig& menu_config = views::MenuConfig::instance();
   return gfx::CreateVectorIcon(
       vector_icons::kCallIcon, menu_config.touchable_icon_size,
-      dark_mode_enabled ? gfx::kGoogleGrey500 : gfx::kChromeIconGrey);
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
+          ui::NativeTheme::kColorId_DefaultIconColor));
 }
diff --git a/chrome/browser/sharing/sharing_device_registration.cc b/chrome/browser/sharing/sharing_device_registration.cc
index 742bd145..1fcd0ec 100644
--- a/chrome/browser/sharing/sharing_device_registration.cc
+++ b/chrome/browser/sharing/sharing_device_registration.cc
@@ -27,6 +27,8 @@
 #include "chrome/android/chrome_jni_headers/SharingJNIBridge_jni.h"
 #endif
 
+using instance_id::InstanceID;
+
 SharingDeviceRegistration::SharingDeviceRegistration(
     SharingSyncPreference* sharing_sync_preference,
     instance_id::InstanceIDDriver* instance_id_driver,
@@ -58,7 +60,7 @@
   instance_id_driver_->GetInstanceID(kSharingFCMAppID)
       ->GetToken(*authorized_entity, kFCMScope,
                  /*options=*/{},
-                 /*is_lazy=*/false,
+                 /*flags=*/{InstanceID::Flags::kBypassScheduler},
                  base::BindOnce(&SharingDeviceRegistration::OnFCMTokenReceived,
                                 weak_ptr_factory_.GetWeakPtr(),
                                 std::move(callback), *authorized_entity));
@@ -68,23 +70,23 @@
     RegistrationCallback callback,
     const std::string& authorized_entity,
     const std::string& fcm_registration_token,
-    instance_id::InstanceID::Result result) {
+    InstanceID::Result result) {
   switch (result) {
-    case instance_id::InstanceID::SUCCESS:
+    case InstanceID::SUCCESS:
       sharing_sync_preference_->SetFCMRegistration(
           {authorized_entity, fcm_registration_token, base::Time::Now()});
       RetrieveEncryptionInfo(std::move(callback), authorized_entity,
                              fcm_registration_token);
       break;
-    case instance_id::InstanceID::NETWORK_ERROR:
-    case instance_id::InstanceID::SERVER_ERROR:
-    case instance_id::InstanceID::ASYNC_OPERATION_PENDING:
+    case InstanceID::NETWORK_ERROR:
+    case InstanceID::SERVER_ERROR:
+    case InstanceID::ASYNC_OPERATION_PENDING:
       std::move(callback).Run(
           SharingDeviceRegistrationResult::kFcmTransientError);
       break;
-    case instance_id::InstanceID::INVALID_PARAMETER:
-    case instance_id::InstanceID::UNKNOWN_ERROR:
-    case instance_id::InstanceID::DISABLED:
+    case InstanceID::INVALID_PARAMETER:
+    case InstanceID::UNKNOWN_ERROR:
+    case InstanceID::DISABLED:
       std::move(callback).Run(SharingDeviceRegistrationResult::kFcmFatalError);
       break;
   }
@@ -143,25 +145,24 @@
                          weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
 }
 
-void SharingDeviceRegistration::OnFCMTokenDeleted(
-    RegistrationCallback callback,
-    instance_id::InstanceID::Result result) {
+void SharingDeviceRegistration::OnFCMTokenDeleted(RegistrationCallback callback,
+                                                  InstanceID::Result result) {
   switch (result) {
-    case instance_id::InstanceID::SUCCESS:
+    case InstanceID::SUCCESS:
       // INVALID_PARAMETER is expected if InstanceID.GetToken hasn't been
       // invoked since restart.
-    case instance_id::InstanceID::INVALID_PARAMETER:
+    case InstanceID::INVALID_PARAMETER:
       sharing_sync_preference_->ClearFCMRegistration();
       std::move(callback).Run(SharingDeviceRegistrationResult::kSuccess);
       return;
-    case instance_id::InstanceID::NETWORK_ERROR:
-    case instance_id::InstanceID::SERVER_ERROR:
-    case instance_id::InstanceID::ASYNC_OPERATION_PENDING:
+    case InstanceID::NETWORK_ERROR:
+    case InstanceID::SERVER_ERROR:
+    case InstanceID::ASYNC_OPERATION_PENDING:
       std::move(callback).Run(
           SharingDeviceRegistrationResult::kFcmTransientError);
       return;
-    case instance_id::InstanceID::UNKNOWN_ERROR:
-    case instance_id::InstanceID::DISABLED:
+    case InstanceID::UNKNOWN_ERROR:
+    case InstanceID::DISABLED:
       std::move(callback).Run(SharingDeviceRegistrationResult::kFcmFatalError);
       return;
   }
diff --git a/chrome/browser/sharing/sharing_device_registration_unittest.cc b/chrome/browser/sharing/sharing_device_registration_unittest.cc
index a0f8dfd..e58701c2 100644
--- a/chrome/browser/sharing/sharing_device_registration_unittest.cc
+++ b/chrome/browser/sharing/sharing_device_registration_unittest.cc
@@ -63,7 +63,7 @@
   void GetToken(const std::string& authorized_entity,
                 const std::string& scope,
                 const std::map<std::string, std::string>& options,
-                bool is_lazy,
+                std::set<Flags> flags,
                 GetTokenCallback callback) override {
     std::move(callback).Run(fcm_token_, result_);
   }
@@ -162,7 +162,7 @@
 
  protected:
   content::TestBrowserThreadBundle scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
 
   sync_preferences::TestingPrefServiceSyncable prefs_;
   NiceMock<MockInstanceIDDriver> mock_instance_id_driver_;
diff --git a/chrome/browser/sharing/sharing_service.cc b/chrome/browser/sharing/sharing_service.cc
index 22abed13..d4be8f0c 100644
--- a/chrome/browser/sharing/sharing_service.cc
+++ b/chrome/browser/sharing/sharing_service.cc
@@ -127,6 +127,8 @@
 
   std::unordered_set<std::string> device_names;
   std::vector<SharingDeviceInfo> device_candidates;
+  const syncer::DeviceInfo* local_device_info =
+      local_device_info_provider_->GetLocalDeviceInfo();
   for (const auto& device : all_devices) {
     // If the current device is considered expired for our purposes, stop here
     // since the next devices in the vector are at least as expired than this
@@ -134,7 +136,8 @@
     if (device->last_updated_timestamp() < min_updated_time)
       break;
 
-    if (GetDeviceName() == device->client_name()) {
+    if (local_device_info &&
+        (local_device_info->client_name() == device->client_name())) {
       continue;
     }
 
@@ -184,6 +187,11 @@
                      message_guid));
 }
 
+void SharingService::SetDeviceInfoTrackerForTesting(
+    syncer::DeviceInfoTracker* tracker) {
+  device_info_tracker_ = tracker;
+}
+
 void SharingService::OnMessageSent(base::TimeTicks start_time,
                                    const std::string& message_guid,
                                    base::Optional<std::string> message_id) {
@@ -266,10 +274,8 @@
 }
 
 void SharingService::RegisterDeviceInTesting(
-    std::string device_name,
     int capabilities,
     SharingDeviceRegistration::RegistrationCallback callback) {
-  local_device_name_for_tests_ = std::move(device_name);
   sharing_device_registration_->SetDeviceCapabilityForTesting(capabilities);
   sharing_device_registration_->RegisterDevice(std::move(callback));
 }
@@ -376,15 +382,3 @@
                syncer::SyncService::TransportState::ACTIVE &&
            !sync_service_->GetActiveDataTypes().Has(syncer::PREFERENCES)));
 }
-
-base::Optional<std::string> SharingService::GetDeviceName() const {
-  if (local_device_name_for_tests_)
-    return local_device_name_for_tests_;
-
-  const syncer::DeviceInfo* local_device_info =
-      local_device_info_provider_->GetLocalDeviceInfo();
-  if (local_device_info)
-    return local_device_info->client_name();
-  else
-    return base::nullopt;
-}
diff --git a/chrome/browser/sharing/sharing_service.h b/chrome/browser/sharing/sharing_service.h
index 145eb0e..f385e4ca 100644
--- a/chrome/browser/sharing/sharing_service.h
+++ b/chrome/browser/sharing/sharing_service.h
@@ -98,14 +98,16 @@
   // Returns the current state of SharingService.
   virtual State GetState() const;
 
-  // For testing
+  // Used to register devices with required capabilities in tests.
   void RegisterDeviceInTesting(
-      std::string device_name,
       int capabilities,
       SharingDeviceRegistration::RegistrationCallback callback);
 
   SharingSyncPreference* GetSyncPreferences() const;
 
+  // Used to fake client names in integration tests.
+  void SetDeviceInfoTrackerForTesting(syncer::DeviceInfoTracker* tracker);
+
  private:
   // Overrides for syncer::SyncServiceObserver.
   void OnSyncShutdown(syncer::SyncService* sync) override;
@@ -131,10 +133,6 @@
   // in transitioning state.
   bool IsSyncDisabled() const;
 
-  // Returns |local_device_name_for_tests_| if set, otherwise returns the actual
-  // device name from |local_device_info_provider_|.
-  base::Optional<std::string> GetDeviceName() const;
-
   std::unique_ptr<SharingSyncPreference> sync_prefs_;
   std::unique_ptr<VapidKeyManager> vapid_key_manager_;
   std::unique_ptr<SharingDeviceRegistration> sharing_device_registration_;
@@ -147,7 +145,6 @@
   PingMessageHandler ping_message_handler_;
   net::BackoffEntry backoff_entry_;
   State state_;
-  base::Optional<std::string> local_device_name_for_tests_;
 
   // Map of random GUID to SendMessageCallback.
   std::map<std::string, SendMessageCallback> send_message_callbacks_;
diff --git a/chrome/browser/sharing/sharing_service_unittest.cc b/chrome/browser/sharing/sharing_service_unittest.cc
index a66fe70..2ca065c 100644
--- a/chrome/browser/sharing/sharing_service_unittest.cc
+++ b/chrome/browser/sharing/sharing_service_unittest.cc
@@ -216,7 +216,7 @@
 
   base::test::ScopedFeatureList scoped_feature_list_;
   content::TestBrowserThreadBundle scoped_task_environment_{
-      ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      ScopedTaskEnvironment::TimeSource::MOCK_TIME};
 
   syncer::FakeDeviceInfoTracker device_info_tracker_;
   FakeLocalDeviceInfoProvider fake_local_device_info_provider_;
diff --git a/chrome/browser/signin/account_reconcilor_factory.cc b/chrome/browser/signin/account_reconcilor_factory.cc
index d4c8c65f..a0685d5 100644
--- a/chrome/browser/signin/account_reconcilor_factory.cc
+++ b/chrome/browser/signin/account_reconcilor_factory.cc
@@ -28,7 +28,7 @@
 #include "chrome/browser/chromeos/account_manager/account_manager_migrator.h"
 #include "chrome/browser/chromeos/account_manager/account_migration_runner.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/user_manager/user_manager.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 #endif
@@ -171,7 +171,7 @@
       // TODO(sinhak): Remove the if-condition (and use
       // |MirrorAccountReconcilorDelegate|) when all Chrome OS users have been
       // migrated to Account Manager.
-      if (chromeos::switches::IsAccountManagerEnabled()) {
+      if (chromeos::features::IsAccountManagerEnabled()) {
         return std::make_unique<ChromeOSAccountReconcilorDelegate>(
             IdentityManagerFactory::GetForProfile(profile),
             chromeos::AccountManagerMigratorFactory::GetForBrowserContext(
diff --git a/chrome/browser/signin/chrome_signin_helper.cc b/chrome/browser/signin/chrome_signin_helper.cc
index 882cd92..1001abb 100644
--- a/chrome/browser/signin/chrome_signin_helper.cc
+++ b/chrome/browser/signin/chrome_signin_helper.cc
@@ -56,7 +56,7 @@
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/ui/settings_window_manager_chromeos.h"
 #include "chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #endif
 
 namespace signin {
@@ -197,7 +197,7 @@
   signin_metrics::LogAccountReconcilorStateOnGaiaResponse(
       account_reconcilor->GetState());
 
-  if (chromeos::switches::IsAccountManagerEnabled()) {
+  if (chromeos::features::IsAccountManagerEnabled()) {
     // Chrome OS Account Manager is available. The only allowed operations
     // are:
     //
diff --git a/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc b/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc
index ad723380..532dc2f0 100644
--- a/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc
+++ b/chrome/browser/signin/chromeos_mirror_account_consistency_browsertest.cc
@@ -15,7 +15,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/account_id/account_id.h"
 #include "components/google/core/common/google_util.h"
 #include "components/network_session_configurator/common/network_switches.h"
@@ -152,7 +152,7 @@
 
   void SetUp() override {
     scoped_feature_list_.InitAndEnableFeature(
-        chromeos::switches::kAccountManager);
+        chromeos::features::kAccountManager);
     ChromeOsMirrorAccountConsistencyTest::SetUp();
   }
 
diff --git a/chrome/browser/signin/mirror_browsertest.cc b/chrome/browser/signin/mirror_browsertest.cc
index ffaa34f..f57d78e 100644
--- a/chrome/browser/signin/mirror_browsertest.cc
+++ b/chrome/browser/signin/mirror_browsertest.cc
@@ -66,9 +66,9 @@
 
   // ContentBrowserClient overrides:
   std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
-  CreateURLLoaderThrottlesOnIO(
+  CreateURLLoaderThrottles(
       const network::ResourceRequest& request,
-      content::ResourceContext* resource_context,
+      content::BrowserContext* browser_context,
       const base::RepeatingCallback<content::WebContents*()>& wc_getter,
       content::NavigationUIData* navigation_ui_data,
       int frame_tree_node_id) override {
@@ -77,16 +77,6 @@
       throttles.push_back(std::make_unique<HeaderModifyingThrottle>());
     return throttles;
   }
-  std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
-  CreateURLLoaderThrottles(
-      const network::ResourceRequest& request,
-      content::BrowserContext* browser_context,
-      const base::RepeatingCallback<content::WebContents*()>& wc_getter,
-      content::NavigationUIData* navigation_ui_data,
-      int frame_tree_node_id) override {
-    return CreateURLLoaderThrottlesOnIO(request, nullptr, wc_getter,
-                                        navigation_ui_data, frame_tree_node_id);
-  }
 
  private:
   const GURL watch_url_;
diff --git a/chrome/browser/speech/tts_chromeos.cc b/chrome/browser/speech/tts_chromeos.cc
index 82fc975..a339753 100644
--- a/chrome/browser/speech/tts_chromeos.cc
+++ b/chrome/browser/speech/tts_chromeos.cc
@@ -6,7 +6,7 @@
 
 #include "base/macros.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/tts.mojom.h"
+#include "components/arc/mojom/tts.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/tts_platform.h"
diff --git a/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc b/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
index d4ac62ef..901060a 100644
--- a/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
+++ b/chrome/browser/spellchecker/spellcheck_hunspell_dictionary.cc
@@ -303,8 +303,7 @@
 
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = url;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   simple_loader_ = network::SimpleURLLoader::Create(std::move(resource_request),
                                                     traffic_annotation);
   network::mojom::URLLoaderFactory* loader_factory =
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
index 5b87559..78043d6 100644
--- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
+++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
@@ -174,8 +174,7 @@
 
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = url;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request->headers.SetHeader(
       net::HttpRequestHeaders::kAuthorization,
       base::StringPrintf(supervised_users::kAuthorizationHeaderFormat,
diff --git a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
index 059264d..273681c 100644
--- a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
+++ b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
@@ -228,8 +228,7 @@
 
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = GetApiUrl();
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request->method = "POST";
   resource_request->headers.SetHeader(
       net::HttpRequestHeaders::kAuthorization,
diff --git a/chrome/browser/sync/chrome_sync_client.cc b/chrome/browser/sync/chrome_sync_client.cc
index 32d9c85..d30098a 100644
--- a/chrome/browser/sync/chrome_sync_client.cc
+++ b/chrome/browser/sync/chrome_sync_client.cc
@@ -123,8 +123,10 @@
 #include "chrome/browser/chromeos/printing/printers_sync_bridge.h"
 #include "chrome/browser/chromeos/printing/synced_printers_manager.h"
 #include "chrome/browser/chromeos/printing/synced_printers_manager_factory.h"
+#include "chrome/browser/sync/wifi_configuration_sync_service_factory.h"
 #include "chrome/browser/ui/app_list/arc/arc_package_sync_model_type_controller.h"
 #include "chrome/browser/ui/app_list/arc/arc_package_syncable_service.h"
+#include "chromeos/components/sync_wifi/wifi_configuration_sync_service.h"
 #include "components/arc/arc_util.h"
 #endif  // defined(OS_CHROMEOS)
 
@@ -529,6 +531,9 @@
           ->GetSyncBridge()
           ->change_processor()
           ->GetControllerDelegate();
+    case syncer::WIFI_CONFIGURATIONS:
+      return WifiConfigurationSyncServiceFactory::GetForProfile(profile_)
+          ->GetControllerDelegate();
 #endif  // defined(OS_CHROMEOS)
     case syncer::USER_CONSENTS:
       return ConsentAuditorFactory::GetForProfile(profile_)
diff --git a/chrome/browser/sync/profile_sync_service_factory.cc b/chrome/browser/sync/profile_sync_service_factory.cc
index ecb45aa..bb1d775 100644
--- a/chrome/browser/sync/profile_sync_service_factory.cc
+++ b/chrome/browser/sync/profile_sync_service_factory.cc
@@ -75,6 +75,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/printing/synced_printers_manager_factory.h"
+#include "chrome/browser/sync/wifi_configuration_sync_service_factory.h"
 #endif  // defined(OS_CHROMEOS)
 
 namespace {
@@ -166,6 +167,7 @@
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
 #if defined(OS_CHROMEOS)
   DependsOn(chromeos::SyncedPrintersManagerFactory::GetInstance());
+  DependsOn(WifiConfigurationSyncServiceFactory::GetInstance());
 #endif  // defined(OS_CHROMEOS)
 }
 
diff --git a/chrome/browser/sync/sessions/sync_sessions_router_tab_helper.cc b/chrome/browser/sync/sessions/sync_sessions_router_tab_helper.cc
index 904043e..70a05f56 100644
--- a/chrome/browser/sync/sessions/sync_sessions_router_tab_helper.cc
+++ b/chrome/browser/sync/sessions/sync_sessions_router_tab_helper.cc
@@ -41,7 +41,7 @@
       ChromeTranslateClient::FromWebContents(web_contents);
   // A translate client is not always attached to web contents (e.g. tests).
   if (chrome_translate_client_)
-    chrome_translate_client_->translate_driver().AddObserver(this);
+    chrome_translate_client_->translate_driver()->AddObserver(this);
 
   favicon_driver_ =
       favicon::ContentFaviconDriver::FromWebContents(web_contents);
@@ -64,7 +64,7 @@
 void SyncSessionsRouterTabHelper::WebContentsDestroyed() {
   NotifyRouter();
   if (chrome_translate_client_)
-    chrome_translate_client_->translate_driver().RemoveObserver(this);
+    chrome_translate_client_->translate_driver()->RemoveObserver(this);
   if (favicon_driver_)
     favicon_driver_->RemoveObserver(this);
 }
diff --git a/chrome/browser/sync/test/integration/sync_arc_package_helper.h b/chrome/browser/sync/test/integration/sync_arc_package_helper.h
index 5f565203..dca331c 100644
--- a/chrome/browser/sync/test/integration/sync_arc_package_helper.h
+++ b/chrome/browser/sync/test/integration/sync_arc_package_helper.h
@@ -11,7 +11,7 @@
 
 #include "base/macros.h"
 #include "base/memory/singleton.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class Profile;
 class SyncTest;
diff --git a/chrome/browser/sync/wifi_configuration_sync_service_factory.cc b/chrome/browser/sync/wifi_configuration_sync_service_factory.cc
new file mode 100644
index 0000000..627ddac
--- /dev/null
+++ b/chrome/browser/sync/wifi_configuration_sync_service_factory.cc
@@ -0,0 +1,44 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/sync/wifi_configuration_sync_service_factory.h"
+
+#include "base/memory/singleton.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sync/model_type_store_service_factory.h"
+#include "chrome/common/channel_info.h"
+#include "chromeos/components/sync_wifi/wifi_configuration_sync_service.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/sync/model/model_type_store_service.h"
+
+// static
+sync_wifi::WifiConfigurationSyncService*
+WifiConfigurationSyncServiceFactory::GetForProfile(Profile* profile) {
+  return static_cast<sync_wifi::WifiConfigurationSyncService*>(
+      GetInstance()->GetServiceForBrowserContext(profile, true));
+}
+
+// static
+WifiConfigurationSyncServiceFactory*
+WifiConfigurationSyncServiceFactory::GetInstance() {
+  return base::Singleton<WifiConfigurationSyncServiceFactory>::get();
+}
+
+WifiConfigurationSyncServiceFactory::WifiConfigurationSyncServiceFactory()
+    : BrowserContextKeyedServiceFactory(
+          "WifiConfigurationSyncService",
+          BrowserContextDependencyManager::GetInstance()) {
+  DependsOn(ModelTypeStoreServiceFactory::GetInstance());
+}
+
+WifiConfigurationSyncServiceFactory::~WifiConfigurationSyncServiceFactory() =
+    default;
+
+KeyedService* WifiConfigurationSyncServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return new sync_wifi::WifiConfigurationSyncService(
+      chrome::GetChannel(), ModelTypeStoreServiceFactory::GetForProfile(
+                                Profile::FromBrowserContext(context))
+                                ->GetStoreFactory());
+}
diff --git a/chrome/browser/sync/wifi_configuration_sync_service_factory.h b/chrome/browser/sync/wifi_configuration_sync_service_factory.h
new file mode 100644
index 0000000..ec8e99b
--- /dev/null
+++ b/chrome/browser/sync/wifi_configuration_sync_service_factory.h
@@ -0,0 +1,45 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_SYNC_WIFI_CONFIGURATION_SYNC_SERVICE_FACTORY_H_
+#define CHROME_BROWSER_SYNC_WIFI_CONFIGURATION_SYNC_SERVICE_FACTORY_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+class Profile;
+
+namespace base {
+template <typename T>
+struct DefaultSingletonTraits;
+}  // namespace base
+
+namespace sync_wifi {
+class WifiConfigurationSyncService;
+}  // namespace sync_wifi
+
+class WifiConfigurationSyncServiceFactory
+    : public BrowserContextKeyedServiceFactory {
+ public:
+  static sync_wifi::WifiConfigurationSyncService* GetForProfile(
+      Profile* profile);
+  static WifiConfigurationSyncServiceFactory* GetInstance();
+
+ private:
+  friend struct base::DefaultSingletonTraits<
+      WifiConfigurationSyncServiceFactory>;
+
+  WifiConfigurationSyncServiceFactory();
+  ~WifiConfigurationSyncServiceFactory() override;
+
+  // BrowserContextKeyedServiceFactory:
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+
+  DISALLOW_COPY_AND_ASSIGN(WifiConfigurationSyncServiceFactory);
+};
+
+#endif  // CHROME_BROWSER_SYNC_WIFI_CONFIGURATION_SYNC_SERVICE_FACTORY_H_
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task.cc b/chrome/browser/task_manager/providers/arc/arc_process_task.cc
index e9fb267..4fcdbc59 100644
--- a/chrome/browser/task_manager/providers/arc/arc_process_task.cc
+++ b/chrome/browser/task_manager/providers/arc/arc_process_task.cc
@@ -14,8 +14,8 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/process.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/process.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task.h b/chrome/browser/task_manager/providers/arc/arc_process_task.h
index 580781e..8e2977c 100644
--- a/chrome/browser/task_manager/providers/arc/arc_process_task.h
+++ b/chrome/browser/task_manager/providers/arc/arc_process_task.h
@@ -13,9 +13,9 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/chromeos/arc/process/arc_process.h"
 #include "chrome/browser/task_manager/providers/task.h"
-#include "components/arc/common/intent_helper.mojom.h"
-#include "components/arc/common/process.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
 #include "components/arc/session/connection_observer.h"
 
 namespace task_manager {
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc
index cc047cb4..d107829e 100644
--- a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc
+++ b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc
@@ -18,7 +18,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "chrome/browser/chromeos/arc/process/arc_process_service.h"
-#include "components/arc/common/process.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
 
 namespace task_manager {
 
diff --git a/chrome/browser/themes/theme_properties.cc b/chrome/browser/themes/theme_properties.cc
index 8529fa6..38fca6e 100644
--- a/chrome/browser/themes/theme_properties.cc
+++ b/chrome/browser/themes/theme_properties.cc
@@ -160,7 +160,7 @@
       << "These values should be queried via their respective non-incognito "
          "equivalents and an appropriate |incognito| value.";
   if (!incognito &&
-      ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled() &&
+      ui::NativeTheme::GetInstanceForNativeUi()->ShouldUseDarkColors() &&
       id == TINT_BUTTONS) {
     return {0, 0, 1};
   }
@@ -186,7 +186,7 @@
     if (incognito_color.has_value())
       return incognito_color.value();
   }
-  if (ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()) {
+  if (ui::NativeTheme::GetInstanceForNativeUi()->ShouldUseDarkColors()) {
     base::Optional<SkColor> dark_mode_color = GetDarkModeColor(id);
     if (dark_mode_color.has_value())
       return dark_mode_color.value();
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index 0dfb252..9ef4141 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -398,7 +398,7 @@
     scoped_refptr<CustomThemeSupplier> supplier;
     if (observed_theme && observed_theme->UsesHighContrastColors()) {
       supplier = base::MakeRefCounted<IncreasedContrastThemeSupplier>(
-          observed_theme->SystemDarkModeEnabled());
+          observed_theme->ShouldUseDarkColors());
     }
     SwapThemeSupplier(supplier);
   }
@@ -430,7 +430,7 @@
   ui::NativeTheme* native_theme = ui::NativeTheme::GetInstanceForNativeUi();
   if (native_theme && native_theme->UsesHighContrastColors()) {
     SetCustomDefaultTheme(new IncreasedContrastThemeSupplier(
-        native_theme->SystemDarkModeEnabled()));
+        native_theme->ShouldUseDarkColors()));
     // Early return here because SetCustomDefaultTheme does ClearAllThemeData
     // and NotifyThemeChanged when it needs to. Without this return, the
     // IncreasedContrastThemeSupplier would get immediately removed if this
diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc
index 53d2bd1..55e3412 100644
--- a/chrome/browser/tracing/crash_service_uploader.cc
+++ b/chrome/browser/tracing/crash_service_uploader.cc
@@ -356,8 +356,7 @@
   resource_request->url = GURL(upload_url);
   resource_request->method = "POST";
   resource_request->enable_upload_progress = true;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
 
   simple_url_loader_ = network::SimpleURLLoader::Create(
       std::move(resource_request), traffic_annotation);
diff --git a/chrome/browser/translate/chrome_translate_client.cc b/chrome/browser/translate/chrome_translate_client.cc
index 3249ad5..31be842 100644
--- a/chrome/browser/translate/chrome_translate_client.cc
+++ b/chrome/browser/translate/chrome_translate_client.cc
@@ -319,23 +319,6 @@
 #endif
 }
 
-void ChromeTranslateClient::OnPageTranslated(
-    const std::string& original_lang,
-    const std::string& translated_lang,
-    translate::TranslateErrors::Type error_type) {
-  // TODO(268984): Remove translate notifications and have the clients be
-  // ContentTranslateDriver::Observer directly instead.
-  DCHECK(web_contents());
-  translate::PageTranslatedDetails details;
-  details.source_language = original_lang;
-  details.target_language = translated_lang;
-  details.error_type = error_type;
-  content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_PAGE_TRANSLATED,
-      content::Source<content::WebContents>(web_contents()),
-      content::Details<translate::PageTranslatedDetails>(&details));
-}
-
 // The bubble is implemented only on the desktop platforms.
 #if !defined(OS_ANDROID)
 ShowTranslateBubbleResult ChromeTranslateClient::ShowBubble(
diff --git a/chrome/browser/translate/chrome_translate_client.h b/chrome/browser/translate/chrome_translate_client.h
index d7210591..4ef593c4 100644
--- a/chrome/browser/translate/chrome_translate_client.h
+++ b/chrome/browser/translate/chrome_translate_client.h
@@ -51,8 +51,8 @@
 
   // Returns the ContentTranslateDriver instance associated with this
   // WebContents.
-  translate::ContentTranslateDriver& translate_driver() {
-    return translate_driver_;
+  translate::ContentTranslateDriver* translate_driver() {
+    return &translate_driver_;
   }
 
   // Helper method to return a new TranslatePrefs instance.
@@ -109,9 +109,6 @@
   // ContentTranslateDriver::Observer implementation.
   void OnLanguageDetermined(
       const translate::LanguageDetectionDetails& details) override;
-  void OnPageTranslated(const std::string& original_lang,
-                        const std::string& translated_lang,
-                        translate::TranslateErrors::Type error_type) override;
 
  private:
   explicit ChromeTranslateClient(content::WebContents* web_contents);
diff --git a/chrome/browser/translate/translate_manager_browsertest.cc b/chrome/browser/translate/translate_manager_browsertest.cc
index 532a502..58d18b8 100644
--- a/chrome/browser/translate/translate_manager_browsertest.cc
+++ b/chrome/browser/translate/translate_manager_browsertest.cc
@@ -2,36 +2,37 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/translate/core/browser/translate_manager.h"
-
 #include <memory>
 
 #include "base/bind.h"
+#include "base/scoped_observer.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/prefs/session_startup_pref.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/translate/chrome_translate_client.h"
 #include "chrome/browser/translate/translate_accept_languages_factory.h"
+#include "chrome/browser/translate/translate_test_utils.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/search_test_utils.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/translate/content/browser/content_translate_driver.h"
 #include "components/translate/core/browser/translate_accept_languages.h"
 #include "components/translate/core/browser/translate_error_details.h"
+#include "components/translate/core/browser/translate_manager.h"
 #include "components/translate/core/common/language_detection_details.h"
 #include "components/translate/core/common/translate_switches.h"
-#include "content/public/browser/notification_service.h"
 #include "content/public/common/content_switches.h"
-#include "content/public/test/browser_test_utils.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
 #include "url/gurl.h"
 
+namespace translate {
+
 namespace {
 
 static const char kTestValidScript[] =
@@ -190,28 +191,27 @@
 
 }  // namespace
 
-namespace translate {
-
 class TranslateManagerBrowserTest : public InProcessBrowserTest {
  public:
   TranslateManagerBrowserTest() {
-    error_subscription_ =
-        translate::TranslateManager::RegisterTranslateErrorCallback(
-            base::Bind(&TranslateManagerBrowserTest::OnTranslateError,
-                       base::Unretained(this)));
+    error_subscription_ = TranslateManager::RegisterTranslateErrorCallback(
+        base::Bind(&TranslateManagerBrowserTest::OnTranslateError,
+                   base::Unretained(this)));
   }
   ~TranslateManagerBrowserTest() override {}
 
-  void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); }
-  void WaitUntilPageTranslated() { page_translated_signal_->Wait(); }
+  void WaitUntilLanguageDetermined() { language_determined_waiter_->Wait(); }
+
+  void WaitUntilPageTranslated() {
+    TranslateWaiter(browser()->tab_strip_model()->GetActiveWebContents(),
+                    TranslateWaiter::WaitEvent::kPageTranslated)
+        .Wait();
+  }
 
   void ResetObserver() {
-    language_detected_signal_.reset(new LangageDetectionObserver(
-        chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
-        content::NotificationService::AllSources()));
-    page_translated_signal_.reset(new content::WindowedNotificationObserver(
-        chrome::NOTIFICATION_PAGE_TRANSLATED,
-        content::NotificationService::AllSources()));
+    language_determined_waiter_ = std::make_unique<TranslateWaiter>(
+        browser()->tab_strip_model()->GetActiveWebContents(),
+        TranslateWaiter::WaitEvent::kLanguageDetermined);
   }
 
   std::unique_ptr<net::test_server::HttpResponse> HandleRequest(
@@ -227,13 +227,11 @@
     return std::move(http_response);
   }
 
-  void OnTranslateError(const translate::TranslateErrorDetails& details) {
+  void OnTranslateError(const TranslateErrorDetails& details) {
     error_type_ = details.error;
   }
 
-  translate::TranslateErrors::Type GetPageTranslatedResult() {
-    return error_type_;
-  }
+  TranslateErrors::Type GetPageTranslatedResult() { return error_type_; }
 
   ChromeTranslateClient* GetChromeTranslateClient() {
     return ChromeTranslateClient::FromWebContents(
@@ -247,7 +245,7 @@
   }
   void SetUpOnMainThread() override {
     ResetObserver();
-    error_type_ = translate::TranslateErrors::NONE;
+    error_type_ = TranslateErrors::NONE;
 
     host_resolver()->AddRule("www.google.com", "127.0.0.1");
     embedded_test_server()->RegisterRequestHandler(base::BindRepeating(
@@ -262,10 +260,12 @@
         ::switches::kEnableExperimentalWebPlatformFeatures);
 
     command_line->AppendSwitchASCII(
-        translate::switches::kTranslateScriptURL,
+        switches::kTranslateScriptURL,
         embedded_test_server()->GetURL("/mock_translate_script.js").spec());
   }
   void TearDownOnMainThread() override {
+    language_determined_waiter_.reset();
+
     EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
 
     InProcessBrowserTest::TearDownOnMainThread();
@@ -274,21 +274,16 @@
   void SetTranslateScript(const std::string& script) { script_ = script; }
 
  private:
-  translate::TranslateErrors::Type error_type_;
+  TranslateErrors::Type error_type_;
 
-  std::unique_ptr<
-      translate::TranslateManager::TranslateErrorCallbackList::Subscription>
+  std::unique_ptr<TranslateManager::TranslateErrorCallbackList::Subscription>
       error_subscription_;
 
-  using LangageDetectionObserver =
-      ui_test_utils::WindowedNotificationObserverWithDetails<
-          translate::LanguageDetectionDetails>;
-
-  std::unique_ptr<LangageDetectionObserver> language_detected_signal_;
-  std::unique_ptr<content::WindowedNotificationObserver>
-      page_translated_signal_;
+  std::unique_ptr<TranslateWaiter> language_determined_waiter_;
 
   std::string script_;
+
+  DISALLOW_COPY_AND_ASSIGN(TranslateManagerBrowserTest);
 };
 
 // Tests that the CLD (Compact Language Detection) works properly.
@@ -299,17 +294,17 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in English.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("en",
             chrome_translate_client->GetLanguageState().original_language());
@@ -318,7 +313,7 @@
   // Now navigate to a page in French.
   ui_test_utils::NavigateToURL(
       browser(), GURL(embedded_test_server()->GetURL("/french_page.html")));
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
@@ -335,7 +330,7 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
@@ -343,13 +338,13 @@
   // Open a new tab with a page in French with incorrect HTML language
   // attribute specified. The language attribute should be overridden by the
   // language detection.
-  ResetObserver();
   AddTabAtIndex(
       0,
       GURL(embedded_test_server()->GetURL("/french_page_lang_conflict.html")),
       ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
@@ -357,13 +352,13 @@
   // Open a new tab with a page in Korean with incorrect HTML language
   // attribute specified. The language attribute should not be overridden by the
   // language detection.
-  ResetObserver();
   AddTabAtIndex(
       0,
       GURL(embedded_test_server()->GetURL("/korean_page_lang_conflict.html")),
       ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("en",
             chrome_translate_client->GetLanguageState().original_language());
@@ -378,42 +373,40 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in French.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage(
       chrome_translate_client->GetLanguageState().original_language(), "en",
       true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::NONE, GetPageTranslatedResult());
 }
 
 // Test that the translation was successful in an about:blank page.
 // This is a regression test for https://crbug.com/943685.
 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationAboutBlank) {
   SetTranslateScript(kTestValidScript);
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
 
   // Open a pop-up window and leave it at the initial about:blank URL.
   content::WebContentsAddedObserver popup_observer;
@@ -429,8 +422,7 @@
   // Translate the about:blank page.
   ChromeTranslateClient* chrome_translate_client =
       ChromeTranslateClient::FromWebContents(popup);
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage("fr", "en", true);
 
   // Verify that the crash from https://crbug.com/943685 didn't happen.
@@ -439,7 +431,7 @@
   // Wait for translation to finish and verify it was successful.
   WaitUntilPageTranslated();
   EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::NONE, GetPageTranslatedResult());
 }
 
 // Test that hrefTranslate is propagating properly
@@ -452,19 +444,19 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
-  ResetObserver();
   // Load a German page and detect it's language
   AddTabAtIndex(0,
                 GURL(embedded_test_server()->GetURL(
                     "www.google.com", "/href_translate_test.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("de",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -478,7 +470,7 @@
   ASSERT_TRUE(content::ExecuteScript(web_contents, click_link_js));
 
   // Detect language on the new page
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -505,18 +497,18 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
-  ResetObserver();
   // Load a German page and detect it's language
   AddTabAtIndex(
       0, GURL(embedded_test_server()->GetURL("/href_translate_test.html")),
       ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("de",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -530,7 +522,7 @@
   ASSERT_TRUE(content::ExecuteScript(web_contents, click_link_js));
 
   // Detect language on the new page
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -547,19 +539,19 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
-  ResetObserver();
   // Load a German page and detect it's language
   AddTabAtIndex(0,
                 GURL(embedded_test_server()->GetURL(
                     "www.google.com", "/href_translate_test.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("de",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -576,7 +568,7 @@
   ASSERT_TRUE(content::ExecuteScript(web_contents, click_link_js));
 
   // Detect language on the new page
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -593,19 +585,19 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
-  ResetObserver();
   // Load a German page and detect it's language
   AddTabAtIndex(0,
                 GURL(embedded_test_server()->GetURL(
                     "www.google.com", "/href_translate_test.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("de",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -620,7 +612,7 @@
   ASSERT_TRUE(content::ExecuteScript(web_contents, click_link_js));
 
   // Detect language on the new page
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -640,19 +632,19 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
-  ResetObserver();
   // Load a German page and detect it's language
   AddTabAtIndex(0,
                 GURL(embedded_test_server()->GetURL(
                     "www.google.com", "/href_translate_test.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("de",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -667,7 +659,7 @@
   ASSERT_TRUE(content::ExecuteScript(web_contents, click_link_js));
 
   // Detect language on the new page
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -686,33 +678,30 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with about:blank page.
-  ResetObserver();
   AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage(
       chrome_translate_client->GetLanguageState().original_language(), "en",
       true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR,
-            GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::TRANSLATION_ERROR, GetPageTranslatedResult());
 }
 
 // Test if there was an error during translate library initialization.
@@ -725,34 +714,31 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in French.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage(
       chrome_translate_client->GetLanguageState().original_language(), "en",
       true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR,
-            GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::INITIALIZATION_ERROR, GetPageTranslatedResult());
 }
 
 // Test the checks translate lib never gets ready and throws timeout.
@@ -765,34 +751,31 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in French.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage(
       chrome_translate_client->GetLanguageState().original_language(), "en",
       true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::TRANSLATION_TIMEOUT,
-            GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::TRANSLATION_TIMEOUT, GetPageTranslatedResult());
 }
 
 // Test the checks if both source and target languages mentioned are identical.
@@ -805,32 +788,29 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in French.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage("aa", "en", true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES,
-            GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::IDENTICAL_LANGUAGES, GetPageTranslatedResult());
 }
 
 // Test if there was an error during translatePage script execution.
@@ -843,33 +823,31 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in French.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage(
       chrome_translate_client->GetLanguageState().original_language(), "en",
       true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::UNEXPECTED_SCRIPT_ERROR,
+  EXPECT_EQ(TranslateErrors::UNEXPECTED_SCRIPT_ERROR,
             GetPageTranslatedResult());
 }
 
@@ -883,33 +861,31 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in French.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage(
       chrome_translate_client->GetLanguageState().original_language(), "en",
       true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::BAD_ORIGIN, GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::BAD_ORIGIN, GetPageTranslatedResult());
 }
 
 // Test if there was an error during script load.
@@ -922,34 +898,31 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Open a new tab with a page in French.
-  ResetObserver();
   AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
 
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
   // Translate the page through TranslateManager.
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->TranslatePage(
       chrome_translate_client->GetLanguageState().original_language(), "en",
       true);
 
-  // Wait for NOTIFICATION_PAGE_TRANSLATED notification.
   WaitUntilPageTranslated();
 
   EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error());
-  EXPECT_EQ(translate::TranslateErrors::SCRIPT_LOAD_ERROR,
-            GetPageTranslatedResult());
+  EXPECT_EQ(TranslateErrors::SCRIPT_LOAD_ERROR, GetPageTranslatedResult());
 }
 
 // Test that session restore restores the translate infobar and other translate
@@ -964,7 +937,7 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
@@ -975,7 +948,7 @@
       base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html")));
   ui_test_utils::NavigateToURL(browser(), french_url);
 
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 }
@@ -984,7 +957,7 @@
                        TranslateSessionRestore) {
   ChromeTranslateClient* active_translate_client = GetChromeTranslateClient();
   if (active_translate_client->GetLanguageState().current_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
   EXPECT_EQ("und",
             active_translate_client->GetLanguageState().current_language());
 
@@ -1001,7 +974,7 @@
           .current_language()
           .empty()) {
     ResetObserver();
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
   }
   EXPECT_EQ("fr",
             restored_translate_client->GetLanguageState().current_language());
@@ -1011,8 +984,7 @@
 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest,
                        HrefTranslateOverridesManualTranslate) {
   ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient();
-  translate::TranslateManager* manager =
-      chrome_translate_client->GetTranslateManager();
+  TranslateManager* manager = chrome_translate_client->GetTranslateManager();
   manager->SetIgnoreMissingKeyForTesting(true);
 
   // Set target language manually
@@ -1024,19 +996,19 @@
   // There is a possible race condition, when the language is not yet detected,
   // so we check for that and wait if necessary.
   if (chrome_translate_client->GetLanguageState().original_language().empty())
-    WaitUntilLanguageDetected();
+    WaitUntilLanguageDetermined();
 
   EXPECT_EQ("und",
             chrome_translate_client->GetLanguageState().original_language());
 
-  ResetObserver();
   // Load a German page and detect it's language
   AddTabAtIndex(0,
                 GURL(embedded_test_server()->GetURL(
                     "www.google.com", "/href_translate_test.html")),
                 ui::PAGE_TRANSITION_TYPED);
+  ResetObserver();
   chrome_translate_client = GetChromeTranslateClient();
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("de",
             chrome_translate_client->GetLanguageState().original_language());
 
@@ -1050,7 +1022,7 @@
   ASSERT_TRUE(content::ExecuteScript(web_contents, click_link_js));
 
   // Detect language on the new page
-  WaitUntilLanguageDetected();
+  WaitUntilLanguageDetermined();
   EXPECT_EQ("fr",
             chrome_translate_client->GetLanguageState().original_language());
 
diff --git a/chrome/browser/translate/translate_manager_render_view_host_android_unittest.cc b/chrome/browser/translate/translate_manager_render_view_host_android_unittest.cc
index 7112312..93ba658 100644
--- a/chrome/browser/translate/translate_manager_render_view_host_android_unittest.cc
+++ b/chrome/browser/translate/translate_manager_render_view_host_android_unittest.cc
@@ -56,8 +56,8 @@
     details.adopted_language = lang;
     ChromeTranslateClient::FromWebContents(web_contents())
         ->translate_driver()
-        .RegisterPage(fake_page_.BindToNewPagePtr(), details,
-                      page_translatable);
+        ->RegisterPage(fake_page_.BindToNewPagePtr(), details,
+                       page_translatable);
   }
 
   InfoBarService* infobar_service() {
@@ -105,7 +105,7 @@
     ChromeTranslateClient::CreateForWebContents(web_contents());
     ChromeTranslateClient::FromWebContents(web_contents())
         ->translate_driver()
-        .set_translate_max_reload_attempts(0);
+        ->set_translate_max_reload_attempts(0);
   }
 
   void TearDown() override {
diff --git a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
index 131b396..2300bce 100644
--- a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
+++ b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
@@ -251,8 +251,8 @@
     details.adopted_language = lang;
     ChromeTranslateClient::FromWebContents(web_contents())
         ->translate_driver()
-        .RegisterPage(fake_page_.BindToNewPagePtr(), details,
-                      page_translatable);
+        ->RegisterPage(fake_page_.BindToNewPagePtr(), details,
+                       page_translatable);
   }
 
   void SimulateOnPageTranslated(const std::string& source_lang,
@@ -428,7 +428,7 @@
     ChromeTranslateClient::CreateForWebContents(web_contents());
     ChromeTranslateClient::FromWebContents(web_contents())
         ->translate_driver()
-        .set_translate_max_reload_attempts(0);
+        ->set_translate_max_reload_attempts(0);
 
     infobar_observer_.Add(infobar_service());
   }
@@ -887,7 +887,7 @@
   // immediately.
   ChromeTranslateClient::FromWebContents(web_contents())
       ->translate_driver()
-      .set_translate_max_reload_attempts(100);
+      ->set_translate_max_reload_attempts(100);
   ReloadAndWait(true);
   EXPECT_FALSE(TranslateUiVisible());
 }
diff --git a/chrome/browser/translate/translate_test_utils.cc b/chrome/browser/translate/translate_test_utils.cc
new file mode 100644
index 0000000..de47ab59
--- /dev/null
+++ b/chrome/browser/translate/translate_test_utils.cc
@@ -0,0 +1,39 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/translate/translate_test_utils.h"
+
+#include "chrome/browser/translate/chrome_translate_client.h"
+#include "content/public/browser/web_contents.h"
+
+namespace translate {
+
+TranslateWaiter::TranslateWaiter(content::WebContents* web_contents,
+                                 WaitEvent wait_event)
+    : wait_event_(wait_event) {
+  scoped_observer_.Add(
+      ChromeTranslateClient::FromWebContents(web_contents)->translate_driver());
+}
+
+TranslateWaiter::~TranslateWaiter() = default;
+
+void TranslateWaiter::Wait() {
+  run_loop_.Run();
+}
+
+// ContentTranslateDriver::Observer:
+void TranslateWaiter::OnLanguageDetermined(
+    const LanguageDetectionDetails& details) {
+  if (wait_event_ == WaitEvent::kLanguageDetermined)
+    run_loop_.Quit();
+}
+
+void TranslateWaiter::OnPageTranslated(const std::string& original_lang,
+                                       const std::string& translated_lang,
+                                       TranslateErrors::Type error_type) {
+  if (wait_event_ == WaitEvent::kPageTranslated)
+    run_loop_.Quit();
+}
+
+}  // namespace translate
diff --git a/chrome/browser/translate/translate_test_utils.h b/chrome/browser/translate/translate_test_utils.h
new file mode 100644
index 0000000..7431215e
--- /dev/null
+++ b/chrome/browser/translate/translate_test_utils.h
@@ -0,0 +1,53 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_TEST_UTILS_H_
+#define CHROME_BROWSER_TRANSLATE_TRANSLATE_TEST_UTILS_H_
+
+#include "base/macros.h"
+#include "base/run_loop.h"
+#include "base/scoped_observer.h"
+#include "components/translate/content/browser/content_translate_driver.h"
+#include "components/translate/core/common/translate_errors.h"
+
+namespace content {
+class WebContents;
+}
+
+namespace translate {
+
+// A helper class that allows test to block until certain translate events have
+// been received from a tab's ContentTranslateDriver.
+class TranslateWaiter : ContentTranslateDriver::Observer {
+ public:
+  enum class WaitEvent {
+    kLanguageDetermined,
+    kPageTranslated,
+  };
+
+  TranslateWaiter(content::WebContents* web_contents, WaitEvent wait_event);
+  ~TranslateWaiter() override;
+
+  // Blocks until an observer function matching |wait_event_| is invoked, or
+  // returns immediately if one has already been observed.
+  void Wait();
+
+  // ContentTranslateDriver::Observer:
+  void OnLanguageDetermined(const LanguageDetectionDetails& details) override;
+  void OnPageTranslated(const std::string& original_lang,
+                        const std::string& translated_lang,
+                        TranslateErrors::Type error_type) override;
+
+ private:
+  WaitEvent wait_event_;
+  ScopedObserver<ContentTranslateDriver, ContentTranslateDriver::Observer>
+      scoped_observer_{this};
+  base::RunLoop run_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(TranslateWaiter);
+};
+
+}  // namespace translate
+
+#endif  // CHROME_BROWSER_TRANSLATE_TRANSLATE_TEST_UTILS_H_
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index ae3e228..6d7b542 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -530,6 +530,7 @@
     "//components/variations/service",
     "//components/vector_icons",
     "//components/version_ui",
+    "//components/viz/host",
     "//components/web_cache/browser",
     "//components/web_resource",
     "//components/webrtc_logging/browser",
@@ -2007,8 +2008,6 @@
       "views/message_center/popups_only_ui_delegate.h",
       "views/profiles/badged_profile_photo.cc",
       "views/profiles/badged_profile_photo.h",
-      "views/profiles/dice_accounts_menu.cc",
-      "views/profiles/dice_accounts_menu.h",
       "views/profiles/profile_chooser_view.cc",
       "views/profiles/profile_chooser_view.h",
       "views/profiles/signin_view_controller_delegate_views.cc",
@@ -2230,8 +2229,6 @@
       "cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm",
       "cocoa/tab_contents/web_drag_bookmark_handler_mac.h",
       "cocoa/tab_contents/web_drag_bookmark_handler_mac.mm",
-      "cocoa/tab_menu_bridge.h",
-      "cocoa/tab_menu_bridge.mm",
       "cocoa/task_manager_mac.h",
       "cocoa/task_manager_mac.mm",
       "cocoa/touchbar/browser_window_default_touch_bar.h",
@@ -3036,6 +3033,8 @@
       "views/tabs/tab_drag_context.h",
       "views/tabs/tab_drag_controller.cc",
       "views/tabs/tab_drag_controller.h",
+      "views/tabs/tab_group_editor_bubble_view.cc",
+      "views/tabs/tab_group_editor_bubble_view.h",
       "views/tabs/tab_group_header.cc",
       "views/tabs/tab_group_header.h",
       "views/tabs/tab_hover_card_bubble_view.cc",
diff --git a/chrome/lib/ui/widget/public/android/BUILD.gn b/chrome/browser/ui/android/widget/BUILD.gn
similarity index 65%
rename from chrome/lib/ui/widget/public/android/BUILD.gn
rename to chrome/browser/ui/android/widget/BUILD.gn
index 01e478a..c521dcb 100644
--- a/chrome/lib/ui/widget/public/android/BUILD.gn
+++ b/chrome/browser/ui/android/widget/BUILD.gn
@@ -6,7 +6,7 @@
 
 android_library("java") {
   java_files = [
-    "java/org/chromium/chrome/lib/browser/widget/FadingShadow.java",
-    "java/org/chromium/chrome/lib/browser/widget/FadingShadowView.java",
+    "java/src/org/chromium/chrome//browser/ui/widget/FadingShadow.java",
+    "java/src/org/chromium/chrome//browser/ui/widget/FadingShadowView.java",
   ]
 }
diff --git a/chrome/browser/ui/android/widget/DEPS b/chrome/browser/ui/android/widget/DEPS
new file mode 100644
index 0000000..61b58f2
--- /dev/null
+++ b/chrome/browser/ui/android/widget/DEPS
@@ -0,0 +1,3 @@
+noparent = True
+
+include_rules = [ ]
diff --git a/chrome/lib/ui/OWNERS b/chrome/browser/ui/android/widget/OWNERS
similarity index 100%
rename from chrome/lib/ui/OWNERS
rename to chrome/browser/ui/android/widget/OWNERS
diff --git a/chrome/lib/ui/widget/public/android/java/org/chromium/chrome/lib/browser/widget/FadingShadow.java b/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/FadingShadow.java
similarity index 98%
rename from chrome/lib/ui/widget/public/android/java/org/chromium/chrome/lib/browser/widget/FadingShadow.java
rename to chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/FadingShadow.java
index 8674aa0..57f3f13 100644
--- a/chrome/lib/ui/widget/public/android/java/org/chromium/chrome/lib/browser/widget/FadingShadow.java
+++ b/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/FadingShadow.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.lib.browser.widget;
+package org.chromium.chrome.browser.ui.widget;
 
 import android.graphics.Canvas;
 import android.graphics.Color;
diff --git a/chrome/lib/ui/widget/public/android/java/org/chromium/chrome/lib/browser/widget/FadingShadowView.java b/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/FadingShadowView.java
similarity index 97%
rename from chrome/lib/ui/widget/public/android/java/org/chromium/chrome/lib/browser/widget/FadingShadowView.java
rename to chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/FadingShadowView.java
index 6c7d0f3..ee80d38 100644
--- a/chrome/lib/ui/widget/public/android/java/org/chromium/chrome/lib/browser/widget/FadingShadowView.java
+++ b/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/FadingShadowView.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.lib.browser.widget;
+package org.chromium.chrome.browser.ui.widget;
 
 import android.content.Context;
 import android.graphics.Canvas;
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
index cb6ae95..bfc4f935 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
@@ -33,7 +33,7 @@
 #include "chrome/browser/ui/app_list/arc/arc_package_syncable_service.h"
 #include "chrome/browser/ui/app_list/arc/arc_pai_starter.h"
 #include "chrome/grit/generated_resources.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/arc_util.h"
@@ -1097,7 +1097,7 @@
   if (app_id == arc::kPlayStoreAppId &&
       arc::IsRobotOrOfflineDemoAccountMode() &&
       !(chromeos::DemoSession::IsDeviceInDemoMode() &&
-        chromeos::switches::ShouldShowPlayStoreInDemoMode())) {
+        chromeos::features::ShouldShowPlayStoreInDemoMode())) {
     return;
   }
 
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
index c673b3f..270dd85 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
@@ -26,7 +26,7 @@
 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
 #include "chrome/browser/chromeos/arc/policy/arc_policy_bridge.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_icon_descriptor.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "ui/base/layout.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h b/chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h
index bf904c1..6aafbb4 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h
@@ -10,7 +10,7 @@
 
 #include "base/macros.h"
 #include "base/memory/singleton.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 
diff --git a/chrome/browser/ui/app_list/arc/arc_app_test.h b/chrome/browser/ui/app_list/arc/arc_app_test.h
index 69324d8..fbb7ca3 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_test.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_test.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 namespace arc {
 namespace mojom {
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
index 9d8822cda..72c47cb4 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -33,8 +33,8 @@
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/language/core/browser/pref_names.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.h b/chrome/browser/ui/app_list/arc/arc_app_utils.h
index 42babca..90ae13e 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_utils.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_utils.h
@@ -12,8 +12,8 @@
 
 #include "base/macros.h"
 #include "base/optional.h"
-#include "components/arc/common/app.mojom.h"
 #include "components/arc/metrics/arc_metrics_constants.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class Profile;
 
diff --git a/chrome/browser/ui/app_list/arc/arc_pai_starter.h b/chrome/browser/ui/app_list/arc/arc_pai_starter.h
index dc36446..c279741d 100644
--- a/chrome/browser/ui/app_list/arc/arc_pai_starter.h
+++ b/chrome/browser/ui/app_list/arc/arc_pai_starter.h
@@ -13,7 +13,7 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class PrefService;
 class Profile;
diff --git a/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc b/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc
index a2944e5ef..57d7195 100644
--- a/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc
+++ b/chrome/browser/ui/app_list/arc/arc_usb_host_permission_browsertest.cc
@@ -19,7 +19,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_app_instance.h"
 #include "components/user_manager/scoped_user_manager.h"
diff --git a/chrome/browser/ui/app_list/search/arc/arc_app_data_search_provider.h b/chrome/browser/ui/app_list/search/arc/arc_app_data_search_provider.h
index 1d0d4d8..2a3d7ee7 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_app_data_search_provider.h
+++ b/chrome/browser/ui/app_list/search/arc/arc_app_data_search_provider.h
@@ -10,7 +10,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
 #include "chrome/browser/ui/app_list/search/search_provider.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class AppListControllerDelegate;
 
diff --git a/chrome/browser/ui/app_list/search/arc/arc_app_data_search_result.h b/chrome/browser/ui/app_list/search/arc/arc_app_data_search_result.h
index ffd7c85..b21c790 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_app_data_search_result.h
+++ b/chrome/browser/ui/app_list/search/arc/arc_app_data_search_result.h
@@ -13,7 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class AppListControllerDelegate;
 
diff --git a/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_app_result.h b/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_app_result.h
index a387ffb..cbcac5d 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_app_result.h
+++ b/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_app_result.h
@@ -10,7 +10,7 @@
 #include "ash/public/cpp/app_list/app_list_metrics.h"
 #include "base/macros.h"
 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "ui/gfx/image/image_skia.h"
 
 namespace app_list {
diff --git a/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_search_provider_unittest.cc b/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_search_provider_unittest.cc
index edf091d..921face 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_search_provider_unittest.cc
+++ b/chrome/browser/ui/app_list/search/arc/arc_app_reinstall_search_provider_unittest.cc
@@ -21,7 +21,7 @@
 #include "chrome/browser/ui/app_list/test/test_app_list_controller_delegate.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/test/fake_app_instance.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
diff --git a/chrome/browser/ui/app_list/search/arc/arc_app_shortcut_search_result.h b/chrome/browser/ui/app_list/search/arc/arc_app_shortcut_search_result.h
index 7e7a26d3..4ac812b5 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_app_shortcut_search_result.h
+++ b/chrome/browser/ui/app_list/search/arc/arc_app_shortcut_search_result.h
@@ -13,7 +13,7 @@
 #include "chrome/browser/ui/app_icon_loader_delegate.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_icon_loader.h"
 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "ui/gfx/image/image_skia.h"
 
 class AppListControllerDelegate;
diff --git a/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider.h b/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider.h
index 76015c59..bc73840 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider.h
+++ b/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider.h
@@ -11,7 +11,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
 #include "chrome/browser/ui/app_list/search/search_provider.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class AppListControllerDelegate;
 class Profile;
diff --git a/chrome/browser/ui/app_list/search/arc/arc_playstore_search_provider.h b/chrome/browser/ui/app_list/search/arc/arc_playstore_search_provider.h
index bed643b..d23b8088 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_playstore_search_provider.h
+++ b/chrome/browser/ui/app_list/search/arc/arc_playstore_search_provider.h
@@ -10,7 +10,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/app_list/search/search_provider.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class Profile;
 class AppListControllerDelegate;
diff --git a/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.cc b/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.cc
index 5584176..ada994f 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.cc
+++ b/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.cc
@@ -16,7 +16,7 @@
 #include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
 #include "chrome/browser/ui/app_list/arc/arc_playstore_app_context_menu.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/crx_file/id_util.h"
 #include "ui/gfx/canvas.h"
diff --git a/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.h b/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.h
index 4a327e6..97e0eec1 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.h
+++ b/chrome/browser/ui/app_list/search/arc/arc_playstore_search_result.h
@@ -14,7 +14,7 @@
 #include "base/optional.h"
 #include "chrome/browser/ui/app_list/app_context_menu_delegate.h"
 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 
 class AppListControllerDelegate;
 class ArcPlayStoreAppContextMenu;
diff --git a/chrome/browser/ui/app_list/search/search_controller.cc b/chrome/browser/ui/app_list/search/search_controller.cc
index d98a62e1..a8ac920 100644
--- a/chrome/browser/ui/app_list/search/search_controller.cc
+++ b/chrome/browser/ui/app_list/search/search_controller.cc
@@ -18,6 +18,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
 #include "chrome/browser/ui/app_list/app_list_model_updater.h"
@@ -72,8 +73,11 @@
     : mixer_(std::make_unique<Mixer>(model_updater)),
       list_controller_(list_controller) {
   std::unique_ptr<SearchResultRanker> ranker =
-      std::make_unique<SearchResultRanker>(profile,
-                                           content::GetSystemConnector());
+      std::make_unique<SearchResultRanker>(
+          profile,
+          HistoryServiceFactory::GetForProfile(
+              profile, ServiceAccessType::EXPLICIT_ACCESS),
+          content::GetSystemConnector());
   ranker->InitializeRankers();
   mixer_->SetNonAppSearchResultRanker(std::move(ranker));
 }
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.cc b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.cc
index 9cdcbfb..18fc35c 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.cc
@@ -166,6 +166,7 @@
           TimeDelta::FromSeconds(config.min_seconds_between_saves())),
       time_of_last_save_(Time::Now()),
       weak_factory_(this) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   task_runner_ = base::CreateSequencedTaskRunnerWithTraits(
       {base::TaskPriority::BEST_EFFORT, base::MayBlock(),
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
@@ -201,6 +202,7 @@
 
 void RecurrenceRanker::OnLoadProtoFromDiskComplete(
     std::unique_ptr<RecurrenceRankerProto> proto) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   load_from_disk_completed_ = true;
   LogInitializationStatus(model_identifier_,
                           InitializationStatus::kInitialized);
@@ -242,6 +244,7 @@
 
 void RecurrenceRanker::Record(const std::string& target,
                               const std::string& condition) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!load_from_disk_completed_)
     return;
   LogUsage(model_identifier_, Usage::kRecord);
@@ -252,6 +255,7 @@
 
 void RecurrenceRanker::RenameTarget(const std::string& target,
                                     const std::string& new_target) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!load_from_disk_completed_)
     return;
   LogUsage(model_identifier_, Usage::kRenameTarget);
@@ -261,6 +265,7 @@
 }
 
 void RecurrenceRanker::RemoveTarget(const std::string& target) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // TODO(tby): Find a solution to the edge case of a removal before disk
   // loading is complete, resulting in the remove getting dropped.
   if (!load_from_disk_completed_)
@@ -273,6 +278,7 @@
 
 void RecurrenceRanker::RenameCondition(const std::string& condition,
                                        const std::string& new_condition) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!load_from_disk_completed_)
     return;
   LogUsage(model_identifier_, Usage::kRenameCondition);
@@ -282,6 +288,7 @@
 }
 
 void RecurrenceRanker::RemoveCondition(const std::string& condition) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!load_from_disk_completed_)
     return;
   LogUsage(model_identifier_, Usage::kRemoveCondition);
@@ -292,6 +299,7 @@
 
 std::map<std::string, float> RecurrenceRanker::Rank(
     const std::string& condition) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!load_from_disk_completed_)
     return {};
   LogUsage(model_identifier_, Usage::kRank);
@@ -313,6 +321,7 @@
 
 void RecurrenceRanker::MaybeCleanup(float proportion_valid,
                                     const FrecencyStore::ScoreTable& targets) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (proportion_valid > kMinValidTargetProportionBeforeCleanup)
     return;
 
@@ -325,6 +334,7 @@
 std::vector<std::pair<std::string, float>> RecurrenceRanker::RankTopN(
     int n,
     const std::string& condition) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!load_from_disk_completed_)
     return {};
 
@@ -333,15 +343,18 @@
 
 std::map<std::string, FrecencyStore::ValueData>*
 RecurrenceRanker::GetTargetData() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return targets_->get_mutable_values();
 }
 
 std::map<std::string, FrecencyStore::ValueData>*
 RecurrenceRanker::GetConditionData() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   return conditions_->get_mutable_values();
 }
 
 void RecurrenceRanker::SaveToDisk() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (is_ephemeral_user_)
     return;
 
@@ -354,12 +367,14 @@
 }
 
 void RecurrenceRanker::MaybeSave() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (Time::Now() - time_of_last_save_ > min_seconds_between_saves_) {
     SaveToDisk();
   }
 }
 
 void RecurrenceRanker::ToProto(RecurrenceRankerProto* proto) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   proto->set_config_hash(config_hash_);
   predictor_->ToProto(proto->mutable_predictor());
   targets_->ToProto(proto->mutable_targets());
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.h b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.h
index 2de2262..2a1b09b8 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.h
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.h
@@ -142,6 +142,8 @@
   const base::TimeDelta min_seconds_between_saves_;
   base::Time time_of_last_save_;
 
+  SEQUENCE_CHECKER(sequence_checker_);
+
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
   base::WeakPtrFactory<RecurrenceRanker> weak_factory_;
 
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
index 04cc0ff2..c8c34a64 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
@@ -16,10 +16,14 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task/post_task.h"
+#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/chromeos/file_manager/file_tasks_notifier.h"
 #include "chrome/browser/chromeos/file_manager/file_tasks_notifier_factory.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/app_search_result_ranker.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/ranking_item_util.h"
@@ -126,9 +130,15 @@
 }  // namespace
 
 SearchResultRanker::SearchResultRanker(Profile* profile,
+                                       history::HistoryService* history_service,
                                        service_manager::Connector* connector)
-    : config_converter_(connector), profile_(profile) {
+    : config_converter_(connector),
+      history_service_observer_(this),
+      profile_(profile),
+      weak_factory_(this) {
   DCHECK(profile);
+  DCHECK(history_service);
+  history_service_observer_.Add(history_service);
   if (auto* notifier =
           file_manager::file_tasks::FileTasksNotifier::GetForProfile(
               profile_)) {
@@ -328,4 +338,44 @@
                               GetTypeFromFileTaskNotifier(file_open.open_type));
 }
 
+void SearchResultRanker::OnURLsDeleted(
+    history::HistoryService* history_service,
+    const history::DeletionInfo& deletion_info) {
+  if (!query_based_mixed_types_ranker_)
+    return;
+
+  if (deletion_info.IsAllHistory()) {
+    // TODO(931149): We clear the whole model because we expect most targets to
+    // be URLs. In future, consider parsing the targets and only deleting URLs.
+    query_based_mixed_types_ranker_->GetTargetData()->clear();
+  } else {
+    for (const auto& row : deletion_info.deleted_rows()) {
+      // In order to perform URL normalization, NormalizeId requires any omnibox
+      // item type as argument. Pass kOmniboxGeneric here as we don't know the
+      // specific type.
+      query_based_mixed_types_ranker_->RemoveTarget(
+          NormalizeId(row.url().spec(), RankingItemType::kOmniboxGeneric));
+    }
+  }
+
+  // Force a save to disk. It is possible to get many calls to OnURLsDeleted in
+  // quick succession, eg. when all history is cleared from a different device.
+  // So delay the save slightly and only perform one save for all updates during
+  // that delay.
+  if (!query_mixed_ranker_save_queued_) {
+    query_mixed_ranker_save_queued_ = true;
+    DCHECK(base::SequencedTaskRunnerHandle::IsSet());
+    base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
+        FROM_HERE,
+        base::BindOnce(&SearchResultRanker::SaveQueryMixedRankerAfterDelete,
+                       weak_factory_.GetWeakPtr()),
+        TimeDelta::FromSeconds(3));
+  }
+}
+
+void SearchResultRanker::SaveQueryMixedRankerAfterDelete() {
+  query_based_mixed_types_ranker_->SaveToDisk();
+  query_mixed_ranker_save_queued_ = false;
+}
+
 }  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h
index 24348a9..bfd6cb3 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h
@@ -13,6 +13,7 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
+#include "base/scoped_observer.h"
 #include "base/strings/string16.h"
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/file_manager/file_tasks_notifier.h"
@@ -23,6 +24,8 @@
 #include "chrome/browser/ui/app_list/search/search_result_ranker/app_launch_event_logger.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/app_search_result_ranker.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.h"
+#include "components/history/core/browser/history_service.h"
+#include "components/history/core/browser/history_service_observer.h"
 
 namespace app_list {
 
@@ -35,9 +38,12 @@
 // FetchRankings queries each model for ranking results. Rank modifies the
 // scores of provided search results, which are intended to be the output of a
 // search provider.
-class SearchResultRanker : file_manager::file_tasks::FileTasksObserver {
+class SearchResultRanker : file_manager::file_tasks::FileTasksObserver,
+                           history::HistoryServiceObserver {
  public:
-  SearchResultRanker(Profile* profile, service_manager::Connector* connector);
+  SearchResultRanker(Profile* profile,
+                     history::HistoryService* history_service,
+                     service_manager::Connector* connector);
   ~SearchResultRanker() override;
 
   // Performs all setup of rankers. This is separated from the constructor for
@@ -64,6 +70,10 @@
   // file_manager::file_tasks::FileTaskObserver:
   void OnFilesOpened(const std::vector<FileOpenEvent>& file_opens) override;
 
+  // history::HistoryServiceObserver:
+  void OnURLsDeleted(history::HistoryService* history_service,
+                     const history::DeletionInfo& deletion_info) override;
+
   RecurrenceRanker* get_zero_state_mixed_types_ranker() {
     return zero_state_mixed_types_ranker_.get();
   }
@@ -77,6 +87,12 @@
  private:
   FRIEND_TEST_ALL_PREFIXES(SearchResultRankerTest,
                            QueryMixedModelConfigDeployment);
+  FRIEND_TEST_ALL_PREFIXES(SearchResultRankerTest,
+                           QueryMixedModelDeletesURLCorrectly);
+
+  // Saves |query_based_mixed_types_ranker_| to disk. Called after a delay when
+  // URLs get deleted.
+  void SaveQueryMixedRankerAfterDelete();
 
   // Records the time of the last call to FetchRankings() and is used to
   // limit the number of queries to the models within a short timespan.
@@ -100,6 +116,9 @@
   // these are local files and omnibox results.
   std::unique_ptr<RecurrenceRanker> query_based_mixed_types_ranker_;
   std::map<std::string, float> query_mixed_ranks_;
+  // Flag set when a delayed task to save the model is created. This is used to
+  // prevent several delayed tasks from being created.
+  bool query_mixed_ranker_save_queued_ = false;
 
   // Ranks files and previous queries for launcher zero-state.
   std::unique_ptr<RecurrenceRanker> zero_state_mixed_types_ranker_;
@@ -113,6 +132,9 @@
   // Logs launch events and stores feature data for aggregated model.
   app_list::AppLaunchEventLogger app_launch_event_logger_;
 
+  ScopedObserver<history::HistoryService, history::HistoryServiceObserver>
+      history_service_observer_;
+
   // TODO(931149): Move the AppSearchResultRanker instance and associated logic
   // to here.
 
@@ -121,6 +143,8 @@
   base::flat_map<std::string, float> app_ranks_;
 
   Profile* profile_;
+
+  base::WeakPtrFactory<SearchResultRanker> weak_factory_;
 };
 
 }  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc
index 5b0a5e64..b15f1a1c 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc
@@ -14,6 +14,7 @@
 
 #include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/app_list_types.h"
+#include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
@@ -26,6 +27,11 @@
 #include "chrome/browser/ui/app_list/search/search_result_ranker/ranking_item_util.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/history/core/browser/history_database_params.h"
+#include "components/history/core/browser/history_service.h"
+#include "components/history/core/browser/history_types.h"
+#include "components/history/core/test/history_service_test_util.h"
+#include "components/history/core/test/test_history_database.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "services/data_decoder/public/cpp/test_data_decoder_service.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -39,6 +45,7 @@
 using base::ScopedTempDir;
 using base::test::ScopedFeatureList;
 using testing::ElementsAre;
+using testing::UnorderedElementsAre;
 using testing::WhenSorted;
 
 class TestSearchResult : public ChromeSearchResult {
@@ -71,6 +78,10 @@
   return base::UTF16ToUTF8(arg.result->title()) == id;
 }
 
+MATCHER_P2(HasIdScore, id, score, "") {
+  return base::UTF16ToUTF8(arg.result->title()) == id && arg.score == score;
+}
+
 }  // namespace
 
 class SearchResultRankerTest : public testing::Test {
@@ -87,6 +98,11 @@
     profile_builder.SetProfileName("testuser@gmail.com");
     profile_builder.SetPath(temp_dir_.GetPath().AppendASCII("TestProfile"));
     profile_ = profile_builder.Build();
+
+    history_service_ = std::make_unique<history::HistoryService>();
+    history_service_->Init(
+        history::TestHistoryDatabaseParamsForPath(temp_dir_.GetPath()));
+    Wait();
   }
 
   std::unique_ptr<SearchResultRanker> MakeRanker(
@@ -100,8 +116,8 @@
           app_list_features::kEnableQueryBasedMixedTypesRanker);
     }
 
-    auto ranker = std::make_unique<SearchResultRanker>(profile_.get(),
-                                                       dd_service_.connector());
+    auto ranker = std::make_unique<SearchResultRanker>(
+        profile_.get(), history_service_.get(), dd_service_.connector());
     return ranker;
   }
 
@@ -116,9 +132,10 @@
     return results;
   }
 
+  history::HistoryService* history_service() { return history_service_.get(); }
+
   void Wait() { thread_bundle_.RunUntilIdle(); }
 
- private:
   content::TestBrowserThreadBundle thread_bundle_;
 
   // This is used only to make the ownership clear for the TestSearchResult
@@ -130,9 +147,11 @@
 
   ScopedFeatureList scoped_feature_list_;
   ScopedTempDir temp_dir_;
+  std::unique_ptr<history::HistoryService> history_service_;
 
   std::unique_ptr<Profile> profile_;
 
+ private:
   DISALLOW_COPY_AND_ASSIGN(SearchResultRankerTest);
 };
 
@@ -336,4 +355,108 @@
             "ExponentialWeightsEnsemble");
 }
 
+// Tests that, when a URL is deleted from the history service, the query-based
+// mixed-types model deletes it in memory and from disk.
+TEST_F(SearchResultRankerTest, QueryMixedModelDeletesURLCorrectly) {
+  // Create ranker.
+  const std::string json = R"({
+      "min_seconds_between_saves": 1000,
+      "target_limit": 100,
+      "target_decay": 0.5,
+      "condition_limit": 10,
+      "condition_decay": 0.5,
+      "predictor": {
+        "predictor_type": "fake"
+      }
+    })";
+
+  base::RunLoop run_loop;
+  auto ranker =
+      MakeRanker(true, {{"boost_coefficient", "1.0"}, {"config", json}});
+  ranker->set_json_config_parsed_for_testing(run_loop.QuitClosure());
+  ranker->InitializeRankers();
+  run_loop.Run();
+  Wait();
+
+  const base::FilePath model_path =
+      profile_->GetPath().AppendASCII("query_based_mixed_types_ranker.pb");
+
+  // Train the model on two URLs.
+  const std::string url_1 = "http://www.google.com/testing";
+  AppLaunchData url_1_data;
+  url_1_data.id = url_1;
+  url_1_data.ranking_item_type = RankingItemType::kOmniboxHistory;
+  url_1_data.query = "query";
+  ranker->Train(url_1_data);
+  ranker->Train(url_1_data);
+
+  const std::string url_2 = "http://www.other.com";
+  AppLaunchData url_2_data;
+  url_2_data.id = url_2;
+  url_2_data.ranking_item_type = RankingItemType::kOmniboxHistory;
+  url_2_data.query = "query";
+  ranker->Train(url_2_data);
+
+  // Expect the scores of the urls to reflect their training.
+  {
+    ranker->FetchRankings(base::UTF8ToUTF16("query"));
+    auto results = MakeSearchResults(
+        {url_1, url_2, "untrained"},
+        {ResultType::kOmnibox, ResultType::kOmnibox, ResultType::kOmnibox},
+        {0.0f, 0.0f, 0.5f});
+    ranker->Rank(&results);
+    EXPECT_THAT(results, UnorderedElementsAre(HasIdScore(url_1, 2.0f),
+                                              HasIdScore(url_2, 1.0f),
+                                              HasIdScore("untrained", 0.5f)));
+  }
+
+  // Now delete |url_1| from the history service and ensure we save the model to
+  // disk.
+  EXPECT_FALSE(base::PathExists(model_path));
+  history_service()->AddPage(GURL(url_1), base::Time::Now(),
+                             history::VisitSource::SOURCE_BROWSED);
+  history_service()->DeleteURL(GURL(url_1));
+  history::BlockUntilHistoryProcessesPendingRequests(history_service());
+  Wait();
+  EXPECT_TRUE(base::PathExists(model_path));
+
+  // Force cache expiry.
+  ranker->time_of_last_fetch_ = base::Time();
+
+  // Expect the score of |url_1| to be 0.0, it should have been deleted from
+  // the model.
+  {
+    ranker->FetchRankings(base::UTF8ToUTF16("query"));
+    auto results = MakeSearchResults(
+        {url_1, url_2, "untrained"},
+        {ResultType::kOmnibox, ResultType::kOmnibox, ResultType::kOmnibox},
+        {0.0f, 0.0f, 0.5f});
+    ranker->Rank(&results);
+    EXPECT_THAT(results, UnorderedElementsAre(HasIdScore(url_1, 0.0f),
+                                              HasIdScore(url_2, 1.0f),
+                                              HasIdScore("untrained", 0.5f)));
+  }
+
+  // Load a new ranker from disk and ensure |url_1| hasn't been retained.
+  base::RunLoop new_run_loop;
+  auto new_ranker = std::make_unique<SearchResultRanker>(
+      profile_.get(), history_service(), dd_service_.connector());
+  new_ranker->set_json_config_parsed_for_testing(new_run_loop.QuitClosure());
+  new_ranker->InitializeRankers();
+  new_run_loop.Run();
+  Wait();
+
+  {
+    new_ranker->FetchRankings(base::UTF8ToUTF16("query"));
+    auto results = MakeSearchResults(
+        {url_1, url_2, "untrained"},
+        {ResultType::kOmnibox, ResultType::kOmnibox, ResultType::kOmnibox},
+        {0.0f, 0.0f, 0.5f});
+    new_ranker->Rank(&results);
+    EXPECT_THAT(results, UnorderedElementsAre(HasIdScore(url_1, 0.0f),
+                                              HasIdScore(url_2, 1.0f),
+                                              HasIdScore("untrained", 0.5f)));
+  }
+}
+
 }  // namespace app_list
diff --git a/chrome/browser/ui/ash/assistant/assistant_client.cc b/chrome/browser/ui/ash/assistant/assistant_client.cc
index f7efb3c..310c959 100644
--- a/chrome/browser/ui/ash/assistant/assistant_client.cc
+++ b/chrome/browser/ui/ash/assistant/assistant_client.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/ui/ash/assistant/assistant_context_util.h"
 #include "chrome/browser/ui/ash/assistant/assistant_image_downloader.h"
 #include "chrome/browser/ui/ash/assistant/assistant_setup.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/services/assistant/public/mojom/constants.mojom.h"
 #include "components/session_manager/core/session_manager.h"
@@ -115,7 +116,7 @@
 }
 
 void AssistantClient::OnUserProfileLoaded(const AccountId& account_id) {
-  if (!chromeos::switches::IsAssistantEnabled())
+  if (!chromeos::features::IsAssistantEnabled())
     return;
 
   // Initialize Assistant when primary user profile is loaded so that it could
diff --git a/chrome/browser/ui/ash/assistant/assistant_context_util.cc b/chrome/browser/ui/ash/assistant/assistant_context_util.cc
index 16f396e..c2d6f34 100644
--- a/chrome/browser/ui/ash/assistant/assistant_context_util.cc
+++ b/chrome/browser/ui/ash/assistant/assistant_context_util.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/ash/assistant/device_actions.cc b/chrome/browser/ui/ash/assistant/device_actions.cc
index ec4f09d..3e66641 100644
--- a/chrome/browser/ui/ash/assistant/device_actions.cc
+++ b/chrome/browser/ui/ash/assistant/device_actions.cc
@@ -17,7 +17,7 @@
 #include "chromeos/dbus/power_manager/backlight.pb.h"
 #include "chromeos/network/network_state_handler.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/prefs/pref_service.h"
 #include "components/user_manager/user_manager.h"
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
index 7a66927f..a9596556 100644
--- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
+++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
@@ -46,7 +46,7 @@
 #include "chrome/browser/ui/ash/wallpaper_controller_client.h"
 #include "chrome/browser/ui/views/select_file_dialog_extension.h"
 #include "chrome/browser/ui/views/select_file_dialog_extension_factory.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/network/network_connect.h"
 #include "chromeos/network/portal_detector/network_portal_detector.h"
 #include "components/session_manager/core/session_manager.h"
@@ -201,7 +201,7 @@
       g_browser_process->shared_url_loader_factory());
   night_light_client_->Start();
 
-  if (chromeos::switches::IsAmbientModeEnabled())
+  if (chromeos::features::IsAmbientModeEnabled())
     photo_controller_ = std::make_unique<PhotoControllerImpl>();
 }
 
@@ -212,7 +212,7 @@
   exo_parts_.reset();
 #endif
 
-  if (chromeos::switches::IsAmbientModeEnabled())
+  if (chromeos::features::IsAmbientModeEnabled())
     photo_controller_.reset();
 
   night_light_client_.reset();
diff --git a/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client_test_helper.cc b/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client_test_helper.cc
index 7d9791bf..3218f2b9 100644
--- a/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client_test_helper.cc
+++ b/chrome/browser/ui/ash/keyboard/chrome_keyboard_controller_client_test_helper.cc
@@ -33,9 +33,13 @@
   bool IsKeyboardEnabled() override { return enabled_; }
   void SetEnableFlag(keyboard::KeyboardEnableFlag flag) override {
     keyboard_enable_flags_.insert(flag);
+    for (auto& observer : observers_)
+      observer.OnKeyboardEnableFlagsChanged(keyboard_enable_flags_);
   }
   void ClearEnableFlag(keyboard::KeyboardEnableFlag flag) override {
     keyboard_enable_flags_.erase(flag);
+    for (auto& observer : observers_)
+      observer.OnKeyboardEnableFlagsChanged(keyboard_enable_flags_);
   }
   const std::set<keyboard::KeyboardEnableFlag>& GetEnableFlags() override {
     return keyboard_enable_flags_;
@@ -54,14 +58,19 @@
   void SetOccludedBounds(const std::vector<gfx::Rect>& bounds) override {}
   void SetHitTestBounds(const std::vector<gfx::Rect>& bounds) override {}
   void SetDraggableArea(const gfx::Rect& bounds) override {}
-  void AddObserver(ash::KeyboardControllerObserver* observer) override {}
-  void RemoveObserver(ash::KeyboardControllerObserver* observer) override {}
+  void AddObserver(ash::KeyboardControllerObserver* observer) override {
+    observers_.AddObserver(observer);
+  }
+  void RemoveObserver(ash::KeyboardControllerObserver* observer) override {
+    observers_.RemoveObserver(observer);
+  }
 
  private:
   keyboard::KeyboardConfig keyboard_config_;
   std::set<keyboard::KeyboardEnableFlag> keyboard_enable_flags_;
   bool enabled_ = false;
   bool visible_ = false;
+  base::ObserverList<ash::KeyboardControllerObserver>::Unchecked observers_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeKeyboardController);
 };
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
index 273b72db..edf1ac7 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
@@ -99,8 +99,8 @@
 #include "components/account_id/account_id.h"
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/app.mojom.h"
 #include "components/arc/metrics/arc_metrics_constants.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/test/fake_app_instance.h"
 #include "components/exo/shell_surface_util.h"
 #include "components/keep_alive_registry/scoped_keep_alive.h"
diff --git a/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc b/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc
index c0d239c..7bee1ec 100644
--- a/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc
+++ b/chrome/browser/ui/ash/session_controller_client_impl_unittest.cc
@@ -322,9 +322,7 @@
   net::CertificateList certificates;
   certificates.push_back(
       net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"));
-  service->OnPolicyProvidedCertsChanged(
-      certificates /* all_server_and_authority_certs */,
-      certificates /* trust_anchors */);
+  service->SetPolicyTrustAnchorsForTesting(/*trust_anchors=*/certificates);
   EXPECT_TRUE(service->has_policy_certificates());
   EXPECT_EQ(ash::AddUserSessionPolicy::ERROR_NOT_ALLOWED_PRIMARY_USER,
             SessionControllerClientImpl::GetAddUserSessionPolicy());
diff --git a/chrome/browser/ui/ash/system_tray_client.cc b/chrome/browser/ui/ash/system_tray_client.cc
index e26a0587..de3609c 100644
--- a/chrome/browser/ui/ash/system_tray_client.cc
+++ b/chrome/browser/ui/ash/system_tray_client.cc
@@ -44,8 +44,8 @@
 #include "chromeos/network/onc/onc_utils.h"
 #include "chromeos/network/tether_constants.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/net.mojom.h"
 #include "components/arc/metrics/arc_metrics_constants.h"
+#include "components/arc/mojom/net.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/session_manager/core/session_manager.h"
diff --git a/chrome/browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.cc b/chrome/browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.cc
index d96511c..fec89b9 100644
--- a/chrome/browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.cc
+++ b/chrome/browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.cc
@@ -33,6 +33,7 @@
 }
 
 void WebDragBookmarkHandlerAura::OnDragOver() {
+  DCHECK(web_contents_);
   if (bookmark_tab_helper_ && bookmark_tab_helper_->bookmark_drag_delegate()) {
     if (bookmark_drag_data_.is_valid())
       bookmark_tab_helper_->bookmark_drag_delegate()->OnDragOver(
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index d06c38ab..3a4c010b 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -2511,15 +2511,15 @@
   // ...and all the helpers.
   WebContentsModalDialogManager::FromWebContents(web_contents)
       ->SetDelegate(delegate);
-  translate::ContentTranslateDriver& content_translate_driver =
+  translate::ContentTranslateDriver* content_translate_driver =
       ChromeTranslateClient::FromWebContents(web_contents)->translate_driver();
   if (delegate) {
     zoom::ZoomController::FromWebContents(web_contents)->AddObserver(this);
-    content_translate_driver.AddObserver(this);
+    content_translate_driver->AddObserver(this);
     BookmarkTabHelper::FromWebContents(web_contents)->AddObserver(this);
   } else {
     zoom::ZoomController::FromWebContents(web_contents)->RemoveObserver(this);
-    content_translate_driver.RemoveObserver(this);
+    content_translate_driver->RemoveObserver(this);
     BookmarkTabHelper::FromWebContents(web_contents)->RemoveObserver(this);
   }
 }
diff --git a/chrome/browser/ui/cocoa/main_menu_builder.mm b/chrome/browser/ui/cocoa/main_menu_builder.mm
index cf931785..158d636 100644
--- a/chrome/browser/ui/cocoa/main_menu_builder.mm
+++ b/chrome/browser/ui/cocoa/main_menu_builder.mm
@@ -365,9 +365,24 @@
                     .tag(IDC_MAXIMIZE_WINDOW)
                     .action(@selector(performZoom:)),
                 Item().is_separator(),
+                Item(IDS_NEXT_TAB_MAC)
+                    .command_id(IDC_SELECT_NEXT_TAB)
+                    .remove_if(is_pwa),
+                Item(IDS_PREV_TAB_MAC)
+                    .command_id(IDC_SELECT_PREVIOUS_TAB)
+                    .remove_if(is_pwa),
                 Item(IDS_SHOW_AS_TAB)
                     .command_id(IDC_SHOW_AS_TAB)
                     .remove_if(is_pwa),
+                Item(IDS_DUPLICATE_TAB_MAC)
+                    .command_id(IDC_DUPLICATE_TAB)
+                    .remove_if(is_pwa),
+                Item(IDS_MUTE_SITE_MAC)
+                    .command_id(IDC_WINDOW_MUTE_SITE)
+                    .remove_if(is_pwa),
+                Item(IDS_PIN_TAB_MAC)
+                    .command_id(IDC_WINDOW_PIN_TAB)
+                    .remove_if(is_pwa),
                 Item().is_separator().remove_if(is_pwa),
                 Item(IDS_SHOW_DOWNLOADS_MAC)
                     .command_id(IDC_SHOW_DOWNLOADS)
@@ -389,29 +404,6 @@
   return item;
 }
 
-base::scoped_nsobject<NSMenuItem> BuildTabMenu(
-    NSApplication* nsapp,
-    id app_delegate,
-    const base::string16& product_name,
-    bool is_pwa) {
-  if (is_pwa)
-    return base::scoped_nsobject<NSMenuItem>();
-
-  base::scoped_nsobject<NSMenuItem> item =
-      Item(IDS_TAB_MENU_MAC)
-          .tag(IDC_TAB_MENU)
-          .submenu({
-              Item(IDS_NEXT_TAB_MAC).command_id(IDC_SELECT_NEXT_TAB),
-              Item(IDS_PREV_TAB_MAC).command_id(IDC_SELECT_PREVIOUS_TAB),
-              Item(IDS_DUPLICATE_TAB_MAC).command_id(IDC_DUPLICATE_TAB),
-              Item(IDS_MUTE_SITE_MAC).command_id(IDC_WINDOW_MUTE_SITE),
-              Item(IDS_PIN_TAB_MAC).command_id(IDC_WINDOW_PIN_TAB),
-              Item().is_separator(),
-          })
-          .Build();
-  return item;
-}
-
 base::scoped_nsobject<NSMenuItem> BuildHelpMenu(
     NSApplication* nsapp,
     id app_delegate,
@@ -446,9 +438,9 @@
   using Builder = base::scoped_nsobject<NSMenuItem> (*)(
       NSApplication*, id, const base::string16&, bool);
   static const Builder kBuilderFuncs[] = {
-      &BuildAppMenu,     &BuildFileMenu,      &BuildEditMenu,   &BuildViewMenu,
-      &BuildHistoryMenu, &BuildBookmarksMenu, &BuildPeopleMenu, &BuildTabMenu,
-      &BuildWindowMenu,  &BuildHelpMenu,
+      &BuildAppMenu,    &BuildFileMenu,    &BuildEditMenu,
+      &BuildViewMenu,   &BuildHistoryMenu, &BuildBookmarksMenu,
+      &BuildPeopleMenu, &BuildWindowMenu,  &BuildHelpMenu,
   };
   for (auto* builder : kBuilderFuncs) {
     auto item = builder(nsapp, app_delegate, product_name, is_pwa);
diff --git a/chrome/browser/ui/cocoa/tab_menu_bridge.h b/chrome/browser/ui/cocoa/tab_menu_bridge.h
deleted file mode 100644
index 9e037d1..0000000
--- a/chrome/browser/ui/cocoa/tab_menu_bridge.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_COCOA_TAB_MENU_BRIDGE_H_
-#define CHROME_BROWSER_UI_COCOA_TAB_MENU_BRIDGE_H_
-
-#include "base/gtest_prod_util.h"
-#include "base/mac/scoped_nsobject.h"
-#include "base/macros.h"
-#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
-
-@class NSMenuItem;
-@class TabMenuListener;
-class TabStripModel;
-
-// A TabMenuBridge bidirectionally connects a list of tabs (represented by a
-// TabStripModel) to an NSMenu, for use in the system menu bar. Specifically,
-// the TabStripBridge appends items to the bottom of the provided NSMenu
-// corresponding to tabs in the TabStripModel, and keeps those items
-// synchronized with changes to the TabStripModel. Clicking one of these items
-// activates the corresponding tab in the TabStripModel. This class assumes
-// that:
-//   1) It owns the bottom "dynamic" part of of the provided menu
-//   2) The number of items not in the "dynamic" part does not change after the
-//      TabMenuBridge is constructed
-//
-// To use this class, construct an instance and call BuildMenu() on it.
-class TabMenuBridge : public TabStripModelObserver {
- public:
-  // The |menu_item| contains the actual menu this class manages.
-  TabMenuBridge(TabStripModel* model, NSMenuItem* menu_item);
-  ~TabMenuBridge() override;
-
-  // It's legal to call this method more than once - it will clear all the
-  // existing dynamic items added by this instance before adding any new ones,
-  // so multiple calls are idempotent.
-  void BuildMenu();
-
- private:
-  FRIEND_TEST_ALL_PREFIXES(TabMenuBridgeTest, ClickingMenuActivatesTab);
-
-  // These methods are used to make batch changes to the menu.
-  void RemoveAllDynamicItems();
-  void AddDynamicItemsFromModel();
-
-  // This method exists to be called back into from the Cocoa part of this
-  // bridge class (TabMenuListener).
-  void OnDynamicItemChosen(NSMenuItem* item);
-
-  // TabStripModelObserver:
-  void OnTabStripModelChanged(
-      TabStripModel* tab_strip_model,
-      const TabStripModelChange& change,
-      const TabStripSelectionChange& selection) override;
-  void TabChangedAt(content::WebContents* contents,
-                    int index,
-                    TabChangeType change_type) override;
-
-  TabStripModel* model_;
-  NSMenuItem* menu_item_;  // weak
-  base::scoped_nsobject<TabMenuListener> menu_listener_;
-
-  // When created, this class remembers how many items were present in the
-  // non-dynamic section of the menu. This offset is used to map menu items to
-  // their underlying tabs.
-  int dynamic_items_start_;
-
-  DISALLOW_COPY_AND_ASSIGN(TabMenuBridge);
-};
-
-#endif  // CHROME_BROWSER_UI_COCOA_TAB_MENU_BRIDGE_H_
diff --git a/chrome/browser/ui/cocoa/tab_menu_bridge.mm b/chrome/browser/ui/cocoa/tab_menu_bridge.mm
deleted file mode 100644
index b2f74204..0000000
--- a/chrome/browser/ui/cocoa/tab_menu_bridge.mm
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/cocoa/tab_menu_bridge.h"
-
-#import <Cocoa/Cocoa.h>
-
-#include "base/callback.h"
-#include "base/mac/scoped_nsobject.h"
-#include "base/strings/sys_string_conversions.h"
-#include "chrome/browser/ui/tab_ui_helper.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-
-using MenuItemCallback = base::RepeatingCallback<void(NSMenuItem*)>;
-
-namespace {
-
-void UpdateItemForWebContents(NSMenuItem* item,
-                              content::WebContents* web_contents) {
-  TabUIHelper* tab_ui_helper = TabUIHelper::FromWebContents(web_contents);
-
-  item.title = base::SysUTF16ToNSString(tab_ui_helper->GetTitle());
-  item.image = tab_ui_helper->GetFavicon().AsNSImage();
-}
-
-}  // namespace
-
-@interface TabMenuListener : NSObject
-- (instancetype)initWithCallback:(MenuItemCallback)callback;
-- (void)activateTab:(id)sender;
-@end
-
-@implementation TabMenuListener {
-  MenuItemCallback callback_;
-}
-
-- (instancetype)initWithCallback:(MenuItemCallback)callback {
-  if ((self = [super init])) {
-    callback_ = callback;
-  }
-  return self;
-}
-
-- (IBAction)activateTab:(id)sender {
-  callback_.Run(sender);
-}
-@end
-
-TabMenuBridge::TabMenuBridge(TabStripModel* model, NSMenuItem* menu_item)
-    : model_(model), menu_item_(menu_item) {
-  menu_listener_.reset([[TabMenuListener alloc]
-      initWithCallback:base::Bind(&TabMenuBridge::OnDynamicItemChosen,
-                                  // Unretained is safe here: this class owns
-                                  // MenuListener, which holds the callback
-                                  // being constructed here, so the callback
-                                  // will be destructed before this class.
-                                  base::Unretained(this))]);
-  model_->AddObserver(this);
-}
-
-TabMenuBridge::~TabMenuBridge() {
-  model_->RemoveObserver(this);
-  RemoveAllDynamicItems();
-}
-
-void TabMenuBridge::BuildMenu() {
-  RemoveAllDynamicItems();
-  AddDynamicItemsFromModel();
-}
-
-void TabMenuBridge::RemoveAllDynamicItems() {
-  for (NSMenuItem* item in menu_item_.submenu.itemArray) {
-    if (item.target == menu_listener_.get())
-      [menu_item_.submenu removeItem:item];
-  }
-}
-
-void TabMenuBridge::AddDynamicItemsFromModel() {
-  dynamic_items_start_ = menu_item_.submenu.numberOfItems;
-  for (int i = 0; i < model_->count(); ++i) {
-    base::scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc]
-        initWithTitle:@""
-               action:@selector(activateTab:)
-        keyEquivalent:@""]);
-    [item setTarget:menu_listener_.get()];
-    UpdateItemForWebContents(item, model_->GetWebContentsAt(i));
-    [menu_item_.submenu addItem:item.get()];
-  }
-}
-
-void TabMenuBridge::OnDynamicItemChosen(NSMenuItem* item) {
-  DCHECK_EQ(item.target, menu_listener_.get());
-  int index = [menu_item_.submenu indexOfItem:item] - dynamic_items_start_;
-  model_->ActivateTabAt(index, TabStripModel::UserGestureDetails(
-                                   TabStripModel::GestureType::kTabMenu));
-}
-
-void TabMenuBridge::OnTabStripModelChanged(
-    TabStripModel* tab_strip_model,
-    const TabStripModelChange& change,
-    const TabStripSelectionChange& selection) {
-  DCHECK_EQ(tab_strip_model, model_);
-
-  // Rather than doing clever updating from |change|, just destroy the dynamic
-  // menu items and re-add them.
-  RemoveAllDynamicItems();
-  AddDynamicItemsFromModel();
-}
-
-void TabMenuBridge::TabChangedAt(content::WebContents* contents,
-                                 int index,
-                                 TabChangeType change_type) {
-  // Ignore loading state changes - they happen very often during page load and
-  // are used to drive the load spinner, which is not interesting to this menu.
-  if (change_type == TabChangeType::kLoadingOnly)
-    return;
-
-  int menu_index = index + dynamic_items_start_;
-
-  // It might seem like this can't happen but actually it can:
-  // 1) Someone calls TabMenuModel::AddWebContents
-  // 2) Some other observer (not this) is notified of the add
-  // 3) That observer responds by doing something that eventually leads into
-  //    UpdateWebContentsStateAt, while this class still hasn't observed the
-  //    OnTabStripModelChanged (but the method that will notify us is on the
-  //    stack)
-  // 4) That UpdateWebContentsStateAt causes this object to observe a
-  //    TabChangedAt for an index it hasn't yet been informed exists
-  // As such, this code early-outs instead of DCHECKing. The newly-added
-  // WebContents will be picked up later anyway when this object does get
-  // notified of the addition.
-  if (menu_index < 0 || menu_index >= menu_item_.submenu.numberOfItems)
-    return;
-
-  NSMenuItem* item = [menu_item_.submenu itemAtIndex:menu_index];
-  UpdateItemForWebContents(item, contents);
-}
diff --git a/chrome/browser/ui/cocoa/tab_menu_bridge_unittest.mm b/chrome/browser/ui/cocoa/tab_menu_bridge_unittest.mm
deleted file mode 100644
index 9711b18..0000000
--- a/chrome/browser/ui/cocoa/tab_menu_bridge_unittest.mm
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-#import <Cocoa/Cocoa.h>
-
-#include "base/mac/scoped_nsobject.h"
-#include "base/strings/sys_string_conversions.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/test/scoped_task_environment.h"
-#include "chrome/browser/favicon/favicon_utils.h"
-#include "chrome/browser/ui/cocoa/tab_menu_bridge.h"
-#include "chrome/browser/ui/tab_ui_helper.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/tabs/test_tab_strip_model_delegate.h"
-#include "chrome/test/base/testing_profile.h"
-#include "content/public/test/test_renderer_host.h"
-#include "content/public/test/web_contents_tester.h"
-#include "testing/gtest_mac.h"
-
-constexpr int kStaticItemCount = 4;
-
-class TabStripModelUiHelperDelegate : public TestTabStripModelDelegate {
- public:
-  void WillAddWebContents(content::WebContents* contents) override {
-    TestTabStripModelDelegate::WillAddWebContents(contents);
-
-    favicon::CreateContentFaviconDriverForWebContents(contents);
-    TabUIHelper::CreateForWebContents(contents);
-  }
-};
-
-class TabMenuBridgeTest : public ::testing::Test {
- public:
-  void SetUp() override {
-    profile_ = std::make_unique<TestingProfile>();
-    rvh_test_enabler_ = std::make_unique<content::RenderViewHostTestEnabler>();
-    delegate_ = std::make_unique<TabStripModelUiHelperDelegate>();
-    model_ = std::make_unique<TabStripModel>(delegate_.get(), nullptr);
-    menu_root_.reset(ItemWithTitle(@"Tab"));
-    menu_.reset([[NSMenu alloc] initWithTitle:@"Tab"]);
-    menu_root_.get().submenu = menu_.get();
-
-    AddStaticItems(menu_.get());
-  }
-
-  void TearDown() override { model_->CloseAllTabs(); }
-
-  NSMenuItem* menu_root() { return menu_root_.get(); }
-  NSMenu* menu() { return menu_.get(); }
-  TabStripModel* model() { return model_.get(); }
-  TabStripModelDelegate* delegate() { return delegate_.get(); }
-
-  void AddStaticItems(NSMenu* menu) {
-    [menu_ addItem:ItemWithTitle(@"Static 1")];
-    [menu_ addItem:ItemWithTitle(@"Static 2")];
-    [menu_ addItem:ItemWithTitle(@"Static 3")];
-    [menu_ addItem:SeparatorItem()];
-  }
-
-  std::unique_ptr<content::WebContents> CreateWebContents(
-      const std::string& title) {
-    std::unique_ptr<content::WebContents> contents =
-        content::WebContentsTester::CreateTestWebContents(profile_.get(),
-                                                          nullptr);
-    content::WebContentsTester::For(contents.get())
-        ->SetTitle(base::UTF8ToUTF16(title));
-    return contents;
-  }
-
-  void AddModelTabNamed(const std::string& name) {
-    model()->AppendWebContents(CreateWebContents(name), true);
-  }
-
-  int ModelIndexForTabNamed(const std::string& name) {
-    base::string16 title16 = base::UTF8ToUTF16(name);
-    for (int i = 0; i < model()->count(); ++i) {
-      if (model()->GetWebContentsAt(i)->GetTitle() == title16)
-        return i;
-    }
-    return -1;
-  }
-
-  void RemoveModelTabNamed(const std::string& name) {
-    int index = ModelIndexForTabNamed(name);
-    DCHECK(index >= 0);
-    model()->CloseWebContentsAt(index, TabStripModel::CLOSE_NONE);
-  }
-
-  void RenameModelTabNamed(const std::string& old_name,
-                           const std::string& new_name) {
-    int index = ModelIndexForTabNamed(old_name);
-    if (index >= 0) {
-      content::WebContents* contents = model()->GetWebContentsAt(index);
-      content::WebContentsTester::For(contents)->SetTitle(
-          base::UTF8ToUTF16(new_name));
-      // The way WebContentsTester updates the title avoids the usual
-      // notification mechanism for TabStripModel, so manually synthesize the
-      // update notification here.
-      model()->UpdateWebContentsStateAt(index, TabChangeType::kAll);
-    }
-  }
-
-  NSMenuItem* MenuItemForTabNamed(const std::string& name) {
-    return [menu() itemWithTitle:base::SysUTF8ToNSString(name)];
-  }
-
-  void ExpectDynamicTabsInMenuAre(const std::vector<std::string>& titles) {
-    std::vector<std::string> actual_titles;
-    for (int i = kStaticItemCount; i < menu().numberOfItems; ++i) {
-      actual_titles.push_back(
-          base::SysNSStringToUTF8([menu() itemAtIndex:i].title));
-    }
-
-    ASSERT_EQ(actual_titles.size(), titles.size());
-    for (int i = 0; i < static_cast<int>(titles.size()); ++i)
-      EXPECT_EQ(actual_titles[i], titles[i]);
-  }
-
-  std::string ActiveTabName() {
-    return base::UTF16ToUTF8(model()->GetActiveWebContents()->GetTitle());
-  }
-
- private:
-  NSMenuItem* ItemWithTitle(NSString* title) {
-    return [[NSMenuItem alloc] initWithTitle:title
-                                      action:nil
-                               keyEquivalent:@""];
-  }
-
-  NSMenuItem* SeparatorItem() { return [NSMenuItem separatorItem]; }
-
-  content::TestBrowserThreadBundle test_browser_thread_bundle_;
-
-  std::unique_ptr<TestingProfile> profile_;
-  std::unique_ptr<content::RenderViewHostTestEnabler> rvh_test_enabler_;
-  std::unique_ptr<TabStripModelUiHelperDelegate> delegate_;
-  std::unique_ptr<TabStripModel> model_;
-  base::scoped_nsobject<NSMenuItem> menu_root_;
-  base::scoped_nsobject<NSMenu> menu_;
-};
-
-TEST_F(TabMenuBridgeTest, CreatesBlankMenu) {
-  TabMenuBridge bridge(model(), menu_root());
-  bridge.BuildMenu();
-  EXPECT_EQ(menu().numberOfItems, kStaticItemCount);
-  ExpectDynamicTabsInMenuAre({});
-}
-
-TEST_F(TabMenuBridgeTest, TracksModelUpdates) {
-  TabMenuBridge bridge(model(), menu_root());
-  bridge.BuildMenu();
-
-  AddModelTabNamed("Tab 1");
-  AddModelTabNamed("Tab 2");
-  AddModelTabNamed("Tab 3");
-  ExpectDynamicTabsInMenuAre({"Tab 1", "Tab 2", "Tab 3"});
-
-  RemoveModelTabNamed("Tab 2");
-  ExpectDynamicTabsInMenuAre({"Tab 1", "Tab 3"});
-
-  AddModelTabNamed("Tab 2");
-  ExpectDynamicTabsInMenuAre({"Tab 1", "Tab 3", "Tab 2"});
-
-  RenameModelTabNamed("Tab 1", "Tab 4");
-  ExpectDynamicTabsInMenuAre({"Tab 4", "Tab 3", "Tab 2"});
-}
-
-TEST_F(TabMenuBridgeTest, ClickingMenuActivatesTab) {
-  TabMenuBridge bridge(model(), menu_root());
-  bridge.BuildMenu();
-
-  AddModelTabNamed("Tab 1");
-  AddModelTabNamed("Tab 2");
-  EXPECT_EQ(ActiveTabName(), "Tab 2");
-
-  NSMenuItem* tab1_item = MenuItemForTabNamed("Tab 1");
-
-  // Don't go through NSMenuItem's normal click-dispatching machinery here - it
-  // would add flake potential to this test without improving coverage. Instead,
-  // call straight through to the C++-side callback:
-  bridge.OnDynamicItemChosen(tab1_item);
-  EXPECT_EQ(ActiveTabName(), "Tab 1");
-
-  // Activation does not re-order the menu.
-  ExpectDynamicTabsInMenuAre({"Tab 1", "Tab 2"});
-}
-
-// This is a regression test for a bug found during development. Previous
-// versions of TabMenuBridge had an RAII-like API where creating a TabMenuBridge
-// would fill in the dynamic menu during construction. Combining this with the
-// common pattern of:
-//    tab_menu_bridge_ = std::make_unique<TabMenuBridge>(...);
-// in the presence of an existing tab_menu_bridge_ led to there temporarily
-// being two TabMenuBridge instances at a time, meaning both of them had their
-// dynamic menu items installed. This, in turn, confused the menu index logic in
-// the new TabMenuBridge - it counted the old TabMenuBridge's dynamic items as
-// static items, and ended up with incorrect indexes. This test exercises that
-// behavior.
-TEST_F(TabMenuBridgeTest, SwappingBridgeRecreatesMenu) {
-  auto bridge = std::make_unique<TabMenuBridge>(model(), menu_root());
-  bridge->BuildMenu();
-
-  AddModelTabNamed("Tab 1");
-
-  auto model2 = std::make_unique<TabStripModel>(delegate(), nullptr);
-  model2->AppendWebContents(CreateWebContents("Tab 2"), true);
-
-  bridge = std::make_unique<TabMenuBridge>(model2.get(), menu_root());
-  bridge->BuildMenu();
-  ExpectDynamicTabsInMenuAre({"Tab 2"});
-
-  // Simulate one of the tabs in the model being updated - if the computed
-  // indexes are wrong, this call will DCHECK.
-  model2->UpdateWebContentsStateAt(0, TabChangeType::kAll);
-
-  model2->CloseAllTabs();
-}
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
index bd1b181..4225b7f 100644
--- a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
@@ -205,8 +205,8 @@
   return false;
 }
 
-bool HostedAppBrowserController::ShouldShowHostedAppButtonContainer() const {
-  // System Web Apps don't get the Hosted App buttons.
+bool HostedAppBrowserController::HasTitlebarToolbar() const {
+  // System Web Apps don't have a toolbar.
   return IsForWebAppBrowser(browser()) && !IsForSystemWebApp();
 }
 
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.h b/chrome/browser/ui/extensions/hosted_app_browser_controller.h
index c2812595..cb80e12 100644
--- a/chrome/browser/ui/extensions/hosted_app_browser_controller.h
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.h
@@ -43,7 +43,7 @@
   base::Optional<std::string> GetAppId() const override;
   bool CreatedForInstalledPwa() const override;
   bool ShouldShowCustomTabBar() const override;
-  bool ShouldShowHostedAppButtonContainer() const override;
+  bool HasTitlebarToolbar() const override;
   gfx::ImageSkia GetWindowAppIcon() const override;
   gfx::ImageSkia GetWindowIcon() const override;
   base::Optional<SkColor> GetThemeColor() const override;
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
index 5c8a6ec..deefdbc 100644
--- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -109,13 +109,11 @@
     "}";
 
 enum class AppType {
-  HOSTED_APP,
-  BOOKMARK_APP,
+  HOSTED_APP,    // Using HostedAppBrowserController
+  BOOKMARK_APP,  // Using HostedAppBrowserController
+  WEB_APP,       // Using WebAppBrowserController
 };
 
-const auto kAppTypeValues =
-    ::testing::Values(AppType::HOSTED_APP, AppType::BOOKMARK_APP);
-
 // Opens |url| in a new popup window with the dimensions |popup_size|.
 Browser* OpenPopupAndWait(Browser* browser,
                           const GURL& url,
@@ -284,8 +282,15 @@
       : app_browser_(nullptr),
         app_(nullptr),
         https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {
-    scoped_feature_list_.InitWithFeatures(
-        {}, {predictors::kSpeculativePreconnectFeature});
+    if (GetParam() == AppType::WEB_APP) {
+      scoped_feature_list_.InitWithFeatures(
+          {features::kDesktopPWAsUnifiedUiController},
+          {predictors::kSpeculativePreconnectFeature});
+    } else {
+      scoped_feature_list_.InitWithFeatures(
+          {}, {features::kDesktopPWAsUnifiedUiController,
+               predictors::kSpeculativePreconnectFeature});
+    }
   }
   ~HostedAppTest() override {}
 
@@ -314,9 +319,9 @@
   void SetupApp(const base::FilePath& app_folder) {
     app_ = InstallExtensionWithSourceAndFlags(
         app_folder, 1, extensions::Manifest::INTERNAL,
-        app_type_ == AppType::BOOKMARK_APP
-            ? extensions::Extension::FROM_BOOKMARK
-            : extensions::Extension::NO_FLAGS);
+        app_type_ == AppType::HOSTED_APP
+            ? extensions::Extension::NO_FLAGS
+            : extensions::Extension::FROM_BOOKMARK);
     ASSERT_TRUE(app_);
 
     LaunchApp();
@@ -459,6 +464,8 @@
   DISALLOW_COPY_AND_ASSIGN(HostedAppTest);
 };
 
+using SharedAppTest = HostedAppTest;
+
 // Tests that "Open link in new tab" opens a link in a foreground tab.
 IN_PROC_BROWSER_TEST_P(HostedAppTest, OpenLinkInNewTab) {
   SetupApp("app");
@@ -718,7 +725,7 @@
 
 // Check that a subframe on a regular web page can navigate to a URL that
 // redirects to a hosted app.  https://crbug.com/721949.
-IN_PROC_BROWSER_TEST_P(HostedAppTest, SubframeRedirectsToHostedApp) {
+IN_PROC_BROWSER_TEST_P(SharedAppTest, SubframeRedirectsToHostedApp) {
   // This test only applies to hosted apps.
   if (app_type() != AppType::HOSTED_APP)
     return;
@@ -867,12 +874,13 @@
 }
 
 using HostedAppPWAOnlyTest = HostedAppTest;
+using SharedPWATest = HostedAppTest;
 using HostedAppPWAOnlyTestWithAutoupgradesDisabled =
     HostedAppTestWithAutoupgradesDisabled;
 
 // Tests that the command for popping a tab out to a PWA window is disabled in
 // incognito.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, PopOutDisabledInIncognito) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, PopOutDisabledInIncognito) {
   ASSERT_TRUE(https_server()->Start());
   ASSERT_TRUE(embedded_test_server()->Start());
 
@@ -1109,7 +1117,7 @@
 
 // Tests that both installing a PWA and creating a shortcut app are disabled for
 // incognito windows.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, ShortcutMenuOptionsInIncognito) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, ShortcutMenuOptionsInIncognito) {
   Browser* incognito_browser = CreateIncognitoBrowser(profile());
   auto* manager = banners::TestAppBannerManagerDesktop::CreateForWebContents(
       incognito_browser->tab_strip_model()->GetActiveWebContents());
@@ -1126,8 +1134,7 @@
 
 // Tests that both installing a PWA and creating a shortcut app are available
 // for an installable PWA.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest,
-                       ShortcutMenuOptionsForInstallablePWA) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, ShortcutMenuOptionsForInstallablePWA) {
   auto* manager = banners::TestAppBannerManagerDesktop::CreateForWebContents(
       browser()->tab_strip_model()->GetActiveWebContents());
 
@@ -1141,7 +1148,7 @@
 
 // Tests that creating a shortcut app but not installing a PWA is available for
 // a non-installable site.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest,
+IN_PROC_BROWSER_TEST_P(SharedPWATest,
                        ShortcutMenuOptionsForNonInstallableSite) {
   auto* manager = banners::TestAppBannerManagerDesktop::CreateForWebContents(
       browser()->tab_strip_model()->GetActiveWebContents());
@@ -1154,7 +1161,7 @@
   EXPECT_EQ(GetAppMenuCommandState(IDC_INSTALL_PWA, browser()), kNotPresent);
 }
 
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, InstallInstallableSite) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, InstallInstallableSite) {
   base::UserActionTester user_action_tester;
   ASSERT_TRUE(https_server()->Start());
   NavigateToURLAndWait(browser(), GetInstallableAppURL());
@@ -1193,7 +1200,7 @@
   EXPECT_EQ(0, user_action_tester.GetActionCount("CreateShortcut"));
 }
 
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, CreateShortcutForInstallableSite) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, CreateShortcutForInstallableSite) {
   base::UserActionTester user_action_tester;
   ASSERT_TRUE(https_server()->Start());
   NavigateToURLAndWait(browser(), GetInstallableAppURL());
@@ -1218,8 +1225,7 @@
 
 // Tests that the command for OpenActiveTabInPwaWindow is available for secure
 // pages in an app's scope.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest,
-                       ReparentSecureActiveTabIntoPwaWindow) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, ReparentSecureActiveTabIntoPwaWindow) {
   ASSERT_TRUE(https_server()->Start());
   ASSERT_TRUE(embedded_test_server()->Start());
 
@@ -1239,7 +1245,7 @@
 }
 
 // Tests that reparenting the last browser tab doesn't close the browser window.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, ReparentLastBrowserTab) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, ReparentLastBrowserTab) {
   ASSERT_TRUE(https_server()->Start());
   ASSERT_TRUE(embedded_test_server()->Start());
 
@@ -1255,7 +1261,7 @@
 
 // Tests that the manifest name of the current installable site is used in the
 // installation menu text.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, InstallToShelfContainsAppName) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, InstallToShelfContainsAppName) {
   auto* manager = banners::TestAppBannerManagerDesktop::CreateForWebContents(
       browser()->tab_strip_model()->GetActiveWebContents());
 
@@ -1282,7 +1288,7 @@
 }
 
 // Tests that mixed content is not loaded inside PWA windows.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, MixedContentInPWA) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, MixedContentInPWA) {
   ASSERT_TRUE(https_server()->Start());
   ASSERT_TRUE(embedded_test_server()->Start());
 
@@ -1372,7 +1378,7 @@
 }
 
 // Tests that mixed content is not loaded inside iframes in PWA windows.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, IFrameMixedContentInPWA) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, IFrameMixedContentInPWA) {
   ASSERT_TRUE(https_server()->Start());
 
   InstallMixedContentIFramePWA();
@@ -1428,7 +1434,7 @@
 }
 
 // Check that uninstalling a PWA with a window opened doesn't crash.
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, UninstallPwaWithWindowOpened) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, UninstallPwaWithWindowOpened) {
   ASSERT_TRUE(https_server()->Start());
   ASSERT_TRUE(embedded_test_server()->Start());
   InstallSecurePWA();
@@ -1473,7 +1479,7 @@
   EXPECT_FALSE(app_browser_->app_controller()->CreatedForInstalledPwa());
 }
 
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, CreatedForInstalledPwaForPwa) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, CreatedForInstalledPwaForPwa) {
   WebApplicationInfo web_app_info;
   web_app_info.app_url = GURL(kExampleURL);
   web_app_info.scope = GURL(kExampleURL);
@@ -2612,7 +2618,7 @@
                             "window.open('', 'bg2').document.body.innerText"));
 }
 
-IN_PROC_BROWSER_TEST_P(HostedAppPWAOnlyTest, ThemeColor) {
+IN_PROC_BROWSER_TEST_P(SharedPWATest, ThemeColor) {
   {
     WebApplicationInfo web_app_info;
     web_app_info.app_url = GURL(kExampleURL);
@@ -2678,7 +2684,16 @@
   NavigateAndCheckForToolbar(app_browser_, popup_url, false);
 }
 
-INSTANTIATE_TEST_SUITE_P(/* no prefix */, HostedAppTest, kAppTypeValues);
+INSTANTIATE_TEST_SUITE_P(/* no prefix */,
+                         HostedAppTest,
+                         ::testing::Values(AppType::HOSTED_APP,
+                                           AppType::BOOKMARK_APP));
+
+INSTANTIATE_TEST_SUITE_P(/* no prefix */,
+                         SharedAppTest,
+                         ::testing::Values(AppType::HOSTED_APP,
+                                           AppType::BOOKMARK_APP,
+                                           AppType::WEB_APP));
 
 INSTANTIATE_TEST_SUITE_P(
     /* no prefix */,
@@ -2687,6 +2702,11 @@
 
 INSTANTIATE_TEST_SUITE_P(
     /* no prefix */,
+    SharedPWATest,
+    ::testing::Values(AppType::BOOKMARK_APP, AppType::WEB_APP));
+
+INSTANTIATE_TEST_SUITE_P(
+    /* no prefix */,
     HostedAppProcessModelTest,
     ::testing::Values(AppType::HOSTED_APP));
 
diff --git a/chrome/browser/ui/hats/hats_service.cc b/chrome/browser/ui/hats/hats_service.cc
index b03d31af..c964abce 100644
--- a/chrome/browser/ui/hats/hats_service.cc
+++ b/chrome/browser/ui/hats/hats_service.cc
@@ -130,6 +130,9 @@
   if (!consent_given)
     return false;
 
+  if (profile_->GetLastSessionExitType() == Profile::EXIT_CRASHED)
+    return false;
+
   const base::DictionaryValue* pref_data =
       profile_->GetPrefs()->GetDictionary(prefs::kHatsSurveyMetadata);
   base::Optional<int> last_major_version =
diff --git a/chrome/browser/ui/libgtkui/native_theme_gtk.cc b/chrome/browser/ui/libgtkui/native_theme_gtk.cc
index 0929cd7a..9cdb8180 100644
--- a/chrome/browser/ui/libgtkui/native_theme_gtk.cc
+++ b/chrome/browser/ui/libgtkui/native_theme_gtk.cc
@@ -394,7 +394,8 @@
   // have a light variant and aren't affected by the setting.  Because of this,
   // experimentally check if the theme is dark by checking if the window
   // background color is dark.
-  set_dark_mode(color_utils::IsDark(GetSystemColor(kColorId_WindowBackground)));
+  set_use_dark_colors(
+      color_utils::IsDark(GetSystemColor(kColorId_WindowBackground)));
   set_preferred_color_scheme(CalculatePreferredColorScheme());
 
   // GTK doesn't have a native high contrast setting.  Rather, it's implied by
diff --git a/chrome/browser/ui/manifest_web_app_browser_controller.cc b/chrome/browser/ui/manifest_web_app_browser_controller.cc
index 6640529..b75e2e7 100644
--- a/chrome/browser/ui/manifest_web_app_browser_controller.cc
+++ b/chrome/browser/ui/manifest_web_app_browser_controller.cc
@@ -52,8 +52,7 @@
   return false;
 }
 
-bool ManifestWebAppBrowserController::ShouldShowHostedAppButtonContainer()
-    const {
+bool ManifestWebAppBrowserController::HasTitlebarToolbar() const {
   return true;
 }
 
diff --git a/chrome/browser/ui/manifest_web_app_browser_controller.h b/chrome/browser/ui/manifest_web_app_browser_controller.h
index eda0306a..9fc30d2 100644
--- a/chrome/browser/ui/manifest_web_app_browser_controller.h
+++ b/chrome/browser/ui/manifest_web_app_browser_controller.h
@@ -32,7 +32,7 @@
   // web_app::AppBrowserController:
   base::Optional<std::string> GetAppId() const override;
   bool ShouldShowCustomTabBar() const override;
-  bool ShouldShowHostedAppButtonContainer() const override;
+  bool HasTitlebarToolbar() const override;
   gfx::ImageSkia GetWindowAppIcon() const override;
   gfx::ImageSkia GetWindowIcon() const override;
   std::string GetAppShortName() const override;
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter.cc b/chrome/browser/ui/passwords/settings/password_manager_presenter.cc
index 78225908..b01b04a9 100644
--- a/chrome/browser/ui/passwords/settings/password_manager_presenter.cc
+++ b/chrome/browser/ui/passwords/settings/password_manager_presenter.cc
@@ -217,53 +217,25 @@
 }
 
 void PasswordManagerPresenter::ChangeSavedPassword(
-    const std::string& sort_key,
-    base::string16 new_username,
-    base::Optional<base::string16> new_password) {
-  // If a password was provided, make sure it is not empty.
-  if (new_password && new_password->empty())
-    return;
+    size_t index,
+    const base::string16& new_username,
+    const base::Optional<base::string16>& new_password) {
+  DCHECK_LT(index, password_map_.size());
 
+  ChangeSavedPasswords(std::next(password_map_.begin(), index)->second,
+                       new_username, new_password);
+}
+
+void PasswordManagerPresenter::ChangeSavedPassword(
+    const std::string& sort_key,
+    const base::string16& new_username,
+    const base::Optional<base::string16>& new_password) {
   // Find the equivalence class that needs to be updated.
   auto it = password_map_.find(sort_key);
   if (it == password_map_.end())
     return;
 
-  const auto& old_forms = it->second;
-  DCHECK(!old_forms.empty());
-  const std::string& signon_realm = old_forms[0]->signon_realm;
-  const base::string16& old_username = old_forms[0]->username_value;
-
-  const bool username_changed = old_username != new_username;
-  // In case the username changed, make sure that there exists no other
-  // credential with the same signon_realm and username.
-  if (username_changed) {
-    for (const auto& sort_key_passwords_pair : password_map_) {
-      for (const auto& password : sort_key_passwords_pair.second) {
-        if (password->signon_realm == signon_realm &&
-            password->username_value == new_username) {
-          return;
-        }
-      }
-    }
-  }
-
-  PasswordStore* store = GetPasswordStore();
-  if (!store)
-    return;
-
-  // An updated username implies a change in the primary key, thus we need to
-  // make sure to call the right API. Update every entry in the equivalence
-  // class.
-  for (const auto& old_form : old_forms) {
-    autofill::PasswordForm new_form = *old_form;
-    new_form.username_value = new_username;
-    if (new_password)
-      new_form.password_value = *new_password;
-
-    username_changed ? store->UpdateLoginWithPrimaryKey(new_form, *old_form)
-                     : store->UpdateLogin(new_form);
-  }
+  ChangeSavedPasswords(it->second, new_username, new_password);
 }
 
 void PasswordManagerPresenter::RemoveSavedPassword(size_t index) {
@@ -354,6 +326,54 @@
   store->RemoveLogin(form);
 }
 
+void PasswordManagerPresenter::ChangeSavedPasswords(
+    const FormVector& old_forms,
+    const base::string16& new_username,
+    const base::Optional<base::string16>& new_password) {
+  // If a password was provided, make sure it is not empty.
+  if (new_password && new_password->empty()) {
+    DLOG(ERROR) << "The password is empty.";
+    return;
+  }
+
+  DCHECK(!old_forms.empty());
+  const std::string& signon_realm = old_forms[0]->signon_realm;
+  const base::string16& old_username = old_forms[0]->username_value;
+
+  const bool username_changed = old_username != new_username;
+  // In case the username changed, make sure that there exists no other
+  // credential with the same signon_realm and username.
+  if (username_changed) {
+    for (const auto& sort_key_passwords_pair : password_map_) {
+      for (const auto& password : sort_key_passwords_pair.second) {
+        if (password->signon_realm == signon_realm &&
+            password->username_value == new_username) {
+          DLOG(ERROR) << "A credential with the same signon_realm and username "
+                         "already exists.";
+          return;
+        }
+      }
+    }
+  }
+
+  PasswordStore* store = GetPasswordStore();
+  if (!store)
+    return;
+
+  // An updated username implies a change in the primary key, thus we need to
+  // make sure to call the right API. Update every entry in the equivalence
+  // class.
+  for (const auto& old_form : old_forms) {
+    autofill::PasswordForm new_form = *old_form;
+    new_form.username_value = new_username;
+    if (new_password)
+      new_form.password_value = *new_password;
+
+    username_changed ? store->UpdateLoginWithPrimaryKey(new_form, *old_form)
+                     : store->UpdateLogin(new_form);
+  }
+}
+
 bool PasswordManagerPresenter::TryRemovePasswordEntries(
     PasswordFormMap* form_map,
     size_t index) {
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter.h b/chrome/browser/ui/passwords/settings/password_manager_presenter.h
index 1e9045d..ae0136b 100644
--- a/chrome/browser/ui/passwords/settings/password_manager_presenter.h
+++ b/chrome/browser/ui/passwords/settings/password_manager_presenter.h
@@ -60,10 +60,14 @@
   // Gets the password exception entry at |index|.
   const autofill::PasswordForm* GetPasswordException(size_t index) const;
 
-  // Changes the username and password corresponding to |sort_key|.
+  // Changes the username and password at |index|, or corresponding to
+  // |sort_key|.
+  void ChangeSavedPassword(size_t index,
+                           const base::string16& new_username,
+                           const base::Optional<base::string16>& new_password);
   void ChangeSavedPassword(const std::string& sort_key,
-                           base::string16 new_username,
-                           base::Optional<base::string16> new_password);
+                           const base::string16& new_username,
+                           const base::Optional<base::string16>& new_password);
 
   // Removes the saved password entries at |index|, or corresponding to
   // |sort_key|, respectively.
@@ -110,6 +114,12 @@
       std::map<std::string,
                std::vector<std::unique_ptr<autofill::PasswordForm>>>;
 
+  // Implementation used in both |ChangeSavedPassword()| methods.
+  void ChangeSavedPasswords(
+      const std::vector<std::unique_ptr<autofill::PasswordForm>>& old_forms,
+      const base::string16& new_username,
+      const base::Optional<base::string16>& new_password);
+
   // Attempts to remove the entries corresponding to |index| from |form_map|.
   // This will also add a corresponding undo operation to |undo_manager_|.
   // Returns whether removing the entry succeeded.
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc b/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc
index 78810943..0a1bd7b5 100644
--- a/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc
+++ b/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc
@@ -31,6 +31,7 @@
 using testing::Each;
 using testing::ElementsAre;
 using testing::IsEmpty;
+using testing::Pair;
 using testing::SizeIs;
 
 namespace {
@@ -94,11 +95,12 @@
     store_->AddLogin(form);
   }
 
-  void ChangeSavedPassword(base::StringPiece origin,
-                           base::StringPiece old_username,
-                           base::StringPiece old_password,
-                           base::StringPiece new_username,
-                           base::Optional<base::StringPiece> new_password) {
+  void ChangeSavedPasswordBySortKey(
+      base::StringPiece origin,
+      base::StringPiece old_username,
+      base::StringPiece old_password,
+      base::StringPiece new_username,
+      base::Optional<base::StringPiece> new_password) {
     autofill::PasswordForm temp_form;
     temp_form.origin = GURL(origin);
     temp_form.signon_realm = temp_form.origin.GetOrigin().spec();
@@ -117,6 +119,40 @@
     thread_bundle_.RunUntilIdle();
   }
 
+  int GetPasswordIndex(base::StringPiece origin,
+                       base::StringPiece old_username,
+                       base::StringPiece old_password) {
+    std::vector<std::unique_ptr<autofill::PasswordForm>> password_forms =
+        mock_controller_.GetPasswordManagerPresenter()->GetAllPasswords();
+    return std::find_if(
+               password_forms.begin(), password_forms.end(),
+               [origin, old_username, old_password](const auto& password_form) {
+                 return password_form->signon_realm ==
+                            GURL(origin).GetOrigin().spec() &&
+                        password_form->username_value ==
+                            base::ASCIIToUTF16(old_username) &&
+                        password_form->password_value ==
+                            base::ASCIIToUTF16(old_password);
+               }) -
+           password_forms.begin();
+  }
+
+  void ChangeSavedPasswordByIndex(
+      base::StringPiece origin,
+      base::StringPiece old_username,
+      base::StringPiece old_password,
+      base::StringPiece new_username,
+      base::Optional<base::StringPiece> new_password) {
+    mock_controller_.GetPasswordManagerPresenter()->ChangeSavedPassword(
+        GetPasswordIndex(origin, old_username, old_password),
+        base::ASCIIToUTF16(new_username),
+        new_password ? base::make_optional(base::ASCIIToUTF16(*new_password))
+                     : base::nullopt);
+    // The password store posts mutation tasks to a background thread, thus we
+    // need to spin the message loop here.
+    thread_bundle_.RunUntilIdle();
+  }
+
   void UpdatePasswordLists() {
     mock_controller_.GetPasswordManagerPresenter()->UpdatePasswordLists();
     thread_bundle_.RunUntilIdle();
@@ -145,96 +181,211 @@
 
 namespace {
 
-TEST_F(PasswordManagerPresenterTest, ChangeSavedPassword_RejectEmptyPassword) {
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordBySortKey_RejectEmptyPassword) {
   AddPasswordEntry(GURL(kExampleCom), "user", "pass");
   EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
   EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
   UpdatePasswordLists();
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass")));
+              ElementsAre(Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
 
-  ChangeSavedPassword(kExampleCom, "user", "pass", "new_user", "");
+  ChangeSavedPasswordBySortKey(kExampleCom, "user", "pass", "new_user", "");
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass")));
-}
-
-TEST_F(PasswordManagerPresenterTest, ChangeSavedPassword_ChangeUsername) {
-  AddPasswordEntry(GURL(kExampleCom), "user", "pass");
-  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
-  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
-  UpdatePasswordLists();
-  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass")));
-
-  ChangeSavedPassword(kExampleCom, "user", "pass", "new_user", base::nullopt);
-  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("new_user", "pass")));
+              ElementsAre(Pair("user", "pass")));
 }
 
 TEST_F(PasswordManagerPresenterTest,
-       ChangeSavedPassword_ChangeUsernameAndPassword) {
+       ChangeSavedPasswordByIndex_RejectEmptyPassword) {
   AddPasswordEntry(GURL(kExampleCom), "user", "pass");
   EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
   EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
   UpdatePasswordLists();
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass")));
+              ElementsAre(Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
 
-  ChangeSavedPassword(kExampleCom, "user", "pass", "new_user", "new_pass");
+  ChangeSavedPasswordByIndex(kExampleCom, "user", "pass", "new_user", "");
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("new_user", "new_pass")));
+              ElementsAre(Pair("user", "pass")));
 }
 
 TEST_F(PasswordManagerPresenterTest,
-       ChangeSavedPassword_RejectSameUsernameForSameRealm) {
+       ChangeSavedPasswordBySortKey_ChangeUsername) {
+  AddPasswordEntry(GURL(kExampleCom), "user", "pass");
+  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
+  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
+  UpdatePasswordLists();
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
+
+  ChangeSavedPasswordBySortKey(kExampleCom, "user", "pass", "new_user",
+                               base::nullopt);
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("new_user", "pass")));
+}
+
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordByIndex_ChangeUsername) {
+  AddPasswordEntry(GURL(kExampleCom), "user", "pass");
+  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
+  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
+  UpdatePasswordLists();
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
+
+  ChangeSavedPasswordByIndex(kExampleCom, "user", "pass", "new_user",
+                             base::nullopt);
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("new_user", "pass")));
+}
+
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordBySortKey_ChangeUsernameAndPassword) {
+  AddPasswordEntry(GURL(kExampleCom), "user", "pass");
+  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
+  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
+  UpdatePasswordLists();
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
+
+  ChangeSavedPasswordBySortKey(kExampleCom, "user", "pass", "new_user",
+                               "new_pass");
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("new_user", "new_pass")));
+}
+
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordByIndex_ChangeUsernameAndPassword) {
+  AddPasswordEntry(GURL(kExampleCom), "user", "pass");
+  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
+  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
+  UpdatePasswordLists();
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
+
+  ChangeSavedPasswordByIndex(kExampleCom, "user", "pass", "new_user",
+                             "new_pass");
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("new_user", "new_pass")));
+}
+
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordBySortKey_RejectSameUsernameForSameRealm) {
   AddPasswordEntry(GURL(kExampleCom), "user", "pass");
   AddPasswordEntry(GURL(kExampleCom), "user2", "pass2");
   EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(2)));
   EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
   UpdatePasswordLists();
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass"),
-                          std::make_pair("user2", "pass2")));
+              ElementsAre(Pair("user", "pass"), Pair("user2", "pass2")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
 
-  ChangeSavedPassword(kExampleCom, "user", "pass", "user2", base::nullopt);
+  ChangeSavedPasswordBySortKey(kExampleCom, "user", "pass", "user2",
+                               base::nullopt);
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass"),
-                          std::make_pair("user2", "pass2")));
+              ElementsAre(Pair("user", "pass"), Pair("user2", "pass2")));
 }
 
 TEST_F(PasswordManagerPresenterTest,
-       ChangeSavedPassword_DontRejectSameUsernameForDifferentRealm) {
+       ChangeSavedPasswordByIndex_RejectSameUsernameForSameRealm) {
+  AddPasswordEntry(GURL(kExampleCom), "user", "pass");
+  AddPasswordEntry(GURL(kExampleCom), "user2", "pass2");
+  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(2)));
+  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
+  UpdatePasswordLists();
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user", "pass"), Pair("user2", "pass2")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
+
+  ChangeSavedPasswordByIndex(kExampleCom, "user", "pass", "user2",
+                             base::nullopt);
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user", "pass"), Pair("user2", "pass2")));
+}
+
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordBySortKey_DontRejectSameUsernameForDifferentRealm) {
   AddPasswordEntry(GURL(kExampleCom), "user", "pass");
   AddPasswordEntry(GURL(kExampleOrg), "user2", "pass2");
   EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(2)));
   EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
   UpdatePasswordLists();
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass")));
+              ElementsAre(Pair("user", "pass")));
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleOrg)),
-              ElementsAre(std::make_pair("user2", "pass2")));
+              ElementsAre(Pair("user2", "pass2")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
 
-  ChangeSavedPassword(kExampleCom, "user", "pass", "user2", base::nullopt);
+  ChangeSavedPasswordBySortKey(kExampleCom, "user", "pass", "user2",
+                               base::nullopt);
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user2", "pass")));
+              ElementsAre(Pair("user2", "pass")));
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleOrg)),
-              ElementsAre(std::make_pair("user2", "pass2")));
+              ElementsAre(Pair("user2", "pass2")));
 }
 
-TEST_F(PasswordManagerPresenterTest, ChangeSavedPassword_UpdateDuplicates) {
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordByIndex_DontRejectSameUsernameForDifferentRealm) {
+  AddPasswordEntry(GURL(kExampleCom), "user", "pass");
+  AddPasswordEntry(GURL(kExampleOrg), "user2", "pass2");
+  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(2)));
+  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
+  UpdatePasswordLists();
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user", "pass")));
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleOrg)),
+              ElementsAre(Pair("user2", "pass2")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
+
+  ChangeSavedPasswordByIndex(kExampleCom, "user", "pass", "user2",
+                             base::nullopt);
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+              ElementsAre(Pair("user2", "pass")));
+  EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleOrg)),
+              ElementsAre(Pair("user2", "pass2")));
+}
+
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordBySortKey_UpdateDuplicates) {
   AddPasswordEntry(GURL(std::string(kExampleCom) + "pathA"), "user", "pass");
   AddPasswordEntry(GURL(std::string(kExampleCom) + "pathB"), "user", "pass");
   EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
   EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
   UpdatePasswordLists();
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("user", "pass"),
-                          std::make_pair("user", "pass")));
+              ElementsAre(Pair("user", "pass"), Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
 
-  ChangeSavedPassword(kExampleCom, "user", "pass", "new_user", "new_pass");
+  ChangeSavedPasswordBySortKey(kExampleCom, "user", "pass", "new_user",
+                               "new_pass");
+  EXPECT_THAT(
+      GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+      ElementsAre(Pair("new_user", "new_pass"), Pair("new_user", "new_pass")));
+}
+
+TEST_F(PasswordManagerPresenterTest,
+       ChangeSavedPasswordByIndex_UpdateDuplicates) {
+  AddPasswordEntry(GURL(std::string(kExampleCom) + "pathA"), "user", "pass");
+  AddPasswordEntry(GURL(std::string(kExampleCom) + "pathB"), "user", "pass");
+
+  EXPECT_CALL(GetUIController(), SetPasswordList(SizeIs(1)));
+  EXPECT_CALL(GetUIController(), SetPasswordExceptionList(IsEmpty()));
+  UpdatePasswordLists();
   EXPECT_THAT(GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
-              ElementsAre(std::make_pair("new_user", "new_pass"),
-                          std::make_pair("new_user", "new_pass")));
+              ElementsAre(Pair("user", "pass"), Pair("user", "pass")));
+  testing::Mock::VerifyAndClearExpectations(&GetUIController());
+
+  ChangeSavedPasswordByIndex(kExampleCom, "user", "pass", "new_user",
+                             "new_pass");
+  EXPECT_THAT(
+      GetUsernamesAndPasswords(GetStoredPasswordsForRealm(kExampleCom)),
+      ElementsAre(Pair("new_user", "new_pass"), Pair("new_user", "new_pass")));
 }
 
 TEST_F(PasswordManagerPresenterTest, UIControllerIsCalled) {
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
index bb79d26d..427c878 100644
--- a/chrome/browser/ui/tab_helpers.cc
+++ b/chrome/browser/ui/tab_helpers.cc
@@ -35,6 +35,7 @@
 #include "chrome/browser/metrics/renderer_uptime_web_contents_observer.h"
 #include "chrome/browser/native_file_system/native_file_system_permission_request_manager.h"
 #include "chrome/browser/net/net_error_tab_helper.h"
+#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_initialize.h"
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/performance_manager/performance_manager.h"
@@ -230,6 +231,7 @@
   NativeFileSystemPermissionRequestManager::CreateForWebContents(web_contents);
   NavigationCorrectionTabObserver::CreateForWebContents(web_contents);
   NavigationMetricsRecorder::CreateForWebContents(web_contents);
+  OptimizationGuideWebContentsObserver::CreateForWebContents(web_contents);
   OutOfMemoryReporter::CreateForWebContents(web_contents);
   chrome::InitializePageLoadMetricsForWebContents(web_contents);
   PDFPluginPlaceholderObserver::CreateForWebContents(web_contents);
diff --git a/chrome/browser/ui/tabs/tab_activity_simulator.cc b/chrome/browser/ui/tabs/tab_activity_simulator.cc
index f952428..405a681 100644
--- a/chrome/browser/ui/tabs/tab_activity_simulator.cc
+++ b/chrome/browser/ui/tabs/tab_activity_simulator.cc
@@ -45,6 +45,7 @@
   std::unique_ptr<content::NavigationSimulator> navigation =
       content::NavigationSimulator::CreateBrowserInitiated(url, web_contents);
   navigation->SetTransition(page_transition);
+  navigation->SetKeepLoading(true);
   navigation->Commit();
 }
 
diff --git a/chrome/browser/ui/tabs/tab_strip_model.h b/chrome/browser/ui/tabs/tab_strip_model.h
index 6cdf572..f67ce57d 100644
--- a/chrome/browser/ui/tabs/tab_strip_model.h
+++ b/chrome/browser/ui/tabs/tab_strip_model.h
@@ -206,15 +206,7 @@
 
   // User gesture type that triggers ActivateTabAt. kNone indicates that it was
   // not triggered by a user gesture, but by a by-product of some other action.
-  enum class GestureType {
-    kMouse,
-    kTouch,
-    kWheel,
-    kKeyboard,
-    kOther,
-    kTabMenu,
-    kNone
-  };
+  enum class GestureType { kMouse, kTouch, kWheel, kKeyboard, kOther, kNone };
 
   // Encapsulates user gesture information for tab activation
   struct UserGestureDetails {
diff --git a/chrome/browser/ui/thumbnails/thumbnail_image.cc b/chrome/browser/ui/thumbnails/thumbnail_image.cc
index 5d68c1dc..35f3eeb 100644
--- a/chrome/browser/ui/thumbnails/thumbnail_image.cc
+++ b/chrome/browser/ui/thumbnails/thumbnail_image.cc
@@ -8,104 +8,107 @@
 
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
-#include "content/public/browser/browser_thread.h"
 #include "ui/gfx/codec/jpeg_codec.h"
 
-// Refcounted class that stores compressed JPEG data.
-class ThumbnailImage::ThumbnailData
-    : public base::RefCountedThreadSafe<ThumbnailData> {
- public:
-  static gfx::ImageSkia ToImageSkia(
-      scoped_refptr<ThumbnailData> representation) {
-    const auto& data = representation->data_;
-    gfx::ImageSkia result = gfx::ImageSkia::CreateFrom1xBitmap(
-        *gfx::JPEGCodec::Decode(data.data(), data.size()));
-    result.MakeThreadSafe();
-    return result;
-  }
+namespace {
 
-  static scoped_refptr<ThumbnailData> FromSkBitmap(SkBitmap bitmap) {
-    constexpr int kCompressionQuality = 97;
-    std::vector<uint8_t> data;
-    const bool result =
-        gfx::JPEGCodec::Encode(bitmap, kCompressionQuality, &data);
-    DCHECK(result);
-    return scoped_refptr<ThumbnailData>(new ThumbnailData(std::move(data)));
-  }
-
-  size_t size() const { return data_.size(); }
-
- private:
-  friend base::RefCountedThreadSafe<ThumbnailData>;
-
-  explicit ThumbnailData(std::vector<uint8_t>&& data)
-      : data_(std::move(data)) {}
-
-  ~ThumbnailData() = default;
-
-  std::vector<uint8_t> data_;
-
-  DISALLOW_COPY_AND_ASSIGN(ThumbnailData);
-};
-
-ThumbnailImage::ThumbnailImage() = default;
-ThumbnailImage::~ThumbnailImage() = default;
-ThumbnailImage::ThumbnailImage(const ThumbnailImage& other) = default;
-ThumbnailImage::ThumbnailImage(ThumbnailImage&& other) = default;
-ThumbnailImage& ThumbnailImage::operator=(const ThumbnailImage& other) =
-    default;
-ThumbnailImage& ThumbnailImage::operator=(ThumbnailImage&& other) = default;
-
-gfx::ImageSkia ThumbnailImage::AsImageSkia() const {
-  return ThumbnailData::ToImageSkia(image_representation_);
+std::vector<uint8_t> SkBitmapToJPEGData(SkBitmap bitmap) {
+  constexpr int kCompressionQuality = 97;
+  std::vector<uint8_t> data;
+  const bool result =
+      gfx::JPEGCodec::Encode(bitmap, kCompressionQuality, &data);
+  DCHECK(result);
+  return data;
 }
 
-bool ThumbnailImage::AsImageSkiaAsync(AsImageSkiaCallback callback) const {
-  if (!HasData())
-    return false;
-
-  base::PostTaskWithTraitsAndReplyWithResult(
-      FROM_HERE,
-      {base::TaskPriority::USER_VISIBLE,
-       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-      base::BindOnce(&ThumbnailData::ToImageSkia, image_representation_),
-      std::move(callback));
-  return true;
-}
-
-bool ThumbnailImage::HasData() const {
-  return static_cast<bool>(image_representation_);
-}
-
-size_t ThumbnailImage::GetStorageSize() const {
-  return image_representation_ ? image_representation_->size() : 0;
-}
-
-bool ThumbnailImage::BackedBySameObjectAs(const ThumbnailImage& other) const {
-  return image_representation_.get() == other.image_representation_.get();
-}
-
-// static
-ThumbnailImage ThumbnailImage::FromSkBitmap(SkBitmap bitmap) {
-  ThumbnailImage result;
-  result.image_representation_ = ThumbnailData::FromSkBitmap(bitmap);
+gfx::ImageSkia JPEGDataToImageSkia(
+    scoped_refptr<base::RefCountedData<std::vector<uint8_t>>> data) {
+  gfx::ImageSkia result = gfx::ImageSkia::CreateFrom1xBitmap(
+      *gfx::JPEGCodec::Decode(data->data.data(), data->data.size()));
+  result.MakeThreadSafe();
   return result;
 }
 
-// static
-void ThumbnailImage::FromSkBitmapAsync(SkBitmap bitmap,
-                                       CreateThumbnailCallback callback) {
+}  // namespace
+
+ThumbnailImage::Delegate::~Delegate() {
+  if (thumbnail_)
+    thumbnail_->delegate_ = nullptr;
+}
+
+ThumbnailImage::ThumbnailImage(Delegate* delegate) : delegate_(delegate) {
+  DETACH_FROM_SEQUENCE(sequence_checker_);
+  DCHECK(delegate_);
+  DCHECK(!delegate_->thumbnail_);
+  delegate_->thumbnail_ = this;
+}
+
+ThumbnailImage::~ThumbnailImage() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (delegate_)
+    delegate_->thumbnail_ = nullptr;
+}
+
+void ThumbnailImage::AddObserver(Observer* observer) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(observer);
+  if (!observers_.HasObserver(observer)) {
+    const bool is_first_observer = !observers_.might_have_observers();
+    observers_.AddObserver(observer);
+    if (is_first_observer && delegate_)
+      delegate_->ThumbnailImageBeingObservedChanged(true);
+  }
+}
+
+void ThumbnailImage::RemoveObserver(Observer* observer) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(observer);
+  if (observers_.HasObserver(observer)) {
+    observers_.RemoveObserver(observer);
+    if (delegate_ && !observers_.might_have_observers())
+      delegate_->ThumbnailImageBeingObservedChanged(false);
+  }
+}
+
+bool ThumbnailImage::HasObserver(const Observer* observer) const {
+  return observers_.HasObserver(observer);
+}
+
+void ThumbnailImage::AssignSkBitmap(SkBitmap bitmap) {
   base::PostTaskWithTraitsAndReplyWithResult(
       FROM_HERE,
       {base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-      base::BindOnce(&ThumbnailData::FromSkBitmap, bitmap),
-      base::BindOnce(
-          [](CreateThumbnailCallback callback,
-             scoped_refptr<ThumbnailData> representation) {
-            ThumbnailImage result;
-            result.image_representation_ = representation;
-            std::move(callback).Run(result);
-          },
-          std::move(callback)));
+      base::BindOnce(&SkBitmapToJPEGData, std::move(bitmap)),
+      base::BindOnce(&ThumbnailImage::AssignJPEGData,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void ThumbnailImage::RequestThumbnailImage() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  ConvertJPEGDataToImageSkiaAndNotifyObservers();
+}
+
+void ThumbnailImage::AssignJPEGData(std::vector<uint8_t> data) {
+  data_ = base::MakeRefCounted<base::RefCountedData<std::vector<uint8_t>>>(
+      std::move(data));
+  ConvertJPEGDataToImageSkiaAndNotifyObservers();
+}
+
+bool ThumbnailImage::ConvertJPEGDataToImageSkiaAndNotifyObservers() {
+  if (!data_)
+    return false;
+  return base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE,
+      {base::TaskPriority::USER_VISIBLE,
+       base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
+      base::BindOnce(&JPEGDataToImageSkia, data_),
+      base::BindOnce(&ThumbnailImage::NotifyObservers,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+void ThumbnailImage::NotifyObservers(gfx::ImageSkia image) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  for (auto& observer : observers_)
+    observer.OnThumbnailImageAvailable(image);
 }
diff --git a/chrome/browser/ui/thumbnails/thumbnail_image.h b/chrome/browser/ui/thumbnails/thumbnail_image.h
index a959728..ad584419 100644
--- a/chrome/browser/ui/thumbnails/thumbnail_image.h
+++ b/chrome/browser/ui/thumbnails/thumbnail_image.h
@@ -9,64 +9,73 @@
 
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "base/sequence_checker.h"
 #include "ui/gfx/image/image_skia.h"
 
-// Value type holding thumbnail image data. Data is internally refcounted, so
-// copying this object is inexpensive.
-//
-// Internally, data is stored as a ThumbnailRepresentation, which is optionally
-// compressed and not directly renderable, so that holding a thumbnail from each
-// tab in memory isn't prohibitively expensive. Because of this, and because
-// converting from the uncompressed to the compressed format may be expensive,
-// asynchronous methods for converting to and from ThumbnailImage are provided.
-class ThumbnailImage {
+// Stores compressed thumbnail data for a tab and can vend that data as an
+// uncompressed image to observers.
+class ThumbnailImage : public base::RefCounted<ThumbnailImage> {
  public:
-  // Callback used by AsImageSkiaAsync. The parameter is the retrieved image.
-  using AsImageSkiaCallback = base::OnceCallback<void(gfx::ImageSkia)>;
+  // Observes uncompressed versions of the thumbnail image as they are
+  // available.
+  class Observer : public base::CheckedObserver {
+   public:
+    virtual void OnThumbnailImageAvailable(gfx::ImageSkia thumbnail_image) = 0;
+  };
 
-  // Callback used by FromSkBitmapAsync. The parameter is the created thumbnail.
-  using CreateThumbnailCallback = base::OnceCallback<void(ThumbnailImage)>;
+  // Represents the endpoint
+  class Delegate {
+   public:
+    // Called whenever the thumbnail starts or stops being observed.
+    // Because updating the thumbnail could be an expensive operation, it's
+    // useful to track when there are no observers. Default behavior is no-op.
+    virtual void ThumbnailImageBeingObservedChanged(bool is_being_observed) = 0;
 
-  ThumbnailImage();
-  ~ThumbnailImage();
-  ThumbnailImage(const ThumbnailImage& other);
-  ThumbnailImage(ThumbnailImage&& other);
-  ThumbnailImage& operator=(const ThumbnailImage& other);
-  ThumbnailImage& operator=(ThumbnailImage&& other);
+   protected:
+    virtual ~Delegate();
 
-  // Retrieves the thumbnail data as a renderable image. May involve image
-  // decoding, so could be expensive. Prefer AsImageSkiaAsync() instead.
-  gfx::ImageSkia AsImageSkia() const;
+   private:
+    friend class ThumbnailImage;
+    ThumbnailImage* thumbnail_ = nullptr;
+  };
 
-  // Retrieves the thumbnail data as a renderable image. May involve image
-  // decoding on a background thread. Callback is called when the operation
-  // completes. Returns false if there is no thumbnail data.
-  bool AsImageSkiaAsync(AsImageSkiaCallback callback) const;
+  explicit ThumbnailImage(Delegate* delegate);
 
-  // Returns whether there is data stored in the thumbnail.
-  bool HasData() const;
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+  bool HasObserver(const Observer* observer) const;
 
-  // Returns the size (in bytes) required to store the internal representation.
-  size_t GetStorageSize() const;
+  // Sets the SkBitmap data and notifies observers with the resulting image.
+  void AssignSkBitmap(SkBitmap bitmap);
 
-  // Does an address comparison on the refcounted backing store of this object.
-  // May return false even if the backing stores contain equivalent image data.
-  bool BackedBySameObjectAs(const ThumbnailImage& other) const;
-
-  // Encodes thumbnail data as ThumbnailRepresentation. May involve an expensive
-  // operation. Prefer FromSkBitmapAsync() instead.
-  static ThumbnailImage FromSkBitmap(SkBitmap bitmap);
-
-  // Converts the bitmap data to the internal ThumbnailRepresentation. May
-  // involve image encoding or compression on a background thread. Callback is
-  // called when the operation completes.
-  static void FromSkBitmapAsync(SkBitmap bitmap,
-                                CreateThumbnailCallback callback);
+  // Requests that a thumbnail image be made available to observers. Does not
+  // guarantee that Observer::OnThumbnailImageAvailable() will be called, or how
+  // long it will take, though in most cases it should happen very quickly.
+  virtual void RequestThumbnailImage();
 
  private:
-  class ThumbnailData;
+  friend class Delegate;
+  friend class base::RefCounted<ThumbnailImage>;
 
-  scoped_refptr<ThumbnailData> image_representation_;
+  virtual ~ThumbnailImage();
+
+  void AssignJPEGData(std::vector<uint8_t> data);
+  bool ConvertJPEGDataToImageSkiaAndNotifyObservers();
+  void NotifyObservers(gfx::ImageSkia image);
+
+  Delegate* delegate_;
+
+  scoped_refptr<base::RefCountedData<std::vector<uint8_t>>> data_;
+
+  base::ObserverList<Observer> observers_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+
+  base::WeakPtrFactory<ThumbnailImage> weak_ptr_factory_{this};
+
+  DISALLOW_COPY_AND_ASSIGN(ThumbnailImage);
 };
 
 #endif  // CHROME_BROWSER_UI_THUMBNAILS_THUMBNAIL_IMAGE_H_
diff --git a/chrome/browser/ui/thumbnails/thumbnail_image_unittest.cc b/chrome/browser/ui/thumbnails/thumbnail_image_unittest.cc
index e445592..b74ee32e 100644
--- a/chrome/browser/ui/thumbnails/thumbnail_image_unittest.cc
+++ b/chrome/browser/ui/thumbnails/thumbnail_image_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
+#include "base/scoped_observer.h"
 #include "base/test/scoped_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/image/image_skia.h"
@@ -16,9 +17,54 @@
 namespace {
 constexpr int kTestBitmapWidth = 200;
 constexpr int kTestBitmapHeight = 123;
+
+// Waits for thumbnail images and can report how many images it has received.
+class TestThumbnailImageObserver : public ThumbnailImage::Observer {
+ public:
+  void WaitForImage() {
+    if (new_image_count_ > last_image_count_) {
+      last_image_count_ = new_image_count_;
+      return;
+    }
+
+    // Need a fresh loop since we may have quit out of the last one.
+    run_loop_ = std::make_unique<base::RunLoop>();
+    waiting_ = true;
+    run_loop_->Run();
+  }
+
+  int new_image_count() const { return new_image_count_; }
+  gfx::ImageSkia thumbnail_image() const { return thumbnail_image_; }
+
+  ScopedObserver<ThumbnailImage, ThumbnailImage::Observer>* scoped_observer() {
+    return &scoped_observer_;
+  }
+
+ private:
+  // ThumbnailImage::Observer:
+  void OnThumbnailImageAvailable(gfx::ImageSkia thumbnail_image) override {
+    ++new_image_count_;
+    thumbnail_image_ = thumbnail_image;
+    if (waiting_) {
+      last_image_count_ = new_image_count_;
+      run_loop_->Quit();
+      waiting_ = false;
+    }
+  }
+
+  ScopedObserver<ThumbnailImage, ThumbnailImage::Observer> scoped_observer_{
+      this};
+  int new_image_count_ = 0;
+  int last_image_count_ = 0;
+  gfx::ImageSkia thumbnail_image_;
+  bool waiting_ = false;
+  std::unique_ptr<base::RunLoop> run_loop_;
+};
+
 }  // namespace
 
-class ThumbnailImageTest : public testing::Test {
+class ThumbnailImageTest : public testing::Test,
+                           public ThumbnailImage::Delegate {
  public:
   ThumbnailImageTest() = default;
 
@@ -30,72 +76,108 @@
     return bitmap;
   }
 
+  bool is_being_observed() const { return is_being_observed_; }
+
  private:
+  void ThumbnailImageBeingObservedChanged(bool is_being_observed) override {
+    is_being_observed_ = is_being_observed;
+  }
+
+  bool is_being_observed_ = false;
   base::test::ScopedTaskEnvironment scoped_task_environment_;
   DISALLOW_COPY_AND_ASSIGN(ThumbnailImageTest);
 };
 
-TEST_F(ThumbnailImageTest, FromSkBitmap) {
-  SkBitmap bitmap = CreateBitmap(kTestBitmapWidth, kTestBitmapHeight);
-  ThumbnailImage image = ThumbnailImage::FromSkBitmap(bitmap);
-  EXPECT_TRUE(image.HasData());
-  EXPECT_GE(image.GetStorageSize(), 0U);
-  EXPECT_LE(image.GetStorageSize(), bitmap.computeByteSize());
-  gfx::ImageSkia image_skia = image.AsImageSkia();
-  EXPECT_EQ(gfx::Size(kTestBitmapWidth, kTestBitmapHeight), image_skia.size());
+TEST_F(ThumbnailImageTest, Add_Remove_Observer) {
+  auto image = base::MakeRefCounted<ThumbnailImage>(this);
+  EXPECT_FALSE(is_being_observed());
+  TestThumbnailImageObserver observer;
+  image->AddObserver(&observer);
+  EXPECT_TRUE(image->HasObserver(&observer));
+  EXPECT_TRUE(is_being_observed());
+  image->RemoveObserver(&observer);
+  EXPECT_FALSE(image->HasObserver(&observer));
+  EXPECT_FALSE(is_being_observed());
 }
 
-TEST_F(ThumbnailImageTest, FromSkBitmapAsync) {
-  SkBitmap bitmap = CreateBitmap(kTestBitmapWidth, kTestBitmapHeight);
-  ThumbnailImage image;
-
-  base::RunLoop run_loop;
-  ThumbnailImage::FromSkBitmapAsync(
-      bitmap, base::BindOnce(
-                  [](base::OnceClosure end_closure, ThumbnailImage* dest_image,
-                     ThumbnailImage source_image) {
-                    *dest_image = source_image;
-                    std::move(end_closure).Run();
-                  },
-                  run_loop.QuitClosure(), base::Unretained(&image)));
-  run_loop.Run();
-
-  EXPECT_TRUE(image.HasData());
-  EXPECT_GE(image.GetStorageSize(), 0U);
-  EXPECT_LE(image.GetStorageSize(), bitmap.computeByteSize());
-  gfx::ImageSkia image_skia = image.AsImageSkia();
-  EXPECT_EQ(gfx::Size(kTestBitmapWidth, kTestBitmapHeight), image_skia.size());
+TEST_F(ThumbnailImageTest, Add_Remove_MultipleObservers) {
+  auto image = base::MakeRefCounted<ThumbnailImage>(this);
+  EXPECT_FALSE(is_being_observed());
+  TestThumbnailImageObserver observer;
+  TestThumbnailImageObserver observer2;
+  image->AddObserver(&observer);
+  EXPECT_TRUE(image->HasObserver(&observer));
+  EXPECT_TRUE(is_being_observed());
+  image->AddObserver(&observer2);
+  EXPECT_TRUE(image->HasObserver(&observer2));
+  EXPECT_TRUE(is_being_observed());
+  image->RemoveObserver(&observer);
+  EXPECT_FALSE(image->HasObserver(&observer));
+  EXPECT_TRUE(image->HasObserver(&observer2));
+  EXPECT_TRUE(is_being_observed());
+  image->RemoveObserver(&observer2);
+  EXPECT_FALSE(image->HasObserver(&observer2));
+  EXPECT_FALSE(is_being_observed());
 }
 
-TEST_F(ThumbnailImageTest, AsImageSkia) {
-  SkBitmap bitmap = CreateBitmap(kTestBitmapWidth, kTestBitmapHeight);
-  ThumbnailImage image = ThumbnailImage::FromSkBitmap(bitmap);
-  EXPECT_TRUE(image.HasData());
+TEST_F(ThumbnailImageTest, AssignSkBitmap_NotifiesObservers) {
+  auto image = base::MakeRefCounted<ThumbnailImage>(this);
+  TestThumbnailImageObserver observer;
+  TestThumbnailImageObserver observer2;
+  observer.scoped_observer()->Add(image.get());
+  observer2.scoped_observer()->Add(image.get());
 
-  gfx::ImageSkia image_skia = image.AsImageSkia();
-  EXPECT_TRUE(image_skia.IsThreadSafe());
-  EXPECT_FALSE(image_skia.isNull());
-  EXPECT_EQ(gfx::Size(kTestBitmapWidth, kTestBitmapHeight), image_skia.size());
+  SkBitmap bitmap = CreateBitmap(kTestBitmapWidth, kTestBitmapHeight);
+  image->AssignSkBitmap(bitmap);
+  observer.WaitForImage();
+  observer2.WaitForImage();
+  EXPECT_EQ(1, observer.new_image_count());
+  EXPECT_EQ(1, observer2.new_image_count());
+  EXPECT_FALSE(observer.thumbnail_image().isNull());
+  EXPECT_FALSE(observer2.thumbnail_image().isNull());
+  EXPECT_EQ(gfx::Size(kTestBitmapWidth, kTestBitmapHeight),
+            observer.thumbnail_image().size());
 }
 
-TEST_F(ThumbnailImageTest, AsImageSkiaAsync) {
+TEST_F(ThumbnailImageTest, AssignSkBitmap_NotifiesObserversAgain) {
+  auto image = base::MakeRefCounted<ThumbnailImage>(this);
+  TestThumbnailImageObserver observer;
+  TestThumbnailImageObserver observer2;
+  observer.scoped_observer()->Add(image.get());
+  observer2.scoped_observer()->Add(image.get());
+
   SkBitmap bitmap = CreateBitmap(kTestBitmapWidth, kTestBitmapHeight);
-  ThumbnailImage image = ThumbnailImage::FromSkBitmap(bitmap);
-  EXPECT_TRUE(image.HasData());
+  image->AssignSkBitmap(bitmap);
+  observer.WaitForImage();
+  observer2.WaitForImage();
+  image->AssignSkBitmap(bitmap);
+  observer.WaitForImage();
+  observer2.WaitForImage();
+  EXPECT_EQ(2, observer.new_image_count());
+  EXPECT_EQ(2, observer2.new_image_count());
+  EXPECT_FALSE(observer.thumbnail_image().isNull());
+  EXPECT_FALSE(observer2.thumbnail_image().isNull());
+  EXPECT_EQ(gfx::Size(kTestBitmapWidth, kTestBitmapHeight),
+            observer.thumbnail_image().size());
+}
 
-  base::RunLoop run_loop;
-  gfx::ImageSkia image_skia;
-  const bool can_convert = image.AsImageSkiaAsync(base::BindOnce(
-      [](base::OnceClosure end_closure, gfx::ImageSkia* dest_image,
-         gfx::ImageSkia source_image) {
-        *dest_image = source_image;
-        std::move(end_closure).Run();
-      },
-      run_loop.QuitClosure(), base::Unretained(&image_skia)));
-  ASSERT_TRUE(can_convert);
-  run_loop.Run();
+TEST_F(ThumbnailImageTest, RequestThumbnailImage) {
+  auto image = base::MakeRefCounted<ThumbnailImage>(this);
+  TestThumbnailImageObserver observer;
+  observer.scoped_observer()->Add(image.get());
 
-  EXPECT_TRUE(image_skia.IsThreadSafe());
-  EXPECT_FALSE(image_skia.isNull());
-  EXPECT_EQ(gfx::Size(kTestBitmapWidth, kTestBitmapHeight), image_skia.size());
+  SkBitmap bitmap = CreateBitmap(kTestBitmapWidth, kTestBitmapHeight);
+  image->AssignSkBitmap(bitmap);
+  observer.WaitForImage();
+
+  TestThumbnailImageObserver observer2;
+  observer2.scoped_observer()->Add(image.get());
+  image->RequestThumbnailImage();
+  observer.WaitForImage();
+  observer2.WaitForImage();
+  EXPECT_EQ(2, observer.new_image_count());
+  EXPECT_EQ(1, observer2.new_image_count());
+  EXPECT_FALSE(observer2.thumbnail_image().isNull());
+  EXPECT_EQ(gfx::Size(kTestBitmapWidth, kTestBitmapHeight),
+            observer2.thumbnail_image().size());
 }
diff --git a/chrome/browser/ui/thumbnails/thumbnail_tab_helper.cc b/chrome/browser/ui/thumbnails/thumbnail_tab_helper.cc
index 56651764..c3ef019 100644
--- a/chrome/browser/ui/thumbnails/thumbnail_tab_helper.cc
+++ b/chrome/browser/ui/thumbnails/thumbnail_tab_helper.cc
@@ -5,110 +5,62 @@
 #include "chrome/browser/ui/thumbnails/thumbnail_tab_helper.h"
 
 #include <algorithm>
+#include <utility>
 
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/resource_coordinator/tab_load_tracker.h"
 #include "chrome/browser/ui/tabs/tab_style.h"
 #include "chrome/browser/ui/thumbnails/thumbnail_utils.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
+#include "media/capture/mojom/video_capture_types.mojom.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/scrollbar_size.h"
-
-namespace {
-
-// Determine if two URLs are similar enough that we should not blank the preview
-// image when transitioning between them. This prevents webapps which do all of
-// their work through internal page transitions (and which can transition after
-// the page is loaded) from blanking randomly.
-bool AreSimilarURLs(const GURL& url1, const GURL& url2) {
-  const GURL origin1 = url1.GetOrigin();
-
-  // For non-standard URLs, compare using normal logic.
-  if (origin1.is_empty())
-    return url1.EqualsIgnoringRef(url2);
-
-  // TODO(dfried): make this logic a little smarter; maybe compare the first
-  // element of the path as well?
-  return origin1 == url2.GetOrigin();
-}
-
-}  // namespace
+#include "ui/gfx/skia_util.h"
 
 ThumbnailTabHelper::ThumbnailTabHelper(content::WebContents* contents)
-    : view_is_visible_(contents->GetVisibility() ==
-                       content::Visibility::VISIBLE),
-      adapter_(contents),
-      scoped_observer_(this) {
-  scoped_observer_.Add(&adapter_);
+    : content::WebContentsObserver(contents),
+      last_visibility_(web_contents()->GetVisibility()) {}
+
+ThumbnailTabHelper::~ThumbnailTabHelper() {
+  DCHECK(!video_capturer_);
 }
 
-ThumbnailTabHelper::~ThumbnailTabHelper() = default;
-
-void ThumbnailTabHelper::TopLevelNavigationStarted(const GURL& url) {
-  TransitionLoadingState(LoadingState::kNavigationStarted, url);
-}
-
-void ThumbnailTabHelper::TopLevelNavigationEnded(const GURL& url) {
-  TransitionLoadingState(LoadingState::kNavigationFinished, url);
-}
-
-void ThumbnailTabHelper::PageLoadStarted() {
-  TransitionLoadingState(LoadingState::kLoadStarted,
-                         web_contents()->GetVisibleURL());
-}
-
-void ThumbnailTabHelper::PagePainted() {
-  page_painted_ = true;
-}
-
-void ThumbnailTabHelper::PageLoadFinished() {
-  TransitionLoadingState(LoadingState::kLoadFinished,
-                         web_contents()->GetVisibleURL());
-}
-
-void ThumbnailTabHelper::VisibilityChanged(bool visible) {
-  // When the user switches away from a tab, we want to take a snapshot to
-  // capture e.g. its scroll position, so that the preview will look like the
-  // tab did when the user last visited it.
-  const bool was_visible = view_is_visible_;
-  view_is_visible_ = visible;
-  if (was_visible && !visible) {
-    StartThumbnailCapture();
+void ThumbnailTabHelper::ThumbnailImageBeingObservedChanged(
+    bool is_being_observed) {
+  if (is_being_observed) {
+    if (!captured_loaded_thumbnail_since_tab_hidden_)
+      StartVideoCapture();
+  } else {
+    StopVideoCapture();
   }
 }
 
-void ThumbnailTabHelper::StartThumbnailCapture() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
-  // Pages that are unloading do not need to be captured.
-  if (adapter_.is_unloading())
-    return;
-
-  // Don't capture if in the process of navigating or haven't started yet.
-  if (loading_state_ == LoadingState::kNone ||
-      loading_state_ == LoadingState::kNavigationStarted) {
-    return;
+bool ThumbnailTabHelper::ShouldKeepUpdatingThumbnail() const {
+  auto* tab_load_tracker = resource_coordinator::TabLoadTracker::Get();
+  if (tab_load_tracker &&
+      tab_load_tracker->GetLoadingState(web_contents()) !=
+          resource_coordinator::TabLoadTracker::LoadingState::LOADED) {
+    return true;
   }
 
-  // Don't capture if there is no current page.
-  if (web_contents()->GetVisibleURL().is_empty())
-    return;
+  return false;
+}
 
-  // Don't capture pages that have not been loading and visible long enough to
-  // actually paint.
-  if (!page_painted_)
-    return;
+void ThumbnailTabHelper::CaptureThumbnailOnTabSwitch() {
+  // Ignore previous requests to capture a thumbnail on tab switch.
+  weak_factory_for_thumbnail_on_tab_hidden_.InvalidateWeakPtrs();
 
-  content::RenderWidgetHostView* const source_view =
-      web_contents()->GetRenderViewHost()->GetWidget()->GetView();
-
-  // If there's no view or the view isn't available right now, don't bother.
-  if (!source_view || !source_view->IsSurfaceAvailableForCopy())
+  // Get the WebContents' main view. Note that during shutdown there may not be
+  // a view to capture.
+  content::RenderWidgetHostView* const source_view = GetView();
+  if (!source_view)
     return;
 
   // Note: this is the size in pixels on-screen, not the size in DIPs.
@@ -127,83 +79,153 @@
       thumbnails::GetCanvasCopyInfo(source_size, scale_factor, desired_size);
   source_view->CopyFromSurface(
       copy_info.copy_rect, copy_info.target_size,
-      base::BindOnce(&ThumbnailTabHelper::ProcessCapturedThumbnail,
-                     weak_factory_.GetWeakPtr(), base::TimeTicks::Now()));
+      base::BindOnce(&ThumbnailTabHelper::StoreThumbnail,
+                     weak_factory_for_thumbnail_on_tab_hidden_.GetWeakPtr()));
 }
 
-void ThumbnailTabHelper::ProcessCapturedThumbnail(
-    base::TimeTicks start_time,
-    const SkBitmap& bitmap) {
+void ThumbnailTabHelper::StoreThumbnail(const SkBitmap& bitmap) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  const base::TimeTicks finish_time = base::TimeTicks::Now();
-  const base::TimeDelta copy_from_surface_time = finish_time - start_time;
-  UMA_HISTOGRAM_TIMES("Thumbnails.CopyFromSurfaceTime", copy_from_surface_time);
-
   if (bitmap.drawsNothing())
     return;
 
-  // TODO(dfried): Log capture succeeded.
-  ThumbnailImage::FromSkBitmapAsync(
-      bitmap, base::BindOnce(&ThumbnailTabHelper::StoreThumbnail,
-                             weak_factory_.GetWeakPtr(), finish_time));
-}
+  thumbnail_->AssignSkBitmap(bitmap);
 
-void ThumbnailTabHelper::StoreThumbnail(base::TimeTicks start_time,
-                                        ThumbnailImage thumbnail) {
-  DCHECK(thumbnail.HasData());
-  const base::TimeTicks finish_time = base::TimeTicks::Now();
-  const base::TimeDelta process_time = finish_time - start_time;
-  UMA_HISTOGRAM_TIMES("Thumbnails.ProcessBitmapTime", process_time);
-  thumbnail_ = thumbnail;
-
-  NotifyTabPreviewChanged();
-}
-
-void ThumbnailTabHelper::NotifyTabPreviewChanged() {
-  web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TAB);
-}
-
-void ThumbnailTabHelper::TransitionLoadingState(LoadingState state,
-                                                const GURL& url) {
-  // Because the loading process is unpredictable, and because there are a large
-  // number of events which could be interpreted as navigation of the main frame
-  // or loading, only move the loading progress forward.
-  const bool is_similar_url = AreSimilarURLs(url, current_url_);
-  switch (state) {
-    case LoadingState::kNavigationStarted:
-    case LoadingState::kNavigationFinished:
-      if (!is_similar_url) {
-        current_url_ = url;
-        ClearThumbnail();
-        page_painted_ = false;
-        loading_state_ = state;
-      } else {
-        loading_state_ = std::max(loading_state_, state);
-      }
-      break;
-    case LoadingState::kLoadStarted:
-    case LoadingState::kLoadFinished:
-      if (!is_similar_url &&
-          (loading_state_ == LoadingState::kNavigationStarted ||
-           loading_state_ == LoadingState::kNavigationFinished)) {
-        // This probably refers to an old page, so ignore it.
-        return;
-      }
-      current_url_ = url;
-      loading_state_ = std::max(loading_state_, state);
-      break;
-    case LoadingState::kNone:
-      NOTREACHED();
-      break;
+  // Remember that a thumbnail was captured while the tab was loaded.
+  auto* tab_load_tracker = resource_coordinator::TabLoadTracker::Get();
+  if (tab_load_tracker &&
+      tab_load_tracker->GetLoadingState(web_contents()) ==
+          resource_coordinator::TabLoadTracker::LoadingState::LOADED) {
+    captured_loaded_thumbnail_since_tab_hidden_ = true;
   }
 }
 
-void ThumbnailTabHelper::ClearThumbnail() {
-  if (!thumbnail_.HasData())
+void ThumbnailTabHelper::StartVideoCapture() {
+  if (video_capturer_) {
+    // Already capturing: We're already forcing rendering. Clear the capturer.
+    video_capturer_->Stop();
+    video_capturer_ = nullptr;
+  } else {
+    // *Not* already capturing: Force rendering.
+    web_contents()->IncrementCapturerCount(TabStyle::GetPreviewImageSize());
+  }
+
+  // Get the WebContents' main view.
+  content::RenderWidgetHostView* const source_view = GetView();
+  if (!source_view) {
+    web_contents()->DecrementCapturerCount();
     return;
-  thumbnail_ = ThumbnailImage();
-  NotifyTabPreviewChanged();
+  }
+
+  // Start capturing.
+  const gfx::Size desired_size = TabStyle::GetPreviewImageSize();
+  constexpr int kMaxFrameRate = 5;
+  video_capturer_ = source_view->CreateVideoCapturer();
+  video_capturer_->SetResolutionConstraints(desired_size, desired_size, true);
+  video_capturer_->SetAutoThrottlingEnabled(false);
+  video_capturer_->SetMinSizeChangePeriod(base::TimeDelta());
+  video_capturer_->SetFormat(media::PIXEL_FORMAT_ARGB,
+                             gfx::ColorSpace::CreateREC709());
+  video_capturer_->SetMinCapturePeriod(base::TimeDelta::FromSeconds(1) /
+                                       kMaxFrameRate);
+  video_capturer_->Start(this);
 }
 
+void ThumbnailTabHelper::StopVideoCapture() {
+  if (video_capturer_) {
+    web_contents()->DecrementCapturerCount();
+    video_capturer_->Stop();
+    video_capturer_ = nullptr;
+  }
+}
+
+content::RenderWidgetHostView* ThumbnailTabHelper::GetView() {
+  return web_contents()->GetRenderViewHost()->GetWidget()->GetView();
+}
+
+void ThumbnailTabHelper::OnVisibilityChanged(content::Visibility visibility) {
+  if (last_visibility_ == content::Visibility::VISIBLE &&
+      visibility != content::Visibility::VISIBLE) {
+    captured_loaded_thumbnail_since_tab_hidden_ = false;
+    CaptureThumbnailOnTabSwitch();
+  }
+  last_visibility_ = visibility;
+}
+
+void ThumbnailTabHelper::DidFinishNavigation(
+    content::NavigationHandle* navigation_handle) {
+  if (navigation_handle->IsInMainFrame() && navigation_handle->HasCommitted())
+    captured_loaded_thumbnail_since_tab_hidden_ = false;
+}
+
+void ThumbnailTabHelper::OnFrameCaptured(
+    base::ReadOnlySharedMemoryRegion data,
+    ::media::mojom::VideoFrameInfoPtr info,
+    const gfx::Rect& content_rect,
+    ::viz::mojom::FrameSinkVideoConsumerFrameCallbacksPtr callbacks) {
+  CHECK(video_capturer_);
+
+  if (!ShouldKeepUpdatingThumbnail())
+    StopVideoCapture();
+
+  // Process captured image.
+  if (!data.IsValid()) {
+    callbacks->Done();
+    return;
+  }
+  base::ReadOnlySharedMemoryMapping mapping = data.Map();
+  if (!mapping.IsValid()) {
+    DLOG(ERROR) << "Shared memory mapping failed.";
+    return;
+  }
+  if (mapping.size() <
+      media::VideoFrame::AllocationSize(info->pixel_format, info->coded_size)) {
+    DLOG(ERROR) << "Shared memory size was less than expected.";
+    return;
+  }
+  if (!info->color_space) {
+    DLOG(ERROR) << "Missing mandatory color space info.";
+    return;
+  }
+
+  // The SkBitmap's pixels will be marked as immutable, but the installPixels()
+  // API requires a non-const pointer. So, cast away the const.
+  void* const pixels = const_cast<void*>(mapping.memory());
+
+  // Call installPixels() with a |releaseProc| that: 1) notifies the capturer
+  // that this consumer has finished with the frame, and 2) releases the shared
+  // memory mapping.
+  struct FramePinner {
+    // Keeps the shared memory that backs |frame_| mapped.
+    base::ReadOnlySharedMemoryMapping mapping;
+    // Prevents FrameSinkVideoCapturer from recycling the shared memory that
+    // backs |frame_|.
+    viz::mojom::FrameSinkVideoConsumerFrameCallbacksPtr releaser;
+  };
+
+  const gfx::Size desired_size = TabStyle::GetPreviewImageSize();
+  LOG(ERROR) << desired_size.ToString();
+
+  SkBitmap frame;
+  frame.installPixels(
+      SkImageInfo::MakeN32(content_rect.width(), content_rect.height(),
+                           kPremul_SkAlphaType,
+                           info->color_space->ToSkColorSpace()),
+      pixels,
+      media::VideoFrame::RowBytes(media::VideoFrame::kARGBPlane,
+                                  info->pixel_format, info->coded_size.width()),
+      [](void* addr, void* context) {
+        delete static_cast<FramePinner*>(context);
+      },
+      new FramePinner{std::move(mapping), std::move(callbacks)});
+  frame.setImmutable();
+
+  SkBitmap cropped_frame;
+  frame.extractSubset(&cropped_frame, gfx::RectToSkIRect(content_rect));
+
+  StoreThumbnail(cropped_frame);
+}
+
+void ThumbnailTabHelper::OnStopped() {}
+
 WEB_CONTENTS_USER_DATA_KEY_IMPL(ThumbnailTabHelper)
diff --git a/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h b/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h
index d55098d..3e87823 100644
--- a/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h
+++ b/chrome/browser/ui/thumbnails/thumbnail_tab_helper.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_BROWSER_UI_THUMBNAILS_THUMBNAIL_TAB_HELPER_H_
 #define CHROME_BROWSER_UI_THUMBNAILS_THUMBNAIL_TAB_HELPER_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observer.h"
@@ -12,70 +14,72 @@
 #include "chrome/browser/ui/thumbnails/thumbnail_image.h"
 #include "chrome/browser/ui/thumbnails/thumbnail_page_event_adapter.h"
 #include "chrome/browser/ui/thumbnails/thumbnail_page_observer.h"
+#include "components/viz/host/client_frame_sink_video_capturer.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
 class ThumbnailTabHelper
-    : public thumbnails::ThumbnailPageObserver,
-      public content::WebContentsUserData<ThumbnailTabHelper> {
+    : public content::WebContentsUserData<ThumbnailTabHelper>,
+      public content::WebContentsObserver,
+      public viz::mojom::FrameSinkVideoConsumer,
+      public ThumbnailImage::Delegate {
  public:
   ~ThumbnailTabHelper() override;
 
-  ThumbnailImage thumbnail() const { return thumbnail_; }
-
- protected:
-  // ThumbnailWebContentsObserver:
-  void TopLevelNavigationStarted(const GURL& url) override;
-  void TopLevelNavigationEnded(const GURL& url) override;
-  void PagePainted() override;
-  void PageLoadStarted() override;
-  void PageLoadFinished() override;
-  void VisibilityChanged(bool visible) override;
-
-  content::WebContents* web_contents() const { return adapter_.web_contents(); }
+  scoped_refptr<ThumbnailImage> thumbnail() const { return thumbnail_; }
 
  private:
-  // Loading is treated as a state machine for each new URL, and the state for
-  // each new URL the current tab loads can only advance as events are received
-  // (so it is not possible to go from kLoadStarted to kNavigationStarted).
-  enum class LoadingState : int32_t {
-    kNone = 0,
-    kNavigationStarted = 1,
-    kNavigationFinished = 2,
-    kLoadStarted = 3,
-    kLoadFinished = 4
-  };
+  class ThumanailImageImpl;
+  friend class content::WebContentsUserData<ThumbnailTabHelper>;
+  friend class ThumanailImageImpl;
 
   explicit ThumbnailTabHelper(content::WebContents* contents);
-  friend class content::WebContentsUserData<ThumbnailTabHelper>;
 
-  void StartThumbnailCapture();
-  void ProcessCapturedThumbnail(base::TimeTicks start_time,
-                                const SkBitmap& bitmap);
-  void StoreThumbnail(base::TimeTicks start_time, ThumbnailImage thumbnail);
-  void NotifyTabPreviewChanged();
+  // ThumbnailImage::Delegate:
+  void ThumbnailImageBeingObservedChanged(bool is_being_observed) override;
 
-  void TransitionLoadingState(LoadingState state, const GURL& url);
-  void ClearThumbnail();
+  bool ShouldKeepUpdatingThumbnail() const;
 
-  ThumbnailImage thumbnail_;
+  void StartVideoCapture();
+  void StopVideoCapture();
+  void CaptureThumbnailOnTabSwitch();
+  void StoreThumbnail(const SkBitmap& bitmap);
 
-  // Caches whether or not the web contents view is visible. See notes in
-  // VisibilityChanged() for more information.
-  bool view_is_visible_;  // set in constructor
+  content::RenderWidgetHostView* GetView();
 
-  bool page_painted_ = false;
+  // content::WebContentsObserver:
+  void OnVisibilityChanged(content::Visibility visibility) override;
+  void DidFinishNavigation(
+      content::NavigationHandle* navigation_handle) override;
 
-  LoadingState loading_state_ = LoadingState::kNone;
-  GURL current_url_;
+  // viz::mojom::FrameSinkVideoConsumer:
+  void OnFrameCaptured(
+      base::ReadOnlySharedMemoryRegion data,
+      ::media::mojom::VideoFrameInfoPtr info,
+      const gfx::Rect& content_rect,
+      ::viz::mojom::FrameSinkVideoConsumerFrameCallbacksPtr callbacks) override;
+  void OnStopped() override;
 
-  thumbnails::ThumbnailPageEventAdapter adapter_;
-  ScopedObserver<thumbnails::ThumbnailPageEventAdapter,
-                 thumbnails::ThumbnailPageObserver>
-      scoped_observer_;
+  // The last known visibility WebContents visibility.
+  content::Visibility last_visibility_;
+
+  // Whether a thumbnail was captured while the tab was loaded, since the tab
+  // was last hidden.
+  bool captured_loaded_thumbnail_since_tab_hidden_ = false;
+
+  // Captures frames from the WebContents while it's hidden. The capturer count
+  // of the WebContents is incremented/decremented when a capturer is set/unset.
+  std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
+
+  // The thumbnail maintained by this instance.
+  scoped_refptr<ThumbnailImage> thumbnail_ =
+      base::MakeRefCounted<ThumbnailImage>(this);
 
   WEB_CONTENTS_USER_DATA_KEY_DECL();
 
-  base::WeakPtrFactory<ThumbnailTabHelper> weak_factory_{this};
+  base::WeakPtrFactory<ThumbnailTabHelper>
+      weak_factory_for_thumbnail_on_tab_hidden_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ThumbnailTabHelper);
 };
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 30ee016..4395ddb 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
@@ -137,7 +137,7 @@
       : BaseDialogContainer(std::move(dialog_body), base::RepeatingClosure()) {
     SetBackground(std::make_unique<AppListOverlayBackground>());
     close_button_ = AddChildView(views::BubbleFrameView::CreateCloseButton(
-        this, GetNativeTheme()->SystemDarkModeEnabled()));
+        this, GetNativeTheme()->ShouldUseDarkColors()));
   }
   ~AppListDialogContainer() override {}
 
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc
index e562a6c2..9e32b584 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc
@@ -10,8 +10,8 @@
 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/grit/generated_resources.h"
-#include "components/arc/common/app.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
diff --git a/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc b/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc
index 7739464..0794a09 100644
--- a/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc
@@ -20,7 +20,7 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "components/arc/arc_util.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_app_instance.h"
 #include "content/public/test/test_utils.h"
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_bubble_views.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_bubble_views.cc
index 4f2d7134b..2afa7fe 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_bubble_views.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_bubble_views.cc
@@ -111,7 +111,7 @@
   // setting the icon size would rescale it incorrectly.
   gfx::ImageSkia image = gfx::ImageSkiaOperations::CreateTiledImage(
       gfx::CreateVectorIcon(kGooglePayLogoIcon,
-                            GetNativeTheme()->SystemDarkModeEnabled()
+                            GetNativeTheme()->ShouldUseDarkColors()
                                 ? gfx::kGoogleGrey200
                                 : gfx::kGoogleGrey700),
       /*x=*/0, /*y=*/0, kMigrationBubbleGooglePayLogoWidth,
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
index 9b3c2c2..7f6abcb 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
@@ -88,9 +88,8 @@
   title->SetFontList(gfx::FontList().Derive(kMigrationDialogTitleFontSize,
                                             gfx::Font::NORMAL,
                                             gfx::Font::Weight::NORMAL));
-  title->SetEnabledColor(dialog_view->GetNativeTheme()->SystemDarkModeEnabled()
-                             ? gfx::kGoogleGrey200
-                             : gfx::kGoogleGrey900);
+  title->SetEnabledColor(dialog_view->GetNativeTheme()->GetSystemColor(
+      ui::NativeTheme::kColorId_LabelEnabledColor));
   constexpr int kMigrationDialogTitleLineHeight = 20;
   title->SetMultiLine(true);
   title->SetLineHeight(kMigrationDialogTitleLineHeight);
@@ -185,12 +184,12 @@
       views::BoxLayout::Orientation::kHorizontal, gfx::Insets(container_insets),
       container_child_space));
   tip_text_container->SetBackground(views::CreateSolidBackground(
-      dialog_view->GetNativeTheme()->SystemDarkModeEnabled()
+      dialog_view->GetNativeTheme()->ShouldUseDarkColors()
           ? gfx::kGoogleGrey800
           : gfx::kGoogleGrey050));
 
-  // If in dark mode, do not add the border.
-  if (!dialog_view->GetNativeTheme()->SystemDarkModeEnabled()) {
+  // Do not add the border if it is not using dark colors.
+  if (!dialog_view->GetNativeTheme()->ShouldUseDarkColors()) {
     constexpr int kTipValuePromptBorderThickness = 1;
     tip_text_container->SetBorder(views::CreateSolidBorder(
         kTipValuePromptBorderThickness, gfx::kGoogleGrey100));
@@ -200,9 +199,8 @@
   constexpr int kTipImageSize = 16;
   lightbulb_outline_image->SetImage(gfx::CreateVectorIcon(
       vector_icons::kLightbulbOutlineIcon, kTipImageSize,
-      dialog_view->GetNativeTheme()->SystemDarkModeEnabled()
-          ? gfx::kGoogleYellow300
-          : gfx::kGoogleYellow700));
+      dialog_view->GetNativeTheme()->GetSystemColor(
+          ui::NativeTheme::kColorId_AlertSeverityMedium)));
   lightbulb_outline_image->SetVerticalAlignment(
       views::ImageView::Alignment::kLeading);
   tip_text_container->AddChildView(lightbulb_outline_image);
@@ -212,9 +210,8 @@
   tip->SetMultiLine(true);
   // If it is in dark mode, set the font color to GG200 since it is on a lighter
   // shade of grey background.
-  if (dialog_view->GetNativeTheme()->SystemDarkModeEnabled()) {
+  if (dialog_view->GetNativeTheme()->ShouldUseDarkColors())
     tip->SetEnabledColor(gfx::kGoogleGrey200);
-  }
   tip->SetHorizontalAlignment(gfx::ALIGN_LEFT);
   tip->SizeToFit(
       provider->GetDistanceMetric(DISTANCE_LARGE_MODAL_DIALOG_PREFERRED_WIDTH) -
@@ -487,7 +484,7 @@
   image->SetBorder(views::CreateEmptyBorder(0, 0, kImageBorderBottom, 0));
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   image->SetImage(
-      rb.GetImageSkiaNamed(GetNativeTheme()->SystemDarkModeEnabled()
+      rb.GetImageSkiaNamed(GetNativeTheme()->ShouldUseDarkColors()
                                ? IDR_AUTOFILL_MIGRATION_DIALOG_HEADER_DARK
                                : IDR_AUTOFILL_MIGRATION_DIALOG_HEADER));
   image->SetAccessibleName(
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_error_dialog_view.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_error_dialog_view.cc
index 91e052e..9ab4ef9 100644
--- a/chrome/browser/ui/views/autofill/payments/local_card_migration_error_dialog_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_error_dialog_view.cc
@@ -105,7 +105,7 @@
   auto* image = new views::ImageView();
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   image->SetImage(
-      rb.GetImageSkiaNamed(GetNativeTheme()->SystemDarkModeEnabled()
+      rb.GetImageSkiaNamed(GetNativeTheme()->ShouldUseDarkColors()
                                ? IDR_AUTOFILL_MIGRATION_DIALOG_HEADER_DARK
                                : IDR_AUTOFILL_MIGRATION_DIALOG_HEADER));
   image->SetAccessibleName(
diff --git a/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc b/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc
index 82a4559..d010e7f0 100644
--- a/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc
+++ b/chrome/browser/ui/views/autofill/payments/migratable_card_view.cc
@@ -63,9 +63,11 @@
       CONTEXT_BODY_TEXT_SMALL, ChromeTextStyle::STYLE_RED);
 
   checkbox_uncheck_text_container_->AddChildView(checkbox_uncheck_text_);
+  // TODO(estade): Check whether kColorId_BubbleFooterBackground can be used for
+  // the colors here.
   checkbox_uncheck_text_container_->SetBackground(views::CreateSolidBackground(
-      GetNativeTheme()->SystemDarkModeEnabled() ? gfx::kGoogleGrey800
-                                                : gfx::kGoogleGrey050));
+      GetNativeTheme()->ShouldUseDarkColors() ? gfx::kGoogleGrey800
+                                              : gfx::kGoogleGrey050));
   checkbox_uncheck_text_container_->SetVisible(false);
 
   AddChildView(checkbox_uncheck_text_container_);
@@ -123,8 +125,8 @@
       auto* migration_succeeded_image = new views::ImageView();
       migration_succeeded_image->SetImage(gfx::CreateVectorIcon(
           vector_icons::kCheckCircleIcon, kMigrationResultImageSize,
-          GetNativeTheme()->SystemDarkModeEnabled() ? gfx::kGoogleGreen200
-                                                    : gfx::kGoogleGreen700));
+          GetNativeTheme()->ShouldUseDarkColors() ? gfx::kGoogleGreen200
+                                                  : gfx::kGoogleGreen700));
       migratable_card_description_view->AddChildView(migration_succeeded_image);
       break;
     }
@@ -132,8 +134,8 @@
       auto* migration_failed_image = new views::ImageView();
       migration_failed_image->SetImage(gfx::CreateVectorIcon(
           vector_icons::kErrorIcon, kMigrationResultImageSize,
-          GetNativeTheme()->SystemDarkModeEnabled() ? gfx::kGoogleRed300
-                                                    : gfx::kGoogleRed700));
+          GetNativeTheme()->ShouldUseDarkColors() ? gfx::kGoogleRed300
+                                                  : gfx::kGoogleRed700));
       migratable_card_description_view->AddChildView(migration_failed_image);
       break;
     }
diff --git a/chrome/browser/ui/views/autofill/payments/payments_view_util.cc b/chrome/browser/ui/views/autofill/payments/payments_view_util.cc
index 1876f6bc..da389036 100644
--- a/chrome/browser/ui/views/autofill/payments/payments_view_util.cc
+++ b/chrome/browser/ui/views/autofill/payments/payments_view_util.cc
@@ -66,7 +66,7 @@
   // setting the icon size would rescale it incorrectly.
   gfx::ImageSkia image = gfx::ImageSkiaOperations::CreateTiledImage(
       gfx::CreateVectorIcon(kGooglePayLogoIcon,
-                            GetNativeTheme()->SystemDarkModeEnabled()
+                            GetNativeTheme()->ShouldUseDarkColors()
                                 ? gfx::kGoogleGrey200
                                 : gfx::kGoogleGrey700),
       /*x=*/0, /*y=*/0, kGooglePayLogoWidth, kGooglePayLogoHeight);
diff --git a/chrome/browser/ui/views/chrome_typography_provider.cc b/chrome/browser/ui/views/chrome_typography_provider.cc
index cd04df9..38bd96bb 100644
--- a/chrome/browser/ui/views/chrome_typography_provider.cc
+++ b/chrome/browser/ui/views/chrome_typography_provider.cc
@@ -49,7 +49,7 @@
 #else
   if (theme.UsesHighContrastColors())
     return true;
-  if (theme.SystemDarkModeEnabled())
+  if (theme.ShouldUseDarkColors())
     return false;
 
   // TODO(pbos): Revisit this check. Both GG900 and black are considered
@@ -194,13 +194,13 @@
   if (context == views::style::CONTEXT_BUTTON_MD) {
     switch (style) {
       case views::style::STYLE_DIALOG_BUTTON_DEFAULT:
-        return native_theme->SystemDarkModeEnabled() ? gfx::kGoogleGrey900
-                                                     : SK_ColorWHITE;
+        return native_theme->ShouldUseDarkColors() ? gfx::kGoogleGrey900
+                                                   : SK_ColorWHITE;
       case views::style::STYLE_DISABLED:
         return gfx::kGoogleGrey600;
       default:
-        return native_theme->SystemDarkModeEnabled() ? gfx::kGoogleBlue300
-                                                     : gfx::kGoogleBlue600;
+        return native_theme->ShouldUseDarkColors() ? gfx::kGoogleBlue300
+                                                   : gfx::kGoogleBlue600;
     }
   }
 
@@ -217,7 +217,7 @@
     case views::style::STYLE_DIALOG_BUTTON_DEFAULT:
       return SK_ColorWHITE;
     case views::style::STYLE_DISABLED:
-      return native_theme->SystemDarkModeEnabled()
+      return native_theme->ShouldUseDarkColors()
                  ? gfx::kGoogleGrey800
                  : SkColorSetRGB(0x9e, 0x9e, 0x9e);
     case views::style::STYLE_LINK:
@@ -226,20 +226,19 @@
     case STYLE_SECONDARY_MONOSPACED:
     case STYLE_EMPHASIZED_SECONDARY:
     case STYLE_HINT:
-      return native_theme->SystemDarkModeEnabled() ? gfx::kGoogleGrey500
-                                                   : gfx::kGoogleGrey700;
+      return native_theme->ShouldUseDarkColors() ? gfx::kGoogleGrey500
+                                                 : gfx::kGoogleGrey700;
     case STYLE_RED:
-      return native_theme->SystemDarkModeEnabled() ? gfx::kGoogleRed300
-                                                   : gfx::kGoogleRed700;
+      return native_theme->ShouldUseDarkColors() ? gfx::kGoogleRed300
+                                                 : gfx::kGoogleRed700;
     case STYLE_GREEN:
-      return native_theme->SystemDarkModeEnabled() ? gfx::kGoogleGreen300
-                                                   : gfx::kGoogleGreen700;
+      return native_theme->ShouldUseDarkColors() ? gfx::kGoogleGreen300
+                                                 : gfx::kGoogleGreen700;
   }
 
   // Use default primary color for everything else.
-  return native_theme->SystemDarkModeEnabled()
-             ? SkColorSetA(SK_ColorWHITE, 0xDD)
-             : gfx::kGoogleGrey900;
+  return native_theme->ShouldUseDarkColors() ? SkColorSetA(SK_ColorWHITE, 0xDD)
+                                             : gfx::kGoogleGrey900;
 }
 
 int ChromeTypographyProvider::GetLineHeight(int context, int style) const {
diff --git a/chrome/browser/ui/views/download/download_danger_prompt_views.cc b/chrome/browser/ui/views/download/download_danger_prompt_views.cc
index 16c936a..53f8efe 100644
--- a/chrome/browser/ui/views/download/download_danger_prompt_views.cc
+++ b/chrome/browser/ui/views/download/download_danger_prompt_views.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/download/download_stats.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/ui/bookmarks/bookmark_editor.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
@@ -236,8 +237,9 @@
             download_->GetFileNameToReportUser().LossyDisplayName());
       }
       case download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT: {
-        if (safe_browsing::AdvancedProtectionStatusManager::
-                RequestsAdvancedProtectionVerdicts(profile_)) {
+        if (safe_browsing::AdvancedProtectionStatusManagerFactory::
+                GetForProfile(profile_)
+                    ->RequestsAdvancedProtectionVerdicts()) {
           return l10n_util::GetStringFUTF16(
               IDS_PROMPT_UNCOMMON_DOWNLOAD_CONTENT_IN_ADVANCED_PROTECTION,
               download_->GetFileNameToReportUser().LossyDisplayName());
diff --git a/chrome/browser/ui/views/download/download_item_view.cc b/chrome/browser/ui/views/download/download_item_view.cc
index d1c119f7..348ca26 100644
--- a/chrome/browser/ui/views/download/download_item_view.cc
+++ b/chrome/browser/ui/views/download/download_item_view.cc
@@ -30,6 +30,7 @@
 #include "chrome/browser/download/drag_download_item.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/safe_browsing/download_protection/download_feedback_service.h"
 #include "chrome/browser/safe_browsing/download_protection/download_protection_service.h"
 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
@@ -949,8 +950,9 @@
                                    gfx::kGoogleRed700);
 
     case download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT:
-      if (safe_browsing::AdvancedProtectionStatusManager::
-              RequestsAdvancedProtectionVerdicts(model()->profile())) {
+      if (safe_browsing::AdvancedProtectionStatusManagerFactory::GetForProfile(
+              model()->profile())
+              ->RequestsAdvancedProtectionVerdicts()) {
         return gfx::CreateVectorIcon(vector_icons::kErrorIcon, kErrorIconSize,
                                      gfx::kGoogleYellow500);
       } else {
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_button.cc b/chrome/browser/ui/views/extensions/extensions_menu_button.cc
index 5a8704e1..8cd794f 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_button.cc
+++ b/chrome/browser/ui/views/extensions/extensions_menu_button.cc
@@ -69,7 +69,7 @@
       IsPinned() ? IDS_EXTENSIONS_MENU_UNPIN_BUTTON_TOOLTIP
                  : IDS_EXTENSIONS_MENU_PIN_BUTTON_TOOLTIP));
   SkColor unpinned_icon_color =
-      ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()
+      ui::NativeTheme::GetInstanceForNativeUi()->ShouldUseDarkColors()
           ? gfx::kGoogleGrey500
           : gfx::kChromeIconGrey;
   SkColor icon_color = IsPinned()
@@ -191,9 +191,8 @@
       views::BoxLayout::Orientation::kHorizontal));
 
   const SkColor icon_color =
-      ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()
-          ? gfx::kGoogleGrey500
-          : gfx::kChromeIconGrey;
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
+          ui::NativeTheme::kColorId_DefaultIconColor);
 
   auto pin_button = views::CreateVectorImageButton(this);
   pin_button->SetID(EXTENSION_PINNING);
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view.cc b/chrome/browser/ui/views/extensions/extensions_menu_view.cc
index 252e17f..37f16f3 100644
--- a/chrome/browser/ui/views/extensions/extensions_menu_view.cc
+++ b/chrome/browser/ui/views/extensions/extensions_menu_view.cc
@@ -30,12 +30,13 @@
 
 constexpr int EXTENSIONS_SETTINGS_ID = 42;
 
+// TODO(minch): This function should be a class function of ExtensionsMenuView,
+// then View::GetNativeTheme can be used to get the icon color.
 gfx::ImageSkia CreateVectorIcon(const gfx::VectorIcon& icon) {
   return gfx::CreateVectorIcon(
       icon, 16,
-      ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()
-          ? gfx::kGoogleGrey500
-          : gfx::kChromeIconGrey);
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
+          ui::NativeTheme::kColorId_DefaultIconColor));
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
index ef480767..e5163c0 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
@@ -722,7 +722,7 @@
 
 void BrowserNonClientFrameViewAsh::SetUpForHostedApp() {
   Browser* browser = browser_view()->browser();
-  if (!browser->app_controller()->ShouldShowHostedAppButtonContainer())
+  if (!browser->app_controller()->HasTitlebarToolbar())
     return;
 
   // Add the container for extra hosted app buttons (e.g app menu button).
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
index 3d460ae1..fb571f6 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
@@ -68,9 +68,7 @@
   }
 
   if (browser_view->IsBrowserTypeHostedApp()) {
-    if (browser_view->browser()
-            ->app_controller()
-            ->ShouldShowHostedAppButtonContainer()) {
+    if (browser_view->browser()->app_controller()->HasTitlebarToolbar()) {
       set_hosted_app_button_container(new HostedAppButtonContainer(
           frame, browser_view, GetCaptionColor(kActive),
           GetCaptionColor(kInactive), kHostedAppMenuMargin));
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
index 5fcb6a2..bb5d8b6 100644
--- a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
@@ -113,7 +113,7 @@
 
   web_app::AppBrowserController* controller =
       browser_view->browser()->app_controller();
-  if (controller && controller->ShouldShowHostedAppButtonContainer()) {
+  if (controller && controller->HasTitlebarToolbar()) {
     // TODO(alancutter): Avoid snapshotting GetCaptionColor() values here and
     // call it on demand in HostedAppButtonContainer::UpdateIconsColor() via a
     // delegate interface.
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
index aa6038b..6b96745 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -182,7 +182,7 @@
 
   web_app::AppBrowserController* controller =
       browser_view()->browser()->app_controller();
-  if (controller && controller->ShouldShowHostedAppButtonContainer()) {
+  if (controller && controller->HasTitlebarToolbar()) {
     set_hosted_app_button_container(new HostedAppButtonContainer(
         frame(), browser_view(), GetCaptionColor(kActive),
         GetCaptionColor(kInactive)));
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc
index 26c345cf..84ea02c 100644
--- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view.cc
@@ -192,9 +192,9 @@
   // frame color.
   title_bar_color_ = optional_theme_color.value_or(GetDefaultFrameColor());
 
-  // In dark mode, match the default frame color.
+  // Match the default frame colors if using dark colors.
   background_color_ =
-      ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()
+      ui::NativeTheme::GetInstanceForNativeUi()->ShouldUseDarkColors()
           ? GetDefaultFrameColor()
           : kDefaultCustomTabBarBackgroundColor;
 
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index b70da8e..ce9c76bd 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -1237,7 +1237,7 @@
 }
 
 OmniboxTint LocationBarView::CalculateTint() const {
-  if (GetNativeTheme()->SystemDarkModeEnabled())
+  if (GetNativeTheme()->ShouldUseDarkColors())
     return OmniboxTint::DARK;
   ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile());
   return (theme_service->UsingDefaultTheme() && profile()->IsIncognitoProfile())
diff --git a/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc b/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc
index 7c6b3c3a..5625108f 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_match_cell_view.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/ui/views/omnibox/omnibox_text_view.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/theme_resources.h"
-#include "components/omnibox/browser/omnibox_field_trial.h"
 #include "components/omnibox/browser/vector_icons.h"
 #include "components/omnibox/common/omnibox_features.h"
 #include "extensions/common/image_util.h"
@@ -64,24 +63,11 @@
 }
 
 // Returns the margins that should appear around the result.
-// |is_two_line| indicates whether the vertical margin is for a omnibox
-// result displaying an answer to the query.
+// |is_two_line| indicates whether the vertical margin is for a type of
+// suggestion that uses two lines (e.g. answers).
 gfx::Insets GetMarginInsets(int text_height, bool is_two_line) {
   int vertical_margin =
       is_two_line ? kTwoLineRowMarginHeight : kOneLineRowMarginHeight;
-
-  base::Optional<int> vertical_margin_override =
-      OmniboxFieldTrial::GetSuggestionVerticalMarginFieldTrialOverride();
-  if (vertical_margin_override) {
-    // If the vertical margin experiment is on, we purposely set both the
-    // one-line and two-line suggestions to have the same vertical margin.
-    //
-    // There is no vertical margin value we could set to make the new answer
-    // style look anything similar to the pre-Refresh style, but setting them to
-    // be the same looks reasonable, and is a sane place to start experimenting.
-    vertical_margin = vertical_margin_override.value();
-  }
-
   return gfx::Insets(vertical_margin, kMarginLeft, vertical_margin,
                      OmniboxMatchCellView::kMarginRight);
 }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
index ba7b1e31..c6cfd01 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
@@ -394,16 +394,6 @@
   // interior between each row of text.
   popup_height += RoundedOmniboxResultsFrame::GetNonResultSectionHeight();
 
-  base::Optional<int> vertical_margin_override =
-      OmniboxFieldTrial::GetSuggestionVerticalMarginFieldTrialOverride();
-  if (vertical_margin_override) {
-    // If the vertical margin experiment uses a very small value (like a value
-    // similar to pre-Refresh), we need to pad up the popup height at the
-    // bottom (just like pre-Refresh) to prevent it from looking very bad.
-    if (vertical_margin_override.value() < 4)
-      popup_height += 4;
-  }
-
   // The rounded popup is always offset the same amount from the omnibox.
   gfx::Rect content_rect = location_bar_view_->GetBoundsInScreen();
   content_rect.Inset(
diff --git a/chrome/browser/ui/views/profiles/badged_profile_photo.cc b/chrome/browser/ui/views/profiles/badged_profile_photo.cc
index 77c1a655..176ea29 100644
--- a/chrome/browser/ui/views/profiles/badged_profile_photo.cc
+++ b/chrome/browser/ui/views/profiles/badged_profile_photo.cc
@@ -68,19 +68,19 @@
               ui::NativeTheme::kColorId_DefaultIconColor));
     case BadgedProfilePhoto::BADGE_TYPE_SYNC_COMPLETE:
       return gfx::CreateVectorIcon(kSyncCircleIcon, kBadgeIconSize,
-                                   native_theme->SystemDarkModeEnabled()
+                                   native_theme->ShouldUseDarkColors()
                                        ? gfx::kGoogleGreen300
                                        : gfx::kGoogleGreen700);
     case BadgedProfilePhoto::BADGE_TYPE_SYNC_ERROR:
       return gfx::CreateVectorIcon(kSyncErrorCircleIcon, kBadgeIconSize,
-                                   native_theme->SystemDarkModeEnabled()
+                                   native_theme->ShouldUseDarkColors()
                                        ? gfx::kGoogleRed300
                                        : gfx::kGoogleRed700);
     case BadgedProfilePhoto::BADGE_TYPE_SYNC_PAUSED:
-      return gfx::CreateVectorIcon(kSyncPausedCircleIcon, kBadgeIconSize,
-                                   native_theme->SystemDarkModeEnabled()
-                                       ? gfx::kGoogleBlue300
-                                       : gfx::kGoogleBlue500);
+      return gfx::CreateVectorIcon(
+          kSyncPausedCircleIcon, kBadgeIconSize,
+          native_theme->GetSystemColor(
+              ui::NativeTheme::kColorId_ProminentButtonColor));
     case BadgedProfilePhoto::BADGE_TYPE_SYNC_DISABLED:
       return gfx::CreateVectorIcon(kSyncCircleIcon, kBadgeIconSize,
                                    gfx::kGoogleGrey400);
diff --git a/chrome/browser/ui/views/profiles/dice_accounts_menu.cc b/chrome/browser/ui/views/profiles/dice_accounts_menu.cc
deleted file mode 100644
index 4581dfa2..0000000
--- a/chrome/browser/ui/views/profiles/dice_accounts_menu.cc
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/views/profiles/dice_accounts_menu.h"
-
-#include "base/strings/utf_string_conversions.h"
-#include "build/build_config.h"
-#include "chrome/app/vector_icons/vector_icons.h"
-#include "chrome/browser/profiles/profile_avatar_icon_util.h"
-#include "chrome/browser/ui/views/chrome_typography.h"
-#include "chrome/grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/color_palette.h"
-#include "ui/gfx/paint_vector_icon.h"
-#include "ui/views/controls/button/menu_button.h"
-#include "ui/views/controls/menu/menu_config.h"
-#include "ui/views/layout/layout_provider.h"
-#include "ui/views/view.h"
-
-namespace {
-
-constexpr int kProfilesAvatarIconSize = 16;
-
-// Used to identify the "Use another account" button.
-constexpr int kUseAnotherAccountCmdId = std::numeric_limits<int>::max();
-
-// Used to identify the "Sign out" button.
-constexpr int kSignOutCmdId = std::numeric_limits<int>::max() - 1;
-
-// Anchor inset used to position the accounts menu.
-constexpr int kAnchorInset = 8;
-
-constexpr int kVerticalItemMargins = 12;
-constexpr int kHorizontalIconSpacing = 16;
-
-gfx::ImageSkia SizeAndCircleIcon(const gfx::Image& icon) {
-  gfx::Image circled_icon = profiles::GetSizedAvatarIcon(
-      icon, true, kProfilesAvatarIconSize, kProfilesAvatarIconSize,
-      profiles::SHAPE_CIRCLE);
-  return *circled_icon.ToImageSkia();
-}
-
-}  // namespace
-
-DiceAccountsMenu::DiceAccountsMenu(const std::vector<AccountInfo>& accounts,
-                                   Callback account_selected_callback)
-    : accounts_(accounts),
-      account_selected_callback_(std::move(account_selected_callback)) {
-}
-
-void DiceAccountsMenu::Show(views::View* anchor_view,
-                            views::MenuButton* menu_button) {
-  DCHECK(!runner_);
-  runner_ = std::make_unique<views::MenuRunner>(BuildMenu(),
-                                                views::MenuRunner::COMBOBOX);
-  // Calculate custom anchor bounds to position the menu.
-  // The menu is aligned along the right edge (left edge in RTL mode) of the
-  // anchor, slightly shifted inside by |kAnchorInset| and overlapping
-  // |anchor_view| on the bottom by |kAnchorInset|. |anchor_bounds| is collapsed
-  // so the menu only takes the width it needs.
-  gfx::Rect anchor_bounds = anchor_view->GetBoundsInScreen();
-  anchor_bounds.Inset(kAnchorInset, kAnchorInset);
-
-  if (base::i18n::IsRTL())
-    anchor_bounds.Inset(0, 0, anchor_bounds.width(), 0);
-  else
-    anchor_bounds.Inset(anchor_bounds.width(), 0, 0, 0);
-
-  runner_->RunMenuAt(anchor_view->GetWidget(), menu_button->button_controller(),
-                     anchor_bounds, views::MenuAnchorPosition::kTopRight,
-                     ui::MENU_SOURCE_MOUSE);
-}
-
-DiceAccountsMenu::~DiceAccountsMenu() {}
-
-void DiceAccountsMenu::SetSignOutButtonCallback(
-    base::OnceClosure signout_callback) {
-  signout_callback_ = std::move(signout_callback);
-}
-
-views::MenuItemView* DiceAccountsMenu::BuildMenu() {
-  views::MenuItemView* menu = new views::MenuItemView(this);
-  gfx::Image default_icon =
-      ui::ResourceBundle::GetSharedInstance().GetImageNamed(
-          profiles::GetPlaceholderAvatarIconResourceID());
-#if !defined(OS_MACOSX)
-  // Add spacing at top.
-  menu->AppendMenuItemImpl(
-      0, base::string16(), base::string16(), base::string16(), nullptr,
-      gfx::ImageSkia(), views::MenuItemView::SEPARATOR, ui::SPACING_SEPARATOR);
-#endif
-  // Add a menu item for each account.
-  for (size_t idx = 0; idx < accounts_.size(); idx++) {
-    views::MenuItemView* item = menu->AppendMenuItemWithIcon(
-        idx, base::UTF8ToUTF16(accounts_[idx].email),
-        SizeAndCircleIcon(accounts_[idx].account_image.IsEmpty()
-                              ? default_icon
-                              : accounts_[idx].account_image));
-    item->SetMargins(kVerticalItemMargins, kVerticalItemMargins);
-  }
-  // Add the "Use another account" button.
-  views::MenuItemView* item = menu->AppendMenuItemWithIcon(
-      kUseAnotherAccountCmdId,
-      l10n_util::GetStringUTF16(IDS_PROFILES_DICE_USE_ANOTHER_ACCOUNT_BUTTON),
-      SizeAndCircleIcon(default_icon));
-  item->SetMargins(kVerticalItemMargins, kVerticalItemMargins);
-  if (!signout_callback_.is_null()) {
-    // Add the "Sign out" button.
-    item = menu->AppendMenuItemWithIcon(
-        kSignOutCmdId, l10n_util::GetStringUTF16(IDS_SCREEN_LOCK_SIGN_OUT),
-        gfx::CreateVectorIcon(kSignOutIcon, kProfilesAvatarIconSize,
-                              gfx::kGoogleGrey600));
-    item->SetMargins(kVerticalItemMargins, kVerticalItemMargins);
-  }
-#if !defined(OS_MACOSX)
-  // Add spacing at bottom.
-  menu->AppendMenuItemImpl(
-      0, base::string16(), base::string16(), base::string16(), nullptr,
-      gfx::ImageSkia(), views::MenuItemView::SEPARATOR, ui::SPACING_SEPARATOR);
-#endif
-
-  menu->set_has_icons(true);
-  return menu;
-}
-
-void DiceAccountsMenu::ExecuteCommand(int id) {
-  DCHECK((0 <= id && static_cast<size_t>(id) < accounts_.size()) ||
-         id == kUseAnotherAccountCmdId || id == kSignOutCmdId);
-  if (id == kSignOutCmdId) {
-    std::move(signout_callback_).Run();
-    return;
-  }
-  base::Optional<AccountInfo> account;
-  if (id != kUseAnotherAccountCmdId)
-    account = accounts_[id];
-  std::move(account_selected_callback_).Run(account);
-}
-
-void DiceAccountsMenu::GetHorizontalIconMargins(int command_id,
-                                                int icon_size,
-                                                int* left_margin,
-                                                int* right_margin) const {
-  const views::MenuConfig& config = views::MenuConfig::instance();
-  *left_margin = kHorizontalIconSpacing - config.item_horizontal_padding;
-  *right_margin = kHorizontalIconSpacing - config.item_horizontal_padding;
-}
-
-void DiceAccountsMenu::GetLabelStyle(int id, LabelStyle* style) const {
-  const views::LayoutProvider* provider = views::LayoutProvider::Get();
-  // Match the font of the HoverButtons in the avatar bubble.
-  style->font_list = provider->GetTypographyProvider().GetFont(
-      views::style::CONTEXT_BUTTON, STYLE_SECONDARY);
-}
diff --git a/chrome/browser/ui/views/profiles/dice_accounts_menu.h b/chrome/browser/ui/views/profiles/dice_accounts_menu.h
deleted file mode 100644
index ec34f28..0000000
--- a/chrome/browser/ui/views/profiles/dice_accounts_menu.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_PROFILES_DICE_ACCOUNTS_MENU_H_
-#define CHROME_BROWSER_UI_VIEWS_PROFILES_DICE_ACCOUNTS_MENU_H_
-
-#include <vector>
-
-#include "base/callback_forward.h"
-#include "base/optional.h"
-#include "components/signin/public/identity_manager/account_info.h"
-#include "ui/gfx/image/image.h"
-#include "ui/views/controls/menu/menu_delegate.h"
-#include "ui/views/controls/menu/menu_item_view.h"
-#include "ui/views/controls/menu/menu_runner.h"
-
-namespace views {
-class View;
-}  // namespace views
-
-// Menu allowing the user to select an account for enabling Sync when desktop
-// identity consistency (aka DICE) is enabled.
-class DiceAccountsMenu : public views::MenuDelegate {
- public:
-  // Callback to enable Sync for |account| if available. |account| corresponds
-  // to the account that was selected or |nullopt| if the "Use another account"
-  // button was selected.
-  using Callback =
-      base::OnceCallback<void(const base::Optional<AccountInfo>& account)>;
-
-  // Builds the accounts menu. Each account from |accounts| is placed in a menu
-  // item showing the email and the corresponding icon from |icons|. The last
-  // item in the accounts menu is the "Use another accounts" button. The spacing
-  // within the items is increased to match bubble |HoverButton|s.
-  DiceAccountsMenu(const std::vector<AccountInfo>& accounts,
-                   Callback account_selected_callback);
-  ~DiceAccountsMenu() override;
-
-  // Shows the accounts menu below |anchor_view| and locks |menu_button| if
-  // given. This method can only be called once.
-  void Show(views::View* anchor_view, views::MenuButton* menu_button = nullptr);
-
-  // A sign-out button is only added to the menu when this function is called.
-  void SetSignOutButtonCallback(base::OnceClosure signout_callback);
-
- private:
-  views::MenuItemView* BuildMenu();
-
-  // Overridden from views::MenuDelegate:
-  void ExecuteCommand(int id) override;
-  void GetHorizontalIconMargins(int command_id,
-                                int icon_size,
-                                int* left_margin,
-                                int* right_margin) const override;
-  void GetLabelStyle(int id, LabelStyle* style) const override;
-
-  std::unique_ptr<views::MenuRunner> runner_;
-
-  std::vector<AccountInfo> accounts_;
-  Callback account_selected_callback_;
-  base::OnceClosure signout_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(DiceAccountsMenu);
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_PROFILES_DICE_ACCOUNTS_MENU_H_
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
index 7c8c90e..8b03c2e 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -387,7 +387,13 @@
         browser(), dice_signin_button_view_->account().value(), access_point_,
         true /* is_default_promo_account */);
   } else if (sender == signout_button_) {
-    SignOutAllWebAccounts();
+    Hide();
+
+    // Sign out from all accounts.
+    IdentityManagerFactory::GetForProfile(browser()->profile())
+        ->GetAccountsMutator()
+        ->RemoveAllAccounts(signin_metrics::SourceForRefreshTokenOperation::
+                                kUserMenu_SignOutAllAccounts);
     base::RecordAction(base::UserMetricsAction("Signin_Signout_FromUserMenu"));
   } else {
     // Either one of the "other profiles", or one of the profile accounts
@@ -845,25 +851,6 @@
   gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE;
 }
 
-void ProfileChooserView::EnableSync(
-    const base::Optional<AccountInfo>& account) {
-  Hide();
-  if (account)
-    signin_ui_util::EnableSyncFromPromo(browser(), account.value(),
-                                        access_point_,
-                                        false /* is_default_promo_account */);
-  else
-    ShowViewOrOpenTab(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN);
-}
-
-void ProfileChooserView::SignOutAllWebAccounts() {
-  Hide();
-  IdentityManagerFactory::GetForProfile(browser()->profile())
-      ->GetAccountsMutator()
-      ->RemoveAllAccounts(signin_metrics::SourceForRefreshTokenOperation::
-                              kUserMenu_SignOutAllAccounts);
-}
-
 int ProfileChooserView::GetDiceSigninPromoShowCount() const {
   return browser()->profile()->GetPrefs()->GetInteger(
       prefs::kDiceSigninUserMenuPromoCount);
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.h b/chrome/browser/ui/views/profiles/profile_chooser_view.h
index 99ce6f5..f28a73b 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.h
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.h
@@ -17,7 +17,6 @@
 #include "chrome/browser/sync/sync_ui_util.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/profile_chooser_constants.h"
-#include "chrome/browser/ui/views/profiles/dice_accounts_menu.h"
 #include "chrome/browser/ui/views/profiles/profile_menu_view_base.h"
 #include "components/signin/core/browser/signin_header_helper.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
@@ -138,10 +137,6 @@
   // Clean-up done after an action was performed in the ProfileChooser.
   void PostActionPerformed(ProfileMetrics::ProfileDesktopMenu action_performed);
 
-  // Callbacks for DiceAccountsMenu.
-  void EnableSync(const base::Optional<AccountInfo>& account);
-  void SignOutAllWebAccounts();
-
   // Methods to keep track of the number of times the Dice sign-in promo has
   // been shown.
   int GetDiceSigninPromoShowCount() const;
@@ -195,10 +190,6 @@
   // Dice accounts used in the sync promo.
   std::vector<AccountInfo> dice_accounts_;
 
-  // Accounts submenu that is shown when |sync_to_another_account_button_| is
-  // pressed.
-  std::unique_ptr<DiceAccountsMenu> dice_accounts_menu_;
-
   const bool dice_enabled_;
 
   DISALLOW_COPY_AND_ASSIGN(ProfileChooserView);
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
index 6eb3d50..272c7f7 100644
--- a/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
+++ b/chrome/browser/ui/views/profiles/profile_menu_view_base.cc
@@ -289,9 +289,8 @@
     AccountInfo* account_info,
     gfx::Image* account_icon) {
   std::unique_ptr<DiceSigninButtonView> button =
-      account_info ? std::make_unique<DiceSigninButtonView>(
-                         *account_info, *account_icon, this,
-                         false /* show_drop_down_arrow */)
+      account_info ? std::make_unique<DiceSigninButtonView>(*account_info,
+                                                            *account_icon, this)
                    : std::make_unique<DiceSigninButtonView>(this);
   DiceSigninButtonView* pointer = button.get();
 
@@ -435,9 +434,8 @@
     const gfx::VectorIcon& icon) {
   return gfx::CreateVectorIcon(
       icon, kIconSize,
-      ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()
-          ? gfx::kGoogleGrey500
-          : gfx::kChromeIconGrey);
+      ui::NativeTheme::GetInstanceForNativeUi()->GetSystemColor(
+          ui::NativeTheme::kColorId_DefaultIconColor));
 }
 
 int ProfileMenuViewBase::GetDefaultIconSize() {
diff --git a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc
index 85e22c8..c76c94a 100644
--- a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc
+++ b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc
@@ -61,9 +61,9 @@
       account_icon = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
           profiles::GetPlaceholderAvatarIconResourceID());
     }
-    signin_button_view_ = new DiceSigninButtonView(
-        accounts[0], account_icon, this, /*show_drop_down_arrow=*/false,
-        /*use_account_name_as_title=*/true);
+    signin_button_view_ =
+        new DiceSigninButtonView(accounts[0], account_icon, this,
+                                 /*use_account_name_as_title=*/true);
 
     // Store account information for submenu.
     accounts_for_submenu_.assign(accounts.begin() + 1, accounts.end());
@@ -83,21 +83,6 @@
                signin_button_view_->account());
     return;
   }
-
-  if (sender == signin_button_view_->drop_down_arrow()) {
-    // Display a submenu listing the GAIA web accounts (except the first one).
-    // Using base::Unretained(this) is safe here because |dice_accounts_menu_|
-    // is owned by |DiceBubbleSyncPromoView|, i.e. |this|.
-    dice_accounts_menu_ = std::make_unique<DiceAccountsMenu>(
-        accounts_for_submenu_,
-        base::BindOnce(&DiceBubbleSyncPromoView::EnableSync,
-                       base::Unretained(this),
-                       false /* is_default_promo_account */));
-    dice_accounts_menu_->Show(signin_button_view_,
-                              signin_button_view_->drop_down_arrow());
-    return;
-  }
-
   NOTREACHED();
 }
 
diff --git a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h
index f79f819..7d65dc56 100644
--- a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h
+++ b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h
@@ -10,7 +10,6 @@
 
 #include "base/macros.h"
 #include "chrome/browser/ui/sync/bubble_sync_promo_delegate.h"
-#include "chrome/browser/ui/views/profiles/dice_accounts_menu.h"
 #include "components/signin/public/base/signin_metrics.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/style/typography.h"
@@ -69,10 +68,6 @@
   BubbleSyncPromoDelegate* delegate_;
   DiceSigninButtonView* signin_button_view_ = nullptr;
 
-  // Accounts submenu that is shown when |signin_button_->drop_down_arrow()| is
-  // pressed.
-  std::unique_ptr<DiceAccountsMenu> dice_accounts_menu_;
-
   std::vector<AccountInfo> accounts_for_submenu_;
 
   DISALLOW_COPY_AND_ASSIGN(DiceBubbleSyncPromoView);
diff --git a/chrome/browser/ui/views/sync/dice_signin_button_view.cc b/chrome/browser/ui/views/sync/dice_signin_button_view.cc
index ec756b94..b250272 100644
--- a/chrome/browser/ui/views/sync/dice_signin_button_view.cc
+++ b/chrome/browser/ui/views/sync/dice_signin_button_view.cc
@@ -21,12 +21,6 @@
 #include "ui/views/layout/fill_layout.h"
 #include "ui/views/layout/grid_layout.h"
 
-namespace {
-
-constexpr int kDropDownArrowIconSize = 12;
-
-}  // namespace
-
 DiceSigninButtonView::DiceSigninButtonView(
     views::ButtonListener* button_listener,
     bool prominent)
@@ -44,7 +38,6 @@
     const AccountInfo& account,
     const gfx::Image& account_icon,
     views::ButtonListener* button_listener,
-    bool show_drop_down_arrow,
     bool use_account_name_as_title)
     : account_(account) {
   views::GridLayout* grid_layout =
@@ -69,22 +62,6 @@
   account_card->SetBorder(nullptr);
   account_card->SetEnabled(false);
   grid_layout->AddView(std::move(account_card));
-
-  if (show_drop_down_arrow) {
-    // Add a non-stretching column for the the drop down arrow.
-    columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::FILL,
-                       views::GridLayout::kFixedSize,
-                       views::GridLayout::USE_PREF, 0, 0);
-    auto arrow = std::make_unique<HoverButton>(
-        button_listener,
-        gfx::CreateVectorIcon(kSigninButtonDropDownArrowIcon,
-                              kDropDownArrowIconSize, SK_ColorBLACK),
-        base::string16());
-    arrow->SetTooltipText(l10n_util::GetStringUTF16(
-        IDS_PROFILES_DICE_SIGNIN_WITH_ANOTHER_ACCOUNT_BUTTON));
-    arrow_ = grid_layout->AddView(std::move(arrow));
-  }
-
   grid_layout->AddPaddingRow(views::GridLayout::kFixedSize, 16);
 
   columns = grid_layout->AddColumnSet(1);
diff --git a/chrome/browser/ui/views/sync/dice_signin_button_view.h b/chrome/browser/ui/views/sync/dice_signin_button_view.h
index 54660364..ea99bef 100644
--- a/chrome/browser/ui/views/sync/dice_signin_button_view.h
+++ b/chrome/browser/ui/views/sync/dice_signin_button_view.h
@@ -34,18 +34,15 @@
   DiceSigninButtonView(const AccountInfo& account_info,
                        const gfx::Image& account_icon,
                        views::ButtonListener* button_listener,
-                       bool show_drop_down_arrow = false,
                        bool use_account_name_as_title = false);
   ~DiceSigninButtonView() override;
 
   views::LabelButton* signin_button() const { return signin_button_; }
-  HoverButton* drop_down_arrow() const { return arrow_; }
   base::Optional<AccountInfo> account() const { return account_; }
 
  private:
 
   views::LabelButton* signin_button_ = nullptr;
-  HoverButton* arrow_ = nullptr;
 
   const base::Optional<AccountInfo> account_;
 
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
index d9c8b03..f899684 100644
--- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
+++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
@@ -395,6 +395,12 @@
   return model_->GetVisualDataForGroup(group);
 }
 
+void BrowserTabStripController::SetVisualDataForGroup(
+    TabGroupId group,
+    TabGroupVisualData visual_data) {
+  model_->SetVisualDataForGroup(group, visual_data);
+}
+
 std::vector<int> BrowserTabStripController::ListTabsInGroup(
     TabGroupId group) const {
   return model_->ListTabsInGroup(group);
diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h
index cdca152d..880e901 100644
--- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h
+++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h
@@ -74,6 +74,8 @@
   void OnStoppedDraggingTabs() override;
   const TabGroupVisualData* GetVisualDataForGroup(
       TabGroupId group_id) const override;
+  void SetVisualDataForGroup(TabGroupId group,
+                             TabGroupVisualData visual_data) override;
   std::vector<int> ListTabsInGroup(TabGroupId group_id) const override;
   bool IsFrameCondensed() const override;
   bool HasVisibleBackgroundTabShapes() const override;
diff --git a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc
index 1b2c936..6c71348b 100644
--- a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc
+++ b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.cc
@@ -76,6 +76,12 @@
   return &fake_group_data_;
 }
 
+void FakeBaseTabStripController::SetVisualDataForGroup(
+    TabGroupId group,
+    TabGroupVisualData visual_data) {
+  fake_group_data_ = visual_data;
+}
+
 std::vector<int> FakeBaseTabStripController::ListTabsInGroup(
     TabGroupId group) const {
   std::vector<int> result;
diff --git a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h
index c73673d..ff47fe9 100644
--- a/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h
+++ b/chrome/browser/ui/views/tabs/fake_base_tab_strip_controller.h
@@ -58,6 +58,8 @@
   void OnStoppedDraggingTabs() override;
   const TabGroupVisualData* GetVisualDataForGroup(
       TabGroupId group_id) const override;
+  void SetVisualDataForGroup(TabGroupId group,
+                             TabGroupVisualData visual_data) override;
   std::vector<int> ListTabsInGroup(TabGroupId group_id) const override;
   bool IsFrameCondensed() const override;
   bool HasVisibleBackgroundTabShapes() const override;
diff --git a/chrome/browser/ui/views/tabs/tab_animation_unittest.cc b/chrome/browser/ui/views/tabs/tab_animation_unittest.cc
index 1a9a29ac..96618e6 100644
--- a/chrome/browser/ui/views/tabs/tab_animation_unittest.cc
+++ b/chrome/browser/ui/views/tabs/tab_animation_unittest.cc
@@ -21,8 +21,7 @@
 class TabAnimationTest : public testing::Test {
  public:
   TabAnimationTest()
-      : env_(base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {
-  }
+      : env_(base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
 
   float PinnednessOf(TabAnimationState state) { return state.pinnedness_; }
 
diff --git a/chrome/browser/ui/views/tabs/tab_controller.h b/chrome/browser/ui/views/tabs/tab_controller.h
index 2ec09c8..a5f6a89 100644
--- a/chrome/browser/ui/views/tabs/tab_controller.h
+++ b/chrome/browser/ui/views/tabs/tab_controller.h
@@ -182,6 +182,9 @@
   virtual const TabGroupVisualData* GetVisualDataForGroup(
       TabGroupId group) const = 0;
 
+  virtual void SetVisualDataForGroup(TabGroupId group,
+                                     TabGroupVisualData visual_data) = 0;
+
  protected:
   virtual ~TabController() {}
 };
diff --git a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc
new file mode 100644
index 0000000..fcb7c6df
--- /dev/null
+++ b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.cc
@@ -0,0 +1,136 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h"
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/containers/flat_map.h"
+#include "base/no_destructor.h"
+#include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/ui/tabs/tab_group_visual_data.h"
+#include "chrome/browser/ui/views/chrome_layout_provider.h"
+#include "chrome/browser/ui/views/chrome_typography.h"
+#include "chrome/browser/ui/views/tabs/tab_controller.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/models/simple_combobox_model.h"
+#include "ui/gfx/color_palette.h"
+#include "ui/gfx/geometry/insets.h"
+#include "ui/views/controls/combobox/combobox.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/layout/box_layout.h"
+#include "ui/views/layout/layout_types.h"
+#include "ui/views/view_class_properties.h"
+
+namespace {
+
+// Returns our hard-coded set of colors.
+const base::flat_map<std::string, SkColor>& GetColorPickerMap() {
+  static const base::NoDestructor<base::flat_map<std::string, SkColor>> map(
+      {{"Blue", gfx::kGoogleBlue600},
+       {"Red", gfx::kGoogleRed600},
+       {"Yellow", gfx::kGoogleYellow600},
+       {"Green", gfx::kGoogleGreen600},
+       // TODO(crbug.com/989174): add these expanded palette colors to
+       // ui/gfx/color_palette.h
+       {"Orange", SkColorSetRGB(0xE8, 0x71, 0x0A)},
+       {"Pink", SkColorSetRGB(0xE5, 0x25, 0x92)},
+       {"Purple", SkColorSetRGB(0x93, 0x34, 0xE6)},
+       {"Cyan", SkColorSetRGB(0x12, 0xB5, 0xCB)}});
+  return *map;
+}
+
+}  // namespace
+
+// static
+void TabGroupEditorBubbleView::Show(views::View* anchor_view,
+                                    TabController* tab_controller,
+                                    TabGroupId group) {
+  BubbleDialogDelegateView::CreateBubble(
+      new TabGroupEditorBubbleView(anchor_view, tab_controller, group))
+      ->Show();
+}
+
+gfx::Size TabGroupEditorBubbleView::CalculatePreferredSize() const {
+  const int width = ChromeLayoutProvider::Get()->GetDistanceMetric(
+                        DISTANCE_BUBBLE_PREFERRED_WIDTH) -
+                    margins().width();
+  return gfx::Size(width, GetHeightForWidth(width));
+}
+
+base::string16 TabGroupEditorBubbleView::GetWindowTitle() const {
+  // TODO(crbug.com/989174): remove this and other hardcoded ASCII strings.
+  return base::ASCIIToUTF16("Customize tab group visuals");
+}
+
+bool TabGroupEditorBubbleView::Accept() {
+  TabGroupVisualData old_data = *tab_controller_->GetVisualDataForGroup(group_);
+
+  base::string16 title = title_field_->GetText();
+  if (title.empty())
+    title = old_data.title();
+
+  const base::string16 color_name =
+      color_selector_->model()->GetItemAt(color_selector_->GetSelectedIndex());
+  const SkColor color =
+      GetColorPickerMap().find(base::UTF16ToASCII(color_name))->second;
+  TabGroupVisualData new_data(std::move(title), color);
+
+  tab_controller_->SetVisualDataForGroup(group_, new_data);
+
+  return true;
+}
+
+TabGroupEditorBubbleView::TabGroupEditorBubbleView(
+    views::View* anchor_view,
+    TabController* tab_controller,
+    TabGroupId group)
+    : tab_controller_(tab_controller), group_(group) {
+  SetAnchorView(anchor_view);
+
+  const auto* layout_provider = ChromeLayoutProvider::Get();
+
+  // Add the text field for editing the title along with a label above it.
+  AddChildView(std::make_unique<views::Label>(base::ASCIIToUTF16("New title:"),
+                                              views::style::CONTEXT_LABEL,
+                                              views::style::STYLE_PRIMARY));
+  title_field_ = AddChildView(std::make_unique<views::Textfield>());
+  title_field_->SetDefaultWidthInChars(15);
+
+  title_field_->SetProperty(
+      views::kMarginsKey,
+      gfx::Insets(0, 0,
+                  layout_provider->GetDistanceMetric(
+                      views::DISTANCE_UNRELATED_CONTROL_VERTICAL),
+                  0));
+
+  std::vector<base::string16> color_names;
+  for (const auto& entry : GetColorPickerMap())
+    color_names.push_back(base::ASCIIToUTF16(entry.first));
+  auto combobox_model = std::make_unique<ui::SimpleComboboxModel>(color_names);
+
+  // Add the color selector with label above it.
+  AddChildView(std::make_unique<views::Label>(base::ASCIIToUTF16("New color:"),
+                                              views::style::CONTEXT_LABEL,
+                                              views::style::STYLE_PRIMARY));
+  color_selector_ = AddChildView(
+      std::make_unique<views::Combobox>(std::move(combobox_model)));
+
+  // Layout vertically with margin collapsing. This allows us to use spacer
+  // views with |DISTANCE_UNRELATED_CONTROL_VERTICAL| margins without worrying
+  // about the default |DISTANCE_RELATED_CONTROL_VERTICAL| spacing.
+  auto layout = std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kVertical, gfx::Insets(),
+      layout_provider->GetDistanceMetric(
+          views::DISTANCE_RELATED_CONTROL_VERTICAL),
+      true /* collapse_margins_spacing */);
+  layout->set_cross_axis_alignment(
+      views::BoxLayout::CrossAxisAlignment::kStart);
+  SetLayoutManager(std::move(layout));
+}
+
+TabGroupEditorBubbleView::~TabGroupEditorBubbleView() = default;
diff --git a/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h
new file mode 100644
index 0000000..f5ddb03
--- /dev/null
+++ b/chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h
@@ -0,0 +1,53 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_EDITOR_BUBBLE_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_EDITOR_BUBBLE_VIEW_H_
+
+#include "base/strings/string16.h"
+#include "chrome/browser/ui/tabs/tab_group_id.h"
+#include "ui/views/bubble/bubble_dialog_delegate_view.h"
+#include "ui/views/controls/textfield/textfield.h"
+
+class TabController;
+
+namespace gfx {
+class Size;
+}
+
+namespace views {
+class Combobox;
+}
+
+// A dialog for changing a tab group's visual parameters.
+//
+// TODO(crbug.com/989174): polish this UI. It is currently sufficient for
+// testing, but it is not ready to be launched.
+class TabGroupEditorBubbleView : public views::BubbleDialogDelegateView {
+ public:
+  static void Show(views::View* anchor_view,
+                   TabController* tab_controller,
+                   TabGroupId group);
+
+  // views::BubbleDialogDelegateView:
+  gfx::Size CalculatePreferredSize() const override;
+  base::string16 GetWindowTitle() const override;
+  bool Accept() override;
+
+ private:
+  TabGroupEditorBubbleView(views::View* anchor_view,
+                           TabController* tab_controller,
+                           TabGroupId group);
+  ~TabGroupEditorBubbleView() override;
+
+  TabController* const tab_controller_;
+  const TabGroupId group_;
+
+  views::Textfield* title_field_;
+
+  // TODO(crbug.com/989174): replace this with a color palette.
+  views::Combobox* color_selector_;
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_EDITOR_BUBBLE_VIEW_H_
diff --git a/chrome/browser/ui/views/tabs/tab_group_header.cc b/chrome/browser/ui/views/tabs/tab_group_header.cc
index edd87422..795cf96a 100644
--- a/chrome/browser/ui/views/tabs/tab_group_header.cc
+++ b/chrome/browser/ui/views/tabs/tab_group_header.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/ui/tabs/tab_style.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/tabs/tab_controller.h"
+#include "chrome/browser/ui/views/tabs/tab_group_editor_bubble_view.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkPath.h"
 #include "ui/gfx/canvas.h"
@@ -65,3 +66,8 @@
   title_->SetEnabledColor(color_utils::GetColorWithMaxContrast(data->color()));
   title_->SetText(data->title());
 }
+
+bool TabGroupHeader::OnMousePressed(const ui::MouseEvent& event) {
+  TabGroupEditorBubbleView::Show(this, controller_, group_);
+  return true;
+}
diff --git a/chrome/browser/ui/views/tabs/tab_group_header.h b/chrome/browser/ui/views/tabs/tab_group_header.h
index e6e427d..fb7633a 100644
--- a/chrome/browser/ui/views/tabs/tab_group_header.h
+++ b/chrome/browser/ui/views/tabs/tab_group_header.h
@@ -25,6 +25,9 @@
   // Updates our visual state according to the TabGroupVisualData for our group.
   void VisualsChanged();
 
+  // views::View:
+  bool OnMousePressed(const ui::MouseEvent& event) override;
+
  private:
   TabController* const controller_;
   const TabGroupId group_;
diff --git a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
index 21cac69..bbbb089 100644
--- a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
+++ b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
@@ -425,6 +425,7 @@
 
 void TabHoverCardBubbleView::FadeOutToHide() {
   delayed_show_timer_.Stop();
+  RegisterToThumbnailImageUpdates(nullptr);
   if (!widget_->IsVisible())
     return;
   slide_animation_delegate_->StopAnimation();
@@ -524,40 +525,56 @@
 
   // If the preview image feature is not enabled, |preview_image_| will be null.
   if (preview_image_ && preview_image_->GetVisible()) {
-    // If there is no valid thumbnail data, blank out the preview, else wait for
-    // the image data to be decoded and update momentarily.
-    if (!tab->data().thumbnail.AsImageSkiaAsync(
-            base::BindOnce(&TabHoverCardBubbleView::UpdatePreviewImage,
-                           weak_factory_.GetWeakPtr()))) {
-      // Check the no-preview color and size to see if it needs to be
-      // regenerated. DPI or theme change can cause a regeneration.
-      const SkColor foreground_color = tab->GetThemeProvider()->GetColor(
-          ThemeProperties::COLOR_HOVER_CARD_NO_PREVIEW_FOREGROUND);
-
-      // Set the no-preview placeholder image. All sizes are in DIPs.
-      // gfx::CreateVectorIcon() caches its result so there's no need to store
-      // images here; if a particular size/color combination has already been
-      // requested it will be low-cost to request it again.
-      constexpr gfx::Size kNoPreviewImageSize{64, 64};
-      const gfx::ImageSkia no_preview_image = gfx::CreateVectorIcon(
-          kGlobeIcon, kNoPreviewImageSize.width(), foreground_color);
-      preview_image_->SetImage(no_preview_image);
-      preview_image_->SetImageSize(kNoPreviewImageSize);
-      preview_image_->SetPreferredSize(GetTabHoverCardPreviewImageSize());
-
-      // Also possibly regenerate the background if it has changed.
-      const SkColor background_color = tab->GetThemeProvider()->GetColor(
-          ThemeProperties::COLOR_HOVER_CARD_NO_PREVIEW_BACKGROUND);
-      if (!preview_image_->background() ||
-          preview_image_->background()->get_color() != background_color) {
-        preview_image_->SetBackground(
-            views::CreateSolidBackground(background_color));
-      }
-    }
+    if (tab->data().thumbnail != thumbnail_image_)
+      ClearPreviewImage();
+    RegisterToThumbnailImageUpdates(tab->data().thumbnail);
   }
 }
 
-void TabHoverCardBubbleView::UpdatePreviewImage(gfx::ImageSkia preview_image) {
+void TabHoverCardBubbleView::RegisterToThumbnailImageUpdates(
+    scoped_refptr<ThumbnailImage> thumbnail_image) {
+  if (thumbnail_image_ == thumbnail_image)
+    return;
+  if (thumbnail_image_) {
+    thumbnail_observer_.Remove(thumbnail_image_.get());
+    thumbnail_image_.reset();
+  }
+  if (thumbnail_image) {
+    thumbnail_image_ = thumbnail_image;
+    thumbnail_observer_.Add(thumbnail_image_.get());
+    thumbnail_image->RequestThumbnailImage();
+  }
+}
+
+void TabHoverCardBubbleView::ClearPreviewImage() {
+  // Check the no-preview color and size to see if it needs to be
+  // regenerated. DPI or theme change can cause a regeneration.
+  const SkColor foreground_color = GetThemeProvider()->GetColor(
+      ThemeProperties::COLOR_HOVER_CARD_NO_PREVIEW_FOREGROUND);
+
+  // Set the no-preview placeholder image. All sizes are in DIPs.
+  // gfx::CreateVectorIcon() caches its result so there's no need to store
+  // images here; if a particular size/color combination has already been
+  // requested it will be low-cost to request it again.
+  constexpr gfx::Size kNoPreviewImageSize{64, 64};
+  const gfx::ImageSkia no_preview_image = gfx::CreateVectorIcon(
+      kGlobeIcon, kNoPreviewImageSize.width(), foreground_color);
+  preview_image_->SetImage(no_preview_image);
+  preview_image_->SetImageSize(kNoPreviewImageSize);
+  preview_image_->SetPreferredSize(GetTabHoverCardPreviewImageSize());
+
+  // Also possibly regenerate the background if it has changed.
+  const SkColor background_color = GetThemeProvider()->GetColor(
+      ThemeProperties::COLOR_HOVER_CARD_NO_PREVIEW_BACKGROUND);
+  if (!preview_image_->background() ||
+      preview_image_->background()->get_color() != background_color) {
+    preview_image_->SetBackground(
+        views::CreateSolidBackground(background_color));
+  }
+}
+
+void TabHoverCardBubbleView::OnThumbnailImageAvailable(
+    gfx::ImageSkia preview_image) {
   preview_image_->SetImage(preview_image);
   preview_image_->SetImageSize(GetTabHoverCardPreviewImageSize());
   preview_image_->SetPreferredSize(GetTabHoverCardPreviewImageSize());
diff --git a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h
index 3b3a1ff5..fa641d70 100644
--- a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h
+++ b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h
@@ -8,8 +8,10 @@
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
+#include "base/scoped_observer.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
+#include "chrome/browser/ui/thumbnails/thumbnail_image.h"
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 
 namespace gfx {
@@ -25,7 +27,8 @@
 class Tab;
 
 // Dialog that displays an informational hover card containing page information.
-class TabHoverCardBubbleView : public views::BubbleDialogDelegateView {
+class TabHoverCardBubbleView : public views::BubbleDialogDelegateView,
+                               public ThumbnailImage::Observer {
  public:
   explicit TabHoverCardBubbleView(Tab* tab);
 
@@ -69,8 +72,15 @@
   // Updates and formats title, domain, and preview image.
   void UpdateCardContent(const Tab* tab);
 
-  void UpdatePreviewImage(gfx::ImageSkia preview_image);
+  void RegisterToThumbnailImageUpdates(
+      scoped_refptr<ThumbnailImage> thumbnail_image);
 
+  void ClearPreviewImage();
+
+  // ThumbnailImage::Observer:
+  void OnThumbnailImageAvailable(gfx::ImageSkia thumbnail_image) override;
+
+  // views::BubbleDialogDelegateView:
   gfx::Size CalculatePreferredSize() const override;
 
   void RecordTimeSinceLastSeenMetric(base::TimeDelta elapsed_time);
@@ -100,6 +110,9 @@
   // Counter used to keey track of the number of tab hover cards seen before a
   // tab is selected by mouse press.
   size_t hover_cards_seen_count_ = 0;
+  scoped_refptr<ThumbnailImage> thumbnail_image_;
+  ScopedObserver<ThumbnailImage, ThumbnailImage::Observer> thumbnail_observer_{
+      this};
 
   base::WeakPtrFactory<TabHoverCardBubbleView> weak_factory_{this};
 
diff --git a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view_browsertest.cc b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view_browsertest.cc
index bb7b46f..dc9dd739 100644
--- a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view_browsertest.cc
@@ -368,8 +368,14 @@
 
 // Verify counter for tab hover cards seen ratio metric increases as hover
 // cards are shown and is reset when a tab is selected.
+// Fails on Windows, see crbug.com/990210.
+#if defined(OS_WIN)
+#define MAYBE_HoverCardsSeenRatioMetric DISABLED_HoverCardsSeenRatioMetric
+#else
+#define MAYBE_HoverCardsSeenRatioMetric HoverCardsSeenRatioMetric
+#endif
 IN_PROC_BROWSER_TEST_F(TabHoverCardBubbleViewBrowserTest,
-                       HoverCardsSeenRatioMetric) {
+                       MAYBE_HoverCardsSeenRatioMetric) {
   TabStrip* tab_strip =
       BrowserView::GetBrowserViewForBrowser(browser())->tabstrip();
   tab_strip->AddTabAt(1, TabRendererData(), false);
diff --git a/chrome/browser/ui/views/tabs/tab_renderer_data.cc b/chrome/browser/ui/views/tabs/tab_renderer_data.cc
index 2e71a69..d2d425c 100644
--- a/chrome/browser/ui/views/tabs/tab_renderer_data.cc
+++ b/chrome/browser/ui/views/tabs/tab_renderer_data.cc
@@ -19,9 +19,8 @@
 
 bool TabRendererData::operator==(const TabRendererData& other) const {
   return favicon.BackedBySameObjectAs(other.favicon) &&
-         thumbnail.BackedBySameObjectAs(other.thumbnail) &&
-         network_state == other.network_state && title == other.title &&
-         visible_url == other.visible_url &&
+         thumbnail == other.thumbnail && network_state == other.network_state &&
+         title == other.title && visible_url == other.visible_url &&
          last_committed_url == other.last_committed_url &&
          crashed_status == other.crashed_status &&
          incognito == other.incognito && show_icon == other.show_icon &&
diff --git a/chrome/browser/ui/views/tabs/tab_renderer_data.h b/chrome/browser/ui/views/tabs/tab_renderer_data.h
index 2f24856b..96d63a5 100644
--- a/chrome/browser/ui/views/tabs/tab_renderer_data.h
+++ b/chrome/browser/ui/views/tabs/tab_renderer_data.h
@@ -30,7 +30,7 @@
   bool IsCrashed() const;
 
   gfx::ImageSkia favicon;
-  ThumbnailImage thumbnail;
+  scoped_refptr<ThumbnailImage> thumbnail;
   TabNetworkState network_state = TabNetworkState::kNone;
   base::string16 title;
   // This corresponds to WebContents::GetVisibleUrl().
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
index 181c5c6c..ed497bb 100644
--- a/chrome/browser/ui/views/tabs/tab_strip.cc
+++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -1871,6 +1871,11 @@
   return controller_->GetVisualDataForGroup(group);
 }
 
+void TabStrip::SetVisualDataForGroup(TabGroupId group,
+                                     TabGroupVisualData visual_data) {
+  controller_->SetVisualDataForGroup(group, visual_data);
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // TabStrip, views::AccessiblePaneView overrides:
 
diff --git a/chrome/browser/ui/views/tabs/tab_strip.h b/chrome/browser/ui/views/tabs/tab_strip.h
index 8135190..6eff6ea 100644
--- a/chrome/browser/ui/views/tabs/tab_strip.h
+++ b/chrome/browser/ui/views/tabs/tab_strip.h
@@ -281,6 +281,8 @@
   float GetHoverOpacityForRadialHighlight() const override;
   const TabGroupVisualData* GetVisualDataForGroup(
       TabGroupId group) const override;
+  void SetVisualDataForGroup(TabGroupId group,
+                             TabGroupVisualData visual_data) override;
 
   // MouseWatcherListener:
   void MouseMovedOutOfHost() override;
diff --git a/chrome/browser/ui/views/tabs/tab_strip_controller.h b/chrome/browser/ui/views/tabs/tab_strip_controller.h
index cb8c4ffd..0e17b91 100644
--- a/chrome/browser/ui/views/tabs/tab_strip_controller.h
+++ b/chrome/browser/ui/views/tabs/tab_strip_controller.h
@@ -115,6 +115,9 @@
   virtual const TabGroupVisualData* GetVisualDataForGroup(
       TabGroupId group) const = 0;
 
+  virtual void SetVisualDataForGroup(TabGroupId group,
+                                     TabGroupVisualData visual_data) = 0;
+
   // Returns the list of tabs in the given |group|.
   virtual std::vector<int> ListTabsInGroup(TabGroupId group) const = 0;
 
diff --git a/chrome/browser/ui/views/tabs/tab_unittest.cc b/chrome/browser/ui/views/tabs/tab_unittest.cc
index f996184..64a2214 100644
--- a/chrome/browser/ui/views/tabs/tab_unittest.cc
+++ b/chrome/browser/ui/views/tabs/tab_unittest.cc
@@ -119,11 +119,15 @@
     return 1.0f;
   }
   float GetHoverOpacityForRadialHighlight() const override { return 1.0f; }
+
   const TabGroupVisualData* GetVisualDataForGroup(
       TabGroupId group) const override {
     return nullptr;
   }
 
+  void SetVisualDataForGroup(TabGroupId group,
+                             TabGroupVisualData visual_data) override {}
+
   void SetTabColors(SkColor bg_color_active,
                     SkColor fg_color_active,
                     SkColor bg_color_inactive,
diff --git a/chrome/browser/ui/views/toolbar/app_menu.cc b/chrome/browser/ui/views/toolbar/app_menu.cc
index ebb134a..dc96b2c 100644
--- a/chrome/browser/ui/views/toolbar/app_menu.cc
+++ b/chrome/browser/ui/views/toolbar/app_menu.cc
@@ -309,15 +309,6 @@
     node_data->role = ax::mojom::Role::kMenu;
   }
 
-  // Overridden from views::View.
-  void SchedulePaintInRect(const gfx::Rect& r) override {
-    // Normally when the mouse enters/exits a button the buttons invokes
-    // SchedulePaint. As part of the button border (InMenuButtonBackground) is
-    // rendered by the button to the left/right of it SchedulePaint on the the
-    // button may not be enough, so this forces a paint all.
-    View::SchedulePaintInRect(gfx::Rect(size()));
-  }
-
   InMenuButton* CreateAndConfigureButton(
       int string_id,
       InMenuButtonBackground::ButtonType type,
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.h b/chrome/browser/ui/views/toolbar/toolbar_view.h
index 48399c3..f00b6054 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.h
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.h
@@ -33,8 +33,8 @@
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/arc/intent_helper/arc_intent_picker_app_fetcher.h"
-#include "components/arc/common/intent_helper.mojom.h"  // nogncheck https://crbug.com/784179
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"  // nogncheck https://crbug.com/784179
 #endif  // defined(OS_CHROMEOS)
 
 class AppMenuButton;
diff --git a/chrome/browser/ui/views/touch_selection_menu_chromeos.h b/chrome/browser/ui/views/touch_selection_menu_chromeos.h
index 58ad06da..3558d833 100644
--- a/chrome/browser/ui/views/touch_selection_menu_chromeos.h
+++ b/chrome/browser/ui/views/touch_selection_menu_chromeos.h
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "ui/views/touchui/touch_selection_menu_views.h"
 
 namespace views {
diff --git a/chrome/browser/ui/views/touch_selection_menu_runner_chromeos.h b/chrome/browser/ui/views/touch_selection_menu_runner_chromeos.h
index fb01bd8..d61a3581 100644
--- a/chrome/browser/ui/views/touch_selection_menu_runner_chromeos.h
+++ b/chrome/browser/ui/views/touch_selection_menu_runner_chromeos.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "ui/aura/window_tracker.h"
 #include "ui/views/touchui/touch_selection_menu_runner_views.h"
 
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view_browsertest.cc b/chrome/browser/ui/views/translate/translate_bubble_view_browsertest.cc
index 113ebc7..afa2c20 100644
--- a/chrome/browser/ui/views/translate/translate_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/translate/translate_bubble_view_browsertest.cc
@@ -12,8 +12,8 @@
 #include "base/macros.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/translate/chrome_translate_client.h"
+#include "chrome/browser/translate/translate_test_utils.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_tabstrip.h"
@@ -23,13 +23,13 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/translate/core/browser/translate_manager.h"
-#include "components/translate/core/common/language_detection_details.h"
-#include "content/public/browser/notification_details.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/ui_base_features.h"
 #include "ui/events/keycodes/dom/dom_code.h"
 #include "ui/views/controls/button/menu_button.h"
 
+namespace translate {
+
 class TranslateBubbleViewBrowserTest : public InProcessBrowserTest {
  public:
   TranslateBubbleViewBrowserTest() {}
@@ -37,34 +37,27 @@
 
   void SetUp() override {
     set_open_about_blank_on_browser_launch(true);
-    translate::TranslateManager::SetIgnoreMissingKeyForTesting(true);
+    TranslateManager::SetIgnoreMissingKeyForTesting(true);
     InProcessBrowserTest::SetUp();
   }
 
  protected:
   void NavigateAndWaitForLanguageDetection(const GURL& url,
                                            const std::string& expected_lang) {
-    expected_lang_ = expected_lang;
-    content::WindowedNotificationObserver language_detected_signal(
-        chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
-        base::Bind(&TranslateBubbleViewBrowserTest::OnLanguageDetermined,
-                   base::Unretained(this)));
-
     ui_test_utils::NavigateToURL(browser(), url);
-    language_detected_signal.Wait();
+
+    while (expected_lang !=
+           ChromeTranslateClient::FromWebContents(
+               browser()->tab_strip_model()->GetActiveWebContents())
+               ->GetLanguageState()
+               .original_language()) {
+      TranslateWaiter(browser()->tab_strip_model()->GetActiveWebContents(),
+                      TranslateWaiter::WaitEvent::kLanguageDetermined)
+          .Wait();
+    }
   }
 
  private:
-  std::string expected_lang_;
-
-  bool OnLanguageDetermined(const content::NotificationSource& source,
-                            const content::NotificationDetails& details) {
-    const std::string& language =
-        content::Details<translate::LanguageDetectionDetails>(details)
-            ->cld_language;
-    return language == expected_lang_;
-  }
-
   DISALLOW_COPY_AND_ASSIGN(TranslateBubbleViewBrowserTest);
 };
 
@@ -90,8 +83,6 @@
   EXPECT_FALSE(TranslateBubbleView::GetCurrentBubble());
 
   // Show a French page and wait until the bubble is shown.
-  content::WebContents* current_web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
   GURL french_url = ui_test_utils::GetTestUrl(
       base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html")));
   NavigateAndWaitForLanguageDetection(french_url, "fr");
@@ -100,7 +91,8 @@
   // Close the tab without translating. Spin the runloop to allow asynchronous
   // window closure to happen.
   EXPECT_EQ(1, browser()->tab_strip_model()->count());
-  chrome::CloseWebContents(browser(), current_web_contents, false);
+  chrome::CloseWebContents(
+      browser(), browser()->tab_strip_model()->GetActiveWebContents(), false);
   base::RunLoop().RunUntilIdle();
   EXPECT_FALSE(TranslateBubbleView::GetCurrentBubble());
 }
@@ -136,3 +128,5 @@
                            browser()->tab_strip_model()->GetActiveWebContents(),
                            false);
 }
+
+}  // namespace translate
diff --git a/chrome/browser/ui/views/translate/translate_language_browsertest.cc b/chrome/browser/ui/views/translate/translate_language_browsertest.cc
index f0974d3..0590946 100644
--- a/chrome/browser/ui/views/translate/translate_language_browsertest.cc
+++ b/chrome/browser/ui/views/translate/translate_language_browsertest.cc
@@ -14,9 +14,10 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
-#include "chrome/browser/chrome_notification_types.h"
+#include "build/build_config.h"
 #include "chrome/browser/language/url_language_histogram_factory.h"
 #include "chrome/browser/translate/translate_service.h"
+#include "chrome/browser/translate/translate_test_utils.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
@@ -31,11 +32,11 @@
 #include "components/translate/core/browser/translate_ui_delegate.h"
 #include "components/translate/core/common/language_detection_details.h"
 #include "components/translate/core/common/translate_switches.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/test/browser_test_utils.h"
 #include "net/test/embedded_test_server/controllable_http_response.h"
 #include "url/gurl.h"
 
+namespace translate {
+
 namespace {
 
 const base::FilePath::CharType kEnglishTestPath[] =
@@ -72,7 +73,7 @@
     "})();"
     "cr.googleTranslate.onTranslateElementLoad();";
 
-using translate::test_utils::GetCurrentModel;
+using test_utils::GetCurrentModel;
 
 using LanguageInfo = language::UrlLanguageHistogram::LanguageInfo;
 
@@ -84,14 +85,14 @@
 
   void SetUp() override {
     set_open_about_blank_on_browser_launch(true);
-    translate::TranslateManager::SetIgnoreMissingKeyForTesting(true);
+    TranslateManager::SetIgnoreMissingKeyForTesting(true);
     ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
     InProcessBrowserTest::SetUp();
   }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
     command_line->AppendSwitchASCII(
-        translate::switches::kTranslateScriptURL,
+        switches::kTranslateScriptURL,
         embedded_test_server()->GetURL("/mock_translate_script.js").spec());
   }
 
@@ -129,17 +130,23 @@
 
   void CheckForTranslateUI(const base::FilePath::StringPieceType path,
                            const bool expect_translate) {
-    CHECK(browser_);
+    ASSERT_TRUE(browser_);
 
-    content::WindowedNotificationObserver language_detected_signal(
-        chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
-        base::Bind(&TranslateLanguageBrowserTest::ValidLanguageDetected,
-                   base::Unretained(this)));
+    TranslateWaiter waiter(browser_->tab_strip_model()->GetActiveWebContents(),
+                           TranslateWaiter::WaitEvent::kLanguageDetermined);
     NavigateToUrl(path);
-    language_detected_signal.Wait();
+    waiter.Wait();
+
+    // Language detection sometimes fires early with an "und" detected code.
+    while (GetLanguageState().original_language() == "und" ||
+           GetLanguageState().original_language().empty()) {
+      TranslateWaiter(browser_->tab_strip_model()->GetActiveWebContents(),
+                      TranslateWaiter::WaitEvent::kLanguageDetermined)
+          .Wait();
+    }
 
     TranslateBubbleView* const bubble = TranslateBubbleView::GetCurrentBubble();
-    CHECK_NE(expect_translate, bubble == nullptr);
+    ASSERT_NE(expect_translate, bubble == nullptr);
   }
 
   language::UrlLanguageHistogram* GetUrlLanguageHistogram() {
@@ -153,29 +160,28 @@
   }
 
   void SetTargetLanguageByDisplayName(const base::string16& name) {
-    translate::test_utils::SelectTargetLanguageByDisplayName(browser_, name);
+    test_utils::SelectTargetLanguageByDisplayName(browser_, name);
   }
 
   void Translate(const bool first_translate) {
-    content::WindowedNotificationObserver page_translated_signal(
-        chrome::NOTIFICATION_PAGE_TRANSLATED,
-        content::NotificationService::AllSources());
+    TranslateWaiter waiter(browser_->tab_strip_model()->GetActiveWebContents(),
+                           TranslateWaiter::WaitEvent::kPageTranslated);
 
     EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE,
               GetCurrentModel(browser_)->GetViewState());
 
-    translate::test_utils::PressTranslate(browser_);
+    test_utils::PressTranslate(browser_);
     if (first_translate)
       SimulateURLFetch();
 
-    page_translated_signal.Wait();
+    waiter.Wait();
     EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE,
               GetCurrentModel(browser_)->GetViewState());
   }
 
-  void Revert() { translate::test_utils::PressRevert(browser_); }
+  void Revert() { test_utils::PressRevert(browser_); }
 
-  translate::LanguageState& GetLanguageState() {
+  LanguageState& GetLanguageState() {
     auto* const client = ChromeTranslateClient::FromWebContents(
         browser_->tab_strip_model()->GetActiveWebContents());
     CHECK(client);
@@ -183,7 +189,7 @@
     return client->GetLanguageState();
   }
 
-  std::unique_ptr<translate::TranslatePrefs> GetTranslatePrefs() {
+  std::unique_ptr<TranslatePrefs> GetTranslatePrefs() {
     auto* const client = ChromeTranslateClient::FromWebContents(
         browser_->tab_strip_model()->GetActiveWebContents());
     CHECK(client);
@@ -194,16 +200,6 @@
  private:
   Browser* browser_;
 
-  // Language detection sometimes fires early with an "und" detected code. This
-  // callback is used to wait until language detection succeeds.
-  bool ValidLanguageDetected(const content::NotificationSource& source,
-                             const content::NotificationDetails& details) {
-    const std::string& language =
-        content::Details<translate::LanguageDetectionDetails>(details)
-            ->adopted_language;
-    return language != "und";
-  }
-
   void SimulateURLFetch() {
     controllable_http_response_->WaitForRequest();
     controllable_http_response_->Send(
@@ -245,7 +241,8 @@
   EXPECT_NEAR(10.0 / (11.0 + 10.0), langs[1].frequency, 0.001f);
 }
 
-#if defined(OS_LINUX)
+// https://crbug.com/863241
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
 #define MAYBE_DontLogInIncognito DISABLED_DontLogInIncognito
 #else
 #define MAYBE_DontLogInIncognito DontLogInIncognito
@@ -284,7 +281,7 @@
 
 IN_PROC_BROWSER_TEST_F(TranslateLanguageBrowserTest, RecentTargetLanguage) {
   base::test::ScopedFeatureList enable_feature;
-  enable_feature.InitAndEnableFeature(translate::kTranslateRecentTarget);
+  enable_feature.InitAndEnableFeature(kTranslateRecentTarget);
 
   InitInIncognitoMode(false);
 
@@ -304,11 +301,10 @@
 
   // Load a French page. This should trigger an auto-translate to Chinese, but
   // not a recent target update.
-  content::WindowedNotificationObserver page_translated_signal(
-      chrome::NOTIFICATION_PAGE_TRANSLATED,
-      content::NotificationService::AllSources());
+  TranslateWaiter waiter(browser()->tab_strip_model()->GetActiveWebContents(),
+                         TranslateWaiter::WaitEvent::kPageTranslated);
   NavigateToUrl(kFrenchTestPath);
-  page_translated_signal.Wait();
+  waiter.Wait();
   EXPECT_EQ("zh-CN", GetLanguageState().current_language());
   EXPECT_EQ("es", GetTranslatePrefs()->GetRecentTargetLanguage());
 
@@ -321,4 +317,6 @@
   EXPECT_EQ("es", GetTranslatePrefs()->GetRecentTargetLanguage());
 }
 
+}  // namespace translate
+
 #endif  // defined(USE_AURA)
diff --git a/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc b/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc
index 2720d085..0ed91c58 100644
--- a/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc
+++ b/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.cc
@@ -41,9 +41,7 @@
 
 AuthenticatorRequestSheetView::AuthenticatorRequestSheetView(
     std::unique_ptr<AuthenticatorRequestSheetModel> model)
-    : model_(std::move(model)),
-      in_dark_mode_(
-          ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()) {}
+    : model_(std::move(model)) {}
 
 AuthenticatorRequestSheetView::~AuthenticatorRequestSheetView() = default;
 
@@ -199,20 +197,17 @@
 }
 
 void AuthenticatorRequestSheetView::OnThemeChanged() {
-  ui::NativeTheme* theme = GetNativeTheme();
-  if (theme != ui::NativeTheme::GetInstanceForNativeUi())
-    return;
-  bool in_dark_mode = theme->SystemDarkModeEnabled();
-  if (in_dark_mode == in_dark_mode_)
-    return;
-  in_dark_mode_ = in_dark_mode;
   UpdateIconImageFromModel();
 }
 
 void AuthenticatorRequestSheetView::UpdateIconImageFromModel() {
+  if (!step_illustration_)
+    return;
+
   gfx::IconDescription icon_description(
-      model()->GetStepIllustration(in_dark_mode_ ? ImageColorScheme::kDark
-                                                 : ImageColorScheme::kLight),
+      model()->GetStepIllustration(GetNativeTheme()->ShouldUseDarkColors()
+                                       ? ImageColorScheme::kDark
+                                       : ImageColorScheme::kLight),
       0 /* automatic dip_size */, SK_ColorBLACK, base::TimeDelta(),
       gfx::kNoneIcon);
   step_illustration_->SetImage(gfx::CreateVectorIcon(icon_description));
diff --git a/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.h b/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.h
index 0a5f7a59..0b9e51a 100644
--- a/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.h
+++ b/chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.h
@@ -94,7 +94,6 @@
   void OnThemeChanged() override;
 
   std::unique_ptr<AuthenticatorRequestSheetModel> model_;
-  bool in_dark_mode_;
   views::Button* back_arrow_button_ = nullptr;
   views::View* step_specific_content_ = nullptr;
   NonAccessibleImageView* step_illustration_ = nullptr;
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.h b/chrome/browser/ui/web_applications/app_browser_controller.h
index e24c9bb..e289454a 100644
--- a/chrome/browser/ui/web_applications/app_browser_controller.h
+++ b/chrome/browser/ui/web_applications/app_browser_controller.h
@@ -60,9 +60,9 @@
   // Whether the browser should include the tab strip.
   virtual bool HasTabStrip() const;
 
-  // Returns true if the hosted app buttons should be shown in the frame for
-  // this BrowserView.
-  virtual bool ShouldShowHostedAppButtonContainer() const = 0;
+  // Whether the browser toolbar is present.
+  // Note: web app windows have their browser toolbar inline in their titlebar.
+  virtual bool HasTitlebarToolbar() const = 0;
 
   // Returns the app icon for the window to use in the task list.
   virtual gfx::ImageSkia GetWindowAppIcon() const = 0;
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
index 2a6c44ac..fb2dd29f 100644
--- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc
+++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -36,7 +36,7 @@
   return false;
 }
 
-bool WebAppBrowserController::ShouldShowHostedAppButtonContainer() const {
+bool WebAppBrowserController::HasTitlebarToolbar() const {
   return true;
 }
 
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.h b/chrome/browser/ui/web_applications/web_app_browser_controller.h
index 4cc0993..14da2a2a 100644
--- a/chrome/browser/ui/web_applications/web_app_browser_controller.h
+++ b/chrome/browser/ui/web_applications/web_app_browser_controller.h
@@ -38,7 +38,7 @@
   base::Optional<AppId> GetAppId() const override;
   bool CreatedForInstalledPwa() const override;
   bool ShouldShowCustomTabBar() const override;
-  bool ShouldShowHostedAppButtonContainer() const override;
+  bool HasTitlebarToolbar() const override;
   gfx::ImageSkia GetWindowAppIcon() const override;
   gfx::ImageSkia GetWindowIcon() const override;
   base::Optional<SkColor> GetThemeColor() const override;
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index ce7e20f..27d8865 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -514,7 +514,7 @@
     return &NewWebUI<chromeos::AccountManagerWelcomeUI>;
   if (url.host_piece() == chrome::kChromeUIAccountMigrationWelcomeHost)
     return &NewWebUI<chromeos::AccountMigrationWelcomeUI>;
-  if (chromeos::switches::IsParentalControlsSettingsEnabled()) {
+  if (chromeos::features::IsParentalControlsSettingsEnabled()) {
     if (url.host_piece() == chrome::kChromeUIAddSupervisionHost)
       return &NewWebUI<chromeos::AddSupervisionUI>;
   }
diff --git a/chrome/browser/ui/webui/downloads/downloads_ui.cc b/chrome/browser/ui/webui/downloads/downloads_ui.cc
index b2b55ef5..2966f74 100644
--- a/chrome/browser/ui/webui/downloads/downloads_ui.cc
+++ b/chrome/browser/ui/webui/downloads/downloads_ui.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/defaults.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h"
+#include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
 #include "chrome/browser/ui/webui/downloads/downloads_dom_handler.h"
 #include "chrome/browser/ui/webui/localized_string.h"
 #include "chrome/browser/ui/webui/managed_ui_handler.h"
@@ -51,8 +52,10 @@
   content::WebUIDataSource* source =
       content::WebUIDataSource::Create(chrome::kChromeUIDownloadsHost);
 
-  bool requests_ap_verdicts = safe_browsing::AdvancedProtectionStatusManager::
-      RequestsAdvancedProtectionVerdicts(profile);
+  bool requests_ap_verdicts =
+      safe_browsing::AdvancedProtectionStatusManagerFactory::GetForProfile(
+          profile)
+          ->RequestsAdvancedProtectionVerdicts();
   source->AddBoolean("requestsApVerdicts", requests_ap_verdicts);
 
   static constexpr LocalizedString kStrings[] = {
diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui/favicon_source.cc
index 603e029..498c9de6 100644
--- a/chrome/browser/ui/webui/favicon_source.cc
+++ b/chrome/browser/ui/webui/favicon_source.cc
@@ -225,7 +225,7 @@
     const content::URLDataSource::GotDataCallback& callback,
     int size_in_dip,
     float scale_factor) {
-  const bool dark = GetNativeTheme()->SystemDarkModeEnabled();
+  const bool dark = GetNativeTheme()->ShouldUseDarkColors();
   int resource_id;
   switch (size_in_dip) {
     case 64:
diff --git a/chrome/browser/ui/webui/omnibox/omnibox.mojom b/chrome/browser/ui/webui/omnibox/omnibox.mojom
index 42d400c..7ffa397 100644
--- a/chrome/browser/ui/webui/omnibox/omnibox.mojom
+++ b/chrome/browser/ui/webui/omnibox/omnibox.mojom
@@ -31,6 +31,7 @@
   array<ACMatchClassification> contents_class;
   string description;
   array<ACMatchClassification> description_class;
+  bool swap_contents_and_description;
   string answer;
   string transition;
   bool allowed_to_be_default_match;
diff --git a/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc b/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc
index 3775012..5c1b406 100644
--- a/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc
+++ b/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc
@@ -174,6 +174,7 @@
     result->description_class =
         mojo::ConvertTo<std::vector<mojom::ACMatchClassificationPtr>>(
             input.description_class);
+    result->swap_contents_and_description = input.swap_contents_and_description;
     if (input.answer) {
       result->answer =
           SuggestionAnswerImageLineToString(input.answer->first_line()) +
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
index cefa5753..0abc8d5 100644
--- a/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
+++ b/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h
@@ -19,7 +19,7 @@
 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
 #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
 #include "chromeos/dbus/cryptohome/rpc.pb.h"
-#include "components/arc/common/storage_manager.mojom.h"
+#include "components/arc/mojom/storage_manager.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/arc/storage_manager/arc_storage_manager.h"
 #include "components/user_manager/user.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc b/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc
index 25814f62..1c3e62b 100644
--- a/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.h"
 #include "chromeos/audio/cras_audio_handler.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/services/assistant/public/mojom/constants.mojom.h"
 #include "components/arc/arc_prefs.h"
 #include "components/arc/arc_service_manager.h"
@@ -77,7 +77,7 @@
 void GoogleAssistantHandler::HandleShowGoogleAssistantSettings(
     const base::ListValue* args) {
   CHECK_EQ(0U, args->GetSize());
-  if (chromeos::switches::IsAssistantEnabled())
+  if (chromeos::features::IsAssistantEnabled())
     ash::OpenAssistantSettings();
 }
 
diff --git a/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc b/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
index 6d0b2214..58bb681 100644
--- a/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc
@@ -18,8 +18,8 @@
 #include "chromeos/network/network_state.h"
 #include "chromeos/network/network_state_handler.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/net.mojom.h"
 #include "components/arc/metrics/arc_metrics_constants.h"
+#include "components/arc/mojom/net.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/onc/onc_constants.h"
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 9fae327..b318c60a 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1612,6 +1612,10 @@
       "secondaryUserBannerText",
       l10n_util::GetStringFUTF16(IDS_SETTINGS_SECONDARY_USER_BANNER,
                                  base::ASCIIToUTF16(primary_user_email)));
+  html_source->AddString(
+      "browserSettingsBannerText",
+      l10n_util::GetStringFUTF16(IDS_SETTINGS_BROWSER_SETTINGS_BANNER,
+                                 base::ASCIIToUTF16("chrome://settings")));
   html_source->AddBoolean("isActiveDirectoryUser",
                           user && user->IsActiveDirectoryUser());
 
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc
index d02786b..fb777f8d 100644
--- a/chrome/browser/ui/webui/settings/settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -121,7 +121,6 @@
 #include "chromeos/components/account_manager/account_manager_factory.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "chromeos/constants/chromeos_pref_names.h"
-#include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/login/auth/password_visibility_utils.h"
 #include "chromeos/services/multidevice_setup/public/cpp/prefs.h"
 #include "chromeos/services/network_config/public/mojom/constants.mojom.h"  // nogncheck
@@ -163,7 +162,7 @@
   // primary profile.  Do not show it to any secondary profiles, managed
   // accounts that aren't child accounts (i.e. enterprise and EDU accounts),
   // OTR accounts, or legacy supervised user accounts.
-  return chromeos::switches::IsParentalControlsSettingsEnabled() &&
+  return chromeos::features::IsParentalControlsSettingsEnabled() &&
          profile == ProfileManager::GetPrimaryUserProfile() &&
          !profile->IsLegacySupervised() && !profile->IsGuestSession() &&
          (profile->IsChild() ||
@@ -412,7 +411,7 @@
       chromeos::settings::DateTimeHandler::Create(html_source)));
   web_ui->AddMessageHandler(
       std::make_unique<chromeos::settings::FingerprintHandler>(profile));
-  if (chromeos::switches::IsAssistantEnabled()) {
+  if (chromeos::features::IsAssistantEnabled()) {
     web_ui->AddMessageHandler(
         std::make_unique<chromeos::settings::GoogleAssistantHandler>(profile));
   }
@@ -513,7 +512,7 @@
                           chromeos::DemoSession::IsDeviceInDemoMode());
 
   html_source->AddBoolean("assistantEnabled",
-                          chromeos::switches::IsAssistantEnabled());
+                          chromeos::features::IsAssistantEnabled());
 
   // We have 2 variants of Android apps settings. Default case, when the Play
   // Store app exists we show expandable section that allows as to
diff --git a/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc b/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc
index e675f69..9d5abee 100644
--- a/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc
+++ b/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc
@@ -56,8 +56,7 @@
   GURL url = backgrounds[index_];
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = url;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   simple_loader_ = network::SimpleURLLoader::Create(std::move(resource_request),
                                                     traffic_annotation);
 
diff --git a/chrome/browser/usb/web_usb_service_impl.cc b/chrome/browser/usb/web_usb_service_impl.cc
index 031b384..a59767f 100644
--- a/chrome/browser/usb/web_usb_service_impl.cc
+++ b/chrome/browser/usb/web_usb_service_impl.cc
@@ -14,7 +14,7 @@
 #include "chrome/browser/usb/usb_chooser_context_factory.h"
 #include "chrome/browser/usb/usb_tab_helper.h"
 #include "content/public/browser/browser_thread.h"
-#include "media/mojo/interfaces/remoting_common.mojom.h"
+#include "media/mojo/mojom/remoting_common.mojom.h"
 #include "services/device/public/mojom/usb_enumeration_options.mojom.h"
 
 WebUsbServiceImpl::WebUsbServiceImpl(
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 790edaa0..515fb462 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -61,7 +61,7 @@
       "//ash/public/cpp:cpp",
       "//chromeos/constants",
       "//components/arc:arc_base",
-      "//components/arc/common",
+      "//components/arc/mojom",
     ]
   }
 
@@ -129,6 +129,7 @@
   deps = [
     ":web_app_test_group",
     ":web_applications",
+    ":web_applications_on_extensions_test_support",
     ":web_applications_test_support",
     "//base/test:test_support",
     "//chrome/browser",
@@ -145,7 +146,7 @@
       "//chrome/browser/chromeos",
       "//components/arc:arc",
       "//components/arc:arc_test_support",
-      "//components/arc/common",
+      "//components/arc/mojom",
     ]
   }
 }
diff --git a/chrome/browser/web_applications/components/app_registrar.cc b/chrome/browser/web_applications/components/app_registrar.cc
index f7a683f..f74593c5 100644
--- a/chrome/browser/web_applications/components/app_registrar.cc
+++ b/chrome/browser/web_applications/components/app_registrar.cc
@@ -19,6 +19,14 @@
     observer.OnAppRegistrarDestroyed();
 }
 
+WebAppRegistrar* AppRegistrar::AsWebAppRegistrar() {
+  return nullptr;
+}
+
+extensions::BookmarkAppRegistrar* AppRegistrar::AsBookmarkAppRegistrar() {
+  return nullptr;
+}
+
 void AppRegistrar::AddObserver(AppRegistrarObserver* observer) {
   observers_.AddObserver(observer);
 }
diff --git a/chrome/browser/web_applications/components/app_registrar.h b/chrome/browser/web_applications/components/app_registrar.h
index 3cd33ac..87b1f538 100644
--- a/chrome/browser/web_applications/components/app_registrar.h
+++ b/chrome/browser/web_applications/components/app_registrar.h
@@ -15,9 +15,14 @@
 class GURL;
 class Profile;
 
+namespace extensions {
+class BookmarkAppRegistrar;
+}
+
 namespace web_app {
 
 class AppRegistrarObserver;
+class WebAppRegistrar;
 
 enum class ExternalInstallSource;
 
@@ -28,6 +33,10 @@
 
   virtual void Init(base::OnceClosure callback) = 0;
 
+  // Safe downcasts. TODO(loyso): Subclass WebAppProvider to get rid of these:
+  virtual WebAppRegistrar* AsWebAppRegistrar();
+  virtual extensions::BookmarkAppRegistrar* AsBookmarkAppRegistrar();
+
   // Returns true if the app with the specified |start_url| is currently fully
   // locally installed. The provided |start_url| must exactly match the launch
   // URL for the app; this method does not consult the app scope or match URLs
@@ -80,10 +89,11 @@
   void AddObserver(AppRegistrarObserver* observer);
   void RemoveObserver(const AppRegistrarObserver* observer);
 
+  void NotifyWebAppInstalled(const AppId& app_id);
+
  protected:
   Profile* profile() const { return profile_; }
 
-  void NotifyWebAppInstalled(const AppId& app_id);
   void NotifyWebAppUninstalled(const AppId& app_id);
   void NotifyAppRegistrarShutdown();
 
diff --git a/chrome/browser/web_applications/components/install_finalizer.cc b/chrome/browser/web_applications/components/install_finalizer.cc
index 23485f24..35094af 100644
--- a/chrome/browser/web_applications/components/install_finalizer.cc
+++ b/chrome/browser/web_applications/components/install_finalizer.cc
@@ -9,7 +9,9 @@
 
 namespace web_app {
 
-void InstallFinalizer::SetSubsystems(WebAppUiManager* ui_manager) {
+void InstallFinalizer::SetSubsystems(AppRegistrar* registrar,
+                                     WebAppUiManager* ui_manager) {
+  registrar_ = registrar;
   ui_manager_ = ui_manager;
 }
 
diff --git a/chrome/browser/web_applications/components/install_finalizer.h b/chrome/browser/web_applications/components/install_finalizer.h
index 31233b3..e0254bc 100644
--- a/chrome/browser/web_applications/components/install_finalizer.h
+++ b/chrome/browser/web_applications/components/install_finalizer.h
@@ -21,6 +21,7 @@
 namespace web_app {
 
 enum class InstallResultCode;
+class AppRegistrar;
 class WebAppUiManager;
 
 // An abstract finalizer for the installation process, represents the last step.
@@ -28,8 +29,6 @@
 // and registers an app.
 class InstallFinalizer {
  public:
-  void SetSubsystems(WebAppUiManager* ui_manager);
-
   using InstallFinalizedCallback =
       base::OnceCallback<void(const AppId& app_id, InstallResultCode code)>;
   using UninstallExternalWebAppCallback =
@@ -76,12 +75,20 @@
       const AppId& app_id,
       const WebApplicationInfo& web_app_info) const = 0;
 
+  // TODO(loyso): This method should be protected and subclasses should call it
+  // (upcasting their final registrar type). Subclassing WebAppProvider will fix
+  // this.
+  virtual void SetSubsystems(AppRegistrar* registrar,
+                             WebAppUiManager* ui_manager);
+
   virtual ~InstallFinalizer() = default;
 
  protected:
+  AppRegistrar& registrar() const { return *registrar_; }
   WebAppUiManager& ui_manager() const { return *ui_manager_; }
 
  private:
+  AppRegistrar* registrar_ = nullptr;
   WebAppUiManager* ui_manager_ = nullptr;
 };
 
diff --git a/chrome/browser/web_applications/components/install_manager.h b/chrome/browser/web_applications/components/install_manager.h
index f175f48..4b048ef 100644
--- a/chrome/browser/web_applications/components/install_manager.h
+++ b/chrome/browser/web_applications/components/install_manager.h
@@ -113,6 +113,8 @@
       std::unique_ptr<WebApplicationInfo> web_application_info,
       OnceInstallCallback callback) = 0;
 
+  virtual void Shutdown() = 0;
+
   // Starts background installation of a web app from the given
   // |web_application_info|.
   virtual void InstallWebAppForTesting(
diff --git a/chrome/browser/web_applications/components/pending_app_manager.h b/chrome/browser/web_applications/components/pending_app_manager.h
index 751717a2..a9599bc 100644
--- a/chrome/browser/web_applications/components/pending_app_manager.h
+++ b/chrome/browser/web_applications/components/pending_app_manager.h
@@ -100,6 +100,8 @@
       ExternalInstallSource install_source,
       SynchronizeCallback callback);
 
+  virtual void Shutdown() = 0;
+
  protected:
   AppRegistrar* registrar() { return registrar_; }
   WebAppUiManager* ui_manager() { return ui_manager_; }
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.cc b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.cc
index 5d6b25b..a96ed34 100644
--- a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.cc
+++ b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.cc
@@ -8,78 +8,38 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/command_line.h"
 #include "base/logging.h"
 #include "base/optional.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/extensions/bookmark_app_extension_util.h"
+#include "build/build_config.h"
 #include "chrome/browser/extensions/crx_installer.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/launch_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
-#include "chrome/browser/web_applications/components/web_app_helpers.h"
 #include "chrome/browser/web_applications/extensions/bookmark_app_finalizer_utils.h"
+#include "chrome/browser/web_applications/extensions/bookmark_app_registrar.h"
 #include "chrome/browser/web_applications/extensions/bookmark_app_util.h"
+#include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
 #include "chrome/common/web_application_info.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
-#include "extensions/browser/install/crx_install_error.h"
 #include "extensions/browser/uninstall_reason.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_id.h"
 #include "extensions/common/extension_set.h"
 #include "url/gurl.h"
 
+#if defined(OS_MACOSX)
+#include "chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.h"
+#endif
+
 namespace extensions {
 
-namespace {
-
-const Extension* GetExtensionById(Profile* profile,
-                                  const web_app::AppId& app_id) {
-  const Extension* app =
-      ExtensionRegistry::Get(profile)->enabled_extensions().GetByID(app_id);
-  DCHECK(app);
-  return app;
-}
-
-void OnExtensionInstalled(
-    const GURL& app_url,
-    LaunchType launch_type,
-    bool is_locally_installed,
-    web_app::InstallFinalizer::InstallFinalizedCallback callback,
-    scoped_refptr<CrxInstaller> crx_installer,
-    const base::Optional<CrxInstallError>& error) {
-  if (error) {
-    std::move(callback).Run(web_app::AppId(),
-                            web_app::InstallResultCode::kFailedUnknownReason);
-    return;
-  }
-
-  const Extension* extension = crx_installer->extension();
-  DCHECK(extension);
-  if (extension !=
-      GetExtensionById(crx_installer->profile(), extension->id())) {
-    std::move(callback).Run(web_app::AppId(),
-                            web_app::InstallResultCode::kWebAppDisabled);
-    return;
-  }
-
-  DCHECK_EQ(AppLaunchInfo::GetLaunchWebURL(extension), app_url);
-
-  SetLaunchType(crx_installer->profile(), extension->id(), launch_type);
-
-  SetBookmarkAppIsLocallyInstalled(crx_installer->profile(), extension,
-                                   is_locally_installed);
-
-  std::move(callback).Run(extension->id(),
-                          web_app::InstallResultCode::kSuccess);
-}
-
-}  // namespace
-
 BookmarkAppInstallFinalizer::BookmarkAppInstallFinalizer(Profile* profile)
-    : profile_(profile), externally_installed_app_prefs_(profile->GetPrefs()) {
+    : externally_installed_app_prefs_(profile->GetPrefs()), profile_(profile) {
   crx_installer_factory_ = base::BindRepeating([](Profile* profile) {
     ExtensionService* extension_service =
         ExtensionSystem::Get(profile)->extension_service();
@@ -114,7 +74,8 @@
   }
 
   crx_installer->set_installer_callback(base::BindOnce(
-      OnExtensionInstalled, web_app_info.app_url, launch_type,
+      &BookmarkAppInstallFinalizer::OnExtensionInstalled,
+      weak_ptr_factory_.GetWeakPtr(), web_app_info.app_url, launch_type,
       options.locally_installed, std::move(callback), crx_installer));
 
   switch (options.install_source) {
@@ -200,14 +161,14 @@
     const web_app::AppId& app_id,
     bool add_to_desktop,
     CreateOsShortcutsCallback callback) {
-  const Extension* app = GetExtensionById(profile_, app_id);
+  const Extension* app = GetExtensionById(app_id);
   BookmarkAppCreateOsShortcuts(profile_, app, add_to_desktop,
                                std::move(callback));
 }
 
 bool BookmarkAppInstallFinalizer::CanReparentTab(const web_app::AppId& app_id,
                                                  bool shortcut_created) const {
-  const Extension* app = GetExtensionById(profile_, app_id);
+  const Extension* app = GetExtensionById(app_id);
   // Reparent the web contents into its own window only if that is the
   // app's launch type.
   if (!app ||
@@ -220,12 +181,22 @@
 }
 
 bool BookmarkAppInstallFinalizer::CanRevealAppShim() const {
-  return CanBookmarkAppRevealAppShim();
+#if defined(OS_MACOSX)
+  return true;
+#else   // defined(OS_MACOSX)
+  return false;
+#endif  // !defined(OS_MACOSX)
 }
 
 void BookmarkAppInstallFinalizer::RevealAppShim(const web_app::AppId& app_id) {
-  const Extension* app = GetExtensionById(profile_, app_id);
-  BookmarkAppRevealAppShim(profile_, app);
+  DCHECK(CanRevealAppShim());
+#if defined(OS_MACOSX)
+  const Extension* app = GetExtensionById(app_id);
+  if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+          ::switches::kDisableHostedAppShimCreation)) {
+    web_app::RevealAppShimInFinderForApp(profile_, app);
+  }
+#endif  // defined(OS_MACOSX)
 }
 
 bool BookmarkAppInstallFinalizer::CanSkipAppUpdateForSync(
@@ -253,9 +224,58 @@
   return false;
 }
 
+void BookmarkAppInstallFinalizer::SetSubsystems(
+    web_app::AppRegistrar* registrar,
+    web_app::WebAppUiManager* ui_manager) {
+  registrar_ = registrar ? registrar->AsBookmarkAppRegistrar() : nullptr;
+  InstallFinalizer::SetSubsystems(registrar, ui_manager);
+}
+
 void BookmarkAppInstallFinalizer::SetCrxInstallerFactoryForTesting(
     CrxInstallerFactory crx_installer_factory) {
   crx_installer_factory_ = crx_installer_factory;
 }
 
+const Extension* BookmarkAppInstallFinalizer::GetExtensionById(
+    const web_app::AppId& app_id) const {
+  const Extension* app =
+      ExtensionRegistry::Get(profile_)->enabled_extensions().GetByID(app_id);
+  DCHECK(app);
+  return app;
+}
+
+void BookmarkAppInstallFinalizer::OnExtensionInstalled(
+    const GURL& app_url,
+    LaunchType launch_type,
+    bool is_locally_installed,
+    web_app::InstallFinalizer::InstallFinalizedCallback callback,
+    scoped_refptr<CrxInstaller> crx_installer,
+    const base::Optional<CrxInstallError>& error) {
+  if (error) {
+    std::move(callback).Run(web_app::AppId(),
+                            web_app::InstallResultCode::kFailedUnknownReason);
+    return;
+  }
+
+  const Extension* extension = crx_installer->extension();
+  DCHECK(extension);
+  if (extension != GetExtensionById(extension->id())) {
+    std::move(callback).Run(web_app::AppId(),
+                            web_app::InstallResultCode::kWebAppDisabled);
+    return;
+  }
+
+  DCHECK_EQ(AppLaunchInfo::GetLaunchWebURL(extension), app_url);
+
+  SetLaunchType(profile_, extension->id(), launch_type);
+
+  SetBookmarkAppIsLocallyInstalled(profile_, extension, is_locally_installed);
+
+  DCHECK(registrar_);
+  registrar_->NotifyWebAppInstalled(extension->id());
+
+  std::move(callback).Run(extension->id(),
+                          web_app::InstallResultCode::kSuccess);
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.h b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.h
index 6eea5b6..12ea1a7 100644
--- a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.h
+++ b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer.h
@@ -8,14 +8,20 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
 #include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h"
 #include "chrome/browser/web_applications/components/install_finalizer.h"
+#include "chrome/browser/web_applications/components/web_app_helpers.h"
+#include "extensions/browser/install/crx_install_error.h"
+#include "extensions/common/constants.h"
 
 class Profile;
 
 namespace extensions {
 
+class BookmarkAppRegistrar;
 class CrxInstaller;
+class Extension;
 
 // Class used to actually install the Bookmark App in the system.
 // TODO(loyso): Erase this subclass once crbug.com/877898 fixed.
@@ -44,6 +50,8 @@
   bool CanSkipAppUpdateForSync(
       const web_app::AppId& app_id,
       const WebApplicationInfo& web_app_info) const override;
+  void SetSubsystems(web_app::AppRegistrar* registrar,
+                     web_app::WebAppUiManager* ui_manager) override;
 
   using CrxInstallerFactory =
       base::RepeatingCallback<scoped_refptr<CrxInstaller>(Profile*)>;
@@ -51,10 +59,24 @@
       CrxInstallerFactory crx_installer_factory);
 
  private:
+  const Extension* GetExtensionById(const web_app::AppId& app_id) const;
+
+  void OnExtensionInstalled(
+      const GURL& app_url,
+      LaunchType launch_type,
+      bool is_locally_installed,
+      web_app::InstallFinalizer::InstallFinalizedCallback callback,
+      scoped_refptr<CrxInstaller> crx_installer,
+      const base::Optional<CrxInstallError>& error);
+
   CrxInstallerFactory crx_installer_factory_;
-  Profile* profile_;
   web_app::ExternallyInstalledWebAppPrefs externally_installed_app_prefs_;
 
+  Profile* profile_;
+  BookmarkAppRegistrar* registrar_ = nullptr;
+
+  base::WeakPtrFactory<BookmarkAppInstallFinalizer> weak_ptr_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(BookmarkAppInstallFinalizer);
 };
 
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc
index 6a50128..d2ebf0b3 100644
--- a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc
+++ b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc
@@ -18,7 +18,9 @@
 #include "chrome/browser/extensions/test_extension_system.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_helpers.h"
+#include "chrome/browser/web_applications/extensions/bookmark_app_registrar.h"
 #include "chrome/browser/web_applications/extensions/bookmark_app_util.h"
+#include "chrome/browser/web_applications/test/test_web_app_ui_manager.h"
 #include "chrome/common/web_application_info.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_profile.h"
@@ -91,10 +93,15 @@
     test_system->CreateExtensionService(base::CommandLine::ForCurrentProcess(),
                                         profile()->GetPath(),
                                         false /* autoupdate_enabled */);
+
+    registrar_ = std::make_unique<BookmarkAppRegistrar>(profile());
+    ui_manager_ = std::make_unique<web_app::TestWebAppUiManager>();
+
+    finalizer_ = std::make_unique<BookmarkAppInstallFinalizer>(profile());
+    finalizer_->SetSubsystems(registrar_.get(), ui_manager_.get());
   }
 
-  web_app::AppId InstallExternalApp(BookmarkAppInstallFinalizer* finalizer,
-                                    const GURL& app_url) {
+  web_app::AppId InstallExternalApp(const GURL& app_url) {
     auto info = std::make_unique<WebApplicationInfo>();
     info->app_url = app_url;
     info->title = base::ASCIIToUTF16(kWebAppTitle);
@@ -104,7 +111,7 @@
 
     web_app::AppId app_id;
     base::RunLoop run_loop;
-    finalizer->FinalizeInstall(
+    finalizer().FinalizeInstall(
         *info, options,
         base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                        web_app::InstallResultCode code) {
@@ -133,13 +140,17 @@
     return ExtensionRegistry::Get(profile())->enabled_extensions();
   }
 
+  BookmarkAppInstallFinalizer& finalizer() { return *finalizer_; }
+
  private:
+  std::unique_ptr<BookmarkAppRegistrar> registrar_;
+  std::unique_ptr<web_app::TestWebAppUiManager> ui_manager_;
+  std::unique_ptr<BookmarkAppInstallFinalizer> finalizer_;
+
   DISALLOW_COPY_AND_ASSIGN(BookmarkAppInstallFinalizerTest);
 };
 
 TEST_F(BookmarkAppInstallFinalizerTest, BasicInstallSucceeds) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
   info->title = base::ASCIIToUTF16(kWebAppTitle);
@@ -150,7 +161,7 @@
   web_app::AppId app_id;
   bool callback_called = false;
 
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -165,13 +176,11 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, BasicInstallFails) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto fake_crx_installer =
       base::MakeRefCounted<BookmarkAppInstallFinalizerTest::FakeCrxInstaller>(
           profile());
 
-  installer.SetCrxInstallerFactoryForTesting(
+  finalizer().SetCrxInstallerFactoryForTesting(
       base::BindLambdaForTesting([&](Profile* profile) {
         scoped_refptr<CrxInstaller> crx_installer = fake_crx_installer;
         return crx_installer;
@@ -186,7 +195,7 @@
   options.install_source = WebappInstallSource::INTERNAL_DEFAULT;
   bool callback_called = false;
 
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -204,8 +213,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, ConcurrentInstallSucceeds) {
-  BookmarkAppInstallFinalizer finalizer(profile());
-
   base::RunLoop run_loop;
 
   const GURL url1("https://foo1.example");
@@ -221,7 +228,7 @@
     WebApplicationInfo web_application_info;
     web_application_info.app_url = url1;
 
-    finalizer.FinalizeInstall(
+    finalizer().FinalizeInstall(
         web_application_info, options,
         base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                        web_app::InstallResultCode code) {
@@ -238,7 +245,7 @@
     WebApplicationInfo web_application_info;
     web_application_info.app_url = url2;
 
-    finalizer.FinalizeInstall(
+    finalizer().FinalizeInstall(
         web_application_info, options,
         base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                        web_app::InstallResultCode code) {
@@ -257,8 +264,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, DefaultInstalledSucceeds) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
   info->title = base::ASCIIToUTF16(kWebAppTitle);
@@ -267,7 +272,7 @@
   options.install_source = WebappInstallSource::EXTERNAL_DEFAULT;
 
   base::RunLoop run_loop;
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -286,8 +291,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, PolicyInstalledSucceeds) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
   info->title = base::ASCIIToUTF16(kWebAppTitle);
@@ -296,7 +299,7 @@
   options.install_source = WebappInstallSource::EXTERNAL_POLICY;
 
   base::RunLoop run_loop;
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -314,8 +317,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, SystemInstalledSucceeds) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
   info->title = base::ASCIIToUTF16(kWebAppTitle);
@@ -324,7 +325,7 @@
   options.install_source = WebappInstallSource::SYSTEM_DEFAULT;
 
   base::RunLoop run_loop;
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -343,8 +344,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, NoNetworkInstallSucceeds) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
 
@@ -353,7 +352,7 @@
   options.no_network_install = true;
 
   base::RunLoop run_loop;
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -371,8 +370,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, ForceLaunchContainer) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
   // The info says extensions::LAUNCH_TYPE_WINDOW needed.
@@ -384,7 +381,7 @@
   options.force_launch_container = web_app::LaunchContainer::kTab;
 
   base::RunLoop run_loop;
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -405,8 +402,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, CanSkipAppUpdateForSync) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
   info->title = base::ASCIIToUTF16("Title1");
@@ -414,13 +409,13 @@
 
   const web_app::AppId app_id = web_app::GenerateAppIdFromURL(info->app_url);
 
-  EXPECT_FALSE(installer.CanSkipAppUpdateForSync(app_id, *info));
+  EXPECT_FALSE(finalizer().CanSkipAppUpdateForSync(app_id, *info));
 
   base::RunLoop run_loop;
   web_app::InstallFinalizer::FinalizeOptions options;
   options.install_source = WebappInstallSource::SYNC;
 
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
@@ -430,26 +425,25 @@
       }));
   run_loop.Run();
 
-  EXPECT_TRUE(installer.CanSkipAppUpdateForSync(app_id, *info));
+  EXPECT_TRUE(finalizer().CanSkipAppUpdateForSync(app_id, *info));
 
   WebApplicationInfo info_with_diff_title = *info;
   info_with_diff_title.title = base::ASCIIToUTF16("Title2");
-  EXPECT_FALSE(installer.CanSkipAppUpdateForSync(app_id, info_with_diff_title));
+  EXPECT_FALSE(
+      finalizer().CanSkipAppUpdateForSync(app_id, info_with_diff_title));
 
   WebApplicationInfo info_with_diff_description = *info;
   info_with_diff_description.title = base::ASCIIToUTF16("Description2");
   EXPECT_FALSE(
-      installer.CanSkipAppUpdateForSync(app_id, info_with_diff_description));
+      finalizer().CanSkipAppUpdateForSync(app_id, info_with_diff_description));
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, UninstallExternalWebApp_Successful) {
-  BookmarkAppInstallFinalizer finalizer(profile());
-
-  InstallExternalApp(&finalizer, kWebAppUrl);
+  InstallExternalApp(kWebAppUrl);
   ASSERT_EQ(1u, enabled_extensions().size());
 
   base::RunLoop run_loop;
-  finalizer.UninstallExternalWebApp(
+  finalizer().UninstallExternalWebApp(
       kWebAppUrl, base::BindLambdaForTesting([&](bool uninstalled) {
         EXPECT_TRUE(uninstalled);
         EXPECT_EQ(0u, enabled_extensions().size());
@@ -459,16 +453,14 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, UninstallExternalWebApp_Multiple) {
-  BookmarkAppInstallFinalizer finalizer(profile());
-
-  auto foo_app_id = InstallExternalApp(&finalizer, kWebAppUrl);
-  auto bar_app_id = InstallExternalApp(&finalizer, kAlternateWebAppUrl);
+  auto foo_app_id = InstallExternalApp(kWebAppUrl);
+  auto bar_app_id = InstallExternalApp(kAlternateWebAppUrl);
   ASSERT_EQ(2u, enabled_extensions().size());
 
   // Uninstall one app.
   {
     base::RunLoop run_loop;
-    finalizer.UninstallExternalWebApp(
+    finalizer().UninstallExternalWebApp(
         kWebAppUrl, base::BindLambdaForTesting([&](bool uninstalled) {
           EXPECT_TRUE(uninstalled);
           run_loop.Quit();
@@ -482,7 +474,7 @@
   // Uninstall the second app.
   {
     base::RunLoop run_loop;
-    finalizer.UninstallExternalWebApp(
+    finalizer().UninstallExternalWebApp(
         kAlternateWebAppUrl, base::BindLambdaForTesting([&](bool uninstalled) {
           EXPECT_TRUE(uninstalled);
           run_loop.Quit();
@@ -494,13 +486,11 @@
 
 TEST_F(BookmarkAppInstallFinalizerTest,
        UninstallExternalWebApp_UninstalledExternalApp) {
-  BookmarkAppInstallFinalizer finalizer(profile());
-
-  auto app_id = InstallExternalApp(&finalizer, kWebAppUrl);
+  auto app_id = InstallExternalApp(kWebAppUrl);
   SimulateExternalAppUninstalledByUser(app_id);
 
   base::RunLoop run_loop;
-  finalizer.UninstallExternalWebApp(
+  finalizer().UninstallExternalWebApp(
       kWebAppUrl, base::BindLambdaForTesting([&](bool uninstalled) {
         EXPECT_FALSE(uninstalled);
         run_loop.Quit();
@@ -510,9 +500,8 @@
 
 TEST_F(BookmarkAppInstallFinalizerTest,
        UninstallExternalWebApp_FailsNeverInstalled) {
-  BookmarkAppInstallFinalizer finalizer(profile());
   base::RunLoop run_loop;
-  finalizer.UninstallExternalWebApp(
+  finalizer().UninstallExternalWebApp(
       kWebAppUrl, base::BindLambdaForTesting([&](bool uninstalled) {
         EXPECT_FALSE(uninstalled);
         run_loop.Quit();
@@ -522,14 +511,12 @@
 
 TEST_F(BookmarkAppInstallFinalizerTest,
        UninstallExternalWebApp_FailsAlreadyUninstalled) {
-  BookmarkAppInstallFinalizer finalizer(profile());
-
-  InstallExternalApp(&finalizer, kWebAppUrl);
+  InstallExternalApp(kWebAppUrl);
 
   // Uninstall the app.
   {
     base::RunLoop run_loop;
-    finalizer.UninstallExternalWebApp(
+    finalizer().UninstallExternalWebApp(
         kWebAppUrl, base::BindLambdaForTesting([&](bool uninstalled) {
           EXPECT_TRUE(uninstalled);
           run_loop.Quit();
@@ -540,7 +527,7 @@
   // Try to uninstall it again.
   {
     base::RunLoop run_loop;
-    finalizer.UninstallExternalWebApp(
+    finalizer().UninstallExternalWebApp(
         kWebAppUrl, base::BindLambdaForTesting([&](bool uninstalled) {
           EXPECT_FALSE(uninstalled);
           run_loop.Quit();
@@ -550,8 +537,6 @@
 }
 
 TEST_F(BookmarkAppInstallFinalizerTest, NotLocallyInstalled) {
-  BookmarkAppInstallFinalizer installer(profile());
-
   auto info = std::make_unique<WebApplicationInfo>();
   info->app_url = kWebAppUrl;
 
@@ -560,7 +545,7 @@
   options.locally_installed = false;
 
   base::RunLoop run_loop;
-  installer.FinalizeInstall(
+  finalizer().FinalizeInstall(
       *info, options,
       base::BindLambdaForTesting([&](const web_app::AppId& installed_app_id,
                                      web_app::InstallResultCode code) {
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_registrar.cc b/chrome/browser/web_applications/extensions/bookmark_app_registrar.cc
index 82d0014..bfe94f6 100644
--- a/chrome/browser/web_applications/extensions/bookmark_app_registrar.cc
+++ b/chrome/browser/web_applications/extensions/bookmark_app_registrar.cc
@@ -34,6 +34,10 @@
   ExtensionSystem::Get(profile())->ready().Post(FROM_HERE, std::move(callback));
 }
 
+BookmarkAppRegistrar* BookmarkAppRegistrar::AsBookmarkAppRegistrar() {
+  return this;
+}
+
 bool BookmarkAppRegistrar::IsInstalled(const GURL& start_url) const {
   ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
   const ExtensionSet& extensions = registry->enabled_extensions();
@@ -80,15 +84,6 @@
   return CountUserInstalledBookmarkApps(profile());
 }
 
-void BookmarkAppRegistrar::OnExtensionInstalled(
-    content::BrowserContext* browser_context,
-    const extensions::Extension* extension,
-    bool is_update) {
-  DCHECK_EQ(browser_context, profile());
-  if (extension->from_bookmark())
-    NotifyWebAppInstalled(extension->id());
-}
-
 void BookmarkAppRegistrar::OnExtensionUninstalled(
     content::BrowserContext* browser_context,
     const extensions::Extension* extension,
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_registrar.h b/chrome/browser/web_applications/extensions/bookmark_app_registrar.h
index b6a7daf..64b641d6 100644
--- a/chrome/browser/web_applications/extensions/bookmark_app_registrar.h
+++ b/chrome/browser/web_applications/extensions/bookmark_app_registrar.h
@@ -25,6 +25,7 @@
 
   // AppRegistrar:
   void Init(base::OnceClosure callback) override;
+  BookmarkAppRegistrar* AsBookmarkAppRegistrar() override;
   bool IsInstalled(const GURL& start_url) const override;
   bool IsInstalled(const web_app::AppId& app_id) const override;
   bool WasExternalAppUninstalledByUser(
@@ -40,9 +41,6 @@
   base::Optional<GURL> GetAppScope(const web_app::AppId& app_id) const override;
 
   // ExtensionRegistryObserver:
-  void OnExtensionInstalled(content::BrowserContext* browser_context,
-                            const Extension* extension,
-                            bool is_update) override;
   void OnExtensionUninstalled(content::BrowserContext* browser_context,
                               const Extension* extension,
                               UninstallReason reason) override;
diff --git a/chrome/browser/web_applications/pending_app_manager_impl.cc b/chrome/browser/web_applications/pending_app_manager_impl.cc
index 9ff1168..93a94f3 100644
--- a/chrome/browser/web_applications/pending_app_manager_impl.cc
+++ b/chrome/browser/web_applications/pending_app_manager_impl.cc
@@ -21,19 +21,6 @@
 
 namespace web_app {
 
-namespace {
-
-std::unique_ptr<PendingAppInstallTask> InstallationTaskCreateWrapper(
-    Profile* profile,
-    AppRegistrar* registrar,
-    InstallFinalizer* install_finalizer,
-    ExternalInstallOptions install_options) {
-  return std::make_unique<PendingAppInstallTask>(
-      profile, registrar, install_finalizer, std::move(install_options));
-}
-
-}  // namespace
-
 struct PendingAppManagerImpl::TaskAndCallback {
   TaskAndCallback(std::unique_ptr<PendingAppInstallTask> task,
                   OnceInstallCallback callback)
@@ -47,17 +34,14 @@
 PendingAppManagerImpl::PendingAppManagerImpl(Profile* profile)
     : profile_(profile),
       externally_installed_app_prefs_(profile->GetPrefs()),
-      url_loader_(std::make_unique<WebAppUrlLoader>()),
-      task_factory_(base::BindRepeating(&InstallationTaskCreateWrapper)) {}
+      url_loader_(std::make_unique<WebAppUrlLoader>()) {}
 
 PendingAppManagerImpl::~PendingAppManagerImpl() = default;
 
 void PendingAppManagerImpl::Install(ExternalInstallOptions install_options,
                                     OnceInstallCallback callback) {
   pending_tasks_and_callbacks_.push_front(std::make_unique<TaskAndCallback>(
-      task_factory_.Run(profile_, registrar(), finalizer(),
-                        std::move(install_options)),
-      std::move(callback)));
+      CreateInstallationTask(std::move(install_options)), std::move(callback)));
 
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
@@ -70,9 +54,7 @@
     const RepeatingInstallCallback& callback) {
   for (auto& install_options : install_options_list) {
     pending_tasks_and_callbacks_.push_back(std::make_unique<TaskAndCallback>(
-        task_factory_.Run(profile_, registrar(), finalizer(),
-                          std::move(install_options)),
-        callback));
+        CreateInstallationTask(std::move(install_options)), callback));
   }
 
   base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -92,8 +74,10 @@
   }
 }
 
-void PendingAppManagerImpl::SetTaskFactoryForTesting(TaskFactory task_factory) {
-  task_factory_ = std::move(task_factory);
+void PendingAppManagerImpl::Shutdown() {
+  pending_tasks_and_callbacks_.clear();
+  current_task_and_callback_.reset();
+  web_contents_.reset();
 }
 
 void PendingAppManagerImpl::SetUrlLoaderForTesting(
@@ -101,6 +85,13 @@
   url_loader_ = std::move(url_loader);
 }
 
+std::unique_ptr<PendingAppInstallTask>
+PendingAppManagerImpl::CreateInstallationTask(
+    ExternalInstallOptions install_options) {
+  return std::make_unique<PendingAppInstallTask>(
+      profile_, registrar(), finalizer(), std::move(install_options));
+}
+
 void PendingAppManagerImpl::MaybeStartNextInstallation() {
   if (current_task_and_callback_)
     return;
diff --git a/chrome/browser/web_applications/pending_app_manager_impl.h b/chrome/browser/web_applications/pending_app_manager_impl.h
index 17dbd90..06d780c 100644
--- a/chrome/browser/web_applications/pending_app_manager_impl.h
+++ b/chrome/browser/web_applications/pending_app_manager_impl.h
@@ -29,22 +29,12 @@
 
 namespace web_app {
 
-class AppRegistrar;
-class InstallFinalizer;
-class WebAppUiManager;
-
 // WebAppProvider creates an instance of this class and manages its
 // lifetime. This class should only be used from the UI thread.
-class PendingAppManagerImpl final : public PendingAppManager {
+class PendingAppManagerImpl : public PendingAppManager {
  public:
   using WebContentsFactory =
       base::RepeatingCallback<std::unique_ptr<content::WebContents>(Profile*)>;
-  using TaskFactory =
-      base::RepeatingCallback<std::unique_ptr<PendingAppInstallTask>(
-          Profile*,
-          AppRegistrar*,
-          InstallFinalizer*,
-          ExternalInstallOptions)>;
 
   explicit PendingAppManagerImpl(Profile* profile);
   ~PendingAppManagerImpl() override;
@@ -56,15 +46,19 @@
                    const RepeatingInstallCallback& callback) override;
   void UninstallApps(std::vector<GURL> uninstall_urls,
                      const UninstallCallback& callback) override;
+  void Shutdown() override;
 
-  void SetTaskFactoryForTesting(TaskFactory task_factory);
   void SetUrlLoaderForTesting(std::unique_ptr<WebAppUrlLoader> url_loader);
 
+ protected:
+  virtual std::unique_ptr<PendingAppInstallTask> CreateInstallationTask(
+      ExternalInstallOptions install_options);
+
+  Profile* profile() { return profile_; }
+
  private:
   struct TaskAndCallback;
 
-  WebAppUiManager& GetUiManager();
-
   void MaybeStartNextInstallation();
 
   void StartInstallationTask(std::unique_ptr<TaskAndCallback> task);
@@ -88,8 +82,6 @@
   // unique_ptr so that it can be replaced in tests.
   std::unique_ptr<WebAppUrlLoader> url_loader_;
 
-  TaskFactory task_factory_;
-
   std::unique_ptr<content::WebContents> web_contents_;
 
   std::unique_ptr<TaskAndCallback> current_task_and_callback_;
diff --git a/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc b/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc
index 941bdd6b..d9094c8a 100644
--- a/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc
+++ b/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/web_applications/pending_app_install_task.h"
 #include "chrome/browser/web_applications/test/test_app_registrar.h"
 #include "chrome/browser/web_applications/test/test_install_finalizer.h"
+#include "chrome/browser/web_applications/test/test_web_app_provider.h"
 #include "chrome/browser/web_applications/test/test_web_app_ui_manager.h"
 #include "chrome/browser/web_applications/test/test_web_app_url_loader.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
@@ -70,10 +71,14 @@
   return TestInstallFinalizer::GetAppIdForUrl(url);
 }
 
-class TestPendingAppInstallTaskFactory {
+class TestPendingAppManagerImpl : public PendingAppManagerImpl {
  public:
-  TestPendingAppInstallTaskFactory() = default;
-  ~TestPendingAppInstallTaskFactory() {
+  TestPendingAppManagerImpl(Profile* profile,
+                            TestAppRegistrar* test_app_registrar)
+      : PendingAppManagerImpl(profile),
+        test_app_registrar_(test_app_registrar) {}
+
+  ~TestPendingAppManagerImpl() override {
     DCHECK(next_installation_task_results_.empty());
   }
 
@@ -90,13 +95,9 @@
   }
 
   std::unique_ptr<PendingAppInstallTask> CreateInstallationTask(
-      Profile* profile,
-      AppRegistrar* registrar,
-      InstallFinalizer* install_finalizer,
-      ExternalInstallOptions install_options) {
+      ExternalInstallOptions install_options) override {
     return std::make_unique<TestPendingAppInstallTask>(
-        this, profile, static_cast<TestAppRegistrar*>(registrar),
-        install_finalizer, std::move(install_options));
+        this, profile(), std::move(install_options));
   }
 
   void OnInstallCalled(const ExternalInstallOptions& install_options) {
@@ -111,57 +112,55 @@
     return result;
   }
 
+  TestAppRegistrar* registrar() { return test_app_registrar_; }
+
  private:
   class TestPendingAppInstallTask : public PendingAppInstallTask {
    public:
-    TestPendingAppInstallTask(TestPendingAppInstallTaskFactory* factory,
-                              Profile* profile,
-                              TestAppRegistrar* registrar,
-                              InstallFinalizer* install_finalizer,
-                              ExternalInstallOptions install_options)
+    TestPendingAppInstallTask(
+        TestPendingAppManagerImpl* pending_app_manager_impl,
+        Profile* profile,
+        ExternalInstallOptions install_options)
         : PendingAppInstallTask(profile,
-                                registrar,
-                                install_finalizer,
+                                pending_app_manager_impl->registrar(),
+                                pending_app_manager_impl->finalizer(),
                                 install_options),
-          factory_(factory),
-          profile_(profile),
-          registrar_(registrar),
-          install_options_(install_options),
-          externally_installed_app_prefs_(profile_->GetPrefs()) {}
+          pending_app_manager_impl_(pending_app_manager_impl),
+          externally_installed_app_prefs_(profile->GetPrefs()) {}
     ~TestPendingAppInstallTask() override = default;
 
     void Install(content::WebContents* web_contents,
                  WebAppUrlLoader::Result url_loaded_result,
                  ResultCallback callback) override {
-      factory_->OnInstallCalled(install_options_);
+      pending_app_manager_impl_->OnInstallCalled(install_options());
 
       base::Optional<AppId> app_id;
+      const GURL& install_url = install_options().url;
       auto result_code =
-          factory_->GetNextInstallationTaskResult(install_options_.url);
+          pending_app_manager_impl_->GetNextInstallationTaskResult(install_url);
       if (result_code == InstallResultCode::kSuccess) {
-        app_id = GenerateFakeAppId(install_options_.url);
-        registrar_->AddExternalApp(
-            *app_id, {install_options_.url, install_options_.install_source});
-        externally_installed_app_prefs_.Insert(install_options_.url, *app_id,
-                                               install_options_.install_source);
+        app_id = GenerateFakeAppId(install_url);
+        pending_app_manager_impl_->registrar()->AddExternalApp(
+            *app_id, {install_url, install_options().install_source});
+        externally_installed_app_prefs_.Insert(
+            install_url, *app_id, install_options().install_source);
         const bool is_placeholder =
             (url_loaded_result != WebAppUrlLoader::Result::kUrlLoaded);
-        externally_installed_app_prefs_.SetIsPlaceholder(install_options_.url,
+        externally_installed_app_prefs_.SetIsPlaceholder(install_url,
                                                          is_placeholder);
       }
       std::move(callback).Run({result_code, app_id});
     }
 
    private:
-    TestPendingAppInstallTaskFactory* factory_;
-    Profile* profile_;
-    TestAppRegistrar* registrar_;
-    ExternalInstallOptions install_options_;
+    TestPendingAppManagerImpl* pending_app_manager_impl_;
     ExternallyInstalledWebAppPrefs externally_installed_app_prefs_;
 
     DISALLOW_COPY_AND_ASSIGN(TestPendingAppInstallTask);
   };
 
+  TestAppRegistrar* test_app_registrar_;
+
   std::vector<ExternalInstallOptions> install_options_list_;
   size_t install_run_count_ = 0;
 
@@ -178,13 +177,32 @@
 
   void SetUp() override {
     ChromeRenderViewHostTestHarness::SetUp();
-    registrar_ = std::make_unique<TestAppRegistrar>();
-    ui_manager_ = std::make_unique<TestWebAppUiManager>();
-    install_finalizer_ = std::make_unique<TestInstallFinalizer>();
-    task_factory_ = std::make_unique<TestPendingAppInstallTaskFactory>();
-  }
 
-  void TearDown() override { ChromeRenderViewHostTestHarness::TearDown(); }
+    auto* provider = web_app::TestWebAppProvider::Get(profile());
+
+    auto test_app_registrar = std::make_unique<TestAppRegistrar>();
+    app_registrar_ = test_app_registrar.get();
+    provider->SetRegistrar(std::move(test_app_registrar));
+
+    auto test_pending_app_manager =
+        std::make_unique<TestPendingAppManagerImpl>(profile(), app_registrar_);
+    pending_app_manager_impl_ = test_pending_app_manager.get();
+    provider->SetPendingAppManager(std::move(test_pending_app_manager));
+
+    auto url_loader = std::make_unique<TestWebAppUrlLoader>();
+    url_loader_ = url_loader.get();
+    pending_app_manager_impl_->SetUrlLoaderForTesting(std::move(url_loader));
+
+    auto test_install_finalizer = std::make_unique<TestInstallFinalizer>();
+    install_finalizer_ = test_install_finalizer.get();
+    provider->SetInstallFinalizer(std::move(test_install_finalizer));
+
+    auto ui_manager = std::make_unique<TestWebAppUiManager>();
+    ui_manager_ = ui_manager.get();
+    provider->SetWebAppUiManager(std::move(ui_manager));
+
+    provider->Start();
+  }
 
  protected:
   std::pair<GURL, InstallResultCode> InstallAndWait(
@@ -195,7 +213,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
 
-    pending_app_manager->Install(
+    pending_app_manager_impl()->Install(
         std::move(install_options),
         base::BindLambdaForTesting([&](const GURL& u, InstallResultCode c) {
           url = u;
@@ -215,7 +233,7 @@
     base::RunLoop run_loop;
     auto barrier_closure =
         base::BarrierClosure(apps_to_install.size(), run_loop.QuitClosure());
-    pending_app_manager->InstallApps(
+    pending_app_manager_impl()->InstallApps(
         std::move(apps_to_install),
         base::BindLambdaForTesting(
             [&](const GURL& url, InstallResultCode code) {
@@ -247,34 +265,17 @@
     return results;
   }
 
-  std::unique_ptr<PendingAppManagerImpl>
-  GetPendingAppManagerImplWithTestMocks() {
-    auto manager = std::make_unique<PendingAppManagerImpl>(profile());
-    manager->SetSubsystems(registrar_.get(), ui_manager_.get(),
-                           install_finalizer_.get());
-    manager->SetTaskFactoryForTesting(base::BindRepeating(
-        &TestPendingAppInstallTaskFactory::CreateInstallationTask,
-        base::Unretained(task_factory_.get())));
-
-    // The test suite doesn't support multiple loaders.
-    DCHECK_EQ(nullptr, url_loader_);
-
-    auto url_loader = std::make_unique<TestWebAppUrlLoader>();
-    url_loader_ = url_loader.get();
-    manager->SetUrlLoaderForTesting(std::move(url_loader));
-
-    return manager;
-  }
-
   // ExternalInstallOptions that was used to run the last installation task.
   const ExternalInstallOptions& last_install_options() {
-    DCHECK(!task_factory_->install_options_list().empty());
-    return task_factory_->install_options_list().back();
+    DCHECK(!pending_app_manager_impl_->install_options_list().empty());
+    return pending_app_manager_impl_->install_options_list().back();
   }
 
   // Number of times PendingAppInstallTask::Install was called. Reflects
   // how many times we've tried to create a web app.
-  size_t install_run_count() { return task_factory_->install_run_count(); }
+  size_t install_run_count() {
+    return pending_app_manager_impl_->install_run_count();
+  }
 
   size_t uninstall_call_count() {
     return install_finalizer_->uninstall_external_web_app_urls().size();
@@ -288,39 +289,37 @@
     return install_finalizer_->uninstall_external_web_app_urls().back();
   }
 
-  TestPendingAppInstallTaskFactory* task_factory() {
-    return task_factory_.get();
+  TestPendingAppManagerImpl* pending_app_manager_impl() {
+    return pending_app_manager_impl_;
   }
 
-  TestAppRegistrar* registrar() { return registrar_.get(); }
+  TestAppRegistrar* registrar() { return app_registrar_; }
 
-  TestWebAppUiManager* ui_manager() { return ui_manager_.get(); }
+  TestWebAppUiManager* ui_manager() { return ui_manager_; }
 
   TestWebAppUrlLoader* url_loader() { return url_loader_; }
 
-  TestInstallFinalizer* install_finalizer() { return install_finalizer_.get(); }
+  TestInstallFinalizer* install_finalizer() { return install_finalizer_; }
 
  private:
-  std::unique_ptr<TestPendingAppInstallTaskFactory> task_factory_;
-  std::unique_ptr<TestAppRegistrar> registrar_;
-  std::unique_ptr<TestWebAppUiManager> ui_manager_;
-  std::unique_ptr<TestInstallFinalizer> install_finalizer_;
-
+  TestAppRegistrar* app_registrar_ = nullptr;
+  TestPendingAppManagerImpl* pending_app_manager_impl_ = nullptr;
+  TestInstallFinalizer* install_finalizer_ = nullptr;
+  TestWebAppUiManager* ui_manager_ = nullptr;
   TestWebAppUrlLoader* url_loader_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(PendingAppManagerImplTest);
 };
 
 TEST_F(PendingAppManagerImplTest, Install_Succeeds) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
   base::Optional<GURL> url;
   base::Optional<InstallResultCode> code;
   std::tie(url, code) =
-      InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+      InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
   EXPECT_EQ(InstallResultCode::kSuccess, code.value());
   EXPECT_EQ(kFooWebAppUrl, url.value());
@@ -330,16 +329,15 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_SerialCallsDifferentApps) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
   {
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+        InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(kFooWebAppUrl, url.value());
@@ -348,8 +346,8 @@
     EXPECT_EQ(GetFooInstallOptions(), last_install_options());
   }
 
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
   {
@@ -357,7 +355,7 @@
     base::Optional<InstallResultCode> code;
 
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), GetBarInstallOptions());
+        InstallAndWait(pending_app_manager_impl(), GetBarInstallOptions());
 
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(kBarWebAppUrl, url.value());
@@ -368,19 +366,17 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_ConcurrentCallsDifferentApps) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
   base::RunLoop run_loop;
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetFooInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -394,7 +390,7 @@
 
         run_loop.Quit();
       }));
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetBarInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -409,13 +405,12 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_PendingSuccessfulTask) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
   url_loader()->SaveLoadUrlRequests();
@@ -423,7 +418,7 @@
   base::RunLoop foo_run_loop;
   base::RunLoop bar_run_loop;
 
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetFooInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -437,7 +432,7 @@
   // Make sure the installation has started.
   base::RunLoop().RunUntilIdle();
 
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetBarInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -460,13 +455,12 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_PendingFailingTask) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
       kFooWebAppUrl, InstallResultCode::kFailedUnknownReason);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
   url_loader()->SaveLoadUrlRequests();
@@ -474,7 +468,7 @@
   base::RunLoop foo_run_loop;
   base::RunLoop bar_run_loop;
 
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetFooInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kFailedUnknownReason, code);
@@ -487,7 +481,7 @@
   // Make sure the installation has started.
   base::RunLoop().RunUntilIdle();
 
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetBarInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -510,13 +504,12 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_ReentrantCallback) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -538,18 +531,19 @@
         EXPECT_EQ(1u, install_run_count());
         EXPECT_EQ(GetFooInstallOptions(), last_install_options());
 
-        pending_app_manager->Install(GetBarInstallOptions(), final_callback);
+        pending_app_manager_impl()->Install(GetBarInstallOptions(),
+                                            final_callback);
       });
 
   // Call Install() with a callback that tries to install another app.
-  pending_app_manager->Install(GetFooInstallOptions(), reentrant_callback);
+  pending_app_manager_impl()->Install(GetFooInstallOptions(),
+                                      reentrant_callback);
   run_loop.Run();
 }
 
 TEST_F(PendingAppManagerImplTest, Install_SerialCallsSameApp) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -557,7 +551,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+        InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
     EXPECT_EQ(InstallResultCode::kSuccess, code);
     EXPECT_EQ(kFooWebAppUrl, url);
@@ -570,7 +564,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+        InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
     EXPECT_EQ(InstallResultCode::kAlreadyInstalled, code);
     EXPECT_EQ(kFooWebAppUrl, url);
@@ -581,16 +575,15 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_ConcurrentCallsSameApp) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
   base::RunLoop run_loop;
   bool first_callback_ran = false;
 
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetFooInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         // kAlreadyInstalled because the last call to Install gets higher
@@ -607,7 +600,7 @@
         run_loop.Quit();
       }));
 
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetFooInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -624,9 +617,8 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_AlwaysUpdate) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -641,7 +633,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), get_force_reinstall_info());
+        InstallAndWait(pending_app_manager_impl(), get_force_reinstall_info());
 
     EXPECT_EQ(InstallResultCode::kSuccess, code);
     EXPECT_EQ(kFooWebAppUrl, url);
@@ -650,15 +642,15 @@
     EXPECT_EQ(get_force_reinstall_info(), last_install_options());
   }
 
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
   {
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), get_force_reinstall_info());
+        InstallAndWait(pending_app_manager_impl(), get_force_reinstall_info());
 
     EXPECT_EQ(InstallResultCode::kSuccess, code);
     EXPECT_EQ(kFooWebAppUrl, url);
@@ -670,8 +662,7 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_InstallationFails) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
       kFooWebAppUrl, InstallResultCode::kFailedUnknownReason);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
@@ -679,7 +670,7 @@
   base::Optional<GURL> url;
   base::Optional<InstallResultCode> code;
   std::tie(url, code) =
-      InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+      InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
   EXPECT_EQ(InstallResultCode::kFailedUnknownReason, code);
   EXPECT_EQ(kFooWebAppUrl, url);
@@ -688,9 +679,8 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_PlaceholderApp) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(
       kFooWebAppUrl, WebAppUrlLoader::Result::kRedirectedUrlLoaded);
 
@@ -700,7 +690,7 @@
   base::Optional<GURL> url;
   base::Optional<InstallResultCode> code;
   std::tie(url, code) =
-      InstallAndWait(pending_app_manager.get(), install_options);
+      InstallAndWait(pending_app_manager_impl(), install_options);
 
   EXPECT_EQ(InstallResultCode::kSuccess, code);
   EXPECT_EQ(kFooWebAppUrl, url);
@@ -710,17 +700,16 @@
 }
 
 TEST_F(PendingAppManagerImplTest, InstallApps_Succeeds) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
   std::vector<ExternalInstallOptions> apps_to_install;
   apps_to_install.push_back(GetFooInstallOptions());
 
-  InstallAppsResults results =
-      InstallAppsAndWait(pending_app_manager.get(), std::move(apps_to_install));
+  InstallAppsResults results = InstallAppsAndWait(pending_app_manager_impl(),
+                                                  std::move(apps_to_install));
 
   EXPECT_EQ(results,
             InstallAppsResults({{kFooWebAppUrl, InstallResultCode::kSuccess}}));
@@ -730,8 +719,7 @@
 }
 
 TEST_F(PendingAppManagerImplTest, InstallApps_FailsInstallationFails) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
       kFooWebAppUrl, InstallResultCode::kFailedUnknownReason);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
@@ -739,8 +727,8 @@
   std::vector<ExternalInstallOptions> apps_to_install;
   apps_to_install.push_back(GetFooInstallOptions());
 
-  InstallAppsResults results =
-      InstallAppsAndWait(pending_app_manager.get(), std::move(apps_to_install));
+  InstallAppsResults results = InstallAppsAndWait(pending_app_manager_impl(),
+                                                  std::move(apps_to_install));
 
   EXPECT_EQ(results,
             InstallAppsResults(
@@ -750,9 +738,8 @@
 }
 
 TEST_F(PendingAppManagerImplTest, InstallApps_PlaceholderApp) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(
       kFooWebAppUrl, WebAppUrlLoader::Result::kRedirectedUrlLoaded);
 
@@ -761,8 +748,8 @@
   std::vector<ExternalInstallOptions> apps_to_install;
   apps_to_install.push_back(install_options);
 
-  InstallAppsResults results =
-      InstallAppsAndWait(pending_app_manager.get(), std::move(apps_to_install));
+  InstallAppsResults results = InstallAppsAndWait(pending_app_manager_impl(),
+                                                  std::move(apps_to_install));
 
   EXPECT_EQ(results,
             InstallAppsResults({{kFooWebAppUrl, InstallResultCode::kSuccess}}));
@@ -772,13 +759,12 @@
 }
 
 TEST_F(PendingAppManagerImplTest, InstallApps_Multiple) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -786,8 +772,8 @@
   apps_to_install.push_back(GetFooInstallOptions());
   apps_to_install.push_back(GetBarInstallOptions());
 
-  InstallAppsResults results =
-      InstallAppsAndWait(pending_app_manager.get(), std::move(apps_to_install));
+  InstallAppsResults results = InstallAppsAndWait(pending_app_manager_impl(),
+                                                  std::move(apps_to_install));
 
   EXPECT_EQ(results,
             InstallAppsResults({{kFooWebAppUrl, InstallResultCode::kSuccess},
@@ -798,13 +784,12 @@
 }
 
 TEST_F(PendingAppManagerImplTest, InstallApps_PendingInstallApps) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -813,7 +798,7 @@
     std::vector<ExternalInstallOptions> apps_to_install;
     apps_to_install.push_back(GetFooInstallOptions());
 
-    pending_app_manager->InstallApps(
+    pending_app_manager_impl()->InstallApps(
         std::move(apps_to_install),
         base::BindLambdaForTesting(
             [&](const GURL& url, InstallResultCode code) {
@@ -829,7 +814,7 @@
     std::vector<ExternalInstallOptions> apps_to_install;
     apps_to_install.push_back(GetBarInstallOptions());
 
-    pending_app_manager->InstallApps(
+    pending_app_manager_impl()->InstallApps(
         std::move(apps_to_install),
         base::BindLambdaForTesting(
             [&](const GURL& url, InstallResultCode code) {
@@ -846,17 +831,16 @@
 }
 
 TEST_F(PendingAppManagerImplTest, Install_PendingMulitpleInstallApps) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kQuxWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kQuxWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kQuxWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -868,7 +852,7 @@
 
   // Queue through InstallApps.
   int callback_calls = 0;
-  pending_app_manager->InstallApps(
+  pending_app_manager_impl()->InstallApps(
       std::move(apps_to_install),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         ++callback_calls;
@@ -892,7 +876,7 @@
       }));
 
   // Queue through Install.
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetQuxInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -907,24 +891,23 @@
 }
 
 TEST_F(PendingAppManagerImplTest, InstallApps_PendingInstall) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kBarWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kBarWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kBarWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
-  task_factory()->SetNextInstallationTaskResult(kQuxWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kQuxWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kQuxWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
   base::RunLoop run_loop;
 
   // Queue through Install.
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetQuxInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -941,7 +924,7 @@
   apps_to_install.push_back(GetBarInstallOptions());
 
   int callback_calls = 0;
-  pending_app_manager->InstallApps(
+  pending_app_manager_impl()->InstallApps(
       std::move(apps_to_install),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         ++callback_calls;
@@ -971,9 +954,8 @@
 }
 
 TEST_F(PendingAppManagerImplTest, AppUninstalled) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -981,7 +963,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+        InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
     EXPECT_EQ(1u, install_run_count());
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
@@ -992,15 +974,15 @@
 
   // Try to install the app again.
   {
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                        WebAppUrlLoader::Result::kUrlLoaded);
 
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+        InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
     // The app was uninstalled so a new installation task should run.
     EXPECT_EQ(2u, install_run_count());
@@ -1009,9 +991,8 @@
 }
 
 TEST_F(PendingAppManagerImplTest, ExternalAppUninstalled) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
@@ -1019,7 +1000,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), GetFooInstallOptions());
+        InstallAndWait(pending_app_manager_impl(), GetFooInstallOptions());
 
     EXPECT_EQ(1u, install_run_count());
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
@@ -1036,7 +1017,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) = InstallAndWait(
-        pending_app_manager.get(),
+        pending_app_manager_impl(),
         GetFooInstallOptions(false /* override_previous_user_uninstall */));
 
     // The app shouldn't be installed because the user previously uninstalled
@@ -1046,15 +1027,15 @@
   }
 
   {
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                        WebAppUrlLoader::Result::kUrlLoaded);
 
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) = InstallAndWait(
-        pending_app_manager.get(),
+        pending_app_manager_impl(),
         GetFooInstallOptions(true /* override_previous_user_uninstall */));
 
     EXPECT_EQ(2u, install_run_count());
@@ -1063,7 +1044,6 @@
 }
 
 TEST_F(PendingAppManagerImplTest, UninstallApps_Succeeds) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
   registrar()->AddExternalApp(
       GenerateFakeAppId(kFooWebAppUrl),
       {kFooWebAppUrl, ExternalInstallSource::kExternalPolicy});
@@ -1071,7 +1051,7 @@
   install_finalizer()->SetNextUninstallExternalWebAppResult(kFooWebAppUrl,
                                                             true);
   UninstallAppsResults results = UninstallAppsAndWait(
-      pending_app_manager.get(), std::vector<GURL>{kFooWebAppUrl});
+      pending_app_manager_impl(), std::vector<GURL>{kFooWebAppUrl});
 
   EXPECT_EQ(results, UninstallAppsResults({{kFooWebAppUrl, true}}));
 
@@ -1080,12 +1060,10 @@
 }
 
 TEST_F(PendingAppManagerImplTest, UninstallApps_Fails) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-
   install_finalizer()->SetNextUninstallExternalWebAppResult(kFooWebAppUrl,
                                                             false);
   UninstallAppsResults results = UninstallAppsAndWait(
-      pending_app_manager.get(), std::vector<GURL>{kFooWebAppUrl});
+      pending_app_manager_impl(), std::vector<GURL>{kFooWebAppUrl});
   EXPECT_EQ(results, UninstallAppsResults({{kFooWebAppUrl, false}}));
 
   EXPECT_EQ(1u, uninstall_call_count());
@@ -1093,7 +1071,6 @@
 }
 
 TEST_F(PendingAppManagerImplTest, UninstallApps_Multiple) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
   registrar()->AddExternalApp(
       GenerateFakeAppId(kFooWebAppUrl),
       {kFooWebAppUrl, ExternalInstallSource::kExternalPolicy});
@@ -1106,7 +1083,7 @@
   install_finalizer()->SetNextUninstallExternalWebAppResult(kBarWebAppUrl,
                                                             true);
   UninstallAppsResults results =
-      UninstallAppsAndWait(pending_app_manager.get(),
+      UninstallAppsAndWait(pending_app_manager_impl(),
                            std::vector<GURL>{kFooWebAppUrl, kBarWebAppUrl});
   EXPECT_EQ(results, UninstallAppsResults(
                          {{kFooWebAppUrl, true}, {kBarWebAppUrl, true}}));
@@ -1117,14 +1094,13 @@
 }
 
 TEST_F(PendingAppManagerImplTest, UninstallApps_PendingInstall) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-  task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                InstallResultCode::kSuccess);
+  pending_app_manager_impl()->SetNextInstallationTaskResult(
+      kFooWebAppUrl, InstallResultCode::kSuccess);
   url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                      WebAppUrlLoader::Result::kUrlLoaded);
 
   base::RunLoop run_loop;
-  pending_app_manager->Install(
+  pending_app_manager_impl()->Install(
       GetFooInstallOptions(),
       base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) {
         EXPECT_EQ(InstallResultCode::kSuccess, code);
@@ -1135,7 +1111,7 @@
   install_finalizer()->SetNextUninstallExternalWebAppResult(kFooWebAppUrl,
                                                             false);
   UninstallAppsResults uninstall_results = UninstallAppsAndWait(
-      pending_app_manager.get(), std::vector<GURL>{kFooWebAppUrl});
+      pending_app_manager_impl(), std::vector<GURL>{kFooWebAppUrl});
   EXPECT_EQ(uninstall_results, UninstallAppsResults({{kFooWebAppUrl, false}}));
   EXPECT_EQ(1u, uninstall_call_count());
 
@@ -1143,20 +1119,19 @@
 }
 
 TEST_F(PendingAppManagerImplTest, ReinstallPlaceholderApp_Success) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
   // Install a placeholder app
   auto install_options = GetFooInstallOptions();
   install_options.install_placeholder = true;
 
   {
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(
         kFooWebAppUrl, WebAppUrlLoader::Result::kRedirectedUrlLoaded);
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
     ASSERT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(1u, install_run_count());
   }
@@ -1164,8 +1139,8 @@
   // Reinstall placeholder
   {
     install_options.reinstall_placeholder = true;
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                        WebAppUrlLoader::Result::kUrlLoaded);
     install_finalizer()->SetNextUninstallExternalWebAppResult(kFooWebAppUrl,
@@ -1174,7 +1149,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
 
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(kFooWebAppUrl, url.value());
@@ -1185,21 +1160,19 @@
 
 TEST_F(PendingAppManagerImplTest,
        ReinstallPlaceholderApp_ReinstallNotPossible) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-
   // Install a placeholder app
   auto install_options = GetFooInstallOptions();
   install_options.install_placeholder = true;
 
   {
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(
         kFooWebAppUrl, WebAppUrlLoader::Result::kRedirectedUrlLoaded);
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
     ASSERT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(1u, install_run_count());
   }
@@ -1207,15 +1180,15 @@
   // Try to reinstall placeholder
   {
     install_options.reinstall_placeholder = true;
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(
         kFooWebAppUrl, WebAppUrlLoader::Result::kRedirectedUrlLoaded);
 
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
 
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(kFooWebAppUrl, url.value());
@@ -1229,20 +1202,19 @@
 
 TEST_F(PendingAppManagerImplTest,
        ReinstallPlaceholderAppWhenUnused_NoOpenedWindows) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
   // Install a placeholder app
   auto install_options = GetFooInstallOptions();
   install_options.install_placeholder = true;
 
   {
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(
         kFooWebAppUrl, WebAppUrlLoader::Result::kRedirectedUrlLoaded);
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
     ASSERT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(1u, install_run_count());
   }
@@ -1251,8 +1223,8 @@
   {
     install_options.reinstall_placeholder = true;
     install_options.wait_for_windows_closed = true;
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     ui_manager()->SetNumWindowsForApp(GenerateFakeAppId(kFooWebAppUrl), 0);
     url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                        WebAppUrlLoader::Result::kUrlLoaded);
@@ -1260,7 +1232,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
 
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(kFooWebAppUrl, url.value());
@@ -1271,21 +1243,19 @@
 
 TEST_F(PendingAppManagerImplTest,
        ReinstallPlaceholderAppWhenUnused_OneWindowOpened) {
-  auto pending_app_manager = GetPendingAppManagerImplWithTestMocks();
-
   // Install a placeholder app
   auto install_options = GetFooInstallOptions();
   install_options.install_placeholder = true;
 
   {
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     url_loader()->SetNextLoadUrlResult(
         kFooWebAppUrl, WebAppUrlLoader::Result::kRedirectedUrlLoaded);
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
     ASSERT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(1u, install_run_count());
   }
@@ -1294,8 +1264,8 @@
   {
     install_options.reinstall_placeholder = true;
     install_options.wait_for_windows_closed = true;
-    task_factory()->SetNextInstallationTaskResult(kFooWebAppUrl,
-                                                  InstallResultCode::kSuccess);
+    pending_app_manager_impl()->SetNextInstallationTaskResult(
+        kFooWebAppUrl, InstallResultCode::kSuccess);
     ui_manager()->SetNumWindowsForApp(GenerateFakeAppId(kFooWebAppUrl), 1);
     url_loader()->SetNextLoadUrlResult(kFooWebAppUrl,
                                        WebAppUrlLoader::Result::kUrlLoaded);
@@ -1305,7 +1275,7 @@
     base::Optional<GURL> url;
     base::Optional<InstallResultCode> code;
     std::tie(url, code) =
-        InstallAndWait(pending_app_manager.get(), install_options);
+        InstallAndWait(pending_app_manager_impl(), install_options);
 
     EXPECT_EQ(InstallResultCode::kSuccess, code.value());
     EXPECT_EQ(kFooWebAppUrl, url.value());
diff --git a/chrome/browser/web_applications/test/test_pending_app_manager.h b/chrome/browser/web_applications/test/test_pending_app_manager.h
index f073d52..da754c6 100644
--- a/chrome/browser/web_applications/test/test_pending_app_manager.h
+++ b/chrome/browser/web_applications/test/test_pending_app_manager.h
@@ -54,6 +54,7 @@
                    const RepeatingInstallCallback& callback) override;
   void UninstallApps(std::vector<GURL> uninstall_urls,
                      const UninstallCallback& callback) override;
+  void Shutdown() override {}
 
  private:
   void DoInstall(ExternalInstallOptions install_options,
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc
index 28a2706..9b00269 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.cc
+++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -45,9 +45,8 @@
 
 }  // namespace
 
-WebAppInstallFinalizer::WebAppInstallFinalizer(WebAppRegistrar* registrar,
-                                               WebAppIconManager* icon_manager)
-    : registrar_(registrar), icon_manager_(icon_manager) {}
+WebAppInstallFinalizer::WebAppInstallFinalizer(WebAppIconManager* icon_manager)
+    : icon_manager_(icon_manager) {}
 
 WebAppInstallFinalizer::~WebAppInstallFinalizer() = default;
 
@@ -99,6 +98,8 @@
   AppId app_id = web_app->app_id();
 
   registrar_->RegisterApp(std::move(web_app));
+  // TODO(loyso): NotifyWebAppInstalled should be a part of RegisterApp.
+  registrar_->NotifyWebAppInstalled(app_id);
 
   std::move(callback).Run(std::move(app_id), InstallResultCode::kSuccess);
 }
@@ -145,4 +146,10 @@
   return true;
 }
 
+void WebAppInstallFinalizer::SetSubsystems(AppRegistrar* registrar,
+                                           WebAppUiManager* ui_manager) {
+  registrar_ = registrar ? registrar->AsWebAppRegistrar() : nullptr;
+  InstallFinalizer::SetSubsystems(registrar, ui_manager);
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.h b/chrome/browser/web_applications/web_app_install_finalizer.h
index a51b6157..3d3a5768 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.h
+++ b/chrome/browser/web_applications/web_app_install_finalizer.h
@@ -21,8 +21,7 @@
 
 class WebAppInstallFinalizer final : public InstallFinalizer {
  public:
-  WebAppInstallFinalizer(WebAppRegistrar* registrar,
-                         WebAppIconManager* icon_manager);
+  explicit WebAppInstallFinalizer(WebAppIconManager* icon_manager);
   ~WebAppInstallFinalizer() override;
 
   // InstallFinalizer:
@@ -43,13 +42,15 @@
   bool CanSkipAppUpdateForSync(
       const AppId& app_id,
       const WebApplicationInfo& web_app_info) const override;
+  void SetSubsystems(AppRegistrar* registrar,
+                     WebAppUiManager* ui_manager) override;
 
  private:
   void OnDataWritten(InstallFinalizedCallback callback,
                      std::unique_ptr<WebApp> web_app,
                      bool success);
 
-  WebAppRegistrar* registrar_;
+  WebAppRegistrar* registrar_ = nullptr;
   WebAppIconManager* icon_manager_;
 
   base::WeakPtrFactory<WebAppInstallFinalizer> weak_ptr_factory_{this};
diff --git a/chrome/browser/web_applications/web_app_install_manager.cc b/chrome/browser/web_applications/web_app_install_manager.cc
index b21990f2..8ac0a418 100644
--- a/chrome/browser/web_applications/web_app_install_manager.cc
+++ b/chrome/browser/web_applications/web_app_install_manager.cc
@@ -136,6 +136,15 @@
     MaybeStartQueuedTask();
 }
 
+void WebAppInstallManager::Shutdown() {
+  tasks_.clear();
+  {
+    TaskQueue empty;
+    task_queue_.swap(empty);
+  }
+  web_contents_.reset();
+}
+
 void WebAppInstallManager::InstallWebAppForTesting(
     std::unique_ptr<WebApplicationInfo> web_application_info,
     OnceInstallCallback callback) {
diff --git a/chrome/browser/web_applications/web_app_install_manager.h b/chrome/browser/web_applications/web_app_install_manager.h
index 2b169a4..47043877 100644
--- a/chrome/browser/web_applications/web_app_install_manager.h
+++ b/chrome/browser/web_applications/web_app_install_manager.h
@@ -59,6 +59,7 @@
       const AppId& app_id,
       std::unique_ptr<WebApplicationInfo> web_application_info,
       OnceInstallCallback callback) override;
+  void Shutdown() override;
   void InstallWebAppForTesting(
       std::unique_ptr<WebApplicationInfo> web_application_info,
       OnceInstallCallback callback) override;
diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/browser/web_applications/web_app_install_task.cc
index 58f0a49..f7672fc4 100644
--- a/chrome/browser/web_applications/web_app_install_task.cc
+++ b/chrome/browser/web_applications/web_app_install_task.cc
@@ -30,8 +30,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/common/chrome_features.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/app.mojom.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "net/base/url_util.h"
 #endif
diff --git a/chrome/browser/web_applications/web_app_install_task_unittest.cc b/chrome/browser/web_applications/web_app_install_task_unittest.cc
index 4958ee9..a05f747f 100644
--- a/chrome/browser/web_applications/web_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_task_unittest.cc
@@ -45,8 +45,8 @@
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/ui/app_list/arc/arc_app_test.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_app_instance.h"
@@ -126,9 +126,9 @@
 
     ui_manager_ = std::make_unique<TestWebAppUiManager>();
 
-    install_finalizer_ = std::make_unique<WebAppInstallFinalizer>(
-        registrar_.get(), icon_manager_.get());
-    install_finalizer_->SetSubsystems(ui_manager_.get());
+    install_finalizer_ =
+        std::make_unique<WebAppInstallFinalizer>(icon_manager_.get());
+    install_finalizer_->SetSubsystems(registrar_.get(), ui_manager_.get());
 
     auto data_retriever = std::make_unique<TestDataRetriever>();
     data_retriever_ = data_retriever.get();
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc
index 3fcc5583..5cd19ee 100644
--- a/chrome/browser/web_applications/web_app_provider.cc
+++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -113,22 +113,8 @@
 }
 
 void WebAppProvider::Shutdown() {
-  // Destroy subsystems.
-  // The order of destruction is the reverse order of creation:
-  // TODO(calamity): Make subsystem destruction happen in destructor.
-  ui_manager_.reset();
-  system_web_app_manager_.reset();
-  web_app_policy_manager_.reset();
-  external_web_app_manager_.reset();
-  pending_app_manager_.reset();
-
-  install_manager_.reset();
-  install_finalizer_.reset();
-  icon_manager_.reset();
-  registrar_.reset();
-  database_.reset();
-  database_factory_.reset();
-  audio_focus_id_map_.reset();
+  pending_app_manager_->Shutdown();
+  install_manager_->Shutdown();
 }
 
 void WebAppProvider::StartImpl() {
@@ -150,11 +136,8 @@
   icon_manager_ = std::make_unique<WebAppIconManager>(
       profile, std::make_unique<FileUtilsWrapper>());
 
-  // TODO(crbug.com/973324): Once the WebAppInstallFinalizer can take an
-  // AppRegistrar instead of needing a WebAppRegistrar, move this wiring into
-  // ConnectSubsystems().
-  install_finalizer_ = std::make_unique<WebAppInstallFinalizer>(
-      web_app_registrar.get(), icon_manager_.get());
+  install_finalizer_ =
+      std::make_unique<WebAppInstallFinalizer>(icon_manager_.get());
   sync_manager_ = std::make_unique<WebAppSyncManager>();
 
   system_web_app_manager_ = std::make_unique<SystemWebAppManager>(profile);
@@ -179,7 +162,7 @@
   DCHECK(!started_);
 
   install_manager_->SetSubsystems(registrar_.get(), install_finalizer_.get());
-  install_finalizer_->SetSubsystems(ui_manager_.get());
+  install_finalizer_->SetSubsystems(registrar_.get(), ui_manager_.get());
 
   // TODO(crbug.com/877898): Port all other managers to support BMO.
   if (!base::FeatureList::IsEnabled(features::kDesktopPWAsWithoutExtensions)) {
diff --git a/chrome/browser/web_applications/web_app_provider.h b/chrome/browser/web_applications/web_app_provider.h
index 2d1e9db..0a85c2e0 100644
--- a/chrome/browser/web_applications/web_app_provider.h
+++ b/chrome/browser/web_applications/web_app_provider.h
@@ -110,10 +110,6 @@
   void StartRegistry();
   void OnRegistryReady();
 
-  // Called just before profile destruction. All WebContents must be destroyed
-  // by the end of this method.
-  void ProfileDestroyed();
-
   // New extension-independent subsystems:
   std::unique_ptr<WebAppAudioFocusIdMap> audio_focus_id_map_;
   std::unique_ptr<WebAppDatabaseFactory> database_factory_;
diff --git a/chrome/browser/web_applications/web_app_registrar.cc b/chrome/browser/web_applications/web_app_registrar.cc
index f99b422b..c9eae7e 100644
--- a/chrome/browser/web_applications/web_app_registrar.cc
+++ b/chrome/browser/web_applications/web_app_registrar.cc
@@ -75,6 +75,10 @@
   std::move(callback).Run();
 }
 
+WebAppRegistrar* WebAppRegistrar::AsWebAppRegistrar() {
+  return this;
+}
+
 bool WebAppRegistrar::IsInstalled(const GURL& start_url) const {
   NOTIMPLEMENTED();
   return false;
diff --git a/chrome/browser/web_applications/web_app_registrar.h b/chrome/browser/web_applications/web_app_registrar.h
index 7cbab93..a48c730 100644
--- a/chrome/browser/web_applications/web_app_registrar.h
+++ b/chrome/browser/web_applications/web_app_registrar.h
@@ -37,6 +37,7 @@
 
   // AppRegistrar:
   void Init(base::OnceClosure callback) override;
+  WebAppRegistrar* AsWebAppRegistrar() override;
   bool IsInstalled(const GURL& start_url) const override;
   bool IsInstalled(const AppId& app_id) const override;
   bool WasExternalAppUninstalledByUser(const AppId& app_id) const override;
diff --git a/chrome/common/chrome_constants.cc b/chrome/common/chrome_constants.cc
index baa9e44..fe43bdf3 100644
--- a/chrome/common/chrome_constants.cc
+++ b/chrome/common/chrome_constants.cc
@@ -123,6 +123,9 @@
 
 #if defined(OS_WIN)
 const base::FilePath::CharType kBrowserResourcesDll[] = FPL("chrome.dll");
+// Only relevant if building with is_multi_dll_chrome=true.
+const base::FilePath::CharType kChildDll[] = FPL("chrome_child.dll");
+const base::FilePath::CharType kElfDll[] = FPL("chrome_elf.dll");
 const base::FilePath::CharType kStatusTrayWindowClass[] =
     FPL("Chrome_StatusTrayWindow");
 #endif  // defined(OS_WIN)
diff --git a/chrome/common/chrome_constants.h b/chrome/common/chrome_constants.h
index 9745a9c..17efe19 100644
--- a/chrome/common/chrome_constants.h
+++ b/chrome/common/chrome_constants.h
@@ -33,6 +33,8 @@
 #endif  // OS_MACOSX
 #if defined(OS_WIN)
 extern const base::FilePath::CharType kBrowserResourcesDll[];
+extern const base::FilePath::CharType kChildDll[];
+extern const base::FilePath::CharType kElfDll[];
 extern const base::FilePath::CharType kStatusTrayWindowClass[];
 #endif  // defined(OS_WIN)
 
diff --git a/chrome/common/conflicts/remote_module_watcher_win_unittest.cc b/chrome/common/conflicts/remote_module_watcher_win_unittest.cc
index 7c20a1cf..32324d4 100644
--- a/chrome/common/conflicts/remote_module_watcher_win_unittest.cc
+++ b/chrome/common/conflicts/remote_module_watcher_win_unittest.cc
@@ -30,7 +30,7 @@
  public:
   RemoteModuleWatcherTest()
       : scoped_task_environment_(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         service_binding_(this,
                          test_connector_factory_.RegisterInstance(
                              content::mojom::kSystemServiceName)),
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl
index dd0c68e..bb25872 100644
--- a/chrome/common/extensions/api/file_manager_private.idl
+++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -229,7 +229,14 @@
   native_or_drive_source
 };
 
-enum CrostiniEventType { enable, disable, share, unshare };
+enum CrostiniEventType {
+  enable,
+  disable,
+  root_access_allow,
+  root_access_disallow,
+  share,
+  unshare
+};
 
 // A file task represents an action that the file manager can perform over the
 // currently selected files. See
diff --git a/chrome/common/heap_profiler_controller_unittest.cc b/chrome/common/heap_profiler_controller_unittest.cc
index 85cd18f..9974053 100644
--- a/chrome/common/heap_profiler_controller_unittest.cc
+++ b/chrome/common/heap_profiler_controller_unittest.cc
@@ -22,7 +22,7 @@
 class HeapProfilerControllerTest : public testing::Test {
  protected:
   base::test::ScopedTaskEnvironment scoped_task_environment{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
 };
 
 TEST_F(HeapProfilerControllerTest, MAYBE_EmptyProfileIsNotEmitted) {
diff --git a/chrome/common/instant_mojom_traits.h b/chrome/common/instant_mojom_traits.h
index d0fc0d69..00f590c0 100644
--- a/chrome/common/instant_mojom_traits.h
+++ b/chrome/common/instant_mojom_traits.h
@@ -64,7 +64,7 @@
 
 IPC_STRUCT_TRAITS_BEGIN(ThemeBackgroundInfo)
   IPC_STRUCT_TRAITS_MEMBER(using_default_theme)
-  IPC_STRUCT_TRAITS_MEMBER(using_dark_mode)
+  IPC_STRUCT_TRAITS_MEMBER(using_dark_colors)
   IPC_STRUCT_TRAITS_MEMBER(custom_background_url)
   IPC_STRUCT_TRAITS_MEMBER(custom_background_attribution_line_1)
   IPC_STRUCT_TRAITS_MEMBER(custom_background_attribution_line_2)
diff --git a/chrome/common/media_router/mojom/BUILD.gn b/chrome/common/media_router/mojom/BUILD.gn
index e7c020cf..e937224a 100644
--- a/chrome/common/media_router/mojom/BUILD.gn
+++ b/chrome/common/media_router/mojom/BUILD.gn
@@ -23,7 +23,7 @@
   public_deps = [
     ":media_controller",
     "//components/mirroring/mojom:host",
-    "//media/mojo/interfaces:mirror_service_remoting",
+    "//media/mojo/mojom:mirror_service_remoting",
     "//mojo/public/mojom/base",
     "//services/network/public/mojom:mojom_ip_address",
     "//third_party/blink/public/mojom:mojom_platform",
diff --git a/chrome/common/media_router/mojom/media_router.mojom b/chrome/common/media_router/mojom/media_router.mojom
index a4b24493..8a772b64 100644
--- a/chrome/common/media_router/mojom/media_router.mojom
+++ b/chrome/common/media_router/mojom/media_router.mojom
@@ -7,7 +7,7 @@
 import "chrome/common/media_router/mojom/media_controller.mojom";
 import "chrome/common/media_router/mojom/media_status.mojom";
 import "components/mirroring/mojom/mirroring_service_host.mojom";
-import "media/mojo/interfaces/mirror_service_remoting.mojom";
+import "media/mojo/mojom/mirror_service_remoting.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "services/network/public/mojom/ip_address.mojom";
 import "services/network/public/mojom/ip_endpoint.mojom";
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index cdb0e20..a79cd7d 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -977,6 +977,10 @@
 
 // String containing last RSU lookup key uploaded. Empty until first upload.
 const char kLastRsuDeviceIdUploaded[] = "rsu.last_rsu_device_id_uploaded";
+
+// Boolean that determines whether to show a banner in OS Settings that links
+// to Browser settings.
+const char kSettingsShowBrowserBanner[] = "settings.cros.show_browser_banner";
 #endif  // defined(OS_CHROMEOS)
 
 // A boolean pref set to true if a Home button to open the Home pages should be
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index c90bf9f1..9eb061f 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -312,6 +312,7 @@
 extern const char kStartupBrowserWindowLaunchSuppressed[];
 extern const char kDeviceWebUsbAllowDevicesForUrls[];
 extern const char kLoginExtensionApiDataForNextLoginAttempt[];
+extern const char kSettingsShowBrowserBanner[];
 #endif  // defined(OS_CHROMEOS)
 extern const char kShowHomeButton[];
 extern const char kSpeechRecognitionFilterProfanities[];
diff --git a/chrome/common/search/instant_types.cc b/chrome/common/search/instant_types.cc
index 6511438c..4f2bab3b 100644
--- a/chrome/common/search/instant_types.cc
+++ b/chrome/common/search/instant_types.cc
@@ -4,34 +4,13 @@
 
 #include "chrome/common/search/instant_types.h"
 
-ThemeBackgroundInfo::ThemeBackgroundInfo()
-    : using_default_theme(true),
-      using_dark_mode(false),
-      custom_background_url(std::string()),
-      custom_background_attribution_line_1(std::string()),
-      custom_background_attribution_line_2(std::string()),
-      custom_background_attribution_action_url(std::string()),
-      collection_id(std::string()),
-      background_color(),
-      text_color(),
-      text_color_light(),
-      image_horizontal_alignment(THEME_BKGRND_IMAGE_ALIGN_CENTER),
-      image_vertical_alignment(THEME_BKGRND_IMAGE_ALIGN_CENTER),
-      image_tiling(THEME_BKGRND_IMAGE_NO_REPEAT),
-      has_attribution(false),
-      logo_alternate(false),
-      has_theme_image(false),
-      theme_name(),
-      color_id(-1),
-      color_dark(),
-      color_light() {}
+ThemeBackgroundInfo::ThemeBackgroundInfo() = default;
 
-ThemeBackgroundInfo::~ThemeBackgroundInfo() {
-}
+ThemeBackgroundInfo::~ThemeBackgroundInfo() {}
 
 bool ThemeBackgroundInfo::operator==(const ThemeBackgroundInfo& rhs) const {
   return using_default_theme == rhs.using_default_theme &&
-         using_dark_mode == rhs.using_dark_mode &&
+         using_dark_colors == rhs.using_dark_colors &&
          custom_background_url == rhs.custom_background_url &&
          custom_background_attribution_line_1 ==
              rhs.custom_background_attribution_line_1 &&
@@ -62,10 +41,7 @@
 
 InstantMostVisitedItem::~InstantMostVisitedItem() {}
 
-InstantMostVisitedInfo::InstantMostVisitedInfo()
-    : items_are_custom_links(false),
-      use_most_visited(false),
-      is_visible(true) {}
+InstantMostVisitedInfo::InstantMostVisitedInfo() = default;
 
 InstantMostVisitedInfo::InstantMostVisitedInfo(
     const InstantMostVisitedInfo& other) = default;
diff --git a/chrome/common/search/instant_types.h b/chrome/common/search/instant_types.h
index 153390b..24e12c20 100644
--- a/chrome/common/search/instant_types.h
+++ b/chrome/common/search/instant_types.h
@@ -16,6 +16,7 @@
 #include "components/ntp_tiles/tile_source.h"
 #include "components/ntp_tiles/tile_title_source.h"
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/color_palette.h"
 #include "url/gurl.h"
 
 // ID used by Instant code to refer to objects (e.g. Autocomplete results, Most
@@ -51,10 +52,11 @@
   bool operator==(const ThemeBackgroundInfo& rhs) const;
 
   // True if the default theme is selected.
-  bool using_default_theme;
+  bool using_default_theme = true;
 
-  // True if dark mode is enabled.
-  bool using_dark_mode;
+  // True if the system theme uses a light-on-dark color scheme instead of
+  // dark-on-light.
+  bool using_dark_colors = false;
 
   // Url of the custom background selected by the user.
   GURL custom_background_url;
@@ -86,24 +88,26 @@
 
   // The theme background image horizontal alignment is only valid if |theme_id|
   // is valid.
-  ThemeBackgroundImageAlignment image_horizontal_alignment;
+  ThemeBackgroundImageAlignment image_horizontal_alignment =
+      THEME_BKGRND_IMAGE_ALIGN_CENTER;
 
   // The theme background image vertical alignment is only valid if |theme_id|
   // is valid.
-  ThemeBackgroundImageAlignment image_vertical_alignment;
+  ThemeBackgroundImageAlignment image_vertical_alignment =
+      THEME_BKGRND_IMAGE_ALIGN_CENTER;
 
   // The theme background image tiling is only valid if |theme_id| is valid.
-  ThemeBackgroundImageTiling image_tiling;
+  ThemeBackgroundImageTiling image_tiling = THEME_BKGRND_IMAGE_NO_REPEAT;
 
   // True if theme has attribution logo.
   // Value is only valid if |theme_id| is valid.
-  bool has_attribution;
+  bool has_attribution = false;
 
   // True if theme has an alternate logo.
-  bool logo_alternate;
+  bool logo_alternate = false;
 
   // True if theme has NTP image.
-  bool has_theme_image;
+  bool has_theme_image = false;
 
   // The theme name.
   std::string theme_name;
@@ -111,13 +115,13 @@
   // The color id for Chrome Colors. It is -1 if Chrome Colors is not set, 0
   // when Chrome Colors is set but not from predefined color list, and > 0 if
   // Chrome Colors is set from predefined color list.
-  int color_id;
+  int color_id = 0;
 
   // The dark color for Chrome Colors. Valid only if Chrome Colors is set.
-  SkColor color_dark;
+  SkColor color_dark = gfx::kPlaceholderColor;
 
   // The light color for Chrome Colors. Valid only if Chrome Colors is set.
-  SkColor color_light;
+  SkColor color_light = gfx::kPlaceholderColor;
 };
 
 struct InstantMostVisitedItem {
@@ -156,14 +160,14 @@
   // True if the source of the |items| is custom links (i.e.
   // ntp_tiles::TileSource::CUSTOM_LINKS). Required since the source cannot be
   // checked if |items| is empty.
-  bool items_are_custom_links;
+  bool items_are_custom_links = false;
 
   // True if Most Visited functionality is enabled instead of customizable
   // shortcuts.
-  bool use_most_visited;
+  bool use_most_visited = false;
 
   // True if the items are visible and not hidden by the user.
-  bool is_visible;
+  bool is_visible = true;
 };
 
 // An InstantMostVisitedItem along with its assigned restricted ID.
diff --git a/chrome/gpu/BUILD.gn b/chrome/gpu/BUILD.gn
index 614027c..9e4c05b0c 100644
--- a/chrome/gpu/BUILD.gn
+++ b/chrome/gpu/BUILD.gn
@@ -39,7 +39,7 @@
 
   if (is_chromeos) {
     deps += [
-      "//components/arc/common:media",
+      "//components/arc/mojom:media",
       "//components/arc/video_accelerator",
       "//gpu/command_buffer/service",
       "//services/service_manager/public/cpp",
diff --git a/chrome/gpu/DEPS b/chrome/gpu/DEPS
index c7efd56..a79ccc1 100644
--- a/chrome/gpu/DEPS
+++ b/chrome/gpu/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
-  "+components/arc/common",
+  "+components/arc/mojom",
   "+components/arc/video_accelerator",
   "+components/metrics",
   "+content/public/child",
diff --git a/chrome/gpu/chrome_content_gpu_client.h b/chrome/gpu/chrome_content_gpu_client.h
index 1259745c..045c52e 100644
--- a/chrome/gpu/chrome_content_gpu_client.h
+++ b/chrome/gpu/chrome_content_gpu_client.h
@@ -15,10 +15,10 @@
 #include "content/public/gpu/content_gpu_client.h"
 
 #if defined(OS_CHROMEOS)
-#include "components/arc/common/protected_buffer_manager.mojom.h"
-#include "components/arc/common/video_decode_accelerator.mojom.h"
-#include "components/arc/common/video_encode_accelerator.mojom.h"
-#include "components/arc/common/video_protected_buffer_allocator.mojom.h"
+#include "components/arc/mojom/protected_buffer_manager.mojom.h"
+#include "components/arc/mojom/video_decode_accelerator.mojom.h"
+#include "components/arc/mojom/video_encode_accelerator.mojom.h"
+#include "components/arc/mojom/video_protected_buffer_allocator.mojom.h"
 #include "gpu/config/gpu_preferences.h"
 
 namespace arc {
diff --git a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
index 85938bda..7890cd1 100644
--- a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
+++ b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
@@ -225,10 +225,10 @@
                              IDR_MOJO_IP_ENDPOINT_MOJOM_JS);
   source_map->RegisterSource("url/mojom/origin.mojom", IDR_ORIGIN_MOJOM_JS);
   source_map->RegisterSource("url/mojom/url.mojom", IDR_MOJO_URL_MOJOM_JS);
-  source_map->RegisterSource("media/mojo/interfaces/remoting_common.mojom",
+  source_map->RegisterSource("media/mojo/mojom/remoting_common.mojom",
                              IDR_REMOTING_COMMON_JS);
   source_map->RegisterSource(
-      "media/mojo/interfaces/mirror_service_remoting.mojom",
+      "media/mojo/mojom/mirror_service_remoting.mojom",
       IDR_MEDIA_REMOTING_JS);
   source_map->RegisterSource(
       "components/mirroring/mojom/mirroring_service_host.mojom",
diff --git a/chrome/renderer/media/DEPS b/chrome/renderer/media/DEPS
index d0acd5d..a87ac81 100644
--- a/chrome/renderer/media/DEPS
+++ b/chrome/renderer/media/DEPS
@@ -5,5 +5,5 @@
   "+media/base",  # For basic media functions.
   "+media/cast",  # For cast streaming library.
   "+media/capture",  # For capture library.
-  "+media/mojo/interfaces",  # For mojo interfaces.
+  "+media/mojo/mojom",  # For mojo interfaces.
 ]
diff --git a/chrome/renderer/media/cast_ipc_dispatcher_unittest.cc b/chrome/renderer/media/cast_ipc_dispatcher_unittest.cc
index a0b4bf7..9b3d7bc5 100644
--- a/chrome/renderer/media/cast_ipc_dispatcher_unittest.cc
+++ b/chrome/renderer/media/cast_ipc_dispatcher_unittest.cc
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/message_loop/message_loop.h"
+#include "chrome/renderer/media/cast_ipc_dispatcher.h"
+
+#include "base/test/scoped_task_environment.h"
 #include "base/test/simple_test_tick_clock.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/common/cast_messages.h"
-#include "chrome/renderer/media/cast_ipc_dispatcher.h"
 #include "ipc/ipc_message_macros.h"
 #include "media/cast/logging/logging_defines.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -25,7 +26,8 @@
   }
 
   scoped_refptr<CastIPCDispatcher> dispatcher_;
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
 };
 
 TEST_F(CastIPCDispatcherTest, RawEvents) {
diff --git a/chrome/renderer/media/cast_session.cc b/chrome/renderer/media/cast_session.cc
index 2ecbee8..f683c0f 100644
--- a/chrome/renderer/media/cast_session.cc
+++ b/chrome/renderer/media/cast_session.cc
@@ -18,6 +18,7 @@
 #include "media/base/video_frame.h"
 #include "media/cast/cast_sender.h"
 #include "media/cast/logging/logging_defines.h"
+#include "mojo/public/cpp/base/shared_memory_utils.h"
 
 namespace {
 
@@ -34,12 +35,9 @@
     const media::cast::ReceiveVideoEncodeMemoryCallback& callback) {
   DCHECK(content::RenderThread::Get());
 
-  std::unique_ptr<base::SharedMemory> shm =
-      content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(size);
-  DCHECK(shm) << "Failed to allocate shared memory";
-  if (!shm->Map(size)) {
-    NOTREACHED() << "Map failed";
-  }
+  base::UnsafeSharedMemoryRegion shm =
+      mojo::CreateUnsafeSharedMemoryRegion(size);
+  DCHECK(shm.IsValid()) << "Failed to allocate shared memory";
   callback.Run(std::move(shm));
 }
 
diff --git a/chrome/renderer/resources/extensions/media_router_bindings.js b/chrome/renderer/resources/extensions/media_router_bindings.js
index a66061c..deeee7c 100644
--- a/chrome/renderer/resources/extensions/media_router_bindings.js
+++ b/chrome/renderer/resources/extensions/media_router_bindings.js
@@ -17,8 +17,8 @@
 loadScript('components/mirroring/mojom/session_observer.mojom');
 loadScript('components/mirroring/mojom/session_parameters.mojom');
 loadScript('extensions/common/mojom/keep_alive.mojom');
-loadScript('media/mojo/interfaces/mirror_service_remoting.mojom');
-loadScript('media/mojo/interfaces/remoting_common.mojom');
+loadScript('media/mojo/mojom/mirror_service_remoting.mojom');
+loadScript('media/mojo/mojom/remoting_common.mojom');
 loadScript('mojo/public/mojom/base/time.mojom');
 loadScript('mojo/public/mojom/base/unguessable_token.mojom');
 loadScript('net/interfaces/ip_address.mojom');
diff --git a/chrome/renderer/resources/renderer_resources.grd b/chrome/renderer/resources/renderer_resources.grd
index 3e4b584..3f31e15 100644
--- a/chrome/renderer/resources/renderer_resources.grd
+++ b/chrome/renderer/resources/renderer_resources.grd
@@ -88,8 +88,8 @@
         <include name="IDR_MOJO_IP_ENDPOINT_MOJOM_JS" file="${mojom_root}\services\network\public\mojom\ip_endpoint.mojom.js" use_base_dir="false" type="BINDATA" />
         <include name="IDR_ORIGIN_MOJOM_JS" file="${mojom_root}\url\mojom\origin.mojom.js" use_base_dir="false" type="BINDATA" />
         <include name="IDR_MOJO_URL_MOJOM_JS" file="${mojom_root}\url\mojom\url.mojom.js" use_base_dir="false" type="BINDATA" />
-        <include name="IDR_MEDIA_REMOTING_JS" file="${mojom_root}\media\mojo\interfaces\mirror_service_remoting.mojom.js" use_base_dir="false" type="BINDATA" />
-        <include name="IDR_REMOTING_COMMON_JS" file="${mojom_root}\media\mojo\interfaces\remoting_common.mojom.js" use_base_dir="false" type="BINDATA" />
+        <include name="IDR_MEDIA_REMOTING_JS" file="${mojom_root}\media\mojo\mojom\mirror_service_remoting.mojom.js" use_base_dir="false" type="BINDATA" />
+        <include name="IDR_REMOTING_COMMON_JS" file="${mojom_root}\media\mojo\mojom\remoting_common.mojom.js" use_base_dir="false" type="BINDATA" />
       </if>
     </includes>
   </release>
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc
index 5aa101e..bbe2252e 100644
--- a/chrome/renderer/searchbox/searchbox_extension.cc
+++ b/chrome/renderer/searchbox/searchbox_extension.cc
@@ -94,7 +94,7 @@
   if (has_background_image)
     return kNTPLightIconColor;
 
-  if (theme_info.using_dark_mode && theme_info.using_default_theme)
+  if (theme_info.using_dark_colors && theme_info.using_default_theme)
     return kNTPDarkIconColor;
 
   SkColor bg_color = theme_info.background_color;
diff --git a/chrome/renderer/searchbox/searchbox_extension_unittest.cc b/chrome/renderer/searchbox/searchbox_extension_unittest.cc
index b1f7cec..0f2d43c 100644
--- a/chrome/renderer/searchbox/searchbox_extension_unittest.cc
+++ b/chrome/renderer/searchbox/searchbox_extension_unittest.cc
@@ -55,14 +55,14 @@
 TEST(SearchboxExtensionTest, TestGetIconColor) {
   ThemeBackgroundInfo theme_info;
   theme_info.using_default_theme = true;
-  theme_info.using_dark_mode = false;
+  theme_info.using_dark_colors = false;
   theme_info.background_color = SK_ColorRED;
 
   // Default theme in light mode.
   EXPECT_EQ(kNTPLightIconColor, GetIconColor(theme_info));
 
   // Default theme in dark mode.
-  theme_info.using_dark_mode = true;
+  theme_info.using_dark_colors = true;
   EXPECT_EQ(kNTPDarkIconColor, GetIconColor(theme_info));
 
   // Default theme with custom background, in dark mode.
@@ -70,7 +70,7 @@
   EXPECT_EQ(kNTPLightIconColor, GetIconColor(theme_info));
 
   // Default theme with custom background.
-  theme_info.using_dark_mode = false;
+  theme_info.using_dark_colors = false;
   EXPECT_EQ(kNTPLightIconColor, GetIconColor(theme_info));
 
   // Theme with image.
@@ -80,7 +80,7 @@
   EXPECT_EQ(kNTPLightIconColor, GetIconColor(theme_info));
 
   // Theme with image in dark mode.
-  theme_info.using_dark_mode = true;
+  theme_info.using_dark_colors = true;
   EXPECT_EQ(kNTPLightIconColor, GetIconColor(theme_info));
 
   SkColor red_icon_color = GetContrastingColorForBackground(SK_ColorRED, 0.2f);
@@ -90,7 +90,7 @@
   EXPECT_EQ(red_icon_color, GetIconColor(theme_info));
 
   // Theme with no image.
-  theme_info.using_dark_mode = false;
+  theme_info.using_dark_colors = false;
   EXPECT_EQ(red_icon_color, GetIconColor(theme_info));
 }
 
@@ -104,12 +104,12 @@
   EXPECT_EQ(kNTPLightLogoColor, GetLogoColor(theme_info));
 
   // Default theme in dark mode.
-  theme_info.using_dark_mode = true;
+  theme_info.using_dark_colors = true;
   theme_info.background_color = SK_ColorBLACK;
   EXPECT_EQ(kNTPLightLogoColor, GetLogoColor(theme_info));
 
   // Default theme with custom background.
-  theme_info.using_dark_mode = false;
+  theme_info.using_dark_colors = false;
   theme_info.background_color = SK_ColorWHITE;
   theme_info.custom_background_url = GURL("https://www.foo.com");
   EXPECT_EQ(kNTPLightLogoColor, GetLogoColor(theme_info));
diff --git a/chrome/service/cloud_print/cloud_print_url_fetcher.cc b/chrome/service/cloud_print/cloud_print_url_fetcher.cc
index 9efcfc22b1..f9f2fd69 100644
--- a/chrome/service/cloud_print/cloud_print_url_fetcher.cc
+++ b/chrome/service/cloud_print/cloud_print_url_fetcher.cc
@@ -283,8 +283,7 @@
   request_->SetMaxRetriesOn5xx(max_retries);
   delegate_ = delegate;
   SetupRequestHeaders();
-  request_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
-                         net::LOAD_DO_NOT_SAVE_COOKIES);
+  request_->SetAllowCredentials(false);
   if (request_type == net::URLFetcher::POST) {
     request_->SetUploadData(post_data_mime_type, post_data);
     ReportUploadSize(type_, post_data.size());
diff --git a/chrome/service/cloud_print/cloud_print_url_fetcher_unittest.cc b/chrome/service/cloud_print/cloud_print_url_fetcher_unittest.cc
index c2a1494..5af801c 100644
--- a/chrome/service/cloud_print/cloud_print_url_fetcher_unittest.cc
+++ b/chrome/service/cloud_print/cloud_print_url_fetcher_unittest.cc
@@ -6,10 +6,10 @@
 #include "base/command_line.h"
 #include "base/location.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/values.h"
@@ -139,7 +139,8 @@
   // we assume that the current thread is the IO thread where the URLFetcher
   // dispatches its requests to.  When we wish to simulate being used from
   // a UI thread, we dispatch a worker thread to do so.
-  base::MessageLoopForIO io_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
   int max_retries_;
   Time start_time_;
diff --git a/chrome/service/cloud_print/printer_job_handler_unittest.cc b/chrome/service/cloud_print/printer_job_handler_unittest.cc
index 1cd43bbd..c28c7e9 100644
--- a/chrome/service/cloud_print/printer_job_handler_unittest.cc
+++ b/chrome/service/cloud_print/printer_job_handler_unittest.cc
@@ -11,11 +11,11 @@
 #include "base/hash/md5.h"
 #include "base/location.h"
 #include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/bind_test_util.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/common/cloud_print/cloud_print_constants.h"
 #include "chrome/service/cloud_print/cloud_print_service_helpers.h"
@@ -464,7 +464,8 @@
   void BeginTest(int timeout_seconds);
   void MakeJobFetchReturnNoJobs();
 
-  base::MessageLoopForIO loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   base::OnceClosure active_run_loop_quit_closure_;
   TestURLFetcherCallback url_callback_;
   MockPrinterJobHandlerDelegate jobhandler_delegate_;
@@ -765,7 +766,7 @@
                            net::HTTP_INTERNAL_SERVER_ERROR,
                            net::URLRequestStatus::FAILED);
 
-  loop_.task_runner()->PostDelayedTask(
+  scoped_task_environment_.GetMainThreadTaskRunner()->PostDelayedTask(
       FROM_HERE,
       base::BindOnce(&net::FakeURLFetcherFactory::SetFakeResponse,
                      base::Unretained(&factory_), TicketURI(1),
diff --git a/chrome/services/media_gallery_util/public/mojom/BUILD.gn b/chrome/services/media_gallery_util/public/mojom/BUILD.gn
index 71c403e4..20522e95 100644
--- a/chrome/services/media_gallery_util/public/mojom/BUILD.gn
+++ b/chrome/services/media_gallery_util/public/mojom/BUILD.gn
@@ -11,7 +11,7 @@
   ]
 
   public_deps = [
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/mojom/base",
   ]
 }
diff --git a/chrome/services/media_gallery_util/public/mojom/media_parser.mojom b/chrome/services/media_gallery_util/public/mojom/media_parser.mojom
index 4ac236e..a00a61ce 100644
--- a/chrome/services/media_gallery_util/public/mojom/media_parser.mojom
+++ b/chrome/services/media_gallery_util/public/mojom/media_parser.mojom
@@ -4,7 +4,7 @@
 
 module chrome.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/file.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "mojo/public/mojom/base/values.mojom";
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 3f753d2..d3e2c53 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -669,6 +669,7 @@
       "//components/strings",
       "//components/sync",
       "//components/sync:test_support_model",
+      "//components/sync_device_info:test_support",
       "//components/translate/core/common",
       "//content/public/common:buildflags",
       "//content/test:test_support",
@@ -4512,6 +4513,7 @@
   if (safe_browsing_mode == 1) {
     # TODO(sgurun): enable tests for safe_browsing==2.
     sources += [
+      "../browser/safe_browsing/advanced_protection_status_manager_factory_unittest.cc",
       "../browser/safe_browsing/advanced_protection_status_manager_unittest.cc",
       "../browser/safe_browsing/browser_feature_extractor_unittest.cc",
       "../browser/safe_browsing/chrome_password_protection_service_unittest.cc",
@@ -4725,7 +4727,6 @@
       "../browser/ui/cocoa/profiles/profile_menu_controller_unittest.mm",
       "../browser/ui/cocoa/scoped_menu_bar_lock_unittest.mm",
       "../browser/ui/cocoa/status_icons/status_icon_mac_unittest.mm",
-      "../browser/ui/cocoa/tab_menu_bridge_unittest.mm",
       "../browser/ui/cocoa/test/cocoa_profile_test.h",
       "../browser/ui/cocoa/test/cocoa_profile_test.mm",
       "../browser/ui/cocoa/test/run_loop_testing_unittest.mm",
diff --git a/chrome/test/base/in_process_browser_test_browsertest.cc b/chrome/test/base/in_process_browser_test_browsertest.cc
index c8f712a..cfe79791 100644
--- a/chrome/test/base/in_process_browser_test_browsertest.cc
+++ b/chrome/test/base/in_process_browser_test_browsertest.cc
@@ -105,9 +105,8 @@
   }
 };
 
-#if defined(OS_LINUX) || defined(OS_WIN)
-// TODO(https://crbug.com/931233): Reenable on Linux.
-// TODO(https://crbug.com/987448): Reenable on Windows.
+#if defined(OS_LINUX)
+// TODO(https://crbug.com/931233): Reenable
 #define MAYBE_Test DISABLED_Test
 #else
 #define MAYBE_Test Test
diff --git a/chrome/test/base/testing_browser_process.cc b/chrome/test/base/testing_browser_process.cc
index 1022469..9ec6991 100644
--- a/chrome/test/base/testing_browser_process.cc
+++ b/chrome/test/base/testing_browser_process.cc
@@ -426,11 +426,6 @@
   return shell_integration::UNKNOWN_DEFAULT;
 }
 
-prefs::InProcessPrefServiceFactory*
-TestingBrowserProcess::pref_service_factory() const {
-  return nullptr;
-}
-
 void TestingBrowserProcess::SetSharedURLLoaderFactory(
     scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory) {
   shared_url_loader_factory_ = shared_url_loader_factory;
diff --git a/chrome/test/base/testing_browser_process.h b/chrome/test/base/testing_browser_process.h
index a2df097..4e631b2 100644
--- a/chrome/test/base/testing_browser_process.h
+++ b/chrome/test/base/testing_browser_process.h
@@ -137,7 +137,6 @@
       override;
   shell_integration::DefaultWebClientState CachedDefaultWebClientState()
       override;
-  prefs::InProcessPrefServiceFactory* pref_service_factory() const override;
 
   // Set the local state for tests. Consumer is responsible for cleaning it up
   // afterwards (using ScopedTestingLocalState, for example).
diff --git a/chrome/test/data/extensions/api_test/content_scripts/bypass_page_csp/manifest.json b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_csp/manifest.json
index 96f05c63..19110b73 100644
--- a/chrome/test/data/extensions/api_test/content_scripts/bypass_page_csp/manifest.json
+++ b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_csp/manifest.json
@@ -9,7 +9,7 @@
   "permissions": ["http://*/*", "tabs"],
   "content_scripts": [
     {
-      "matches": ["http://*/*"],
+      "matches": ["http://*/extensions/*test_file_with_csp.html"],
       "js": ["a.js"]
     }
   ]
diff --git a/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/a.js b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/a.js
new file mode 100644
index 0000000..0b38242
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/a.js
@@ -0,0 +1,10 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+try {
+  document.write('bypass');
+} catch (e) {
+}
+const bypassSucess = document.body.innerText.indexOf('bypass') != -1;
+chrome.runtime.connect().postMessage(bypassSucess);
diff --git a/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/background.js b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/background.js
new file mode 100644
index 0000000..26b6529
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/background.js
@@ -0,0 +1,23 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+chrome.runtime.onConnect.addListener(port => {
+  port.onMessage.addListener(msg => {
+    chrome.test.log("got message: " + msg);
+    if (msg === true)
+      chrome.test.notifyPass();
+    else
+      chrome.test.notifyFail("Expected message 'true', but got: " + msg);
+  });
+});
+
+chrome.test.getConfig(config => {
+  chrome.test.log("Creating tab...");
+
+  var testUrl =
+      "http://localhost:PORT/extensions/test_file_with_trusted_types.html"
+          .replace(/PORT/, config.testServer.port);
+
+  chrome.tabs.create({ url: testUrl });
+});
diff --git a/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/manifest.json b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/manifest.json
new file mode 100644
index 0000000..61e0e70e
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/content_scripts/bypass_page_trusted_types/manifest.json
@@ -0,0 +1,16 @@
+{
+  "name": "Bypass page's Content Security Policy trusted-types restrictions",
+  "version": "0.1",
+  "manifest_version": 2,
+  "description": "Check that injected content scripts can inject resources, regardless of a page's trusted-types CSP directive.",
+  "background": {
+    "scripts": ["background.js"]
+  },
+  "permissions": ["http://*/*", "tabs"],
+  "content_scripts": [
+    {
+      "matches": ["http://*/*extensions/test_file_with_trusted_types.html"],
+      "js": ["a.js"]
+    }
+  ]
+}
diff --git a/chrome/test/data/extensions/test_file_with_trusted_types.html b/chrome/test/data/extensions/test_file_with_trusted_types.html
new file mode 100644
index 0000000..85485a05
--- /dev/null
+++ b/chrome/test/data/extensions/test_file_with_trusted_types.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<html>
+<head>
+  <meta http-equiv="Content-Security-Policy" content="trusted-types *">
+  <title>Define a restrictive CSP trusted-types directive.</title>
+</head>
+<body>
+</body>
+</html>
diff --git a/chrome/test/data/local_ntp/local_ntp_browsertest.html b/chrome/test/data/local_ntp/local_ntp_browsertest.html
index 24593f3..2e1b7d9 100644
--- a/chrome/test/data/local_ntp/local_ntp_browsertest.html
+++ b/chrome/test/data/local_ntp/local_ntp_browsertest.html
@@ -305,7 +305,8 @@
                 $i18n{uninstallButton}
               </button>
           </div>
-          <div id="color-picker-container" class="bg-sel-tile-bg">
+          <div id="color-picker-container" class="bg-sel-tile-bg"
+              aria-label="$i18n{colorPickerLabel}" title="$i18n{colorPickerLabel}">
             <div id="color-picker-tile" class="bg-sel-tile" tabindex="-1">
               <div id="left-semicircle"></div>
               <div id="color-picker-icon"></div>
@@ -313,7 +314,9 @@
               </input>
             </div>
           </div>
-          <div id="colors-default" class="bg-sel-tile-bg">
+          <div id="colors-default" class="bg-sel-tile-bg"
+              aria-label="$i18n{defaultThemeLabel}"
+              title="$i18n{defaultThemeLabel}">
             <div id="colors-default-icon" class="bg-sel-tile" tabindex="-1"></div>
           </div>
         </div>
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index f89a783..3889860 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -689,7 +689,9 @@
     "os": ["win", "mac", "linux"],
     "test_policy": { "DiskCacheDir": "${user_home}/test-cache" },
     "pref_mappings": [
-      { "pref": "browser.disk_cache_dir" }
+      { "pref": "browser.disk_cache_dir",
+        "local_state": true
+      }
     ]
   },
 
@@ -697,7 +699,9 @@
     "os": ["win", "mac", "linux"],
     "test_policy": { "DiskCacheSize": 100 },
     "pref_mappings": [
-      { "pref": "browser.disk_cache_size" }
+      { "pref": "browser.disk_cache_size",
+        "local_state": true
+      }
     ]
   },
 
diff --git a/chrome/test/data/webui/settings/a11y/google_assistant_a11y_test.js b/chrome/test/data/webui/settings/a11y/google_assistant_a11y_test.js
index 727f068e..32b339f 100644
--- a/chrome/test/data/webui/settings/a11y/google_assistant_a11y_test.js
+++ b/chrome/test/data/webui/settings/a11y/google_assistant_a11y_test.js
@@ -12,13 +12,13 @@
   'settings_accessibility_test.js',
 ]);
 
-GEN('#include "chromeos/constants/chromeos_switches.h"');
+GEN('#include "chromeos/constants/chromeos_features.h"');
 
 // eslint-disable-next-line no-var
 var GoogleAssistantAccessibilityTest = class extends SettingsAccessibilityTest {
   /** @override */
   get featureList() {
-    return {enabled: ['chromeos::switches::kAssistantFeature']};
+    return {enabled: ['chromeos::features::kAssistantFeature']};
   }
 };
 
diff --git a/chrome/test/data/webui/settings/about_page_tests.js b/chrome/test/data/webui/settings/about_page_tests.js
index 2f9ebdcf..586b3ef 100644
--- a/chrome/test/data/webui/settings/about_page_tests.js
+++ b/chrome/test/data/webui/settings/about_page_tests.js
@@ -448,7 +448,7 @@
               const icon = page.$$('iron-icon');
               assertTrue(!!icon);
               assertEquals(null, icon.src);
-              assertEquals('settings:end-of-life', icon.icon);
+              assertEquals('os-settings:end-of-life', icon.icon);
 
               const checkForUpdates = page.$.checkForUpdates;
               assertTrue(!!checkForUpdates);
diff --git a/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js b/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js
index 660cb2f..72671a8 100644
--- a/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js
@@ -418,7 +418,7 @@
             const icon = page.$$('iron-icon');
             assertTrue(!!icon);
             assertEquals(null, icon.src);
-            assertEquals('settings:end-of-life', icon.icon);
+            assertEquals('os-settings:end-of-life', icon.icon);
 
             const {checkForUpdates} = page.$;
             assertTrue(!!checkForUpdates);
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js
index 8b569f01..36b804a 100644
--- a/chrome/test/data/webui/settings/cr_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -589,7 +589,7 @@
   browsePreload: 'chrome://settings/people_page/account_manager.html',
 
   /** @override */
-  featureList: {enabled: ['chromeos::switches::kAccountManager']},
+  featureList: {enabled: ['chromeos::features::kAccountManager']},
 
   /** @override */
   extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([
diff --git a/chrome/test/delayload/OWNERS b/chrome/test/delayload/OWNERS
new file mode 100644
index 0000000..aba41d2
--- /dev/null
+++ b/chrome/test/delayload/OWNERS
@@ -0,0 +1,2 @@
+cliffsmo@microsoft.com
+brucedawson@chromium.org
\ No newline at end of file
diff --git a/chrome/test/views/chrome_views_test_base.cc b/chrome/test/views/chrome_views_test_base.cc
index 32f4254..9e4051e 100644
--- a/chrome/test/views/chrome_views_test_base.cc
+++ b/chrome/test/views/chrome_views_test_base.cc
@@ -13,7 +13,7 @@
 void ChromeViewsTestBase::SetUp() {
   set_scoped_task_environment(
       std::make_unique<content::TestBrowserThreadBundle>(
-          base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW));
+          base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME));
   set_views_delegate(std::make_unique<ChromeTestViewsDelegate>());
   views::ViewsTestBase::SetUp();
 }
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn
index fd1c1c8..45ae4458 100644
--- a/chromecast/browser/BUILD.gn
+++ b/chromecast/browser/BUILD.gn
@@ -270,7 +270,7 @@
 
   if (enable_mojo_media) {
     deps += [
-      "//media/mojo/interfaces:constants",
+      "//media/mojo/mojom:constants",
       "//media/mojo/services",
     ]
   }
diff --git a/chromecast/browser/application_media_info_manager.h b/chromecast/browser/application_media_info_manager.h
index 5edb14ec..39c60e57 100644
--- a/chromecast/browser/application_media_info_manager.h
+++ b/chromecast/browser/application_media_info_manager.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "content/public/browser/frame_service_base.h"
-#include "media/mojo/interfaces/cast_application_media_info_manager.mojom.h"
+#include "media/mojo/mojom/cast_application_media_info_manager.mojom.h"
 
 namespace content {
 class RenderFrameHost;
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc
index 40735a5..c6ba53b 100644
--- a/chromecast/browser/cast_content_browser_client.cc
+++ b/chromecast/browser/cast_content_browser_client.cc
@@ -84,7 +84,7 @@
 
 #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
 #include "chromecast/media/service/cast_mojo_media_client.h"
-#include "media/mojo/interfaces/constants.mojom.h"  // nogncheck
+#include "media/mojo/mojom/constants.mojom.h"  // nogncheck
 #include "media/mojo/services/media_service.h"      // nogncheck
 #endif  // ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS
 
@@ -135,12 +135,6 @@
 #include "chromecast/external_mojo/broker_service/broker_service.h"
 #endif
 
-#if !defined(OS_FUCHSIA)
-#include "components/services/heap_profiling/heap_profiling_service.h"  // nogncheck
-#include "components/services/heap_profiling/public/cpp/settings.h"  // nogncheck
-#include "components/services/heap_profiling/public/mojom/constants.mojom.h"  // nogncheck
-#endif  // !defined(OS_FUCHSIA)
-
 namespace chromecast {
 namespace shell {
 
@@ -808,18 +802,6 @@
 #endif  // BUILDFLAG(ENABLE_EXTERNAL_MOJO_SERVICES)
 }
 
-void CastContentBrowserClient::RunServiceInstanceOnIOThread(
-    const service_manager::Identity& identity,
-    mojo::PendingReceiver<service_manager::mojom::Service>* receiver) {
-#if !defined(OS_FUCHSIA)
-  if (identity.name() == heap_profiling::mojom::kServiceName) {
-    heap_profiling::HeapProfilingService::GetServiceFactory().Run(
-        std::move(*receiver));
-    return;
-  }
-#endif  // !defined(OS_FUCHSIA)
-}
-
 base::Optional<service_manager::Manifest>
 CastContentBrowserClient::GetServiceManifestOverlay(
     base::StringPiece service_name) {
diff --git a/chromecast/browser/cast_content_browser_client.h b/chromecast/browser/cast_content_browser_client.h
index f5a6817b..e5ce27f 100644
--- a/chromecast/browser/cast_content_browser_client.h
+++ b/chromecast/browser/cast_content_browser_client.h
@@ -189,10 +189,6 @@
       const service_manager::Identity& identity,
       mojo::PendingReceiver<service_manager::mojom::Service>* receiver)
       override;
-  void RunServiceInstanceOnIOThread(
-      const service_manager::Identity& identity,
-      mojo::PendingReceiver<service_manager::mojom::Service>* receiver)
-      override;
   base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
       base::StringPiece service_name) override;
   std::vector<service_manager::Manifest> GetExtraServiceManifests() override;
diff --git a/chromecast/browser/cast_overlay_manifests.cc b/chromecast/browser/cast_overlay_manifests.cc
index c0911d4..0bd758d 100644
--- a/chromecast/browser/cast_overlay_manifests.cc
+++ b/chromecast/browser/cast_overlay_manifests.cc
@@ -26,20 +26,12 @@
 #include "chromecast/internal/shell/browser/cast_content_renderer_internal_manifest_overlay.h"
 #endif
 
-#if !defined(OS_FUCHSIA)
-#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"  // nogncheck
-#endif  // !defined(OS_FUCHSIA)
-
 namespace chromecast {
 namespace shell {
 
 const service_manager::Manifest& GetCastContentBrowserOverlayManifest() {
   static base::NoDestructor<service_manager::Manifest> manifest {
     service_manager::ManifestBuilder()
-#if !defined(OS_FUCHSIA)
-        .RequireCapability("heap_profiling", "heap_profiler")
-        .RequireCapability("heap_profiling", "profiling")
-#endif  // !defined(OS_FUCHSIA)
         .ExposeCapability("renderer",
                           service_manager::Manifest::InterfaceList<
                               chromecast::media::mojom::MediaCaps,
@@ -59,11 +51,6 @@
 const service_manager::Manifest& GetCastContentRendererOverlayManifest() {
   static base::NoDestructor<service_manager::Manifest> manifest {
     service_manager::ManifestBuilder()
-#if !defined(OS_FUCHSIA)
-        .ExposeCapability("browser",
-                          service_manager::Manifest::InterfaceList<
-                              heap_profiling::mojom::ProfilingClient>())
-#endif  // !defined(OS_FUCHSIA)
         .ExposeInterfaceFilterCapability_Deprecated(
             "navigation:frame", "browser",
             service_manager::Manifest::InterfaceList<
diff --git a/chromecast/media/cma/backend/fuchsia/BUILD.gn b/chromecast/media/cma/backend/fuchsia/BUILD.gn
index 1e4d0646..6340d47 100644
--- a/chromecast/media/cma/backend/fuchsia/BUILD.gn
+++ b/chromecast/media/cma/backend/fuchsia/BUILD.gn
@@ -55,6 +55,7 @@
   deps = [
     ":cma_backend_support",
     "//base",
+    "//base/test:test_support",
     "//testing/gtest",
     "//third_party/fuchsia-sdk/sdk:media",
   ]
diff --git a/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia_unittest.cc b/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia_unittest.cc
index cd8a1a7..5d0c561 100644
--- a/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia_unittest.cc
+++ b/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia_unittest.cc
@@ -5,8 +5,8 @@
 #include "chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia.h"
 
 #include "base/location.h"
-#include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -18,7 +18,9 @@
 
 class MixerOutputStreamFuchsiaTest : public ::testing::Test {
  protected:
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   MixerOutputStreamFuchsia output_;
 };
 
diff --git a/chromecast/media/service/BUILD.gn b/chromecast/media/service/BUILD.gn
index 2e6519a..ede52568 100644
--- a/chromecast/media/service/BUILD.gn
+++ b/chromecast/media/service/BUILD.gn
@@ -13,7 +13,7 @@
   ]
 
   public_deps = [
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//media/mojo/services",
     "//services/service_manager/public/cpp",
   ]
diff --git a/chromecast/media/service/cast_renderer.h b/chromecast/media/service/cast_renderer.h
index 596be94..53969f5a 100644
--- a/chromecast/media/service/cast_renderer.h
+++ b/chromecast/media/service/cast_renderer.h
@@ -15,7 +15,7 @@
 #include "chromecast/media/cma/backend/cma_backend_factory.h"
 #include "media/base/renderer.h"
 #include "media/base/waiting.h"
-#include "media/mojo/interfaces/cast_application_media_info_manager.mojom.h"
+#include "media/mojo/mojom/cast_application_media_info_manager.mojom.h"
 #include "ui/gfx/geometry/size.h"
 
 namespace base {
diff --git a/chromeos/components/sync_wifi/BUILD.gn b/chromeos/components/sync_wifi/BUILD.gn
index b5acece..e184b0f1 100644
--- a/chromeos/components/sync_wifi/BUILD.gn
+++ b/chromeos/components/sync_wifi/BUILD.gn
@@ -7,10 +7,14 @@
     "synced_network_updater.h",
     "wifi_configuration_bridge.cc",
     "wifi_configuration_bridge.h",
+    "wifi_configuration_sync_service.cc",
+    "wifi_configuration_sync_service.h",
   ]
   deps = [
     "//base",
+    "//components/keyed_service/core",
     "//components/sync",
+    "//components/version_info",
   ]
 }
 
diff --git a/chromeos/components/sync_wifi/DEPS b/chromeos/components/sync_wifi/DEPS
index 5fb592e..db3947a 100644
--- a/chromeos/components/sync_wifi/DEPS
+++ b/chromeos/components/sync_wifi/DEPS
@@ -1,3 +1,5 @@
 include_rules = [
   "+components/sync",
+  "+components/keyed_service/core",
+  "+components/version_info",
 ]
diff --git a/chromeos/components/sync_wifi/wifi_configuration_sync_service.cc b/chromeos/components/sync_wifi/wifi_configuration_sync_service.cc
new file mode 100644
index 0000000..ea2a1f0
--- /dev/null
+++ b/chromeos/components/sync_wifi/wifi_configuration_sync_service.cc
@@ -0,0 +1,36 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/components/sync_wifi/wifi_configuration_sync_service.h"
+
+#include <utility>
+
+#include "base/bind_helpers.h"
+#include "base/time/default_clock.h"
+#include "chromeos/components/sync_wifi/wifi_configuration_bridge.h"
+#include "components/sync/base/report_unrecoverable_error.h"
+#include "components/sync/model/model_type_store.h"
+#include "components/sync/model_impl/client_tag_based_model_type_processor.h"
+
+namespace sync_wifi {
+
+WifiConfigurationSyncService::WifiConfigurationSyncService(
+    version_info::Channel channel,
+    syncer::OnceModelTypeStoreFactory create_store_callback) {
+  bridge_ = std::make_unique<sync_wifi::WifiConfigurationBridge>(
+      /* synced_network_updater= */ nullptr,
+      std::make_unique<syncer::ClientTagBasedModelTypeProcessor>(
+          syncer::WIFI_CONFIGURATIONS,
+          base::BindRepeating(&syncer::ReportUnrecoverableError, channel)),
+      std::move(create_store_callback));
+}
+
+WifiConfigurationSyncService::~WifiConfigurationSyncService() = default;
+
+base::WeakPtr<syncer::ModelTypeControllerDelegate>
+WifiConfigurationSyncService::GetControllerDelegate() {
+  return bridge_->change_processor()->GetControllerDelegate();
+}
+
+}  // namespace sync_wifi
\ No newline at end of file
diff --git a/chromeos/components/sync_wifi/wifi_configuration_sync_service.h b/chromeos/components/sync_wifi/wifi_configuration_sync_service.h
new file mode 100644
index 0000000..a3b2c671c
--- /dev/null
+++ b/chromeos/components/sync_wifi/wifi_configuration_sync_service.h
@@ -0,0 +1,44 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_COMPONENTS_SYNC_WIFI_WIFI_CONFIGURATION_SYNC_SERVICE_H_
+#define CHROMEOS_COMPONENTS_SYNC_WIFI_WIFI_CONFIGURATION_SYNC_SERVICE_H_
+
+#include <memory>
+#include <string>
+
+#include "base/memory/weak_ptr.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "components/sync/model/model_type_store.h"
+#include "components/sync/model/model_type_store_service.h"
+#include "components/version_info/channel.h"
+
+namespace syncer {
+class ModelTypeControllerDelegate;
+}  // namespace syncer
+
+namespace sync_wifi {
+
+class WifiConfigurationBridge;
+
+// A profile keyed service which instantiates and provides access to an instance
+// of WifiConfigurationBridge.
+class WifiConfigurationSyncService : public KeyedService {
+ public:
+  WifiConfigurationSyncService(
+      version_info::Channel channel,
+      syncer::OnceModelTypeStoreFactory create_store_callback);
+  ~WifiConfigurationSyncService() override;
+
+  base::WeakPtr<syncer::ModelTypeControllerDelegate> GetControllerDelegate();
+
+ private:
+  std::unique_ptr<WifiConfigurationBridge> bridge_;
+
+  DISALLOW_COPY_AND_ASSIGN(WifiConfigurationSyncService);
+};
+
+}  // namespace sync_wifi
+
+#endif  // CHROMEOS_COMPONENTS_SYNC_WIFI_WIFI_CONFIGURATION_SYNC_SERVICE_H_
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index c795d32..9fea707 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -5,8 +5,29 @@
 #include "chromeos/constants/chromeos_features.h"
 
 namespace chromeos {
-
 namespace features {
+namespace {
+
+// Controls whether Instant Tethering supports hosts which use the background
+// advertisement model.
+const base::Feature kInstantTetheringBackgroundAdvertisementSupport{
+    "InstantTetheringBackgroundAdvertisementSupport",
+    base::FEATURE_ENABLED_BY_DEFAULT};
+
+}  // namespace
+
+// Controls whether to enable Chrome OS Account Manager.
+// Rollout controlled by Finch.
+const base::Feature kAccountManager{"ChromeOSAccountManager",
+                                    base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Controls whether to enable Ambient mode feature.
+const base::Feature kAmbientModeFeature{"ChromeOSAmbientMode",
+                                        base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Controls whether to enable Google Assistant feature.
+const base::Feature kAssistantFeature{"ChromeOSAssistant",
+                                      base::FEATURE_ENABLED_BY_DEFAULT};
 
 // Enables or disables auto screen-brightness adjustment when ambient light
 // changes.
@@ -129,16 +150,24 @@
 const base::Feature kInstantTethering{"InstantTethering",
                                       base::FEATURE_DISABLED_BY_DEFAULT};
 
-// Enables or disables showing the battery level in the System Tray and Settings
-// UI for supported Bluetooth Devices.
-const base::Feature kShowBluetoothDeviceBattery{
-    "ShowBluetoothDeviceBattery", base::FEATURE_DISABLED_BY_DEFAULT};
+// Controls whether to enable the Parental Controls section of settings.
+const base::Feature kParentalControlsSettings{
+    "ChromeOSParentalControlsSettings", base::FEATURE_DISABLED_BY_DEFAULT};
 
 // Enables or disables Release Notes on Chrome OS.
 // TODO(yulunwu): http://crbug.com/978201
 const base::Feature kReleaseNotes{"ReleaseNotes",
                                   base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables or disables showing the battery level in the System Tray and Settings
+// UI for supported Bluetooth Devices.
+const base::Feature kShowBluetoothDeviceBattery{
+    "ShowBluetoothDeviceBattery", base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Shows the Play Store icon in Demo Mode.
+const base::Feature kShowPlayInDemoMode{"ShowPlayInDemoMode",
+                                        base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Uses the V3 (~2019-05 era) Smart Dim model instead of the default V2
 // (~2018-11) model.
 const base::Feature kSmartDimModelV3{"SmartDimModelV3",
@@ -179,10 +208,36 @@
 const base::Feature kVideoPlayerNativeControls{
     "VideoPlayerNativeControls", base::FEATURE_ENABLED_BY_DEFAULT};
 
+////////////////////////////////////////////////////////////////////////////////
+
+bool IsAccountManagerEnabled() {
+  return base::FeatureList::IsEnabled(kAccountManager);
+}
+
+bool IsAmbientModeEnabled() {
+  return base::FeatureList::IsEnabled(kAmbientModeFeature);
+}
+
+bool IsAssistantEnabled() {
+  return base::FeatureList::IsEnabled(kAssistantFeature);
+}
+
+bool IsInstantTetheringBackgroundAdvertisingSupported() {
+  return base::FeatureList::IsEnabled(
+      kInstantTetheringBackgroundAdvertisementSupport);
+}
+
+bool IsParentalControlsSettingsEnabled() {
+  return base::FeatureList::IsEnabled(kParentalControlsSettings);
+}
+
 bool IsSplitSettingsEnabled() {
   return base::FeatureList::IsEnabled(kSplitSettings);
 }
 
-}  // namespace features
+bool ShouldShowPlayStoreInDemoMode() {
+  return base::FeatureList::IsEnabled(kShowPlayInDemoMode);
+}
 
+}  // namespace features
 }  // namespace chromeos
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h
index aff80b3..1d318692 100644
--- a/chromeos/constants/chromeos_features.h
+++ b/chromeos/constants/chromeos_features.h
@@ -9,12 +9,17 @@
 #include "base/feature_list.h"
 
 namespace chromeos {
-
 namespace features {
 
 // All features in alphabetical order. The features should be documented
-// alongside the definition of their values in the .cc file.
+// alongside the definition of their values in the .cc file. If a feature is
+// being rolled out via Finch, add a comment in the .cc file.
 
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kAccountManager;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kAmbientModeFeature;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kAssistantFeature;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kAutoScreenBrightness;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
@@ -66,10 +71,14 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kInstantTethering;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kParentalControlsSettings;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kReleaseNotes;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kShowBluetoothDeviceBattery;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kShowPlayInDemoMode;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kSmartDimModelV3;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kSplitSettings;
@@ -88,10 +97,20 @@
 
 // Keep alphabetized.
 
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsAccountManagerEnabled();
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsAmbientModeEnabled();
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsAssistantEnabled();
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+bool IsInstantTetheringBackgroundAdvertisingSupported();
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsParentalControlsSettingsEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsSplitSettingsEnabled();
 
-}  // namespace features
+// TODO(michaelpg): Remove after M71 branch to re-enable Play Store by default.
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool ShouldShowPlayStoreInDemoMode();
 
+// Keep alphabetized.
+
+}  // namespace features
 }  // namespace chromeos
 
 #endif  // CHROMEOS_CONSTANTS_CHROMEOS_FEATURES_H_
diff --git a/chromeos/constants/chromeos_switches.cc b/chromeos/constants/chromeos_switches.cc
index 802e3d5..562b4d4a 100644
--- a/chromeos/constants/chromeos_switches.cc
+++ b/chromeos/constants/chromeos_switches.cc
@@ -7,7 +7,6 @@
 #include <string>
 
 #include "base/command_line.h"
-#include "base/feature_list.h"
 #include "base/metrics/field_trial.h"
 #include "third_party/icu/source/common/unicode/locid.h"
 
@@ -28,34 +27,8 @@
 // all stored user keys will be converted to GaiaId)
 const char kTestCrosGaiaIdMigrationStarted[] = "started";
 
-// Controls whether Instant Tethering supports hosts which use the background
-// advertisement model.
-const base::Feature kInstantTetheringBackgroundAdvertisementSupport{
-    "InstantTetheringBackgroundAdvertisementSupport",
-    base::FEATURE_ENABLED_BY_DEFAULT};
-
 }  // namespace
 
-// Controls whether to enable Chrome OS Account Manager.
-// Rollout controlled by Finch.
-const base::Feature kAccountManager{"ChromeOSAccountManager",
-                                    base::FEATURE_DISABLED_BY_DEFAULT};
-
-// Controls whether to enable the Parental Controls section of settings.
-const base::Feature kParentalControlsSettings{
-    "ChromeOSParentalControlsSettings", base::FEATURE_DISABLED_BY_DEFAULT};
-
-// Controls whether to enable Google Assistant feature.
-const base::Feature kAssistantFeature{"ChromeOSAssistant",
-                                      base::FEATURE_ENABLED_BY_DEFAULT};
-
-// Controls whether to enable Ambient mode feature.
-const base::Feature kAmbientModeFeature{"ChromeOSAmbientMode",
-                                        base::FEATURE_DISABLED_BY_DEFAULT};
-
-const base::Feature kShowPlayInDemoMode{"ShowPlayInDemoMode",
-                                        base::FEATURE_DISABLED_BY_DEFAULT};
-
 // Please keep the order of these switches synchronized with the header file
 // (i.e. in alphabetical order).
 
@@ -554,26 +527,6 @@
   return base::CommandLine::ForCurrentProcess()->HasSwitch(kCellularFirst);
 }
 
-bool IsAccountManagerEnabled() {
-  return base::FeatureList::IsEnabled(kAccountManager);
-}
-
-bool IsParentalControlsSettingsEnabled() {
-  return base::FeatureList::IsEnabled(kParentalControlsSettings);
-}
-
-bool IsAssistantFlagsEnabled() {
-  return base::FeatureList::IsEnabled(kAssistantFeature);
-}
-
-bool IsAssistantEnabled() {
-  return IsAssistantFlagsEnabled();
-}
-
-bool IsAmbientModeEnabled() {
-  return base::FeatureList::IsEnabled(kAmbientModeFeature);
-}
-
 bool IsSigninFrameClientCertsEnabled() {
   return !base::CommandLine::ForCurrentProcess()->HasSwitch(
       kDisableSigninFrameClientCerts);
@@ -601,20 +554,11 @@
   return base::CommandLine::ForCurrentProcess()->HasSwitch(kShelfScrollable);
 }
 
-bool IsInstantTetheringBackgroundAdvertisingSupported() {
-  return base::FeatureList::IsEnabled(
-      kInstantTetheringBackgroundAdvertisementSupport);
-}
-
 bool ShouldTetherHostScansIgnoreWiredConnections() {
   return base::CommandLine::ForCurrentProcess()->HasSwitch(
       kTetherHostScansIgnoreWiredConnections);
 }
 
-bool ShouldShowPlayStoreInDemoMode() {
-  return base::FeatureList::IsEnabled(kShowPlayInDemoMode);
-}
-
 bool ShouldSkipOobePostLogin() {
   return base::CommandLine::ForCurrentProcess()->HasSwitch(kOobeSkipPostLogin);
 }
diff --git a/chromeos/constants/chromeos_switches.h b/chromeos/constants/chromeos_switches.h
index 7bd9cecf..bff4eb4 100644
--- a/chromeos/constants/chromeos_switches.h
+++ b/chromeos/constants/chromeos_switches.h
@@ -6,8 +6,6 @@
 #define CHROMEOS_CONSTANTS_CHROMEOS_SWITCHES_H_
 
 #include "base/component_export.h"
-#include "base/feature_list.h"
-#include "base/memory/memory_pressure_monitor_chromeos.h"
 #include "chromeos/dbus/constants/dbus_switches.h"
 
 namespace chromeos {
@@ -17,7 +15,9 @@
 // Other switches that apply just to chromeos code should go here also (along
 // with any code that is specific to the chromeos system). Chrome OS specific
 // UI should be in src/ash.
-
+//
+// Prefer adding Features over switches. Features go in chromeos_features.h.
+//
 // Note: If you add a switch, consider if it needs to be copied to a subsequent
 // command line if the process executes a new copy of itself.  (For example,
 // see chromeos::LoginUtil::GetOffTheRecordCommandLine().)
@@ -195,24 +195,7 @@
 extern const char kWaitForInitialPolicyFetchForTest[];
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const char kWakeOnWifiPacket[];
 
-// Controls whether to enable Chrome OS Account Manager.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kAccountManager;
-
-// Controls whether to enable Google Assistant feature.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
-extern const base::Feature kAssistantFeature;
-
-// Controls whether to enable Ambient mode feature.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
-extern const base::Feature kAmbientModeFeature;
-
-// Controls whether to enable Parental Controls options in settings.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
-extern const base::Feature kParentalControlsSettings;
-
-// Controls whether to show the Play Store icon in Demo Mode.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
-extern const base::Feature kShowPlayInDemoMode;
+////////////////////////////////////////////////////////////////////////////////
 
 // Returns true if the system should wake in response to wifi traffic.
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool WakeOnWifiEnabled();
@@ -227,21 +210,6 @@
 // Returns true if this is a Cellular First device.
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsCellularFirstDevice();
 
-// Returns true if Chrome OS Account Manager is enabled.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsAccountManagerEnabled();
-
-// Returns true if Parental Controls Settings are enabled.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsParentalControlsSettingsEnabled();
-
-// Returns true if Google Assistant flags are enabled.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsAssistantFlagsEnabled();
-
-// Returns true if Google Assistant is enabled.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsAssistantEnabled();
-
-// Returns true if Ambient mode is enabled.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsAmbientModeEnabled();
-
 // Returns true if client certificate authentication for the sign-in frame on
 // the Chrome OS sign-in screen is enabled.
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsSigninFrameClientCertsEnabled();
@@ -264,21 +232,12 @@
 // Returns true if we should show a scrollable list of apps in the main shelf.
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool ShouldShowScrollableShelf();
 
-// Returns true if Instant Tethering should support hosts which use the
-// background advertisement model.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
-bool IsInstantTetheringBackgroundAdvertisingSupported();
-
 // Returns true if the Chromebook should ignore its wired connections when
 // deciding whether to run scans for tethering hosts. Should be used only for
 // testing.
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 bool ShouldTetherHostScansIgnoreWiredConnections();
 
-// Returns true if Play Store should be available in Demo Mode.
-// TODO(michaelpg): Remove after M71 branch to re-enable Play Store by default.
-COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool ShouldShowPlayStoreInDemoMode();
-
 // Returns true if we should skip all other OOBE pages after user login.
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool ShouldSkipOobePostLogin();
 
diff --git a/chromeos/network/cellular_metrics_logger_unittest.cc b/chromeos/network/cellular_metrics_logger_unittest.cc
index a5dbddcd..ade9457 100644
--- a/chromeos/network/cellular_metrics_logger_unittest.cc
+++ b/chromeos/network/cellular_metrics_logger_unittest.cc
@@ -38,7 +38,7 @@
  public:
   CellularMetricsLoggerTest()
       : scoped_task_environment_(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {}
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
   ~CellularMetricsLoggerTest() override = default;
 
   void SetUp() override {
diff --git a/chromeos/network/network_cert_loader.cc b/chromeos/network/network_cert_loader.cc
index 12ad5aca..69318c9 100644
--- a/chromeos/network/network_cert_loader.cc
+++ b/chromeos/network/network_cert_loader.cc
@@ -496,9 +496,7 @@
     observer.OnCertificatesLoaded();
 }
 
-void NetworkCertLoader::OnPolicyProvidedCertsChanged(
-    const net::CertificateList& all_server_and_authority_certs,
-    const net::CertificateList& trust_anchors) {
+void NetworkCertLoader::OnPolicyProvidedCertsChanged() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   UpdateCertificates();
 }
diff --git a/chromeos/network/network_cert_loader.h b/chromeos/network/network_cert_loader.h
index ab7ba9fe..85097bf 100644
--- a/chromeos/network/network_cert_loader.h
+++ b/chromeos/network/network_cert_loader.h
@@ -198,9 +198,7 @@
   void NotifyCertificatesLoaded();
 
   // PolicyCertificateProvider::Observer
-  void OnPolicyProvidedCertsChanged(
-      const net::CertificateList& all_server_and_authority_certs,
-      const net::CertificateList& trust_anchors) override;
+  void OnPolicyProvidedCertsChanged() override;
 
   // If this is true, |NetworkCertLoader| does not send out notifications to its
   // observers anymore.
diff --git a/chromeos/network/network_cert_loader_unittest.cc b/chromeos/network/network_cert_loader_unittest.cc
index 065caf7..ab54d71 100644
--- a/chromeos/network/network_cert_loader_unittest.cc
+++ b/chromeos/network/network_cert_loader_unittest.cc
@@ -63,14 +63,8 @@
   }
 
   void NotifyObservers() {
-    // NetworkCertLoader does not use these parameters - it calls
-    // |GetAllAuthorityCertificates| explicitly.
-    net::CertificateList all_server_and_authority_certs;
-    net::CertificateList trust_anchors;
-    for (auto& observer : observer_list_) {
-      observer.OnPolicyProvidedCertsChanged(all_server_and_authority_certs,
-                                            trust_anchors);
-    }
+    for (auto& observer : observer_list_)
+      observer.OnPolicyProvidedCertsChanged();
   }
 
  private:
diff --git a/chromeos/network/policy_certificate_provider.h b/chromeos/network/policy_certificate_provider.h
index 2d675fcf6..e03998b 100644
--- a/chromeos/network/policy_certificate_provider.h
+++ b/chromeos/network/policy_certificate_provider.h
@@ -28,11 +28,9 @@
    public:
     virtual ~Observer() = default;
 
-    // Is called every time the list of policy-set server and authority
+    // Called every time the list of policy-set server and authority
     // certificates changes.
-    virtual void OnPolicyProvidedCertsChanged(
-        const net::CertificateList& all_server_and_authority_certs,
-        const net::CertificateList& trust_anchors) = 0;
+    virtual void OnPolicyProvidedCertsChanged() = 0;
   };
 
   virtual void AddPolicyProvidedCertsObserver(Observer* observer) = 0;
diff --git a/chromeos/printing/OWNERS b/chromeos/printing/OWNERS
index e7afb7c..9d54010 100644
--- a/chromeos/printing/OWNERS
+++ b/chromeos/printing/OWNERS
@@ -3,5 +3,5 @@
 zentaro@chromium.org
 luum@chromium.org
 
-#TEAM: cros-printing-dev@chromium.org
-#COMPONENT: Internals>Printing>CUPS
+# TEAM: cros-printing-dev@chromium.org
+# COMPONENT: Internals>Printing>CUPS
diff --git a/chromeos/services/ime/OWNERS b/chromeos/services/ime/OWNERS
index 209e110..183e04bf 100644
--- a/chromeos/services/ime/OWNERS
+++ b/chromeos/services/ime/OWNERS
@@ -3,4 +3,4 @@
 
 per-file ime_sandbox_hook.*=file://sandbox/linux/OWNERS
 
-# COMPONENTS: UI>Input>Text>IME
+# COMPONENT: UI>Input>Text>IME
diff --git a/chromeos/services/secure_channel/ble_service_data_helper_impl.cc b/chromeos/services/secure_channel/ble_service_data_helper_impl.cc
index aa11850..fb03d25 100644
--- a/chromeos/services/secure_channel/ble_service_data_helper_impl.cc
+++ b/chromeos/services/secure_channel/ble_service_data_helper_impl.cc
@@ -11,7 +11,7 @@
 #include "chromeos/components/multidevice/logging/logging.h"
 #include "chromeos/components/multidevice/remote_device_cache.h"
 #include "chromeos/components/multidevice/remote_device_ref.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/services/secure_channel/background_eid_generator.h"
 #include "chromeos/services/secure_channel/ble_advertisement_generator.h"
 #include "chromeos/services/secure_channel/ble_constants.h"
@@ -154,7 +154,7 @@
 
   // If the device has not yet been identified, try identifying |service_data|
   // as a background advertisement.
-  if (switches::IsInstantTetheringBackgroundAdvertisingSupported() &&
+  if (features::IsInstantTetheringBackgroundAdvertisingSupported() &&
       identified_device_id.empty() &&
       service_data.size() >= kMinNumBytesInServiceData &&
       service_data.size() <= kMaxNumBytesInBackgroundServiceData) {
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index c07855e4..bf79883 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="am">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> ይህን መሣሪያ ያቀናብራል እና እንቅስቃሴዎን ሊከታተለው ይችላል።</translation>
 <translation id="1510238584712386396">ማስጀመሪያ</translation>
 <translation id="1734367976349034509">ይህ መሣሪያ በድርጅት የሚቀናበር ነው</translation>
 <translation id="1930797645656624981">የ Chrome OS ግቤት ዘዴ አገልግሎት</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">ዝጋ</translation>
 <translation id="3008341117444806826">አድስ</translation>
 <translation id="3838338534323494292">አዲስ የይለፍ ቃል</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> ይህን መሣሪያ የሚያቀናብር ሲሆን የተጎበኙ ድረ-ገጾች፣ የይለፍ ቃላት እና ኢሜይል ጨምሮ የሁሉም የተጠቃሚ እንቅስቃሴ መዳረሻ አለው።</translation>
 <translation id="4227825898293920515">የይለፍ ቃል በ <ph name="TIME" /> ውስጥ አገልግሎት ጊዜው ያበቃል</translation>
 <translation id="4429881212383817840">የKerberos ቲኬት ጊዜው በቅርቡ ያበቃል</translation>
 <translation id="445059817448385655">የቀድሞው የይለፍ ቃል</translation>
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb
index 1634f7c..5c60349 100644
--- a/chromeos/strings/chromeos_strings_ar.xtb
+++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ar">
+<translation id="1482734542997480527">يدير النطاق <ph name="ENROLLMENT_DOMAIN" /> هذا الجهاز وقد يتمكن من مراقبة نشاطك.</translation>
 <translation id="1510238584712386396">مشغِّل التطبيقات</translation>
 <translation id="1734367976349034509">يخضع هذا الجهاز لإدارة المؤسسة</translation>
 <translation id="1930797645656624981">‏خدمة أسلوب الإدخال لنظام التشغيل Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">إيقاف التشغيل</translation>
 <translation id="3008341117444806826">إعادة التحميل</translation>
 <translation id="3838338534323494292">كلمة المرور الجديدة</translation>
+<translation id="4003259559679196451">يُدير <ph name="ENROLLMENT_DOMAIN" /> هذا الجهاز ويحصل على إذن الوصول إلى جميع أنشطة المستخدم، بما في ذلك صفحات الويب التي تمت زيارتها وكلمات المرور والبريد الإلكتروني.</translation>
 <translation id="4227825898293920515">تنتهي صلاحية كلمة المرور في <ph name="TIME" /></translation>
 <translation id="4429881212383817840">‏ستنتهي صلاحية تذكرة Kerberos قريبًا</translation>
 <translation id="445059817448385655">كلمة المرور القديمة</translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb
index 9c72ec9..00c3b55 100644
--- a/chromeos/strings/chromeos_strings_bg.xtb
+++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bg">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> управлява това устройство и може да е в състояние да наблюдава активността ви.</translation>
 <translation id="1510238584712386396">Стартов панел</translation>
 <translation id="1734367976349034509">Това устройство се управлява корпоративно</translation>
 <translation id="1930797645656624981">Услуга за метод на въвеждане в Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Изключване</translation>
 <translation id="3008341117444806826">ОПРЕСНЯВАНЕ</translation>
 <translation id="3838338534323494292">Нова парола</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> управлява това устройство и има достъп до цялата потребителска активност, включително посетените уеб страници, паролите и имейлите.</translation>
 <translation id="4227825898293920515">Паролата изтича след <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Пропускът за Kerberos изтича скоро</translation>
 <translation id="445059817448385655">Стара парола</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index cd32754..051b4d6 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bn">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> এই ডিভাইস ম্যানেজ করে এবং এটি আপনার অ্যাক্টিভিটি মনিটর করতে পারে।</translation>
 <translation id="1510238584712386396">লঞ্চার</translation>
 <translation id="1734367976349034509">এই ডিভাইসটি এন্টারপ্রাইজ পরিচালিত</translation>
 <translation id="1930797645656624981">Chrome OS ইনপুট পদ্ধতি পরিষেবা</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">বন্ধ করুন</translation>
 <translation id="3008341117444806826">রিফ্রেশ করুন</translation>
 <translation id="3838338534323494292">নতুন পাসওয়ার্ড</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> এই ডিভাইস ম্যানেজ করে এবং ব্যবহারকারী দেখেছেন এমন ওয়েবসাইট, পাসওয়ার্ড ও ইমেলে সহ তার সব অ্যাক্টিভিটি সংক্রান্ত ডেটা অ্যাক্সেস করতে পারে।</translation>
 <translation id="4227825898293920515">পাসওয়ার্ডের মেয়াদ <ph name="TIME" />-এ শেষ হবে</translation>
 <translation id="4429881212383817840">Kerberos টিকিটের মেয়াদ শীঘ্রই শেষ হয়ে যাবে</translation>
 <translation id="445059817448385655">পুরনো পাসওয়ার্ড</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb
index 333ae7a..578aea8 100644
--- a/chromeos/strings/chromeos_strings_ca.xtb
+++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ca">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> gestiona aquest dispositiu i és possible que pugui supervisar la teva activitat.</translation>
 <translation id="1510238584712386396">Menú d'aplicacions</translation>
 <translation id="1734367976349034509">Aquest dispositiu està gestionat per una empresa</translation>
 <translation id="1930797645656624981">Servei del mètode d'introducció de text a Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Apaga</translation>
 <translation id="3008341117444806826">ACTUALITZA</translation>
 <translation id="3838338534323494292">Contrasenya nova</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> gestiona aquest dispositiu i té accés a tota l'activitat dels usuaris, com ara les pàgines web visitades, les contrasenyes i el correu electrònic.</translation>
 <translation id="4227825898293920515">La contrasenya caduca d'aquí a <ph name="TIME" /></translation>
 <translation id="4429881212383817840">El tiquet de Kerberos caducarà aviat</translation>
 <translation id="445059817448385655">Contrasenya antiga</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb
index 17795c4..defaefda 100644
--- a/chromeos/strings/chromeos_strings_cs.xtb
+++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="cs">
+<translation id="1482734542997480527">Toto zařízení je spravováno doménou <ph name="ENROLLMENT_DOMAIN" />, která také může sledovat vaši aktivitu.</translation>
 <translation id="1510238584712386396">Spouštěč</translation>
 <translation id="1734367976349034509">Toto zařízení je spravováno organizací</translation>
 <translation id="1930797645656624981">Služba metod zadávání systému Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Vypnout</translation>
 <translation id="3008341117444806826">OBNOVIT</translation>
 <translation id="3838338534323494292">Nové heslo</translation>
+<translation id="4003259559679196451">Toto zařízení je spravováno doménou <ph name="ENROLLMENT_DOMAIN" />, která má přístup k veškeré uživatelské aktivitě, včetně navštívených webových stránek, hesel a e‑mailu.</translation>
 <translation id="4227825898293920515">Platnost hesla vyprší za <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Platnost lístku Kerberos brzy vyprší</translation>
 <translation id="445059817448385655">Staré heslo</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb
index 34cb2129..ddff45e 100644
--- a/chromeos/strings/chromeos_strings_da.xtb
+++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="da">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> administrerer din enhed og kan muligvis overvåge din aktivitet.</translation>
 <translation id="1510238584712386396">Appliste</translation>
 <translation id="1734367976349034509">Denne enhed er virksomhedsadministreret</translation>
 <translation id="1930797645656624981">Indtastningsmetodetjeneste for Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Sluk</translation>
 <translation id="3008341117444806826">OPDATER</translation>
 <translation id="3838338534323494292">Ny adgangskode</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> administrerer denne enhed og har adgang til al brugeraktivitet, bl.a. besøgte websider, adgangskoder og mails.</translation>
 <translation id="4227825898293920515">Adgangskoden udløber om <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Din Kerberos-billet er ved at udløbe</translation>
 <translation id="445059817448385655">Gammel adgangskode</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index 324de3b..d2a95e0 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="de">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> verwaltet dieses Gerät und kann Ihre Aktivitäten möglicherweise überwachen.</translation>
 <translation id="1510238584712386396">Launcher</translation>
 <translation id="1734367976349034509">Dieses Gerät wird vom Unternehmen verwaltet</translation>
 <translation id="1930797645656624981">Dienst für die Chrome OS-Eingabemethoden</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Herunterfahren</translation>
 <translation id="3008341117444806826">AKTUALISIEREN</translation>
 <translation id="3838338534323494292">Neues Passwort</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> verwaltet dieses Gerät und hat Zugriff auf alle Nutzeraktivitäten, einschließlich besuchten Webseiten, Passwörtern und E-Mails.</translation>
 <translation id="4227825898293920515">Passwort läuft in <ph name="TIME" /> ab</translation>
 <translation id="4429881212383817840">Kerberos-Ticket läuft bald ab</translation>
 <translation id="445059817448385655">Altes Passwort</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index 97a3b79f..d9f7a66 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="el">
+<translation id="1482734542997480527">Ο τομέας <ph name="ENROLLMENT_DOMAIN" /> διαχειρίζεται αυτήν τη συσκευή και μπορεί να έχει τη δυνατότητα να παρακολουθεί τη δραστηριότητά σας.</translation>
 <translation id="1510238584712386396">Λειτουργία εκκίνησης</translation>
 <translation id="1734367976349034509">Αυτή η συσκευή βρίσκεται υπό τη διαχείριση επιχείρησης</translation>
 <translation id="1930797645656624981">Υπηρεσία μεθόδου εισαγωγής Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Τερματισμός λειτουργίας</translation>
 <translation id="3008341117444806826">ΑΝΑΝΕΩΣΗ</translation>
 <translation id="3838338534323494292">Νέος κωδικός πρόσβασης</translation>
+<translation id="4003259559679196451">Ο τομέας <ph name="ENROLLMENT_DOMAIN" /> διαχειρίζεται αυτήν τη συσκευή και έχει πρόσβαση σε όλη τη δραστηριότητα των χρηστών, συμπεριλαμβανομένων των ιστοσελίδων που επισκέπτεστε, των κωδικών πρόσβασης και του ηλεκτρονικού ταχυδρομείου.</translation>
 <translation id="4227825898293920515">Ο κωδικός πρόσβασης λήγει σε <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Το εισιτήριο Kerberos θα λήξει σύντομα</translation>
 <translation id="445059817448385655">Παλιός κωδικός πρόσβασης</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb
index a8440eb..741202ed 100644
--- a/chromeos/strings/chromeos_strings_en-GB.xtb
+++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="en-GB">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> manages this device and may be able to monitor your activity.</translation>
 <translation id="1510238584712386396">Launcher</translation>
 <translation id="1734367976349034509">This device is enterprise managed</translation>
 <translation id="1930797645656624981">Chrome OS Input Method Service</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Shut down</translation>
 <translation id="3008341117444806826">REFRESH</translation>
 <translation id="3838338534323494292">New password</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> manages this device and has access to all user activity, including web pages visited, passwords and email.</translation>
 <translation id="4227825898293920515">Password expires in <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberos ticket expires soon</translation>
 <translation id="445059817448385655">Old password</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index 1816b5c..a5e7190 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="es-419">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> administra este dispositivo y es posible que pueda supervisar tu actividad.</translation>
 <translation id="1510238584712386396">Selector</translation>
 <translation id="1734367976349034509">Este dispositivo está administrado por una empresa</translation>
 <translation id="1930797645656624981">Servicio de método de entrada del Sistema operativo Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Cerrar</translation>
 <translation id="3008341117444806826">ACTUALIZAR</translation>
 <translation id="3838338534323494292">Nueva contraseña</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> administra este dispositivo y tiene acceso a toda la actividad del usuario, incluidos el correo electrónico, las páginas web que visitó y las contraseñas.</translation>
 <translation id="4227825898293920515">La contraseña caduca en <ph name="TIME" /></translation>
 <translation id="4429881212383817840">El ticket de Kerberos caducará pronto</translation>
 <translation id="445059817448385655">Contraseña anterior</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb
index b3c6a5fb..05d8d4b 100644
--- a/chromeos/strings/chromeos_strings_es.xtb
+++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="es">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> gestiona este dispositivo y es posible que supervise tu actividad.</translation>
 <translation id="1510238584712386396">Menú de aplicaciones</translation>
 <translation id="1734367976349034509">Este es un dispositivo administrado por la empresa</translation>
 <translation id="1930797645656624981">Servicio de método de introducción de Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Apagar</translation>
 <translation id="3008341117444806826">ACTUALIZAR</translation>
 <translation id="3838338534323494292">Contraseña nueva</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> gestiona este dispositivo y tiene acceso a toda la actividad del usuario, incluidas las páginas web visitadas, sus contraseñas y su correo electrónico.</translation>
 <translation id="4227825898293920515">La contraseña caducará dentro de <ph name="TIME" /></translation>
 <translation id="4429881212383817840">El ticket de Kerberos caducará pronto</translation>
 <translation id="445059817448385655">Contraseña antigua</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb
index 8c10072..a465031 100644
--- a/chromeos/strings/chromeos_strings_et.xtb
+++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="et">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> haldab seda seadet ja saab võib-olla jälgida teie tegevusi.</translation>
 <translation id="1510238584712386396">Käivitaja</translation>
 <translation id="1734367976349034509">Seda seadet haldab ettevõte</translation>
 <translation id="1930797645656624981">Chrome OS sisestusmeetodi teenus</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Lülita välja</translation>
 <translation id="3008341117444806826">VÄRSKENDA</translation>
 <translation id="3838338534323494292">Uus parool</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> haldab seda seadet ja sellel on juurdepääs kogu kasutaja tegevusele, sh külastatud veebilehtedele, paroolidele ning e-postile.</translation>
 <translation id="4227825898293920515">Parooli aegumiseni on jäänud <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberose pilet aegub peagi</translation>
 <translation id="445059817448385655">Vana parool</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index 6f3bad8a..4705bc0 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fa">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> ، این دستگاه را مدیریت می‌کند و ممکن است بتواند بر فعالیتتان نظارت داشته باشد.</translation>
 <translation id="1510238584712386396">راه‌انداز</translation>
 <translation id="1734367976349034509">این دستگاه توسط سازمانی مدیریت می‌شود</translation>
 <translation id="1930797645656624981">‏سرویس روش ورودی سیستم‌عامل Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">خاموش کردن</translation>
 <translation id="3008341117444806826">بازخوانی</translation>
 <translation id="3838338534323494292">گذرواژه جدید</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> این دستگاه را مدیریت می‌کند و به همه فعالیت‌های کاربر، ازجمله صفحه‌های وب بازدیدشده، گذرواژه‌ها، و ایمیل دسترسی دارد.</translation>
 <translation id="4227825898293920515">گذرواژه <ph name="TIME" /> دیگر منقضی می‌شود</translation>
 <translation id="4429881212383817840">‏بلیت Kerberos به‌زودی منقضی می‌شود</translation>
 <translation id="445059817448385655">گذرواژه قدیمی</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb
index 7b2439e98..8d05e32 100644
--- a/chromeos/strings/chromeos_strings_fi.xtb
+++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fi">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> ylläpitää tätä laitetta ja voi ehkä seurata toimintaasi.</translation>
 <translation id="1510238584712386396">Käynnistysohjelma</translation>
 <translation id="1734367976349034509">Tämä laite on yrityksen hallinnoima.</translation>
 <translation id="1930797645656624981">Chrome-käyttöjärjestelmän syöttöpalvelu</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Sammuta</translation>
 <translation id="3008341117444806826">PÄIVITÄ</translation>
 <translation id="3838338534323494292">Uusi salasana</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> ylläpitää tätä laitetta ja pääsee näkemään kaiken käyttäjätoiminnan, kuten avatut verkkosivustot, salasanat ja sähköpostit.</translation>
 <translation id="4227825898293920515">Salasana vanhenee: <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberos-tukipyyntö vanhenee pian</translation>
 <translation id="445059817448385655">Vanha salasana</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb
index bafe56a..489ff1e 100644
--- a/chromeos/strings/chromeos_strings_fr.xtb
+++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fr">
+<translation id="1482734542997480527">Il est possible que <ph name="ENROLLMENT_DOMAIN" />, qui gère cet appareil, puisse surveiller votre activité.</translation>
 <translation id="1510238584712386396">Lanceur d'applications</translation>
 <translation id="1734367976349034509">Cet appareil est géré par une entreprise</translation>
 <translation id="1930797645656624981">Service de mode de saisie Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Éteindre</translation>
 <translation id="3008341117444806826">ACTUALISER</translation>
 <translation id="3838338534323494292">Nouveau mot de passe</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> gère cet appareil et a accès à toutes les activités des utilisateurs, y compris les pages Web consultées, les mots de passe et la messagerie.</translation>
 <translation id="4227825898293920515">Le mot de passe arrive à expiration dans <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Le ticket Kerberos arrive bientôt à expiration</translation>
 <translation id="445059817448385655">Ancien mot de passe</translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb
index 33ef5396..35875e3 100644
--- a/chromeos/strings/chromeos_strings_gu.xtb
+++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="gu">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> તમારા ડિવાઇસને મેનેજ કરે છે અને કદાચ તમારી પ્રવૃત્તિનું નિરીક્ષણ કરી શકે છે.</translation>
 <translation id="1510238584712386396">લૉન્ચર</translation>
 <translation id="1734367976349034509">આ ઉપકરણ એન્ટરપ્રાઇઝ દ્વારા સંચાલિત થાય છે</translation>
 <translation id="1930797645656624981">Chrome OS ઇનપુટ પદ્ધતિ સેવા</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">શટ ડાઉન કરો</translation>
 <translation id="3008341117444806826">રિફ્રેશ કરો</translation>
 <translation id="3838338534323494292">નવો પાસવર્ડ</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> આ ડિવાઇસને મેનેજ કરે છે અને મુલાકાત લીધેલા વેબપેજ, પાસવર્ડ અને ઇમેઇલ સહિત, બધી વપરાશકર્તા પ્રવૃત્તિઓનો ઍક્સેસ ધરાવે છે.</translation>
 <translation id="4227825898293920515"><ph name="TIME" />માં પાસવર્ડની સમયસીમા સમાપ્ત થાય છે</translation>
 <translation id="4429881212383817840">ટૂંક સમયમાં Kerberos ટિકિટની સમયસીમા સમાપ્ત થશે</translation>
 <translation id="445059817448385655">જૂનો પાસવર્ડ</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index 5b9cf66..5538a925 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hi">
+<translation id="1482734542997480527">इस डिवाइस को <ph name="ENROLLMENT_DOMAIN" /> प्रबंधित करता है और आपकी गतिविधि पर नज़र रख सकता है.</translation>
 <translation id="1510238584712386396">लॉन्चर</translation>
 <translation id="1734367976349034509">यह डिवाइस एंटरप्राइज़ द्वारा प्रबंधित है</translation>
 <translation id="1930797645656624981">Chrome OS के इनपुट के तरीके की सेवा</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">शट डाउन करें</translation>
 <translation id="3008341117444806826">रीफ़्रेश करें</translation>
 <translation id="3838338534323494292">नया पासवर्ड</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> इस डिवाइस को प्रबंधित करता है. इसके पास उपयोगकर्ता की सभी गतिविधियों का ऐक्सेस है. इन गतिविधियों में उपयोगकर्ता के किसी वेबपेज पर जाने, उसके पासवर्ड, और ईमेल की जानकारी शामिल होती है.</translation>
 <translation id="4227825898293920515"><ph name="TIME" /> में पासवर्ड की समयसीमा खत्म हो जाएगी</translation>
 <translation id="4429881212383817840">Kerberos टिकट की समयसीमा जल्द ही खत्म होने वाली है</translation>
 <translation id="445059817448385655">पुराना पासवर्ड</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb
index 06518094..b9fcdd9 100644
--- a/chromeos/strings/chromeos_strings_hr.xtb
+++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hr">
+<translation id="1482734542997480527">Uređajem upravlja domena <ph name="ENROLLMENT_DOMAIN" /> i ona možda može nadzirati vašu aktivnost.</translation>
 <translation id="1510238584712386396">Pokretač</translation>
 <translation id="1734367976349034509">Ovim uređajem upravlja tvrtka</translation>
 <translation id="1930797645656624981">Usluga načina unosa OS-a Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Isključi</translation>
 <translation id="3008341117444806826">OSVJEŽI</translation>
 <translation id="3838338534323494292">Nova zaporka</translation>
+<translation id="4003259559679196451">Uređajem upravlja domena <ph name="ENROLLMENT_DOMAIN" /> i ona ima pristup svim aktivnostima korisnika, uključujući posjećene web-stranice, zaporke i e-poštu.</translation>
 <translation id="4227825898293920515">Zaporka istječe za <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberosov tiket uskoro istječe</translation>
 <translation id="445059817448385655">Stara zaporka</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb
index 8146852..a705648e 100644
--- a/chromeos/strings/chromeos_strings_hu.xtb
+++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hu">
+<translation id="1482734542997480527">A(z) <ph name="ENROLLMENT_DOMAIN" /> kezeli ezt az eszközt, és előfordulhat, hogy megfigyeli az Ön tevékenységeit.</translation>
 <translation id="1510238584712386396">Indító</translation>
 <translation id="1734367976349034509">Az eszközt a vállalat felügyeli</translation>
 <translation id="1930797645656624981">Chrome OS beviteli módszere szolgáltatás</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Leállítás</translation>
 <translation id="3008341117444806826">FRISSÍTÉS</translation>
 <translation id="3838338534323494292">Új jelszó</translation>
+<translation id="4003259559679196451">A(z) <ph name="ENROLLMENT_DOMAIN" /> kezeli ezt az eszközt, ezért hozzáfér az összes felhasználói tevékenységhez, köztük a felkeresett webhelyekhez, a jelszavakhoz és az e-mailekhez.</translation>
 <translation id="4227825898293920515">A jelszó <ph name="TIME" /> múlva lejár</translation>
 <translation id="4429881212383817840">A Kerberos-jegy hamarosan lejár</translation>
 <translation id="445059817448385655">Régi jelszó</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb
index e03684f5..d9965fc 100644
--- a/chromeos/strings/chromeos_strings_id.xtb
+++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="id">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> mengelola perangkat ini dan mungkin dapat memantau aktivitas Anda.</translation>
 <translation id="1510238584712386396">Peluncur</translation>
 <translation id="1734367976349034509">Perangkat ini dikelola perusahaan</translation>
 <translation id="1930797645656624981">Layanan Metode Masukan Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Matikan</translation>
 <translation id="3008341117444806826">PERBARUI</translation>
 <translation id="3838338534323494292">Sandi baru</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> mengelola perangkat ini dan memiliki akses ke semua aktivitas pengguna, termasuk halaman yang dikunjungi, sandi, dan email.</translation>
 <translation id="4227825898293920515">Sandi kedaluwarsa dalam <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Masa berlaku tiket Kerberos segera berakhir</translation>
 <translation id="445059817448385655">Sandi lama</translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb
index c4f6629b..bce61e2 100644
--- a/chromeos/strings/chromeos_strings_it.xtb
+++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="it">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> gestisce questo dispositivo e potrebbe essere in grado di monitorare le tue attività.</translation>
 <translation id="1510238584712386396">Avvio applicazioni</translation>
 <translation id="1734367976349034509">Questo dispositivo è gestito dall'azienda</translation>
 <translation id="1930797645656624981">Servizio metodo di immissione di Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Spegni</translation>
 <translation id="3008341117444806826">AGGIORNA</translation>
 <translation id="3838338534323494292">Nuova password</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> gestisce questo dispositivo e ha accesso a tutta l'attività dell'utente, tra cui le pagine web visitate, le password e le email.</translation>
 <translation id="4227825898293920515">La password scade tra <ph name="TIME" /></translation>
 <translation id="4429881212383817840">La richiesta di Kerberos scade a breve</translation>
 <translation id="445059817448385655">Vecchia password</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb
index b2b4a741..29c43eb 100644
--- a/chromeos/strings/chromeos_strings_ja.xtb
+++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ja">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> はこのデバイスを管理しており、アクティビティを監視できる可能性があります。</translation>
 <translation id="1510238584712386396">ランチャー</translation>
 <translation id="1734367976349034509">このデバイスは会社が管理しています</translation>
 <translation id="1930797645656624981">Chrome OS の入力方法サービス</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">終了</translation>
 <translation id="3008341117444806826">更新</translation>
 <translation id="3838338534323494292">新しいパスワード</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> はこのデバイスを管理しており、閲覧したウェブページ、パスワード、メールなど、すべてのユーザー アクティビティにアクセスできます。</translation>
 <translation id="4227825898293920515">パスワードの有効期限はあと <ph name="TIME" />です</translation>
 <translation id="4429881212383817840">Kerberos チケットはまもなく有効期限が切れます</translation>
 <translation id="445059817448385655">古いパスワード</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb
index 4cbe2b58..d458405 100644
--- a/chromeos/strings/chromeos_strings_kn.xtb
+++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="kn">
+<translation id="1482734542997480527">ಈ ಸಾಧನವನ್ನು <ph name="ENROLLMENT_DOMAIN" /> ನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಚಟುವಟಿಕೆಯ ಮೇಲೆ ಗಮನವಿಡಲು ಇದಕ್ಕೆ ಸಾಧ್ಯವಾಗಬಹುದು.</translation>
 <translation id="1510238584712386396">ಲಾಂಚರ್</translation>
 <translation id="1734367976349034509">ಈ ಸಾಧನವನ್ನು ಎಂಟರ್‌ಪ್ರೈಸ್ ನಿರ್ವಹಣೆ ಮಾಡುತ್ತಿದೆ</translation>
 <translation id="1930797645656624981">Chrome OS ಇನ್‌ಪುಟ್ ವಿಧಾನ ಸೇವೆ</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">ಮುಚ್ಚಿಬಿಡಿ </translation>
 <translation id="3008341117444806826">ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation>
 <translation id="3838338534323494292">ಹೊಸ ಪಾಸ್‌ವರ್ಡ್</translation>
+<translation id="4003259559679196451">ಈ ಸಾಧನವನ್ನು <ph name="ENROLLMENT_DOMAIN" /> ನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರರು ಭೇಟಿ ನೀಡಿದ ವೆಬ್‌ಪುಟಗಳು, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಹಾಗೂ ಇಮೇಲ್ ಸೇರಿದಂತೆ ಅವರ ಎಲ್ಲಾ ಚಟುವಟಿಕೆಗಳಿಗೆ ಪ್ರವೇಶ ಹೊಂದಿರುತ್ತದೆ.</translation>
 <translation id="4227825898293920515"><ph name="TIME" /> ಸಮಯದಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್‌ನ ಅವಧಿ ಮುಗಿಯಲಿದೆ</translation>
 <translation id="4429881212383817840">Kerberos ಟಿಕೆಟ್ ಶೀಘ್ರದಲ್ಲೇ ಅವಧಿ ಮೀರಲಿದೆ</translation>
 <translation id="445059817448385655">ಹಳೆಯ ಪಾಸ್‌ವರ್ಡ್‌</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index 6a36de4..f290b8e 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ko">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" />에서 이 기기를 관리하며 내 활동을 모니터링할 수도 있습니다.</translation>
 <translation id="1510238584712386396">런처</translation>
 <translation id="1734367976349034509">기업에서 관리하는 기기입니다.</translation>
 <translation id="1930797645656624981">Chrome OS 입력 방법 서비스</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">종료</translation>
 <translation id="3008341117444806826">새로고침</translation>
 <translation id="3838338534323494292">새 비밀번호</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" />에서 이 기기를 관리하고 방문한 웹페이지, 비밀번호, 이메일을 비롯한 모든 사용자 활동에 액세스합니다.</translation>
 <translation id="4227825898293920515">비밀번호가 <ph name="TIME" /> 후에 만료됨</translation>
 <translation id="4429881212383817840">Kerberos 티켓이 곧 만료됨</translation>
 <translation id="445059817448385655">이전 비밀번호</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index 4ae81d6..7fc7b0c 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lt">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> tvarko šį įrenginį ir gali stebėti jūsų veiklą.</translation>
 <translation id="1510238584712386396">Paleidimo priemonė</translation>
 <translation id="1734367976349034509">Šis įrenginys valdomas įmonės</translation>
 <translation id="1930797645656624981">„Chrome“ OS įvesties metodo paslauga</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Stabdyti</translation>
 <translation id="3008341117444806826">ATNAUJINTI</translation>
 <translation id="3838338534323494292">Naujas slaptažodis</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> tvarko šį įrenginį ir gali pasiekti visus naudotojo veiklos duomenis, įskaitant tinklalapius, kuriuose lankėsi, slaptažodžius ir el. paštą.</translation>
 <translation id="4227825898293920515">Slaptažodžio galiojimas baigsis už <ph name="TIME" /></translation>
 <translation id="4429881212383817840">„Kerberos“ bilietas netrukus baigs galioti</translation>
 <translation id="445059817448385655">Senas slaptažodis</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb
index 37bd681..6dad380 100644
--- a/chromeos/strings/chromeos_strings_lv.xtb
+++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lv">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> pārvalda šo ierīci un, iespējams, var pārraudzīt jūsu darbību.</translation>
 <translation id="1510238584712386396">Lietojumprogrammu palaidējs</translation>
 <translation id="1734367976349034509">Šo ierīci pārvalda uzņēmums</translation>
 <translation id="1930797645656624981">Chrome OS ievades metodes pakalpojums</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Beidzēt</translation>
 <translation id="3008341117444806826">ATSVAIDZINĀT</translation>
 <translation id="3838338534323494292">Jaunā parole</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> pārvalda šo ierīci un tam ir piekļuve visām lietotāja darbībām, tostarp tīmekļa lapām, kuras apmeklējāt, parolēm un e-pastam.</translation>
 <translation id="4227825898293920515">Paroles derīguma termiņš: <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberos biļetes termiņš drīz beigsies</translation>
 <translation id="445059817448385655">Iepriekšējā parole</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb
index d4e03e97..b7e0b95 100644
--- a/chromeos/strings/chromeos_strings_ml.xtb
+++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ml">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> ഈ ഉപകരണം മാനേജ് ചെയ്യുന്നു, ഒപ്പം നിങ്ങളുടെ ആക്‌റ്റിവിറ്റികൾ നിരീക്ഷിക്കാനുമായേക്കും.</translation>
 <translation id="1510238584712386396">ലോഞ്ചർ</translation>
 <translation id="1734367976349034509">ഈ ഉപകരണം മാനേജ് ചെയ്യുന്നത് എന്റർപ്രൈസാണ്</translation>
 <translation id="1930797645656624981">Chrome OS ഇൻപുട്ട് രീതി സേവനം</translation>
@@ -12,7 +13,8 @@
 <translation id="2872961005593481000">അടയ്ക്കുക</translation>
 <translation id="3008341117444806826">പുതുക്കിയെടുക്കുക</translation>
 <translation id="3838338534323494292">പുതിയ പാസ്‌വേഡ്</translation>
-<translation id="4227825898293920515">പാസ്‌വേഡ് <ph name="TIME" /> സമയത്തിനുള്ളിൽ കാലകരണപ്പെടും</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> ഈ ഉപകരണം മാനേജ് ചെയ്യുകയും സന്ദർശിച്ച വെബ്‌പേജുകൾ, പാസ്‌വേഡുകൾ, ഇമെയിൽ എന്നിവയുൾപ്പെടെ ഉപയോക്താവിന്റെ എല്ലാ ആക്‌റ്റിവിറ്റികളിലേക്കും ആക്‌സസും ഉണ്ടായിരിക്കും.</translation>
+<translation id="4227825898293920515">പാസ്‌വേഡ് <ph name="TIME" /> സമയത്തിനുള്ളിൽ കാലഹരണപ്പെടും</translation>
 <translation id="4429881212383817840">Kerberos ടിക്കറ്റ് ഉടൻ കാലഹരണപ്പെടും</translation>
 <translation id="445059817448385655">പഴയ പാസ്‌വേഡ്</translation>
 <translation id="467510802200863975">പാസ്‌വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 4da71fff..41f1fbf 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> हे डिव्हाइस व्यवस्थापित करते आणि तुमची अॅक्टिव्हिटी पाहू शकेल.</translation>
 <translation id="1510238584712386396">लाँचर</translation>
 <translation id="1734367976349034509">या डिव्हाइसला संस्थेेने व्यवस्थापित केेले आहे</translation>
 <translation id="1930797645656624981">Chrome OS इनपुट पद्धत सेवा</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">बंद करा</translation>
 <translation id="3008341117444806826">रिफ्रेश करा</translation>
 <translation id="3838338534323494292">नवीन पासवर्ड</translation>
+<translation id="4003259559679196451">हे डिव्हाइस <ph name="ENROLLMENT_DOMAIN" />व्यवस्थापित करते आणि भेट दिलेली वेबपेज पासवर्ड आणि ईमेलसह सर्व वापरकर्ता अॅक्टिव्हिटीचा त्यांना अॅक्सेस आहे.</translation>
 <translation id="4227825898293920515"><ph name="TIME" /> मध्ये पासवर्ड एक्स्पायर होईल</translation>
 <translation id="4429881212383817840">Kerberos तिकीट लवकरच एक्स्पायर होईल</translation>
 <translation id="445059817448385655">जुना पासवर्ड</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb
index b015e6a..1526e38 100644
--- a/chromeos/strings/chromeos_strings_ms.xtb
+++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ms">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> mengurus peranti ini dan mungkin dapat memantau aktiviti anda.</translation>
 <translation id="1510238584712386396">Pelancar</translation>
 <translation id="1734367976349034509">Peranti ini diurus perusahaan</translation>
 <translation id="1930797645656624981">Perkhidmatan Kaedah Input OS Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Mematikan</translation>
 <translation id="3008341117444806826">MUAT SEMULA</translation>
 <translation id="3838338534323494292">Kata laluan baharu</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> mengurus peranti ini dan mempunyai akses kepada semua aktiviti pengguna, termasuk halaman web yang dilawati, kata laluan dan e-mel.</translation>
 <translation id="4227825898293920515">Kata laluan tamat tempoh dalam <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Tiket Kerberos akan tamat tempoh tidak lama lagi</translation>
 <translation id="445059817448385655">Kata laluan lama</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index b821ed6..bc88578 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="nl">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> beheert dit apparaat en kan je activiteit mogelijk bekijken.</translation>
 <translation id="1510238584712386396">Launcher</translation>
 <translation id="1734367976349034509">Dit apparaat wordt beheerd door een onderneming</translation>
 <translation id="1930797645656624981">Invoermethodeservice voor Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Afsluiten</translation>
 <translation id="3008341117444806826">VERNIEUWEN</translation>
 <translation id="3838338534323494292">Nieuw wachtwoord</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> beheert dit apparaat en heeft toegang tot alle gebruikersactiviteit, waaronder bezochte webpagina's, wachtwoorden en e-mails.</translation>
 <translation id="4227825898293920515">Wachtwoord verloopt over <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberos-ticket verloopt binnenkort</translation>
 <translation id="445059817448385655">Oud wachtwoord</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index f5a6c80..7325fbb9 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="no">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> administrerer denne enheten og kan muligens overvåke aktiviteten din.</translation>
 <translation id="1510238584712386396">Appvelger</translation>
 <translation id="1734367976349034509">Denne enheten er administrert av en bedrift</translation>
 <translation id="1930797645656624981">Tjeneste for Chrome OS-inndatametode</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Slå av</translation>
 <translation id="3008341117444806826">OPPDATER</translation>
 <translation id="3838338534323494292">Nytt passord</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> administrerer denne enheten og har tilgang til all brukeraktivitet, blant annet nettsteder som besøkes, passord og e-post.</translation>
 <translation id="4227825898293920515">Passordet utløper om <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberos-saken utløper snart</translation>
 <translation id="445059817448385655">Gammelt passord</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb
index 9a54178f..3dcd19a 100644
--- a/chromeos/strings/chromeos_strings_pl.xtb
+++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pl">
+<translation id="1482734542997480527">Tym urządzeniem zarządza domena <ph name="ENROLLMENT_DOMAIN" />. Możliwe, że monitoruje ona też Twoją aktywność.</translation>
 <translation id="1510238584712386396">Menu z aplikacjami</translation>
 <translation id="1734367976349034509">Tym urządzeniem zarządza firma</translation>
 <translation id="1930797645656624981">Usługa Metoda wprowadzania Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Wyłącz</translation>
 <translation id="3008341117444806826">ODŚWIEŻ</translation>
 <translation id="3838338534323494292">Nowe hasło</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> zarządza tym urządzeniem i ma dostęp do wszelkiej aktywności użytkownika, w tym odwiedzanych stron internetowych, haseł i e-maili.</translation>
 <translation id="4227825898293920515">Hasło wygasa za <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Bilet Kerberos wkrótce straci ważność</translation>
 <translation id="445059817448385655">Stare hasło</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index 09a97ff2..84f47280 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-BR">
+<translation id="1482734542997480527">O domínio <ph name="ENROLLMENT_DOMAIN" /> gerencia este dispositivo e pode monitorar sua atividade.</translation>
 <translation id="1510238584712386396">Iniciador</translation>
 <translation id="1734367976349034509">Este dispositivo é gerenciado por uma empresa</translation>
 <translation id="1930797645656624981">Serviço de método de entrada do Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Desligar</translation>
 <translation id="3008341117444806826">ATUALIZAR</translation>
 <translation id="3838338534323494292">Nova senha</translation>
+<translation id="4003259559679196451">O domínio <ph name="ENROLLMENT_DOMAIN" /> gerencia este dispositivo e tem acesso a todas as atividades do usuário, incluindo páginas visitadas, senhas e e-mail.</translation>
 <translation id="4227825898293920515">A senha expirará em <ph name="TIME" /></translation>
 <translation id="4429881212383817840">O tíquete do Kerberos expirará em breve</translation>
 <translation id="445059817448385655">Senha antiga</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 5034306..21e581e 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-PT">
+<translation id="1482734542997480527">O domínio <ph name="ENROLLMENT_DOMAIN" /> gere este dispositivo e pode conseguir monitorizar a sua atividade.</translation>
 <translation id="1510238584712386396">Iniciador</translation>
 <translation id="1734367976349034509">Este dispositivo é gerido pela empresa</translation>
 <translation id="1930797645656624981">Serviço do método de introdução do Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Encerrar</translation>
 <translation id="3008341117444806826">ATUALIZAR</translation>
 <translation id="3838338534323494292">Nova palavra-passe</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> gere este dispositivo e tem acesso a todas as atividades do utilizador, incluindo páginas Web visitadas, palavras-passe e emails.</translation>
 <translation id="4227825898293920515">A palavra-passe expira daqui a <ph name="TIME" /></translation>
 <translation id="4429881212383817840">A permissão Kerberos expira em breve</translation>
 <translation id="445059817448385655">Palavra-passe antiga</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb
index aa393985..fbd2eb0 100644
--- a/chromeos/strings/chromeos_strings_ro.xtb
+++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ro">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> gestionează acest dispozitiv și poate să îți monitorizeze activitatea.</translation>
 <translation id="1510238584712386396">Lansator</translation>
 <translation id="1734367976349034509">Acest dispozitiv este gestionat de companie</translation>
 <translation id="1930797645656624981">Serviciul metodei de introducere a textului din sistemul de operare Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Închide</translation>
 <translation id="3008341117444806826">ACTUALIZEAZĂ</translation>
 <translation id="3838338534323494292">Parolă nouă</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> gestionează acest dispozitiv și are acces la toată activitatea utilizatorului, inclusiv la paginile web accesate, parole și e-mail.</translation>
 <translation id="4227825898293920515">Parola expiră în <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Tichetul Kerberos expiră în curând</translation>
 <translation id="445059817448385655">Parolă veche</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index a1bf3fe..34905b9 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ru">
+<translation id="1482734542997480527">Это управляемое устройство. Администратор домена <ph name="ENROLLMENT_DOMAIN" /> может отслеживать ваши действия.</translation>
 <translation id="1510238584712386396">Панель запуска</translation>
 <translation id="1734367976349034509">Это корпоративное устройство</translation>
 <translation id="1930797645656624981">Выбор способа ввода в Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Завершить работу</translation>
 <translation id="3008341117444806826">ОБНОВИТЬ</translation>
 <translation id="3838338534323494292">Новый пароль</translation>
+<translation id="4003259559679196451">Это управляемое устройство. Администратору домена <ph name="ENROLLMENT_DOMAIN" /> доступна информация обо всех действиях пользователя, в том числе о посещенных сайтах, используемом адресе электронной почты и введенных паролях.</translation>
 <translation id="4227825898293920515">Срок действия пароля истекает через <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Срок действия билета Kerberos истекает</translation>
 <translation id="445059817448385655">Старый пароль</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index fa87b30..2d9b01bd 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sk">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> spravuje toto zariadenie a môže monitorovať vašu aktivitu.</translation>
 <translation id="1510238584712386396">Spúšťač</translation>
 <translation id="1734367976349034509">Toto zariadenie je spravované organizáciou</translation>
 <translation id="1930797645656624981">Služba metódy vstupu systému Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Vypnúť</translation>
 <translation id="3008341117444806826">OBNOVIŤ</translation>
 <translation id="3838338534323494292">Nové heslo</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> spravuje toto zariadenie a má prístup k všetkým aktivitám používateľa vrátane navštívených webových stránok, hesiel a pošty.</translation>
 <translation id="4227825898293920515">Platnosť hesla vyprší o <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Platnosť tiketu Kerberos čoskoro uplynie</translation>
 <translation id="445059817448385655">Staré heslo</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index 036f2af2..e98de88 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sl">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> upravlja to napravo in morda nadzira vašo dejavnost.</translation>
 <translation id="1510238584712386396">Zaganjalnik</translation>
 <translation id="1734367976349034509">To napravo upravlja podjetje</translation>
 <translation id="1930797645656624981">Storitev načina vnosa v okolju OS Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Zaustavitev</translation>
 <translation id="3008341117444806826">OSVEŽI</translation>
 <translation id="3838338534323494292">Novo geslo</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> upravlja to napravo in ima dostop do vse dejavnosti uporabnika, vključno z obiskanimi spletnimi mesti, gesli in e-pošto.</translation>
 <translation id="4227825898293920515">Geslo poteče čez toliko časa: <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kartonček za Kerberos kmalu poteče</translation>
 <translation id="445059817448385655">Staro geslo</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index f3e6e50..5335faef 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sr">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> управља овим уређајем и може да прати ваше активности.</translation>
 <translation id="1510238584712386396">Покретач</translation>
 <translation id="1734367976349034509">Овим уређајем управља предузеће</translation>
 <translation id="1930797645656624981">Услуга метода уноса за Chrome ОС</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Искључи</translation>
 <translation id="3008341117444806826">ОСВЕЖИ</translation>
 <translation id="3838338534323494292">Нова лозинка</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> управља овим уређајем и има приступ свим активностима корисника, укључујући посећене веб-странице, лозинке и имејлове.</translation>
 <translation id="4227825898293920515">Лозинка истиче за <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberos тикет ускоро истиче</translation>
 <translation id="445059817448385655">Стара лозинка</translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb
index 0c3feec9..c63a6db0 100644
--- a/chromeos/strings/chromeos_strings_sv.xtb
+++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sv">
+<translation id="1482734542997480527">Den här enheten hanteras av <ph name="ENROLLMENT_DOMAIN" />, som kan ha möjlighet att övervaka din aktivitet.</translation>
 <translation id="1510238584712386396">Startprogram</translation>
 <translation id="1734367976349034509">Enheten är företagshanterad</translation>
 <translation id="1930797645656624981">Tjänst för inmatningsmetod för Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Stäng av</translation>
 <translation id="3008341117444806826">UPPDATERA</translation>
 <translation id="3838338534323494292">Nytt lösenord</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> hanterar den här enheten och har tillgång till all användaraktivitet, inklusive besökta webbsidor, lösenord och e-post.</translation>
 <translation id="4227825898293920515">Lösenordet upphör att gälla om <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Kerberos-biljetten upphör snart att gälla</translation>
 <translation id="445059817448385655">Gammalt lösenord</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb
index adec605..431e74d3 100644
--- a/chromeos/strings/chromeos_strings_sw.xtb
+++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sw">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> anadhibiti kifaa hiki na anaweza kufuatilia shughuli zako.</translation>
 <translation id="1510238584712386396">Kizindua</translation>
 <translation id="1734367976349034509">Kifaa hiki kinadhibitiwa kibiashara</translation>
 <translation id="1930797645656624981">Huduma ya Mbinu ya Kuingiza Data kwenye Mfumo wa Uendeshaji wa Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Zima</translation>
 <translation id="3008341117444806826">ONYESHA UPYA</translation>
 <translation id="3838338534323494292">Nenosiri jipya</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> hudhibiti kifaa hiki na ina idhini ya kufikia shughuli zote za mtumiaji, zikiwemo kurasa za wavuti alizotembelea, manenosiri na anwani za barua pepe.</translation>
 <translation id="4227825898293920515">Muda wa kutumia nenosiri utaisha baada ya <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Muda wa kutumia tiketi ya Kerberos unakaribia kuisha</translation>
 <translation id="445059817448385655">Nenosiri la awali</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index f0a676f..4fe85ea 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="te">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> ఈ పరికరాన్ని నిర్వహిస్తుంది. అలాగే మీ కార్యకలాపాన్ని కూడా పర్యవేక్షించే అవకాశం ఉంటుంది.</translation>
 <translation id="1510238584712386396">లాంచర్</translation>
 <translation id="1734367976349034509">ఈ పరికరం సంస్థ ద్వారా నిర్వహించబడుతోంది</translation>
 <translation id="1930797645656624981">Chrome OS ఇన్‌పుట్ విధానం సేవ</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">షట్ డౌన్ చెయ్యండి</translation>
 <translation id="3008341117444806826">రిఫ్రెష్ చేయి</translation>
 <translation id="3838338534323494292">కొత్త పాస్‌వర్డ్</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> ఈ పరికరాన్ని నిర్వహిస్తుంది, అలాగే సందర్శించిన వెబ్ పేజీలు, పాస్‌వర్డ్‌లు, ఇమెయిల్‌లతో సహా వినియోగదారు యొక్క అన్ని కార్యకలాపాలకు యాక్సెస్‌ను కలిగి ఉంటుంది.</translation>
 <translation id="4227825898293920515"><ph name="TIME" />లో పాస్‌వర్డ్‌ గడువు ముగుస్తుంది</translation>
 <translation id="4429881212383817840">Kerberos టిక్కెట్ గడువు త్వరలో ముగుస్తుంది</translation>
 <translation id="445059817448385655">పాత పాస్‌వర్డ్</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index 25d0fea..cd32ad0 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="th">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> จัดการอุปกรณ์นี้และอาจตรวจสอบกิจกรรมของคุณได้</translation>
 <translation id="1510238584712386396">ตัวเรียกใช้งาน</translation>
 <translation id="1734367976349034509">อุปกรณ์นี้ได้รับการจัดการโดยองค์กร</translation>
 <translation id="1930797645656624981">บริการวิธีการป้อนข้อมูลของ Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">ปิด</translation>
 <translation id="3008341117444806826">รีเฟรช</translation>
 <translation id="3838338534323494292">รหัสผ่านใหม่</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> จัดการอุปกรณ์นี้และมีสิทธิ์เข้าถึงกิจกรรมทั้งหมดของผู้ใช้ ซึ่งรวมถึงหน้าเว็บที่เข้าชม รหัสผ่าน และอีเมล</translation>
 <translation id="4227825898293920515">รหัสผ่านจะหมดอายุในอีก <ph name="TIME" /></translation>
 <translation id="4429881212383817840">ตั๋ว Kerberos กำลังจะหมดอายุ</translation>
 <translation id="445059817448385655">รหัสผ่านเดิม</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb
index 6ea2af0..22f52996 100644
--- a/chromeos/strings/chromeos_strings_tr.xtb
+++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="tr">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> bu cihazı yönetiyor ve etkinliklerinizi izleyebilir.</translation>
 <translation id="1510238584712386396">Başlatıcı</translation>
 <translation id="1734367976349034509">Bu cihaz kuruluş tarafından yönetiliyor</translation>
 <translation id="1930797645656624981">Chrome OS Giriş Yöntemi Hizmeti</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Kapat</translation>
 <translation id="3008341117444806826">YENİLE</translation>
 <translation id="3838338534323494292">Yeni şifre</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> bu cihazı yönetiyor ve ziyaret edilen web siteleri, şifreler ve e-postalar dahil olmak üzere tüm kullanıcı etkinliklerine erişimi var.</translation>
 <translation id="4227825898293920515">Şifrenin süresi <ph name="TIME" /> içinde doluyor</translation>
 <translation id="4429881212383817840">Kerberos biletinin süresi yakında doluyor</translation>
 <translation id="445059817448385655">Eski şifre</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb
index a766639..2f84bac 100644
--- a/chromeos/strings/chromeos_strings_uk.xtb
+++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="uk">
+<translation id="1482734542997480527">Сайт <ph name="ENROLLMENT_DOMAIN" /> керує цим пристроєм і може відстежувати ваші дії.</translation>
 <translation id="1510238584712386396">Панель запуску</translation>
 <translation id="1734367976349034509">Цим пристроєм керує адміністратор підприємства</translation>
 <translation id="1930797645656624981">Сервіс методів введення в ОС Chrome</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Завершити роботу</translation>
 <translation id="3008341117444806826">ОНОВИТИ</translation>
 <translation id="3838338534323494292">Новий пароль</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> керує цим пристроєм і має доступ до всіх дій користувача, зокрема відвіданих сторінок, паролів і електронних листів.</translation>
 <translation id="4227825898293920515">Термін дії пароля закінчиться через <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Термін дії квитка Kerberos незабаром минає</translation>
 <translation id="445059817448385655">Старий пароль</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index cd73ef7c..c01ed01 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="vi">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> quản lý thiết bị này và có thể giám sát hoạt động của bạn.</translation>
 <translation id="1510238584712386396">Trình chạy</translation>
 <translation id="1734367976349034509">Thiết bị này do doanh nghiệp quản lý</translation>
 <translation id="1930797645656624981">Dịch vụ cung cấp phương thức nhập trên Chrome OS</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">Tắt</translation>
 <translation id="3008341117444806826">LÀM MỚI</translation>
 <translation id="3838338534323494292">Mật khẩu mới</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> quản lý thiết bị này và có quyền truy cập vào tất cả hoạt động của người dùng, bao gồm cả các trang web đã truy cập, mật khẩu và email.</translation>
 <translation id="4227825898293920515">Mật khẩu sẽ hết hạn sau <ph name="TIME" /></translation>
 <translation id="4429881212383817840">Phiếu Kerberos sẽ sớm hết hạn</translation>
 <translation id="445059817448385655">Mật khẩu cũ</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index e2046a95..c76b057e 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> 管理此设备,并可能监控您的活动。</translation>
 <translation id="1510238584712386396">启动器</translation>
 <translation id="1734367976349034509">此设备是受企业管理的设备</translation>
 <translation id="1930797645656624981">Chrome 操作系统输入法服务</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">关机</translation>
 <translation id="3008341117444806826">刷新</translation>
 <translation id="3838338534323494292">新密码</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> 管理此设备并可查看所有用户活动(包括访问过的网页、密码和电子邮件)。</translation>
 <translation id="4227825898293920515">密码将于 <ph name="TIME" />后到期</translation>
 <translation id="4429881212383817840">Kerberos 票据即将过期</translation>
 <translation id="445059817448385655">旧密码</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb
index 760d1645..00620e2 100644
--- a/chromeos/strings/chromeos_strings_zh-TW.xtb
+++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-TW">
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> 會管理這個裝置,也或許可以監控你的活動。</translation>
 <translation id="1510238584712386396">啟動器</translation>
 <translation id="1734367976349034509">這個裝置受到企業管理</translation>
 <translation id="1930797645656624981">Chrome 作業系統輸入法服務</translation>
@@ -12,6 +13,7 @@
 <translation id="2872961005593481000">關閉</translation>
 <translation id="3008341117444806826">更新</translation>
 <translation id="3838338534323494292">新密碼</translation>
+<translation id="4003259559679196451"><ph name="ENROLLMENT_DOMAIN" /> 會管理這個裝置並可存取所有使用者活動,包括網頁造訪記錄、密碼和電子郵件。</translation>
 <translation id="4227825898293920515">密碼將在 <ph name="TIME" />後到期</translation>
 <translation id="4429881212383817840">Kerberos 票證即將到期</translation>
 <translation id="445059817448385655">舊密碼</translation>
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 6c6ac55..69267c5 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -341,7 +341,7 @@
   if (is_chromeos) {
     deps += [
       "//components/arc:unit_tests",
-      "//components/arc/common:unit_tests",
+      "//components/arc/mojom:unit_tests",
       "//components/ownership:unit_tests",
       "//components/timers:unit_tests",
       "//components/user_manager:unit_tests",
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn
index e6c1164..b776ffe 100644
--- a/components/arc/BUILD.gn
+++ b/components/arc/BUILD.gn
@@ -237,7 +237,7 @@
     ":arc_base_utils",
     ":connection_holder",
     ":prefs",
-    "//components/arc/common",
+    "//components/arc/mojom",
     "//dbus",
   ]
 }
@@ -267,7 +267,7 @@
 
   public_deps = [
     ":connection_holder",
-    "//components/arc/common:notifications",
+    "//components/arc/mojom:notifications",
   ]
 }
 
@@ -335,7 +335,7 @@
   sources = [
     "arc_features_parser_unittest.cc",
     "arc_util_unittest.cc",
-    "bluetooth/bluetooth_struct_traits_unittest.cc",
+    "bluetooth/bluetooth_mojom_traits_unittest.cc",
     "bluetooth/bluetooth_type_converters_unittest.cc",
     "clipboard/arc_clipboard_bridge_unittest.cc",
     "ime/arc_ime_service_unittest.cc",
diff --git a/components/arc/app_permissions/arc_app_permissions_bridge.h b/components/arc/app_permissions/arc_app_permissions_bridge.h
index c83e4b90..7c3ba6f 100644
--- a/components/arc/app_permissions/arc_app_permissions_bridge.h
+++ b/components/arc/app_permissions/arc_app_permissions_bridge.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_APP_PERMISSIONS_ARC_APP_PERMISSIONS_BRIDGE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/app_permissions.mojom.h"
+#include "components/arc/mojom/app_permissions.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/appfuse/arc_appfuse_bridge.h b/components/arc/appfuse/arc_appfuse_bridge.h
index 615f01b2..963f38e1 100644
--- a/components/arc/appfuse/arc_appfuse_bridge.h
+++ b/components/arc/appfuse/arc_appfuse_bridge.h
@@ -8,7 +8,7 @@
 #include <stdint.h>
 
 #include "base/macros.h"
-#include "components/arc/common/appfuse.mojom.h"
+#include "components/arc/mojom/appfuse.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/audio/arc_audio_bridge.h b/components/arc/audio/arc_audio_bridge.h
index 347b91c..7ef4c14 100644
--- a/components/arc/audio/arc_audio_bridge.h
+++ b/components/arc/audio/arc_audio_bridge.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "chromeos/audio/cras_audio_handler.h"
-#include "components/arc/common/audio.mojom.h"
+#include "components/arc/mojom/audio.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/components/arc/bitmap/OWNERS b/components/arc/bitmap/OWNERS
index ef5cf84..012a33c 100644
--- a/components/arc/bitmap/OWNERS
+++ b/components/arc/bitmap/OWNERS
@@ -1,3 +1,3 @@
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=file://components/arc/common/ARC_SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=file://components/arc/mojom/ARC_SECURITY_OWNERS
diff --git a/components/arc/bitmap/bitmap_struct_traits.cc b/components/arc/bitmap/bitmap_mojom_traits.cc
similarity index 70%
rename from components/arc/bitmap/bitmap_struct_traits.cc
rename to components/arc/bitmap/bitmap_mojom_traits.cc
index 868734b..9abd471 100644
--- a/components/arc/bitmap/bitmap_struct_traits.cc
+++ b/components/arc/bitmap/bitmap_mojom_traits.cc
@@ -2,18 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/arc/bitmap/bitmap_struct_traits.h"
+#include "components/arc/bitmap/bitmap_mojom_traits.h"
 
 namespace mojo {
 
-bool StructTraits<arc::mojom::ArcBitmapDataView, SkBitmap>::
-    Read(arc::mojom::ArcBitmapDataView data, SkBitmap* out) {
+bool StructTraits<arc::mojom::ArcBitmapDataView, SkBitmap>::Read(
+    arc::mojom::ArcBitmapDataView data,
+    SkBitmap* out) {
   mojo::ArrayDataView<uint8_t> pixel_data;
   data.GetPixelDataDataView(&pixel_data);
 
   SkImageInfo info = SkImageInfo::Make(
-      data.width(), data.height(),
-      kRGBA_8888_SkColorType, kPremul_SkAlphaType);
+      data.width(), data.height(), kRGBA_8888_SkColorType, kPremul_SkAlphaType);
   if (info.computeByteSize(info.minRowBytes()) > pixel_data.size()) {
     // Insufficient buffer size.
     return false;
@@ -22,9 +22,8 @@
   // Create the SkBitmap object which wraps the arc bitmap pixels. This
   // doesn't copy and |data| and |bitmap| share the buffer.
   SkBitmap bitmap;
-  if (!bitmap.installPixels(info,
-          const_cast<uint8_t*>(pixel_data.data()),
-          info.minRowBytes())) {
+  if (!bitmap.installPixels(info, const_cast<uint8_t*>(pixel_data.data()),
+                            info.minRowBytes())) {
     // Error in installing pixels.
     return false;
   }
diff --git a/components/arc/bitmap/bitmap_struct_traits.h b/components/arc/bitmap/bitmap_mojom_traits.h
similarity index 80%
rename from components/arc/bitmap/bitmap_struct_traits.h
rename to components/arc/bitmap/bitmap_mojom_traits.h
index d750ce8..a39b987 100644
--- a/components/arc/bitmap/bitmap_struct_traits.h
+++ b/components/arc/bitmap/bitmap_mojom_traits.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_BITMAP_BITMAP_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_BITMAP_BITMAP_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_BITMAP_BITMAP_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_BITMAP_BITMAP_MOJOM_TRAITS_H_
 
 #include "base/containers/span.h"
-#include "components/arc/common/bitmap.mojom.h"
+#include "components/arc/mojom/bitmap.mojom.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 namespace mojo {
@@ -28,4 +28,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_BITMAP_BITMAP_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_BITMAP_BITMAP_MOJOM_TRAITS_H_
diff --git a/components/arc/bluetooth/OWNERS b/components/arc/bluetooth/OWNERS
index 40f6a3e..28b1b58 100644
--- a/components/arc/bluetooth/OWNERS
+++ b/components/arc/bluetooth/OWNERS
@@ -1,7 +1,7 @@
 per-file *_type_converter*.*=set noparent
 per-file *_type_converter*.*=file://ipc/SECURITY_OWNERS
-per-file *_type_converter*.*=file://components/arc/common/ARC_SECURITY_OWNERS
+per-file *_type_converter*.*=file://components/arc/mojom/ARC_SECURITY_OWNERS
 
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=file://components/arc/common/ARC_SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=file://components/arc/mojom/ARC_SECURITY_OWNERS
diff --git a/components/arc/bluetooth/bluetooth_struct_traits.cc b/components/arc/bluetooth/bluetooth_mojom_traits.cc
similarity index 96%
rename from components/arc/bluetooth/bluetooth_struct_traits.cc
rename to components/arc/bluetooth/bluetooth_mojom_traits.cc
index e10d42f..9272ce6 100644
--- a/components/arc/bluetooth/bluetooth_struct_traits.cc
+++ b/components/arc/bluetooth/bluetooth_mojom_traits.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 "components/arc/bluetooth/bluetooth_struct_traits.h"
+#include "components/arc/bluetooth/bluetooth_mojom_traits.h"
 
 #include <initializer_list>
 #include <map>
@@ -124,9 +124,9 @@
 
 // static
 bool StructTraits<arc::mojom::BluetoothUUIDDataView,
-                  device::BluetoothUUID>::Read(
-    arc::mojom::BluetoothUUIDDataView data,
-    device::BluetoothUUID* output) {
+                  device::BluetoothUUID>::Read(arc::mojom::BluetoothUUIDDataView
+                                                   data,
+                                               device::BluetoothUUID* output) {
   std::vector<uint8_t> address_bytes;
   if (!data.ReadUuid(&address_bytes))
     return false;
diff --git a/components/arc/bluetooth/bluetooth_struct_traits.h b/components/arc/bluetooth/bluetooth_mojom_traits.h
similarity index 93%
rename from components/arc/bluetooth/bluetooth_struct_traits.h
rename to components/arc/bluetooth/bluetooth_mojom_traits.h
index 5ae85d1..c696fc8 100644
--- a/components/arc/bluetooth/bluetooth_struct_traits.h
+++ b/components/arc/bluetooth/bluetooth_mojom_traits.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_BLUETOOTH_BLUETOOTH_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_BLUETOOTH_BLUETOOTH_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_BLUETOOTH_BLUETOOTH_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_BLUETOOTH_BLUETOOTH_MOJOM_TRAITS_H_
 
 #include <memory>
 #include <vector>
 
-#include "components/arc/common/bluetooth.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
 #include "device/bluetooth/bluetooth_advertisement.h"
 #include "device/bluetooth/bluetooth_common.h"
 #include "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h"
@@ -17,8 +17,7 @@
 namespace mojo {
 
 template <>
-struct EnumTraits<arc::mojom::BluetoothDeviceType,
-    device::BluetoothTransport> {
+struct EnumTraits<arc::mojom::BluetoothDeviceType, device::BluetoothTransport> {
   static arc::mojom::BluetoothDeviceType ToMojom(
       device::BluetoothTransport type) {
     switch (type) {
@@ -134,4 +133,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_BLUETOOTH_BLUETOOTH_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_BLUETOOTH_BLUETOOTH_MOJOM_TRAITS_H_
diff --git a/components/arc/bluetooth/bluetooth_struct_traits_unittest.cc b/components/arc/bluetooth/bluetooth_mojom_traits_unittest.cc
similarity index 98%
rename from components/arc/bluetooth/bluetooth_struct_traits_unittest.cc
rename to components/arc/bluetooth/bluetooth_mojom_traits_unittest.cc
index b6ddaae7..fa371a2c 100644
--- a/components/arc/bluetooth/bluetooth_struct_traits_unittest.cc
+++ b/components/arc/bluetooth/bluetooth_mojom_traits_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 "components/arc/bluetooth/bluetooth_struct_traits.h"
+#include "components/arc/bluetooth/bluetooth_mojom_traits.h"
 
 #include <string>
 #include <utility>
diff --git a/components/arc/bluetooth/bluetooth_type_converters.h b/components/arc/bluetooth/bluetooth_type_converters.h
index 67a43e74..c410f2d 100644
--- a/components/arc/bluetooth/bluetooth_type_converters.h
+++ b/components/arc/bluetooth/bluetooth_type_converters.h
@@ -10,7 +10,7 @@
 #include <string>
 #include <utility>
 
-#include "components/arc/common/bluetooth.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
 #include "device/bluetooth/bluetooth_gatt_service.h"
 #include "device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h"
 #include "device/bluetooth/bluez/bluetooth_service_record_bluez.h"
diff --git a/components/arc/camera/arc_camera_bridge.h b/components/arc/camera/arc_camera_bridge.h
index 43ab1c3..e327a71 100644
--- a/components/arc/camera/arc_camera_bridge.h
+++ b/components/arc/camera/arc_camera_bridge.h
@@ -9,7 +9,7 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "components/arc/common/camera.mojom.h"
+#include "components/arc/mojom/camera.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/clipboard/arc_clipboard_bridge.h b/components/arc/clipboard/arc_clipboard_bridge.h
index 0e26b27..1056ad5 100644
--- a/components/arc/clipboard/arc_clipboard_bridge.h
+++ b/components/arc/clipboard/arc_clipboard_bridge.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/clipboard.mojom.h"
+#include "components/arc/mojom/clipboard.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "ui/base/clipboard/clipboard_observer.h"
 
diff --git a/components/arc/clipboard/arc_clipboard_bridge_unittest.cc b/components/arc/clipboard/arc_clipboard_bridge_unittest.cc
index 838de85..1cbc048 100644
--- a/components/arc/clipboard/arc_clipboard_bridge_unittest.cc
+++ b/components/arc/clipboard/arc_clipboard_bridge_unittest.cc
@@ -10,7 +10,7 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/mock_callback.h"
-#include "components/arc/common/clipboard.mojom.h"
+#include "components/arc/mojom/clipboard.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_clipboard_instance.h"
diff --git a/components/arc/common/OWNERS b/components/arc/common/OWNERS
deleted file mode 100644
index 539b2ef..0000000
--- a/components/arc/common/OWNERS
+++ /dev/null
@@ -1,11 +0,0 @@
-per-file *.mojom=set noparent
-per-file *.mojom=file://ipc/SECURITY_OWNERS
-per-file *.mojom=file:ARC_SECURITY_OWNERS
-
-per-file *.typemap=set noparent
-per-file *.typemap=file://ipc/SECURITY_OWNERS
-per-file *.typemap=file:ARC_SECURITY_OWNERS
-
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=file:ARC_SECURITY_OWNERS
diff --git a/components/arc/common/bitmap.typemap b/components/arc/common/bitmap.typemap
deleted file mode 100644
index 73529dc..0000000
--- a/components/arc/common/bitmap.typemap
+++ /dev/null
@@ -1,13 +0,0 @@
-mojom = "//components/arc/common/bitmap.mojom"
-public_headers = [ "//third_party/skia/include/core/SkBitmap.h" ]
-traits_headers = [ "//components/arc/bitmap/bitmap_struct_traits.h" ]
-sources = [
-  "//components/arc/bitmap/bitmap_struct_traits.cc",
-]
-deps = [
-  "//skia",
-]
-public_deps = [
-  "//skia",
-]
-type_mappings = [ "arc.mojom.ArcBitmap=SkBitmap" ]
diff --git a/components/arc/common/ime.typemap b/components/arc/common/ime.typemap
deleted file mode 100644
index ba967cf..0000000
--- a/components/arc/common/ime.typemap
+++ /dev/null
@@ -1,4 +0,0 @@
-mojom = "//components/arc/common/ime.mojom"
-public_headers = [ "//ui/base/ime/text_input_type.h" ]
-traits_headers = [ "//components/arc/common/ime_struct_traits.h" ]
-type_mappings = [ "arc.mojom.TextInputType=ui::TextInputType" ]
diff --git a/components/arc/common/timer.typemap b/components/arc/common/timer.typemap
deleted file mode 100644
index df7d6f3..0000000
--- a/components/arc/common/timer.typemap
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2018 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.
-
-mojom = "//components/arc/common/timer.mojom"
-traits_headers = [ "//components/arc/timer/arc_timer_struct_traits.h" ]
-sources = [
-  "//components/arc/timer/arc_timer_struct_traits.cc",
-]
-type_mappings = [ "arc.mojom.ClockId=clockid_t" ]
diff --git a/components/arc/common/typemaps.gni b/components/arc/common/typemaps.gni
deleted file mode 100644
index 7756be68..0000000
--- a/components/arc/common/typemaps.gni
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2016 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.
-
-typemaps = [
-  "//components/arc/common/app.typemap",
-  "//components/arc/common/bitmap.typemap",
-  "//components/arc/common/bluetooth.typemap",
-  "//components/arc/common/file_system.typemap",
-  "//components/arc/common/gfx.typemap",
-  "//components/arc/common/ime.typemap",
-  "//components/arc/common/intent_helper.typemap",
-  "//components/arc/common/print.typemap",
-  "//components/arc/common/timer.typemap",
-  "//components/arc/common/video_common.typemap",
-  "//components/arc/common/video_encode_accelerator.typemap",
-  "//components/arc/common/volume_mounter.typemap",
-]
diff --git a/components/arc/crash_collector/arc_crash_collector_bridge.h b/components/arc/crash_collector/arc_crash_collector_bridge.h
index 9da78baf..af1814d 100644
--- a/components/arc/crash_collector/arc_crash_collector_bridge.h
+++ b/components/arc/crash_collector/arc_crash_collector_bridge.h
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "base/macros.h"
-#include "components/arc/common/crash_collector.mojom.h"
+#include "components/arc/mojom/crash_collector.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/disk_quota/arc_disk_quota_bridge.h b/components/arc/disk_quota/arc_disk_quota_bridge.h
index 3b8c73f..1ceca568 100644
--- a/components/arc/disk_quota/arc_disk_quota_bridge.h
+++ b/components/arc/disk_quota/arc_disk_quota_bridge.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_DISK_QUOTA_ARC_DISK_QUOTA_BRIDGE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/disk_quota.mojom.h"
+#include "components/arc/mojom/disk_quota.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/file_system/OWNERS b/components/arc/file_system/OWNERS
index ef5cf84..012a33c 100644
--- a/components/arc/file_system/OWNERS
+++ b/components/arc/file_system/OWNERS
@@ -1,3 +1,3 @@
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=file://components/arc/common/ARC_SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=file://components/arc/mojom/ARC_SECURITY_OWNERS
diff --git a/components/arc/file_system/file_system_struct_traits.cc b/components/arc/file_system/file_system_mojom_traits.cc
similarity index 90%
rename from components/arc/file_system/file_system_struct_traits.cc
rename to components/arc/file_system/file_system_mojom_traits.cc
index df97e6bb..9af0c129 100644
--- a/components/arc/file_system/file_system_struct_traits.cc
+++ b/components/arc/file_system/file_system_mojom_traits.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/arc/file_system/file_system_struct_traits.h"
+#include "components/arc/file_system/file_system_mojom_traits.h"
 
 #include "base/logging.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 
 namespace mojo {
 
diff --git a/components/arc/file_system/file_system_struct_traits.h b/components/arc/file_system/file_system_mojom_traits.h
similarity index 69%
rename from components/arc/file_system/file_system_struct_traits.h
rename to components/arc/file_system/file_system_mojom_traits.h
index eae87efd..d69f407 100644
--- a/components/arc/file_system/file_system_struct_traits.h
+++ b/components/arc/file_system/file_system_mojom_traits.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_FILE_SYSTEM_FILE_SYSTEM_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_FILE_SYSTEM_FILE_SYSTEM_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_FILE_SYSTEM_FILE_SYSTEM_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_FILE_SYSTEM_FILE_SYSTEM_MOJOM_TRAITS_H_
 
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "storage/browser/fileapi/watcher_manager.h"
 
 namespace mojo {
@@ -20,4 +20,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_FILE_SYSTEM_FILE_SYSTEM_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_FILE_SYSTEM_FILE_SYSTEM_MOJOM_TRAITS_H_
diff --git a/components/arc/ime/arc_ime_bridge_impl.h b/components/arc/ime/arc_ime_bridge_impl.h
index eb68bd47..f5ac479 100644
--- a/components/arc/ime/arc_ime_bridge_impl.h
+++ b/components/arc/ime/arc_ime_bridge_impl.h
@@ -9,8 +9,8 @@
 
 #include "base/macros.h"
 #include "base/strings/string16.h"
-#include "components/arc/common/ime.mojom.h"
 #include "components/arc/ime/arc_ime_bridge.h"
+#include "components/arc/mojom/ime.mojom.h"
 #include "ui/base/ime/text_input_type.h"
 #include "ui/gfx/geometry/rect.h"
 
diff --git a/components/arc/ime/arc_ime_service_unittest.cc b/components/arc/ime/arc_ime_service_unittest.cc
index 0fa67211..ee62ec6 100644
--- a/components/arc/ime/arc_ime_service_unittest.cc
+++ b/components/arc/ime/arc_ime_service_unittest.cc
@@ -11,7 +11,7 @@
 #include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "components/arc/common/ime.mojom.h"
+#include "components/arc/mojom/ime.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/aura/test/test_window_delegate.h"
diff --git a/components/arc/intent_helper/OWNERS b/components/arc/intent_helper/OWNERS
index 99a8310..aaa0a699 100644
--- a/components/arc/intent_helper/OWNERS
+++ b/components/arc/intent_helper/OWNERS
@@ -1,5 +1,5 @@
 djacobo@chromium.org
 
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=file://components/arc/common/ARC_SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=file://components/arc/mojom/ARC_SECURITY_OWNERS
diff --git a/components/arc/intent_helper/activity_icon_loader.h b/components/arc/intent_helper/activity_icon_loader.h
index 3b07589..b81f91c 100644
--- a/components/arc/intent_helper/activity_icon_loader.h
+++ b/components/arc/intent_helper/activity_icon_loader.h
@@ -15,7 +15,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "ui/base/layout.h"
 #include "ui/gfx/image/image.h"
 #include "url/gurl.h"
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge.h b/components/arc/intent_helper/arc_intent_helper_bridge.h
index 94d7f97..e1be685 100644
--- a/components/arc/intent_helper/arc_intent_helper_bridge.h
+++ b/components/arc/intent_helper/arc_intent_helper_bridge.h
@@ -14,9 +14,9 @@
 #include "base/macros.h"
 #include "base/observer_list.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/activity_icon_loader.h"
 #include "components/arc/intent_helper/arc_intent_helper_observer.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "url/gurl.h"
 
diff --git a/components/arc/intent_helper/arc_intent_helper_bridge_unittest.cc b/components/arc/intent_helper/arc_intent_helper_bridge_unittest.cc
index 18edc66..072e957 100644
--- a/components/arc/intent_helper/arc_intent_helper_bridge_unittest.cc
+++ b/components/arc/intent_helper/arc_intent_helper_bridge_unittest.cc
@@ -8,8 +8,8 @@
 #include <utility>
 
 #include "base/memory/ptr_util.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/open_url_delegate.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/arc/intent_helper/factory_reset_delegate.h b/components/arc/intent_helper/factory_reset_delegate.h
index edddbe3..0ac6151 100644
--- a/components/arc/intent_helper/factory_reset_delegate.h
+++ b/components/arc/intent_helper/factory_reset_delegate.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_ARC_INTENT_HELPER_FACTORY_RESET_DELEGATE_H_
 #define COMPONENTS_ARC_INTENT_HELPER_FACTORY_RESET_DELEGATE_H_
 
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/intent_helper/intent_filter.cc b/components/arc/intent_helper/intent_filter.cc
index d82b8ba..bb4720a 100644
--- a/components/arc/intent_helper/intent_filter.cc
+++ b/components/arc/intent_helper/intent_filter.cc
@@ -8,7 +8,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/strings/string_util.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "url/gurl.h"
 
 namespace arc {
diff --git a/components/arc/intent_helper/intent_filter_struct_traits.cc b/components/arc/intent_helper/intent_filter_mojom_traits.cc
similarity index 78%
rename from components/arc/intent_helper/intent_filter_struct_traits.cc
rename to components/arc/intent_helper/intent_filter_mojom_traits.cc
index 1a33f43..0ae02e7 100644
--- a/components/arc/intent_helper/intent_filter_struct_traits.cc
+++ b/components/arc/intent_helper/intent_filter_mojom_traits.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 "components/arc/intent_helper/intent_filter_struct_traits.h"
+#include "components/arc/intent_helper/intent_filter_mojom_traits.h"
 
 #include <string>
 #include <utility>
@@ -12,9 +12,9 @@
 
 namespace mojo {
 
-bool StructTraits<arc::mojom::IntentFilterDataView, arc::IntentFilter>::
-    Read(arc::mojom::IntentFilterDataView data,
-         arc::IntentFilter* out) {
+bool StructTraits<arc::mojom::IntentFilterDataView, arc::IntentFilter>::Read(
+    arc::mojom::IntentFilterDataView data,
+    arc::IntentFilter* out) {
   std::vector<arc::IntentFilter::AuthorityEntry> authorities;
   if (!data.ReadDataAuthorities(&authorities))
     return false;
@@ -33,7 +33,7 @@
 }
 
 bool StructTraits<arc::mojom::AuthorityEntryDataView,
-                    arc::IntentFilter::AuthorityEntry>::
+                  arc::IntentFilter::AuthorityEntry>::
     Read(arc::mojom::AuthorityEntryDataView data,
          arc::IntentFilter::AuthorityEntry* out) {
   std::string host;
@@ -45,9 +45,9 @@
 }
 
 bool StructTraits<arc::mojom::PatternMatcherDataView,
-                    arc::IntentFilter::PatternMatcher>::
-  Read(arc::mojom::PatternMatcherDataView data,
-                   arc::IntentFilter::PatternMatcher* out) {
+                  arc::IntentFilter::PatternMatcher>::
+    Read(arc::mojom::PatternMatcherDataView data,
+         arc::IntentFilter::PatternMatcher* out) {
   std::string pattern;
   if (!data.ReadPattern(&pattern))
     return false;
diff --git a/components/arc/intent_helper/intent_filter_struct_traits.h b/components/arc/intent_helper/intent_filter_mojom_traits.h
similarity index 90%
rename from components/arc/intent_helper/intent_filter_struct_traits.h
rename to components/arc/intent_helper/intent_filter_mojom_traits.h
index 421001d..7ef52ca 100644
--- a/components/arc/intent_helper/intent_filter_struct_traits.h
+++ b/components/arc/intent_helper/intent_filter_mojom_traits.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_INTENT_HELPER_INTENT_FILTER_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_INTENT_HELPER_INTENT_FILTER_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_INTENT_HELPER_INTENT_FILTER_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_INTENT_HELPER_INTENT_FILTER_MOJOM_TRAITS_H_
 
 #include <string>
 #include <vector>
 
 #include "base/containers/span.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/intent_filter.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 
 namespace mojo {
 
@@ -83,4 +83,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_INTENT_HELPER_INTENT_FILTER_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_INTENT_HELPER_INTENT_FILTER_MOJOM_TRAITS_H_
diff --git a/components/arc/intent_helper/intent_filter_unittest.cc b/components/arc/intent_helper/intent_filter_unittest.cc
index 73a9d3f..0bcc241b 100644
--- a/components/arc/intent_helper/intent_filter_unittest.cc
+++ b/components/arc/intent_helper/intent_filter_unittest.cc
@@ -9,8 +9,8 @@
 
 #include "base/bind.h"
 #include "base/memory/ref_counted.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/intent_filter.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
diff --git a/components/arc/intent_helper/link_handler_model.h b/components/arc/intent_helper/link_handler_model.h
index 3cf7bf3..5c7cc9e 100644
--- a/components/arc/intent_helper/link_handler_model.h
+++ b/components/arc/intent_helper/link_handler_model.h
@@ -11,8 +11,8 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/strings/string16.h"
-#include "components/arc/common/intent_helper.mojom.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 #include "url/gurl.h"
 
 namespace content {
diff --git a/components/arc/intent_helper/open_url_delegate.h b/components/arc/intent_helper/open_url_delegate.h
index 602b62d..b4bc587 100644
--- a/components/arc/intent_helper/open_url_delegate.h
+++ b/components/arc/intent_helper/open_url_delegate.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_ARC_INTENT_HELPER_OPEN_URL_DELEGATE_H_
 #define COMPONENTS_ARC_INTENT_HELPER_OPEN_URL_DELEGATE_H_
 
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 
 class GURL;
 
diff --git a/components/arc/keymaster/arc_keymaster_bridge.h b/components/arc/keymaster/arc_keymaster_bridge.h
index 32833e3f..a5ed47e 100644
--- a/components/arc/keymaster/arc_keymaster_bridge.h
+++ b/components/arc/keymaster/arc_keymaster_bridge.h
@@ -7,7 +7,7 @@
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "components/arc/common/keymaster.mojom.h"
+#include "components/arc/mojom/keymaster.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/lock_screen/arc_lock_screen_bridge.h b/components/arc/lock_screen/arc_lock_screen_bridge.h
index 4274763..9d1c775 100644
--- a/components/arc/lock_screen/arc_lock_screen_bridge.h
+++ b/components/arc/lock_screen/arc_lock_screen_bridge.h
@@ -7,7 +7,7 @@
 
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/lock_screen.mojom.h"
+#include "components/arc/mojom/lock_screen.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/session_manager/core/session_manager_observer.h"
diff --git a/components/arc/media_session/arc_media_session_bridge.h b/components/arc/media_session/arc_media_session_bridge.h
index 9d81768..8cb89bed0 100644
--- a/components/arc/media_session/arc_media_session_bridge.h
+++ b/components/arc/media_session/arc_media_session_bridge.h
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "base/macros.h"
-#include "components/arc/common/media_session.mojom.h"
+#include "components/arc/mojom/media_session.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/components/arc/metrics/arc_metrics_service.h b/components/arc/metrics/arc_metrics_service.h
index ba3a11f7..6333c6d 100644
--- a/components/arc/metrics/arc_metrics_service.h
+++ b/components/arc/metrics/arc_metrics_service.h
@@ -16,8 +16,8 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chromeos/dbus/power/power_manager_client.h"
-#include "components/arc/common/metrics.mojom.h"
-#include "components/arc/common/process.mojom.h"
+#include "components/arc/mojom/metrics.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/session_manager/core/session_manager_observer.h"
diff --git a/components/arc/midis/arc_midis_bridge.h b/components/arc/midis/arc_midis_bridge.h
index 9874336d..f821ebd 100644
--- a/components/arc/midis/arc_midis_bridge.h
+++ b/components/arc/midis/arc_midis_bridge.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/arc/common/midis.mojom.h"
+#include "components/arc/mojom/midis.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/common/ARC_SECURITY_OWNERS b/components/arc/mojom/ARC_SECURITY_OWNERS
similarity index 100%
rename from components/arc/common/ARC_SECURITY_OWNERS
rename to components/arc/mojom/ARC_SECURITY_OWNERS
diff --git a/components/arc/common/BUILD.gn b/components/arc/mojom/BUILD.gn
similarity index 94%
rename from components/arc/common/BUILD.gn
rename to components/arc/mojom/BUILD.gn
index f09ab1d..9b89c58 100644
--- a/components/arc/common/BUILD.gn
+++ b/components/arc/mojom/BUILD.gn
@@ -9,7 +9,7 @@
 # inclusion is done through read_file(), which does not respect the global
 # defines for GN, so it itself cannot use the "is_chromeos" variable.
 if (is_chromeos) {
-  mojom("common") {
+  mojom("mojom") {
     sources = [
       "accessibility_helper.mojom",
       "app.mojom",
@@ -110,13 +110,13 @@
     ]
   }
 
-  source_set("struct_traits") {
+  source_set("mojom_traits") {
     sources = [
-      "ime_struct_traits.h",
+      "ime_mojom_traits.h",
     ]
 
     deps = [
-      ":common",
+      ":mojom",
       "//ui/base/ime:text_input_types",
     ]
   }
@@ -124,11 +124,11 @@
   source_set("unit_tests") {
     testonly = true
     sources = [
-      "video_accelerator_struct_traits_unittest.cc",
+      "video_accelerator_mojom_traits_unittest.cc",
     ]
 
     deps = [
-      ":common",
+      ":mojom",
       "//media",
       "//mojo/public/cpp/test_support:test_utils",
       "//testing/gtest",
diff --git a/media/mojo/interfaces/OWNERS b/components/arc/mojom/OWNERS
similarity index 63%
copy from media/mojo/interfaces/OWNERS
copy to components/arc/mojom/OWNERS
index 8e9e507b..33e669b2 100644
--- a/media/mojo/interfaces/OWNERS
+++ b/components/arc/mojom/OWNERS
@@ -1,8 +1,11 @@
 per-file *.mojom=set noparent
 per-file *.mojom=file://ipc/SECURITY_OWNERS
-per-file *_mojom_traits*.*=set noparent
-per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *.mojom=file:ARC_SECURITY_OWNERS
+
 per-file *.typemap=set noparent
 per-file *.typemap=file://ipc/SECURITY_OWNERS
+per-file *.typemap=file:ARC_SECURITY_OWNERS
+
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=file:ARC_SECURITY_OWNERS
diff --git a/components/arc/common/accessibility_helper.mojom b/components/arc/mojom/accessibility_helper.mojom
similarity index 99%
rename from components/arc/common/accessibility_helper.mojom
rename to components/arc/mojom/accessibility_helper.mojom
index 9aecc76..f676fb7 100644
--- a/components/arc/common/accessibility_helper.mojom
+++ b/components/arc/mojom/accessibility_helper.mojom
@@ -6,7 +6,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/gfx.mojom";
+import "components/arc/mojom/gfx.mojom";
 
 // For future maintainers, each of the below enums were hand picked
 // from their equivalents in the Android source. Keep them in the
diff --git a/components/arc/common/app.mojom b/components/arc/mojom/app.mojom
similarity index 98%
rename from components/arc/common/app.mojom
rename to components/arc/mojom/app.mojom
index 8513efb..ba6af79 100644
--- a/components/arc/common/app.mojom
+++ b/components/arc/mojom/app.mojom
@@ -6,9 +6,9 @@
 
 module arc.mojom;
 
-import "components/arc/common/app_permissions.mojom";
-import "components/arc/common/gfx.mojom";
-import "components/arc/common/scale_factor.mojom";
+import "components/arc/mojom/app_permissions.mojom";
+import "components/arc/mojom/gfx.mojom";
+import "components/arc/mojom/scale_factor.mojom";
 import "ui/accessibility/mojom/ax_assistant_structure.mojom";
 
 // Describes installation result.
diff --git a/components/arc/common/app.typemap b/components/arc/mojom/app.typemap
similarity index 61%
rename from components/arc/common/app.typemap
rename to components/arc/mojom/app.typemap
index a6f3cfb..fa4a503 100644
--- a/components/arc/common/app.typemap
+++ b/components/arc/mojom/app.typemap
@@ -1,5 +1,5 @@
-mojom = "//components/arc/common/app.mojom"
+mojom = "//components/arc/mojom/app.mojom"
 public_headers = [ "//components/arc/app/arc_playstore_search_request_state.h" ]
-traits_headers = [ "//components/arc/common/app_struct_traits.h" ]
+traits_headers = [ "//components/arc/mojom/app_mojom_traits.h" ]
 type_mappings =
     [ "arc.mojom.AppDiscoveryRequestState=arc::ArcPlayStoreSearchRequestState" ]
diff --git a/components/arc/common/app_struct_traits.h b/components/arc/mojom/app_mojom_traits.h
similarity index 95%
rename from components/arc/common/app_struct_traits.h
rename to components/arc/mojom/app_mojom_traits.h
index 43e587de..cfa23d0 100644
--- a/components/arc/common/app_struct_traits.h
+++ b/components/arc/mojom/app_mojom_traits.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_COMMON_APP_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_COMMON_APP_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_MOJOM_APP_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_MOJOM_APP_MOJOM_TRAITS_H_
 
 #include "components/arc/app/arc_playstore_search_request_state.h"
-#include "components/arc/common/app.mojom-shared.h"
+#include "components/arc/mojom/app.mojom-shared.h"
 
 namespace mojo {
 
@@ -122,4 +122,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_COMMON_APP_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_MOJOM_APP_MOJOM_TRAITS_H_
diff --git a/components/arc/common/app_permissions.mojom b/components/arc/mojom/app_permissions.mojom
similarity index 100%
rename from components/arc/common/app_permissions.mojom
rename to components/arc/mojom/app_permissions.mojom
diff --git a/components/arc/common/appfuse.mojom b/components/arc/mojom/appfuse.mojom
similarity index 100%
rename from components/arc/common/appfuse.mojom
rename to components/arc/mojom/appfuse.mojom
diff --git a/components/arc/common/arc_bridge.mojom b/components/arc/mojom/arc_bridge.mojom
similarity index 76%
rename from components/arc/common/arc_bridge.mojom
rename to components/arc/mojom/arc_bridge.mojom
index 491cdc2..c0a6a2d 100644
--- a/components/arc/common/arc_bridge.mojom
+++ b/components/arc/mojom/arc_bridge.mojom
@@ -4,56 +4,56 @@
 
 module arc.mojom;
 
-import "components/arc/common/accessibility_helper.mojom";
-import "components/arc/common/app.mojom";
-import "components/arc/common/app_permissions.mojom";
-import "components/arc/common/appfuse.mojom";
-import "components/arc/common/audio.mojom";
-import "components/arc/common/auth.mojom";
-import "components/arc/common/backup_settings.mojom";
-import "components/arc/common/bluetooth.mojom";
-import "components/arc/common/boot_phase_monitor.mojom";
-import "components/arc/common/camera.mojom";
-import "components/arc/common/cast_receiver.mojom";
-import "components/arc/common/cert_store.mojom";
-import "components/arc/common/clipboard.mojom";
-import "components/arc/common/crash_collector.mojom";
-import "components/arc/common/disk_quota.mojom";
-import "components/arc/common/enterprise_reporting.mojom";
-import "components/arc/common/file_system.mojom";
-import "components/arc/common/ime.mojom";
-import "components/arc/common/input_method_manager.mojom";
-import "components/arc/common/intent_helper.mojom";
-import "components/arc/common/keymaster.mojom";
-import "components/arc/common/kiosk.mojom";
-import "components/arc/common/lock_screen.mojom";
-import "components/arc/common/media_session.mojom";
-import "components/arc/common/metrics.mojom";
-import "components/arc/common/midis.mojom";
-import "components/arc/common/net.mojom";
-import "components/arc/common/notifications.mojom";
-import "components/arc/common/obb_mounter.mojom";
-import "components/arc/common/oemcrypto.mojom";
-import "components/arc/common/pip.mojom";
-import "components/arc/common/policy.mojom";
-import "components/arc/common/power.mojom";
-import "components/arc/common/print.mojom";
-import "components/arc/common/print_spooler.mojom";
-import "components/arc/common/process.mojom";
-import "components/arc/common/property.mojom";
-import "components/arc/common/rotation_lock.mojom";
-import "components/arc/common/screen_capture.mojom";
-import "components/arc/common/storage_manager.mojom";
-import "components/arc/common/timer.mojom";
-import "components/arc/common/tracing.mojom";
-import "components/arc/common/tts.mojom";
-import "components/arc/common/usb_host.mojom";
-import "components/arc/common/video.mojom";
-import "components/arc/common/voice_interaction_arc_home.mojom";
-import "components/arc/common/voice_interaction_framework.mojom";
-import "components/arc/common/volume_mounter.mojom";
-import "components/arc/common/wake_lock.mojom";
-import "components/arc/common/wallpaper.mojom";
+import "components/arc/mojom/accessibility_helper.mojom";
+import "components/arc/mojom/app.mojom";
+import "components/arc/mojom/app_permissions.mojom";
+import "components/arc/mojom/appfuse.mojom";
+import "components/arc/mojom/audio.mojom";
+import "components/arc/mojom/auth.mojom";
+import "components/arc/mojom/backup_settings.mojom";
+import "components/arc/mojom/bluetooth.mojom";
+import "components/arc/mojom/boot_phase_monitor.mojom";
+import "components/arc/mojom/camera.mojom";
+import "components/arc/mojom/cast_receiver.mojom";
+import "components/arc/mojom/cert_store.mojom";
+import "components/arc/mojom/clipboard.mojom";
+import "components/arc/mojom/crash_collector.mojom";
+import "components/arc/mojom/disk_quota.mojom";
+import "components/arc/mojom/enterprise_reporting.mojom";
+import "components/arc/mojom/file_system.mojom";
+import "components/arc/mojom/ime.mojom";
+import "components/arc/mojom/input_method_manager.mojom";
+import "components/arc/mojom/intent_helper.mojom";
+import "components/arc/mojom/keymaster.mojom";
+import "components/arc/mojom/kiosk.mojom";
+import "components/arc/mojom/lock_screen.mojom";
+import "components/arc/mojom/media_session.mojom";
+import "components/arc/mojom/metrics.mojom";
+import "components/arc/mojom/midis.mojom";
+import "components/arc/mojom/net.mojom";
+import "components/arc/mojom/notifications.mojom";
+import "components/arc/mojom/obb_mounter.mojom";
+import "components/arc/mojom/oemcrypto.mojom";
+import "components/arc/mojom/pip.mojom";
+import "components/arc/mojom/policy.mojom";
+import "components/arc/mojom/power.mojom";
+import "components/arc/mojom/print.mojom";
+import "components/arc/mojom/print_spooler.mojom";
+import "components/arc/mojom/process.mojom";
+import "components/arc/mojom/property.mojom";
+import "components/arc/mojom/rotation_lock.mojom";
+import "components/arc/mojom/screen_capture.mojom";
+import "components/arc/mojom/storage_manager.mojom";
+import "components/arc/mojom/timer.mojom";
+import "components/arc/mojom/tracing.mojom";
+import "components/arc/mojom/tts.mojom";
+import "components/arc/mojom/usb_host.mojom";
+import "components/arc/mojom/video.mojom";
+import "components/arc/mojom/voice_interaction_arc_home.mojom";
+import "components/arc/mojom/voice_interaction_framework.mojom";
+import "components/arc/mojom/volume_mounter.mojom";
+import "components/arc/mojom/wake_lock.mojom";
+import "components/arc/mojom/wallpaper.mojom";
 
 // Next MinVersion: 48
 // Deprecated method IDs: 101, 105
diff --git a/components/arc/common/arc_gfx_struct_traits.cc b/components/arc/mojom/arc_gfx_mojom_traits.cc
similarity index 92%
rename from components/arc/common/arc_gfx_struct_traits.cc
rename to components/arc/mojom/arc_gfx_mojom_traits.cc
index 20858df11..c56397edb 100644
--- a/components/arc/common/arc_gfx_struct_traits.cc
+++ b/components/arc/mojom/arc_gfx_mojom_traits.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 "components/arc/common/arc_gfx_struct_traits.h"
+#include "components/arc/mojom/arc_gfx_mojom_traits.h"
 
 namespace mojo {
 
diff --git a/components/arc/common/arc_gfx_struct_traits.h b/components/arc/mojom/arc_gfx_mojom_traits.h
similarity index 81%
rename from components/arc/common/arc_gfx_struct_traits.h
rename to components/arc/mojom/arc_gfx_mojom_traits.h
index 02c4edf9..82d4209 100644
--- a/components/arc/common/arc_gfx_struct_traits.h
+++ b/components/arc/mojom/arc_gfx_mojom_traits.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_COMMON_ARC_GFX_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_COMMON_ARC_GFX_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_MOJOM_ARC_GFX_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_MOJOM_ARC_GFX_MOJOM_TRAITS_H_
 
-#include "components/arc/common/gfx.mojom.h"
+#include "components/arc/mojom/gfx.mojom.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/range/range.h"
 
@@ -31,4 +31,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_COMMON_ARC_GFX_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_MOJOM_ARC_GFX_MOJOM_TRAITS_H_
diff --git a/components/arc/common/audio.mojom b/components/arc/mojom/audio.mojom
similarity index 100%
rename from components/arc/common/audio.mojom
rename to components/arc/mojom/audio.mojom
diff --git a/components/arc/common/auth.mojom b/components/arc/mojom/auth.mojom
similarity index 100%
rename from components/arc/common/auth.mojom
rename to components/arc/mojom/auth.mojom
diff --git a/components/arc/common/backup_settings.mojom b/components/arc/mojom/backup_settings.mojom
similarity index 100%
rename from components/arc/common/backup_settings.mojom
rename to components/arc/mojom/backup_settings.mojom
diff --git a/components/arc/common/bitmap.mojom b/components/arc/mojom/bitmap.mojom
similarity index 100%
rename from components/arc/common/bitmap.mojom
rename to components/arc/mojom/bitmap.mojom
diff --git a/components/arc/mojom/bitmap.typemap b/components/arc/mojom/bitmap.typemap
new file mode 100644
index 0000000..c5c63f0
--- /dev/null
+++ b/components/arc/mojom/bitmap.typemap
@@ -0,0 +1,13 @@
+mojom = "//components/arc/mojom/bitmap.mojom"
+public_headers = [ "//third_party/skia/include/core/SkBitmap.h" ]
+traits_headers = [ "//components/arc/bitmap/bitmap_mojom_traits.h" ]
+sources = [
+  "//components/arc/bitmap/bitmap_mojom_traits.cc",
+]
+deps = [
+  "//skia",
+]
+public_deps = [
+  "//skia",
+]
+type_mappings = [ "arc.mojom.ArcBitmap=SkBitmap" ]
diff --git a/components/arc/common/bluetooth.mojom b/components/arc/mojom/bluetooth.mojom
similarity index 100%
rename from components/arc/common/bluetooth.mojom
rename to components/arc/mojom/bluetooth.mojom
diff --git a/components/arc/common/bluetooth.typemap b/components/arc/mojom/bluetooth.typemap
similarity index 77%
rename from components/arc/common/bluetooth.typemap
rename to components/arc/mojom/bluetooth.typemap
index d620ccc..0b8c022 100644
--- a/components/arc/common/bluetooth.typemap
+++ b/components/arc/mojom/bluetooth.typemap
@@ -1,13 +1,13 @@
-mojom = "//components/arc/common/bluetooth.mojom"
+mojom = "//components/arc/mojom/bluetooth.mojom"
 public_headers = [
   "//device/bluetooth/bluetooth_advertisement.h",
   "//device/bluetooth/bluetooth_common.h",
   "//device/bluetooth/public/cpp/bluetooth_uuid.h",
   "//device/bluetooth/bluez/bluetooth_service_attribute_value_bluez.h",
 ]
-traits_headers = [ "//components/arc/bluetooth/bluetooth_struct_traits.h" ]
+traits_headers = [ "//components/arc/bluetooth/bluetooth_mojom_traits.h" ]
 sources = [
-  "//components/arc/bluetooth/bluetooth_struct_traits.cc",
+  "//components/arc/bluetooth/bluetooth_mojom_traits.cc",
 ]
 deps = [
   "//device/bluetooth",
diff --git a/components/arc/common/boot_phase_monitor.mojom b/components/arc/mojom/boot_phase_monitor.mojom
similarity index 100%
rename from components/arc/common/boot_phase_monitor.mojom
rename to components/arc/mojom/boot_phase_monitor.mojom
diff --git a/components/arc/common/camera.mojom b/components/arc/mojom/camera.mojom
similarity index 100%
rename from components/arc/common/camera.mojom
rename to components/arc/mojom/camera.mojom
diff --git a/components/arc/common/cast_receiver.mojom b/components/arc/mojom/cast_receiver.mojom
similarity index 100%
rename from components/arc/common/cast_receiver.mojom
rename to components/arc/mojom/cast_receiver.mojom
diff --git a/components/arc/common/cert_store.mojom b/components/arc/mojom/cert_store.mojom
similarity index 100%
rename from components/arc/common/cert_store.mojom
rename to components/arc/mojom/cert_store.mojom
diff --git a/components/arc/common/clipboard.mojom b/components/arc/mojom/clipboard.mojom
similarity index 100%
rename from components/arc/common/clipboard.mojom
rename to components/arc/mojom/clipboard.mojom
diff --git a/components/arc/common/crash_collector.mojom b/components/arc/mojom/crash_collector.mojom
similarity index 100%
rename from components/arc/common/crash_collector.mojom
rename to components/arc/mojom/crash_collector.mojom
diff --git a/components/arc/common/disk_quota.mojom b/components/arc/mojom/disk_quota.mojom
similarity index 100%
rename from components/arc/common/disk_quota.mojom
rename to components/arc/mojom/disk_quota.mojom
diff --git a/components/arc/common/enterprise_reporting.mojom b/components/arc/mojom/enterprise_reporting.mojom
similarity index 100%
rename from components/arc/common/enterprise_reporting.mojom
rename to components/arc/mojom/enterprise_reporting.mojom
diff --git a/components/arc/common/file_system.mojom b/components/arc/mojom/file_system.mojom
similarity index 99%
rename from components/arc/common/file_system.mojom
rename to components/arc/mojom/file_system.mojom
index 8b237704..16f0b9a 100644
--- a/components/arc/common/file_system.mojom
+++ b/components/arc/mojom/file_system.mojom
@@ -6,8 +6,8 @@
 
 module arc.mojom;
 
-import "components/arc/common/bitmap.mojom";
-import "components/arc/common/intent_common.mojom";
+import "components/arc/mojom/bitmap.mojom";
+import "components/arc/mojom/intent_common.mojom";
 import "url/mojom/url.mojom";
 
 // Represents a document in Android DocumentsProvider.
diff --git a/components/arc/common/file_system.typemap b/components/arc/mojom/file_system.typemap
similarity index 65%
rename from components/arc/common/file_system.typemap
rename to components/arc/mojom/file_system.typemap
index e21e8490..b11a1f4 100644
--- a/components/arc/common/file_system.typemap
+++ b/components/arc/mojom/file_system.typemap
@@ -2,13 +2,13 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//components/arc/common/file_system.mojom"
+mojom = "//components/arc/mojom/file_system.mojom"
 public_headers = [ "//storage/browser/fileapi/watcher_manager.h" ]
 public_deps = [
   "//storage/browser",
 ]
-traits_headers = [ "//components/arc/file_system/file_system_struct_traits.h" ]
+traits_headers = [ "//components/arc/file_system/file_system_mojom_traits.h" ]
 sources = [
-  "//components/arc/file_system/file_system_struct_traits.cc",
+  "//components/arc/file_system/file_system_mojom_traits.cc",
 ]
 type_mappings = [ "arc.mojom.ChangeType=storage::WatcherManager::ChangeType" ]
diff --git a/components/arc/common/gfx.mojom b/components/arc/mojom/gfx.mojom
similarity index 100%
rename from components/arc/common/gfx.mojom
rename to components/arc/mojom/gfx.mojom
diff --git a/components/arc/common/gfx.typemap b/components/arc/mojom/gfx.typemap
similarity index 68%
rename from components/arc/common/gfx.typemap
rename to components/arc/mojom/gfx.typemap
index be462bc..48ba64a 100644
--- a/components/arc/common/gfx.typemap
+++ b/components/arc/mojom/gfx.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//components/arc/common/gfx.mojom"
+mojom = "//components/arc/mojom/gfx.mojom"
 
 public_headers = [
   "//ui/gfx/geometry/rect.h",
@@ -13,10 +13,10 @@
   "//ui/gfx",
 ]
 
-traits_headers = [ "//components/arc/common/arc_gfx_struct_traits.h" ]
+traits_headers = [ "//components/arc/mojom/arc_gfx_mojom_traits.h" ]
 
 sources = [
-  "//components/arc/common/arc_gfx_struct_traits.cc",
+  "//components/arc/mojom/arc_gfx_mojom_traits.cc",
 ]
 
 type_mappings = [
diff --git a/components/arc/common/ime.mojom b/components/arc/mojom/ime.mojom
similarity index 98%
rename from components/arc/common/ime.mojom
rename to components/arc/mojom/ime.mojom
index 3e10330..14b3831 100644
--- a/components/arc/common/ime.mojom
+++ b/components/arc/mojom/ime.mojom
@@ -6,7 +6,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/gfx.mojom";
+import "components/arc/mojom/gfx.mojom";
 
 // Represents the type of text input field currently focused.
 [Extensible]
diff --git a/components/arc/mojom/ime.typemap b/components/arc/mojom/ime.typemap
new file mode 100644
index 0000000..1d859660
--- /dev/null
+++ b/components/arc/mojom/ime.typemap
@@ -0,0 +1,4 @@
+mojom = "//components/arc/mojom/ime.mojom"
+public_headers = [ "//ui/base/ime/text_input_type.h" ]
+traits_headers = [ "//components/arc/mojom/ime_mojom_traits.h" ]
+type_mappings = [ "arc.mojom.TextInputType=ui::TextInputType" ]
diff --git a/components/arc/common/ime_struct_traits.h b/components/arc/mojom/ime_mojom_traits.h
similarity index 93%
rename from components/arc/common/ime_struct_traits.h
rename to components/arc/mojom/ime_mojom_traits.h
index c366cff..c795683 100644
--- a/components/arc/common/ime_struct_traits.h
+++ b/components/arc/mojom/ime_mojom_traits.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_COMMON_IME_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_COMMON_IME_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_MOJOM_IME_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_MOJOM_IME_MOJOM_TRAITS_H_
 
-#include "components/arc/common/ime.mojom-shared.h"
+#include "components/arc/mojom/ime.mojom-shared.h"
 #include "ui/base/ime/text_input_type.h"
 
 namespace mojo {
@@ -107,4 +107,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_COMMON_IME_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_MOJOM_IME_MOJOM_TRAITS_H_
diff --git a/components/arc/common/input_method_manager.mojom b/components/arc/mojom/input_method_manager.mojom
similarity index 98%
rename from components/arc/common/input_method_manager.mojom
rename to components/arc/mojom/input_method_manager.mojom
index c5c0b93..c8e3dcd 100644
--- a/components/arc/common/input_method_manager.mojom
+++ b/components/arc/mojom/input_method_manager.mojom
@@ -7,8 +7,8 @@
 module arc.mojom;
 
 import "mojo/public/mojom/base/string16.mojom";
-import "components/arc/common/gfx.mojom";
-import "components/arc/common/ime.mojom";
+import "components/arc/mojom/gfx.mojom";
+import "components/arc/mojom/ime.mojom";
 
 // Represents the information of an Android IME.
 struct ImeInfo {
diff --git a/components/arc/common/intent_common.mojom b/components/arc/mojom/intent_common.mojom
similarity index 100%
rename from components/arc/common/intent_common.mojom
rename to components/arc/mojom/intent_common.mojom
diff --git a/components/arc/common/intent_helper.mojom b/components/arc/mojom/intent_helper.mojom
similarity index 98%
rename from components/arc/common/intent_helper.mojom
rename to components/arc/mojom/intent_helper.mojom
index ab63854..acf15f73 100644
--- a/components/arc/common/intent_helper.mojom
+++ b/components/arc/mojom/intent_helper.mojom
@@ -6,9 +6,9 @@
 
 module arc.mojom;
 
-import "components/arc/common/bitmap.mojom";
-import "components/arc/common/intent_common.mojom";
-import "components/arc/common/scale_factor.mojom";
+import "components/arc/mojom/bitmap.mojom";
+import "components/arc/mojom/intent_common.mojom";
+import "components/arc/mojom/scale_factor.mojom";
 
 [Extensible]
 enum PatternType {
diff --git a/components/arc/common/intent_helper.typemap b/components/arc/mojom/intent_helper.typemap
similarity index 72%
rename from components/arc/common/intent_helper.typemap
rename to components/arc/mojom/intent_helper.typemap
index 5b1a17ce..3a774f35 100644
--- a/components/arc/common/intent_helper.typemap
+++ b/components/arc/mojom/intent_helper.typemap
@@ -2,12 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//components/arc/common/intent_helper.mojom"
+mojom = "//components/arc/mojom/intent_helper.mojom"
 public_headers = [ "//components/arc/intent_helper/intent_filter.h" ]
 traits_headers =
-    [ "//components/arc/intent_helper/intent_filter_struct_traits.h" ]
+    [ "//components/arc/intent_helper/intent_filter_mojom_traits.h" ]
 sources = [
-  "//components/arc/intent_helper/intent_filter_struct_traits.cc",
+  "//components/arc/intent_helper/intent_filter_mojom_traits.cc",
 ]
 type_mappings = [
   "arc.mojom.IntentFilter=::arc::IntentFilter[move_only]",
diff --git a/components/arc/common/keymaster.mojom b/components/arc/mojom/keymaster.mojom
similarity index 100%
rename from components/arc/common/keymaster.mojom
rename to components/arc/mojom/keymaster.mojom
diff --git a/components/arc/common/kiosk.mojom b/components/arc/mojom/kiosk.mojom
similarity index 100%
rename from components/arc/common/kiosk.mojom
rename to components/arc/mojom/kiosk.mojom
diff --git a/components/arc/common/lock_screen.mojom b/components/arc/mojom/lock_screen.mojom
similarity index 100%
rename from components/arc/common/lock_screen.mojom
rename to components/arc/mojom/lock_screen.mojom
diff --git a/components/arc/common/media_session.mojom b/components/arc/mojom/media_session.mojom
similarity index 100%
rename from components/arc/common/media_session.mojom
rename to components/arc/mojom/media_session.mojom
diff --git a/components/arc/common/metrics.mojom b/components/arc/mojom/metrics.mojom
similarity index 100%
rename from components/arc/common/metrics.mojom
rename to components/arc/mojom/metrics.mojom
diff --git a/components/arc/common/midis.mojom b/components/arc/mojom/midis.mojom
similarity index 100%
rename from components/arc/common/midis.mojom
rename to components/arc/mojom/midis.mojom
diff --git a/components/arc/common/net.mojom b/components/arc/mojom/net.mojom
similarity index 100%
rename from components/arc/common/net.mojom
rename to components/arc/mojom/net.mojom
diff --git a/components/arc/common/notifications.mojom b/components/arc/mojom/notifications.mojom
similarity index 98%
rename from components/arc/common/notifications.mojom
rename to components/arc/mojom/notifications.mojom
index 85f6ee8..a208c0b4 100644
--- a/components/arc/common/notifications.mojom
+++ b/components/arc/mojom/notifications.mojom
@@ -6,8 +6,8 @@
 
 module arc.mojom;
 
-import "components/arc/common/bitmap.mojom";
-import "components/arc/common/gfx.mojom";
+import "components/arc/mojom/bitmap.mojom";
+import "components/arc/mojom/gfx.mojom";
 
 // These values must be matched with the NOTIFICATION_EVENT_* constants in
 // com.android.server.ArcNotificationListenerService.
diff --git a/components/arc/common/obb_mounter.mojom b/components/arc/mojom/obb_mounter.mojom
similarity index 100%
rename from components/arc/common/obb_mounter.mojom
rename to components/arc/mojom/obb_mounter.mojom
diff --git a/components/arc/common/oemcrypto.mojom b/components/arc/mojom/oemcrypto.mojom
similarity index 99%
rename from components/arc/common/oemcrypto.mojom
rename to components/arc/mojom/oemcrypto.mojom
index 21db429..2c4b747 100644
--- a/components/arc/common/oemcrypto.mojom
+++ b/components/arc/mojom/oemcrypto.mojom
@@ -5,7 +5,7 @@
 // Next MinVersion: 3
 
 // The original version of this file lives in the Chromium repository at:
-// src/components/arc/common/oemcrypto.mojom
+// src/components/arc/mojom/oemcrypto.mojom
 
 // This file defines the mojo interface between Android, Chrome and the
 // Chrome OS daemon for the Widevine L1 OEMCrypto implementation used in ARC++.
diff --git a/components/arc/common/oemcrypto_daemon.mojom b/components/arc/mojom/oemcrypto_daemon.mojom
similarity index 85%
rename from components/arc/common/oemcrypto_daemon.mojom
rename to components/arc/mojom/oemcrypto_daemon.mojom
index 887c175..a7128c91 100644
--- a/components/arc/common/oemcrypto_daemon.mojom
+++ b/components/arc/mojom/oemcrypto_daemon.mojom
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // The original version of this file lives in the Chromium repository at:
-// src/components/arc/common/oemcrypto_daemon.mojom
+// src/components/arc/mojom/oemcrypto_daemon.mojom
 
 // This file defines the mojo interface used between Chrome and the Chrome OS
 // daemon for establishing the connection from Android to the Chrome OS
@@ -13,8 +13,8 @@
 
 module arc_oemcrypto.mojom;
 
-import "components/arc/common/oemcrypto.mojom";
-import "components/arc/common/protected_buffer_manager.mojom";
+import "components/arc/mojom/oemcrypto.mojom";
+import "components/arc/mojom/protected_buffer_manager.mojom";
 
 // OemCryptoHostDaemon is implemented by the OemCrypto daemon running in
 // Chrome OS and has Connect called from the Browser process in Chrome.
diff --git a/components/arc/common/pip.mojom b/components/arc/mojom/pip.mojom
similarity index 100%
rename from components/arc/common/pip.mojom
rename to components/arc/mojom/pip.mojom
diff --git a/components/arc/common/policy.mojom b/components/arc/mojom/policy.mojom
similarity index 100%
rename from components/arc/common/policy.mojom
rename to components/arc/mojom/policy.mojom
diff --git a/components/arc/common/power.mojom b/components/arc/mojom/power.mojom
similarity index 100%
rename from components/arc/common/power.mojom
rename to components/arc/mojom/power.mojom
diff --git a/components/arc/common/print.mojom b/components/arc/mojom/print.mojom
similarity index 97%
rename from components/arc/common/print.mojom
rename to components/arc/mojom/print.mojom
index 42597d5..c7eb2e7 100644
--- a/components/arc/common/print.mojom
+++ b/components/arc/mojom/print.mojom
@@ -6,7 +6,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/print_common.mojom";
+import "components/arc/mojom/print_common.mojom";
 
 // android.printservice.PrinterDiscoverySession implementation.
 // This is called by container when printing is requested and printer discovery
diff --git a/components/arc/common/print.typemap b/components/arc/mojom/print.typemap
similarity index 90%
rename from components/arc/common/print.typemap
rename to components/arc/mojom/print.typemap
index 3c96575..e2b158e 100644
--- a/components/arc/common/print.typemap
+++ b/components/arc/mojom/print.typemap
@@ -1,4 +1,4 @@
-mojom = "//components/arc/common/print_common.mojom"
+mojom = "//components/arc/mojom/print_common.mojom"
 public_headers = [
   "//printing/backend/print_backend.h",
   "//printing/page_range.h",
diff --git a/components/arc/common/print_common.mojom b/components/arc/mojom/print_common.mojom
similarity index 100%
rename from components/arc/common/print_common.mojom
rename to components/arc/mojom/print_common.mojom
diff --git a/components/arc/common/print_spooler.mojom b/components/arc/mojom/print_spooler.mojom
similarity index 90%
rename from components/arc/common/print_spooler.mojom
rename to components/arc/mojom/print_spooler.mojom
index 21d7e1fd..21c5b544 100644
--- a/components/arc/common/print_spooler.mojom
+++ b/components/arc/mojom/print_spooler.mojom
@@ -6,7 +6,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/print_common.mojom";
+import "components/arc/mojom/print_common.mojom";
 
 // Next method ID: 0
 interface PrintSpoolerHost {
diff --git a/components/arc/common/process.mojom b/components/arc/mojom/process.mojom
similarity index 100%
rename from components/arc/common/process.mojom
rename to components/arc/mojom/process.mojom
diff --git a/components/arc/common/property.mojom b/components/arc/mojom/property.mojom
similarity index 100%
rename from components/arc/common/property.mojom
rename to components/arc/mojom/property.mojom
diff --git a/components/arc/common/protected_buffer_manager.mojom b/components/arc/mojom/protected_buffer_manager.mojom
similarity index 93%
rename from components/arc/common/protected_buffer_manager.mojom
rename to components/arc/mojom/protected_buffer_manager.mojom
index 298f6d3..633bab84 100644
--- a/components/arc/common/protected_buffer_manager.mojom
+++ b/components/arc/mojom/protected_buffer_manager.mojom
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // The original version of this file lives in the Chromium repository at:
-// src/components/arc/common/protected_buffer_manager.mojom
+// src/components/arc/mojom/protected_buffer_manager.mojom
 
 module arc.mojom;
 
diff --git a/components/arc/common/rotation_lock.mojom b/components/arc/mojom/rotation_lock.mojom
similarity index 100%
rename from components/arc/common/rotation_lock.mojom
rename to components/arc/mojom/rotation_lock.mojom
diff --git a/components/arc/common/scale_factor.mojom b/components/arc/mojom/scale_factor.mojom
similarity index 100%
rename from components/arc/common/scale_factor.mojom
rename to components/arc/mojom/scale_factor.mojom
diff --git a/components/arc/common/screen_capture.mojom b/components/arc/mojom/screen_capture.mojom
similarity index 96%
rename from components/arc/common/screen_capture.mojom
rename to components/arc/mojom/screen_capture.mojom
index 8a3bc85..960012c 100644
--- a/components/arc/common/screen_capture.mojom
+++ b/components/arc/mojom/screen_capture.mojom
@@ -8,14 +8,14 @@
 // permissions to capture the entire desktop and then also perform that capture.
 
 // The original version of this file lives in the Chromium repository at:
-// src/components/arc/common/screen_capture.mojom
+// src/components/arc/mojom/screen_capture.mojom
 
 // Next MinVersion: 2
 
 module arc.mojom;
 
 // For gfx::Size.
-import "components/arc/common/video_common.mojom";
+import "components/arc/mojom/video_common.mojom";
 
 // Implemented by Chrome in order to allow requesting of permissions to perform
 // desktop capture as well as creating a session for it.
diff --git a/components/arc/common/storage_manager.mojom b/components/arc/mojom/storage_manager.mojom
similarity index 100%
rename from components/arc/common/storage_manager.mojom
rename to components/arc/mojom/storage_manager.mojom
diff --git a/components/arc/common/timer.mojom b/components/arc/mojom/timer.mojom
similarity index 100%
rename from components/arc/common/timer.mojom
rename to components/arc/mojom/timer.mojom
diff --git a/components/arc/mojom/timer.typemap b/components/arc/mojom/timer.typemap
new file mode 100644
index 0000000..93ba04b
--- /dev/null
+++ b/components/arc/mojom/timer.typemap
@@ -0,0 +1,10 @@
+# Copyright 2018 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.
+
+mojom = "//components/arc/mojom/timer.mojom"
+traits_headers = [ "//components/arc/timer/arc_timer_mojom_traits.h" ]
+sources = [
+  "//components/arc/timer/arc_timer_mojom_traits.cc",
+]
+type_mappings = [ "arc.mojom.ClockId=clockid_t" ]
diff --git a/components/arc/common/tracing.mojom b/components/arc/mojom/tracing.mojom
similarity index 100%
rename from components/arc/common/tracing.mojom
rename to components/arc/mojom/tracing.mojom
diff --git a/components/arc/common/tts.mojom b/components/arc/mojom/tts.mojom
similarity index 100%
rename from components/arc/common/tts.mojom
rename to components/arc/mojom/tts.mojom
diff --git a/components/arc/mojom/typemaps.gni b/components/arc/mojom/typemaps.gni
new file mode 100644
index 0000000..6b29532
--- /dev/null
+++ b/components/arc/mojom/typemaps.gni
@@ -0,0 +1,18 @@
+# Copyright 2016 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.
+
+typemaps = [
+  "//components/arc/mojom/app.typemap",
+  "//components/arc/mojom/bitmap.typemap",
+  "//components/arc/mojom/bluetooth.typemap",
+  "//components/arc/mojom/file_system.typemap",
+  "//components/arc/mojom/gfx.typemap",
+  "//components/arc/mojom/ime.typemap",
+  "//components/arc/mojom/intent_helper.typemap",
+  "//components/arc/mojom/print.typemap",
+  "//components/arc/mojom/timer.typemap",
+  "//components/arc/mojom/video_common.typemap",
+  "//components/arc/mojom/video_encode_accelerator.typemap",
+  "//components/arc/mojom/volume_mounter.typemap",
+]
diff --git a/components/arc/common/usb_host.mojom b/components/arc/mojom/usb_host.mojom
similarity index 100%
rename from components/arc/common/usb_host.mojom
rename to components/arc/mojom/usb_host.mojom
diff --git a/components/arc/common/video.mojom b/components/arc/mojom/video.mojom
similarity index 86%
rename from components/arc/common/video.mojom
rename to components/arc/mojom/video.mojom
index acc40a4..22f2558 100644
--- a/components/arc/common/video.mojom
+++ b/components/arc/mojom/video.mojom
@@ -6,9 +6,9 @@
 
 module arc.mojom;
 
-import "components/arc/common/video_decode_accelerator.mojom";
-import "components/arc/common/video_encode_accelerator.mojom";
-import "components/arc/common/video_protected_buffer_allocator.mojom";
+import "components/arc/mojom/video_decode_accelerator.mojom";
+import "components/arc/mojom/video_encode_accelerator.mojom";
+import "components/arc/mojom/video_protected_buffer_allocator.mojom";
 
 // Deprecated method IDs: 0
 // Next method ID: 2
diff --git a/components/arc/common/video_accelerator_struct_traits.cc b/components/arc/mojom/video_accelerator_mojom_traits.cc
similarity index 98%
rename from components/arc/common/video_accelerator_struct_traits.cc
rename to components/arc/mojom/video_accelerator_mojom_traits.cc
index 4116b28..cd270013 100644
--- a/components/arc/common/video_accelerator_struct_traits.cc
+++ b/components/arc/mojom/video_accelerator_mojom_traits.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 "components/arc/common/video_accelerator_struct_traits.h"
+#include "components/arc/mojom/video_accelerator_mojom_traits.h"
 
 namespace mojo {
 
diff --git a/components/arc/common/video_accelerator_struct_traits.h b/components/arc/mojom/video_accelerator_mojom_traits.h
similarity index 93%
rename from components/arc/common/video_accelerator_struct_traits.h
rename to components/arc/mojom/video_accelerator_mojom_traits.h
index f9c959f..9ac6460 100644
--- a/components/arc/common/video_accelerator_struct_traits.h
+++ b/components/arc/mojom/video_accelerator_mojom_traits.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_COMMON_VIDEO_ACCELERATOR_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_COMMON_VIDEO_ACCELERATOR_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_MOJOM_VIDEO_ACCELERATOR_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_MOJOM_VIDEO_ACCELERATOR_MOJOM_TRAITS_H_
 
 #include <memory>
 
-#include "components/arc/common/video_common.mojom.h"
+#include "components/arc/mojom/video_common.mojom.h"
 #include "components/arc/video_accelerator/video_frame_plane.h"
 #include "media/base/decode_status.h"
 #include "media/base/video_codecs.h"
@@ -147,4 +147,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_COMMON_VIDEO_ACCELERATOR_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_MOJOM_VIDEO_ACCELERATOR_MOJOM_TRAITS_H_
diff --git a/components/arc/common/video_accelerator_struct_traits_unittest.cc b/components/arc/mojom/video_accelerator_mojom_traits_unittest.cc
similarity index 94%
rename from components/arc/common/video_accelerator_struct_traits_unittest.cc
rename to components/arc/mojom/video_accelerator_mojom_traits_unittest.cc
index 6d2e655b..76c21ca 100644
--- a/components/arc/common/video_accelerator_struct_traits_unittest.cc
+++ b/components/arc/mojom/video_accelerator_mojom_traits_unittest.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/arc/common/video_accelerator_struct_traits.h"
+#include "components/arc/mojom/video_accelerator_mojom_traits.h"
 
 #include <vector>
 
-#include "components/arc/common/video_common.mojom.h"
+#include "components/arc/mojom/video_common.mojom.h"
 #include "media/base/video_frame_layout.h"
 #include "media/base/video_types.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
diff --git a/components/arc/common/video_common.mojom b/components/arc/mojom/video_common.mojom
similarity index 100%
rename from components/arc/common/video_common.mojom
rename to components/arc/mojom/video_common.mojom
diff --git a/components/arc/common/video_common.typemap b/components/arc/mojom/video_common.typemap
similarity index 79%
rename from components/arc/common/video_common.typemap
rename to components/arc/mojom/video_common.typemap
index 9eb47ee..6148869 100644
--- a/components/arc/common/video_common.typemap
+++ b/components/arc/mojom/video_common.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//components/arc/common/video_common.mojom"
+mojom = "//components/arc/mojom/video_common.mojom"
 public_headers = [
   "//components/arc/video_accelerator/video_frame_plane.h",
   "//media/base/decode_status.h",
@@ -16,11 +16,11 @@
   "//media",
 ]
 
-traits_headers = [ "//components/arc/common/video_accelerator_struct_traits.h" ]
+traits_headers = [ "//components/arc/mojom/video_accelerator_mojom_traits.h" ]
 
 sources = [
-  "//components/arc/common/video_accelerator_struct_traits.cc",
-  "//components/arc/common/video_accelerator_struct_traits.h",
+  "//components/arc/mojom/video_accelerator_mojom_traits.cc",
+  "//components/arc/mojom/video_accelerator_mojom_traits.h",
 ]
 
 deps = [
diff --git a/components/arc/common/video_decode_accelerator.mojom b/components/arc/mojom/video_decode_accelerator.mojom
similarity index 98%
rename from components/arc/common/video_decode_accelerator.mojom
rename to components/arc/mojom/video_decode_accelerator.mojom
index b9c748f..56bf60dd 100644
--- a/components/arc/common/video_decode_accelerator.mojom
+++ b/components/arc/mojom/video_decode_accelerator.mojom
@@ -17,8 +17,8 @@
 
 module arc.mojom;
 
-import "components/arc/common/gfx.mojom";
-import "components/arc/common/video_common.mojom";
+import "components/arc/mojom/gfx.mojom";
+import "components/arc/mojom/video_common.mojom";
 
 // Information of the bitstream buffer.
 struct BitstreamBuffer {
diff --git a/components/arc/common/video_encode_accelerator.mojom b/components/arc/mojom/video_encode_accelerator.mojom
similarity index 98%
rename from components/arc/common/video_encode_accelerator.mojom
rename to components/arc/mojom/video_encode_accelerator.mojom
index b4c9f41..0bf30f7 100644
--- a/components/arc/common/video_encode_accelerator.mojom
+++ b/components/arc/mojom/video_encode_accelerator.mojom
@@ -7,7 +7,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/video_common.mojom";
+import "components/arc/mojom/video_common.mojom";
 
 // Next MinVersion: 4
 
diff --git a/components/arc/common/video_encode_accelerator.typemap b/components/arc/mojom/video_encode_accelerator.typemap
similarity index 76%
rename from components/arc/common/video_encode_accelerator.typemap
rename to components/arc/mojom/video_encode_accelerator.typemap
index 5210cc63..80f8f679 100644
--- a/components/arc/common/video_encode_accelerator.typemap
+++ b/components/arc/mojom/video_encode_accelerator.typemap
@@ -2,16 +2,16 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//components/arc/common/video_encode_accelerator.mojom"
+mojom = "//components/arc/mojom/video_encode_accelerator.mojom"
 public_headers = [ "//media/video/video_encode_accelerator.h" ]
 public_deps = [
   "//base",
   "//media/gpu",
 ]
 traits_headers =
-    [ "//components/arc/common/video_encode_accelerator_struct_traits.h" ]
+    [ "//components/arc/mojom/video_encode_accelerator_mojom_traits.h" ]
 sources = [
-  "//components/arc/common/video_encode_accelerator_struct_traits.cc",
+  "//components/arc/mojom/video_encode_accelerator_mojom_traits.cc",
 ]
 deps = [
   "//base",
diff --git a/components/arc/common/video_encode_accelerator_struct_traits.cc b/components/arc/mojom/video_encode_accelerator_mojom_traits.cc
similarity index 95%
rename from components/arc/common/video_encode_accelerator_struct_traits.cc
rename to components/arc/mojom/video_encode_accelerator_mojom_traits.cc
index 72bcd88..e38ad164 100644
--- a/components/arc/common/video_encode_accelerator_struct_traits.cc
+++ b/components/arc/mojom/video_encode_accelerator_mojom_traits.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/arc/common/video_encode_accelerator_struct_traits.h"
+#include "components/arc/mojom/video_encode_accelerator_mojom_traits.h"
 
 #include "base/optional.h"
-#include "components/arc/common/video_accelerator_struct_traits.h"
+#include "components/arc/mojom/video_accelerator_mojom_traits.h"
 
 namespace mojo {
 
diff --git a/components/arc/common/video_encode_accelerator_struct_traits.h b/components/arc/mojom/video_encode_accelerator_mojom_traits.h
similarity index 93%
rename from components/arc/common/video_encode_accelerator_struct_traits.h
rename to components/arc/mojom/video_encode_accelerator_mojom_traits.h
index aa3078c0..3b2f742 100644
--- a/components/arc/common/video_encode_accelerator_struct_traits.h
+++ b/components/arc/mojom/video_encode_accelerator_mojom_traits.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_COMMON_VIDEO_ENCODE_ACCELERATOR_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_COMMON_VIDEO_ENCODE_ACCELERATOR_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
 
-#include "components/arc/common/video_encode_accelerator.mojom.h"
+#include "components/arc/mojom/video_encode_accelerator.mojom.h"
 #include "media/video/video_encode_accelerator.h"
 
 namespace mojo {
@@ -128,4 +128,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_COMMON_VIDEO_ENCODE_ACCELERATOR_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
diff --git a/components/arc/common/video_protected_buffer_allocator.mojom b/components/arc/mojom/video_protected_buffer_allocator.mojom
similarity index 96%
rename from components/arc/common/video_protected_buffer_allocator.mojom
rename to components/arc/mojom/video_protected_buffer_allocator.mojom
index c133cafec..dbb9eda3 100644
--- a/components/arc/common/video_protected_buffer_allocator.mojom
+++ b/components/arc/mojom/video_protected_buffer_allocator.mojom
@@ -6,7 +6,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/video_common.mojom";
+import "components/arc/mojom/video_common.mojom";
 
 // Next method ID: 3
 interface VideoProtectedBufferAllocator {
diff --git a/components/arc/common/voice_interaction_arc_home.mojom b/components/arc/mojom/voice_interaction_arc_home.mojom
similarity index 97%
rename from components/arc/common/voice_interaction_arc_home.mojom
rename to components/arc/mojom/voice_interaction_arc_home.mojom
index 10d5d57..f91b1be 100644
--- a/components/arc/common/voice_interaction_arc_home.mojom
+++ b/components/arc/mojom/voice_interaction_arc_home.mojom
@@ -6,7 +6,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/gfx.mojom";
+import "components/arc/mojom/gfx.mojom";
 import "mojo/public/mojom/base/string16.mojom";
 
 // Represents view structure to be passed to ARC. The view
diff --git a/components/arc/common/voice_interaction_framework.mojom b/components/arc/mojom/voice_interaction_framework.mojom
similarity index 98%
rename from components/arc/common/voice_interaction_framework.mojom
rename to components/arc/mojom/voice_interaction_framework.mojom
index b1b8ba99..2873ad9 100644
--- a/components/arc/common/voice_interaction_framework.mojom
+++ b/components/arc/mojom/voice_interaction_framework.mojom
@@ -6,7 +6,7 @@
 
 module arc.mojom;
 
-import "components/arc/common/gfx.mojom";
+import "components/arc/mojom/gfx.mojom";
 
 // There is another copy of the VoiceInteractionState definition in
 // //ash/public/mojom/voice_interaction_controller.mojom
diff --git a/components/arc/common/volume_mounter.mojom b/components/arc/mojom/volume_mounter.mojom
similarity index 100%
rename from components/arc/common/volume_mounter.mojom
rename to components/arc/mojom/volume_mounter.mojom
diff --git a/components/arc/common/volume_mounter.typemap b/components/arc/mojom/volume_mounter.typemap
similarity index 72%
rename from components/arc/common/volume_mounter.typemap
rename to components/arc/mojom/volume_mounter.typemap
index 4a025cf0..11bfd736 100644
--- a/components/arc/common/volume_mounter.typemap
+++ b/components/arc/mojom/volume_mounter.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//components/arc/common/volume_mounter.mojom"
+mojom = "//components/arc/mojom/volume_mounter.mojom"
 public_headers = [
   "//chromeos/chromeos_export.h",
   "//chromeos/dbus/cros_disks_client.h",
@@ -10,9 +10,9 @@
   "//chromeos/disks/disk_mount_manager.h",
 ]
 traits_headers =
-    [ "//components/arc/volume_mounter/volume_mounter_struct_traits.h" ]
+    [ "//components/arc/volume_mounter/volume_mounter_mojom_traits.h" ]
 sources = [
-  "//components/arc/volume_mounter/volume_mounter_struct_traits.cc",
+  "//components/arc/volume_mounter/volume_mounter_mojom_traits.cc",
 ]
 type_mappings = [
   "arc.mojom.DeviceType=chromeos::DeviceType",
diff --git a/components/arc/common/wake_lock.mojom b/components/arc/mojom/wake_lock.mojom
similarity index 100%
rename from components/arc/common/wake_lock.mojom
rename to components/arc/mojom/wake_lock.mojom
diff --git a/components/arc/common/wallpaper.mojom b/components/arc/mojom/wallpaper.mojom
similarity index 100%
rename from components/arc/common/wallpaper.mojom
rename to components/arc/mojom/wallpaper.mojom
diff --git a/components/arc/net/arc_net_host_impl.h b/components/arc/net/arc_net_host_impl.h
index fca8d74b..1522732 100644
--- a/components/arc/net/arc_net_host_impl.h
+++ b/components/arc/net/arc_net_host_impl.h
@@ -18,7 +18,7 @@
 #include "base/values.h"
 #include "chromeos/network/network_connection_observer.h"
 #include "chromeos/network/network_state_handler_observer.h"
-#include "components/arc/common/net.mojom.h"
+#include "components/arc/mojom/net.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/components/arc/obb_mounter/arc_obb_mounter_bridge.h b/components/arc/obb_mounter/arc_obb_mounter_bridge.h
index 8756ab6..707ea27 100644
--- a/components/arc/obb_mounter/arc_obb_mounter_bridge.h
+++ b/components/arc/obb_mounter/arc_obb_mounter_bridge.h
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "base/macros.h"
-#include "components/arc/common/obb_mounter.mojom.h"
+#include "components/arc/mojom/obb_mounter.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/power/arc_power_bridge.h b/components/arc/power/arc_power_bridge.h
index 94fc7dbc..03268b3 100644
--- a/components/arc/power/arc_power_bridge.h
+++ b/components/arc/power/arc_power_bridge.h
@@ -12,7 +12,7 @@
 #include "base/optional.h"
 #include "base/timer/timer.h"
 #include "chromeos/dbus/power/power_manager_client.h"
-#include "components/arc/common/power.mojom.h"
+#include "components/arc/mojom/power.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "services/device/public/mojom/wake_lock.mojom.h"
diff --git a/components/arc/power/arc_power_bridge_unittest.cc b/components/arc/power/arc_power_bridge_unittest.cc
index 427ea574..1069971 100644
--- a/components/arc/power/arc_power_bridge_unittest.cc
+++ b/components/arc/power/arc_power_bridge_unittest.cc
@@ -11,7 +11,7 @@
 #include "chromeos/dbus/power/fake_power_manager_client.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
-#include "components/arc/common/power.mojom.h"
+#include "components/arc/mojom/power.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_power_instance.h"
diff --git a/components/arc/property/arc_property_bridge.h b/components/arc/property/arc_property_bridge.h
index 27d37fd0..f1161349 100644
--- a/components/arc/property/arc_property_bridge.h
+++ b/components/arc/property/arc_property_bridge.h
@@ -14,7 +14,7 @@
 #include "base/optional.h"
 #include "base/strings/string_piece.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/property.mojom.h"
+#include "components/arc/mojom/property.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/components/arc/rotation_lock/arc_rotation_lock_bridge.h b/components/arc/rotation_lock/arc_rotation_lock_bridge.h
index 7f2acfa..034cad3 100644
--- a/components/arc/rotation_lock/arc_rotation_lock_bridge.h
+++ b/components/arc/rotation_lock/arc_rotation_lock_bridge.h
@@ -9,7 +9,7 @@
 #include "ash/public/cpp/tablet_mode_observer.h"
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/rotation_lock.mojom.h"
+#include "components/arc/mojom/rotation_lock.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 
diff --git a/components/arc/session/arc_bridge_host_impl.cc b/components/arc/session/arc_bridge_host_impl.cc
index 4558486..1dd5de9 100644
--- a/components/arc/session/arc_bridge_host_impl.cc
+++ b/components/arc/session/arc_bridge_host_impl.cc
@@ -10,56 +10,56 @@
 #include "ash/public/cpp/arc_notifications_host_initializer.h"
 #include "base/bind.h"
 #include "base/bind_helpers.h"
-#include "components/arc/common/accessibility_helper.mojom.h"
-#include "components/arc/common/app.mojom.h"
-#include "components/arc/common/app_permissions.mojom.h"
-#include "components/arc/common/appfuse.mojom.h"
-#include "components/arc/common/audio.mojom.h"
-#include "components/arc/common/auth.mojom.h"
-#include "components/arc/common/backup_settings.mojom.h"
-#include "components/arc/common/bluetooth.mojom.h"
-#include "components/arc/common/boot_phase_monitor.mojom.h"
-#include "components/arc/common/camera.mojom.h"
-#include "components/arc/common/cast_receiver.mojom.h"
-#include "components/arc/common/cert_store.mojom.h"
-#include "components/arc/common/clipboard.mojom.h"
-#include "components/arc/common/crash_collector.mojom.h"
-#include "components/arc/common/disk_quota.mojom.h"
-#include "components/arc/common/enterprise_reporting.mojom.h"
-#include "components/arc/common/file_system.mojom.h"
-#include "components/arc/common/ime.mojom.h"
-#include "components/arc/common/input_method_manager.mojom.h"
-#include "components/arc/common/intent_helper.mojom.h"
-#include "components/arc/common/keymaster.mojom.h"
-#include "components/arc/common/kiosk.mojom.h"
-#include "components/arc/common/lock_screen.mojom.h"
-#include "components/arc/common/media_session.mojom.h"
-#include "components/arc/common/metrics.mojom.h"
-#include "components/arc/common/midis.mojom.h"
-#include "components/arc/common/net.mojom.h"
-#include "components/arc/common/notifications.mojom.h"
-#include "components/arc/common/obb_mounter.mojom.h"
-#include "components/arc/common/oemcrypto.mojom.h"
-#include "components/arc/common/pip.mojom.h"
-#include "components/arc/common/policy.mojom.h"
-#include "components/arc/common/power.mojom.h"
-#include "components/arc/common/print.mojom.h"
-#include "components/arc/common/print_spooler.mojom.h"
-#include "components/arc/common/process.mojom.h"
-#include "components/arc/common/property.mojom.h"
-#include "components/arc/common/rotation_lock.mojom.h"
-#include "components/arc/common/screen_capture.mojom.h"
-#include "components/arc/common/storage_manager.mojom.h"
-#include "components/arc/common/timer.mojom.h"
-#include "components/arc/common/tracing.mojom.h"
-#include "components/arc/common/tts.mojom.h"
-#include "components/arc/common/usb_host.mojom.h"
-#include "components/arc/common/video.mojom.h"
-#include "components/arc/common/voice_interaction_arc_home.mojom.h"
-#include "components/arc/common/voice_interaction_framework.mojom.h"
-#include "components/arc/common/volume_mounter.mojom.h"
-#include "components/arc/common/wake_lock.mojom.h"
-#include "components/arc/common/wallpaper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
+#include "components/arc/mojom/app_permissions.mojom.h"
+#include "components/arc/mojom/appfuse.mojom.h"
+#include "components/arc/mojom/audio.mojom.h"
+#include "components/arc/mojom/auth.mojom.h"
+#include "components/arc/mojom/backup_settings.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
+#include "components/arc/mojom/boot_phase_monitor.mojom.h"
+#include "components/arc/mojom/camera.mojom.h"
+#include "components/arc/mojom/cast_receiver.mojom.h"
+#include "components/arc/mojom/cert_store.mojom.h"
+#include "components/arc/mojom/clipboard.mojom.h"
+#include "components/arc/mojom/crash_collector.mojom.h"
+#include "components/arc/mojom/disk_quota.mojom.h"
+#include "components/arc/mojom/enterprise_reporting.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
+#include "components/arc/mojom/ime.mojom.h"
+#include "components/arc/mojom/input_method_manager.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
+#include "components/arc/mojom/keymaster.mojom.h"
+#include "components/arc/mojom/kiosk.mojom.h"
+#include "components/arc/mojom/lock_screen.mojom.h"
+#include "components/arc/mojom/media_session.mojom.h"
+#include "components/arc/mojom/metrics.mojom.h"
+#include "components/arc/mojom/midis.mojom.h"
+#include "components/arc/mojom/net.mojom.h"
+#include "components/arc/mojom/notifications.mojom.h"
+#include "components/arc/mojom/obb_mounter.mojom.h"
+#include "components/arc/mojom/oemcrypto.mojom.h"
+#include "components/arc/mojom/pip.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
+#include "components/arc/mojom/power.mojom.h"
+#include "components/arc/mojom/print.mojom.h"
+#include "components/arc/mojom/print_spooler.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
+#include "components/arc/mojom/property.mojom.h"
+#include "components/arc/mojom/rotation_lock.mojom.h"
+#include "components/arc/mojom/screen_capture.mojom.h"
+#include "components/arc/mojom/storage_manager.mojom.h"
+#include "components/arc/mojom/timer.mojom.h"
+#include "components/arc/mojom/tracing.mojom.h"
+#include "components/arc/mojom/tts.mojom.h"
+#include "components/arc/mojom/usb_host.mojom.h"
+#include "components/arc/mojom/video.mojom.h"
+#include "components/arc/mojom/voice_interaction_arc_home.mojom.h"
+#include "components/arc/mojom/voice_interaction_framework.mojom.h"
+#include "components/arc/mojom/volume_mounter.mojom.h"
+#include "components/arc/mojom/wake_lock.mojom.h"
+#include "components/arc/mojom/wallpaper.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/session/mojo_channel.h"
 #include "content/public/browser/system_connector.h"
diff --git a/components/arc/session/arc_bridge_host_impl.h b/components/arc/session/arc_bridge_host_impl.h
index 0f5868dd..901fb37 100644
--- a/components/arc/session/arc_bridge_host_impl.h
+++ b/components/arc/session/arc_bridge_host_impl.h
@@ -10,7 +10,7 @@
 
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/arc_bridge.mojom.h"
+#include "components/arc/mojom/arc_bridge.mojom.h"
 #include "components/arc/session/connection_holder.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_ptr.h"
diff --git a/components/arc/session/arc_bridge_service.cc b/components/arc/session/arc_bridge_service.cc
index 485b0fea..f7bd98c9 100644
--- a/components/arc/session/arc_bridge_service.cc
+++ b/components/arc/session/arc_bridge_service.cc
@@ -5,56 +5,56 @@
 #include "components/arc/session/arc_bridge_service.h"
 
 // These header is necessary for instantiation of ConnectionHolder.
-#include "components/arc/common/accessibility_helper.mojom.h"
-#include "components/arc/common/app.mojom.h"
-#include "components/arc/common/app_permissions.mojom.h"
-#include "components/arc/common/appfuse.mojom.h"
-#include "components/arc/common/arc_bridge.mojom.h"
-#include "components/arc/common/audio.mojom.h"
-#include "components/arc/common/auth.mojom.h"
-#include "components/arc/common/backup_settings.mojom.h"
-#include "components/arc/common/bluetooth.mojom.h"
-#include "components/arc/common/boot_phase_monitor.mojom.h"
-#include "components/arc/common/camera.mojom.h"
-#include "components/arc/common/cast_receiver.mojom.h"
-#include "components/arc/common/cert_store.mojom.h"
-#include "components/arc/common/clipboard.mojom.h"
-#include "components/arc/common/crash_collector.mojom.h"
-#include "components/arc/common/disk_quota.mojom.h"
-#include "components/arc/common/enterprise_reporting.mojom.h"
-#include "components/arc/common/file_system.mojom.h"
-#include "components/arc/common/ime.mojom.h"
-#include "components/arc/common/input_method_manager.mojom.h"
-#include "components/arc/common/intent_helper.mojom.h"
-#include "components/arc/common/keymaster.mojom.h"
-#include "components/arc/common/kiosk.mojom.h"
-#include "components/arc/common/lock_screen.mojom.h"
-#include "components/arc/common/media_session.mojom.h"
-#include "components/arc/common/metrics.mojom.h"
-#include "components/arc/common/midis.mojom.h"
-#include "components/arc/common/net.mojom.h"
-#include "components/arc/common/obb_mounter.mojom.h"
-#include "components/arc/common/oemcrypto.mojom.h"
-#include "components/arc/common/pip.mojom.h"
-#include "components/arc/common/policy.mojom.h"
-#include "components/arc/common/power.mojom.h"
-#include "components/arc/common/print.mojom.h"
-#include "components/arc/common/print_spooler.mojom.h"
-#include "components/arc/common/process.mojom.h"
-#include "components/arc/common/property.mojom.h"
-#include "components/arc/common/rotation_lock.mojom.h"
-#include "components/arc/common/screen_capture.mojom.h"
-#include "components/arc/common/storage_manager.mojom.h"
-#include "components/arc/common/timer.mojom.h"
-#include "components/arc/common/tracing.mojom.h"
-#include "components/arc/common/tts.mojom.h"
-#include "components/arc/common/usb_host.mojom.h"
-#include "components/arc/common/video.mojom.h"
-#include "components/arc/common/voice_interaction_arc_home.mojom.h"
-#include "components/arc/common/voice_interaction_framework.mojom.h"
-#include "components/arc/common/volume_mounter.mojom.h"
-#include "components/arc/common/wake_lock.mojom.h"
-#include "components/arc/common/wallpaper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
+#include "components/arc/mojom/app_permissions.mojom.h"
+#include "components/arc/mojom/appfuse.mojom.h"
+#include "components/arc/mojom/arc_bridge.mojom.h"
+#include "components/arc/mojom/audio.mojom.h"
+#include "components/arc/mojom/auth.mojom.h"
+#include "components/arc/mojom/backup_settings.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
+#include "components/arc/mojom/boot_phase_monitor.mojom.h"
+#include "components/arc/mojom/camera.mojom.h"
+#include "components/arc/mojom/cast_receiver.mojom.h"
+#include "components/arc/mojom/cert_store.mojom.h"
+#include "components/arc/mojom/clipboard.mojom.h"
+#include "components/arc/mojom/crash_collector.mojom.h"
+#include "components/arc/mojom/disk_quota.mojom.h"
+#include "components/arc/mojom/enterprise_reporting.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
+#include "components/arc/mojom/ime.mojom.h"
+#include "components/arc/mojom/input_method_manager.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
+#include "components/arc/mojom/keymaster.mojom.h"
+#include "components/arc/mojom/kiosk.mojom.h"
+#include "components/arc/mojom/lock_screen.mojom.h"
+#include "components/arc/mojom/media_session.mojom.h"
+#include "components/arc/mojom/metrics.mojom.h"
+#include "components/arc/mojom/midis.mojom.h"
+#include "components/arc/mojom/net.mojom.h"
+#include "components/arc/mojom/obb_mounter.mojom.h"
+#include "components/arc/mojom/oemcrypto.mojom.h"
+#include "components/arc/mojom/pip.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
+#include "components/arc/mojom/power.mojom.h"
+#include "components/arc/mojom/print.mojom.h"
+#include "components/arc/mojom/print_spooler.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
+#include "components/arc/mojom/property.mojom.h"
+#include "components/arc/mojom/rotation_lock.mojom.h"
+#include "components/arc/mojom/screen_capture.mojom.h"
+#include "components/arc/mojom/storage_manager.mojom.h"
+#include "components/arc/mojom/timer.mojom.h"
+#include "components/arc/mojom/tracing.mojom.h"
+#include "components/arc/mojom/tts.mojom.h"
+#include "components/arc/mojom/usb_host.mojom.h"
+#include "components/arc/mojom/video.mojom.h"
+#include "components/arc/mojom/voice_interaction_arc_home.mojom.h"
+#include "components/arc/mojom/voice_interaction_framework.mojom.h"
+#include "components/arc/mojom/volume_mounter.mojom.h"
+#include "components/arc/mojom/wake_lock.mojom.h"
+#include "components/arc/mojom/wallpaper.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/session/arc_bridge_service.h b/components/arc/session/arc_bridge_service.h
index d3f0f3b4..cc0f132 100644
--- a/components/arc/session/arc_bridge_service.h
+++ b/components/arc/session/arc_bridge_service.h
@@ -12,8 +12,8 @@
 
 namespace mojom {
 
-// Instead of including components/arc/common/arc_bridge.mojom.h, list all the
-// instance classes here for faster build.
+// Instead of including components/arc/mojom/arc_bridge.mojom.h, list all
+// the instance classes here for faster build.
 class AccessibilityHelperHost;
 class AccessibilityHelperInstance;
 class AppHost;
diff --git a/components/arc/storage_manager/arc_storage_manager.h b/components/arc/storage_manager/arc_storage_manager.h
index ccad853..e1002a3 100644
--- a/components/arc/storage_manager/arc_storage_manager.h
+++ b/components/arc/storage_manager/arc_storage_manager.h
@@ -9,7 +9,7 @@
 
 #include "base/callback.h"
 #include "base/macros.h"
-#include "components/arc/common/storage_manager.mojom.h"
+#include "components/arc/mojom/storage_manager.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
diff --git a/components/arc/test/fake_accessibility_helper_instance.h b/components/arc/test/fake_accessibility_helper_instance.h
index 596475c..d2474a21 100644
--- a/components/arc/test/fake_accessibility_helper_instance.h
+++ b/components/arc/test/fake_accessibility_helper_instance.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "components/arc/common/accessibility_helper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_app_instance.h b/components/arc/test/fake_app_instance.h
index 0da84463..5f792bd 100644
--- a/components/arc/test/fake_app_instance.h
+++ b/components/arc/test/fake_app_instance.h
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/arc/common/app.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace arc {
diff --git a/components/arc/test/fake_arc_bridge_host.cc b/components/arc/test/fake_arc_bridge_host.cc
index 3cc956e1..034a076 100644
--- a/components/arc/test/fake_arc_bridge_host.cc
+++ b/components/arc/test/fake_arc_bridge_host.cc
@@ -4,57 +4,57 @@
 
 #include "components/arc/test/fake_arc_bridge_host.h"
 
-#include "components/arc/common/accessibility_helper.mojom.h"
-#include "components/arc/common/app.mojom.h"
-#include "components/arc/common/app_permissions.mojom.h"
-#include "components/arc/common/appfuse.mojom.h"
-#include "components/arc/common/arc_bridge.mojom.h"
-#include "components/arc/common/audio.mojom.h"
-#include "components/arc/common/auth.mojom.h"
-#include "components/arc/common/backup_settings.mojom.h"
-#include "components/arc/common/bluetooth.mojom.h"
-#include "components/arc/common/boot_phase_monitor.mojom.h"
-#include "components/arc/common/camera.mojom.h"
-#include "components/arc/common/cast_receiver.mojom.h"
-#include "components/arc/common/cert_store.mojom.h"
-#include "components/arc/common/clipboard.mojom.h"
-#include "components/arc/common/crash_collector.mojom.h"
-#include "components/arc/common/disk_quota.mojom.h"
-#include "components/arc/common/enterprise_reporting.mojom.h"
-#include "components/arc/common/file_system.mojom.h"
-#include "components/arc/common/ime.mojom.h"
-#include "components/arc/common/input_method_manager.mojom.h"
-#include "components/arc/common/intent_helper.mojom.h"
-#include "components/arc/common/keymaster.mojom.h"
-#include "components/arc/common/kiosk.mojom.h"
-#include "components/arc/common/lock_screen.mojom.h"
-#include "components/arc/common/media_session.mojom.h"
-#include "components/arc/common/metrics.mojom.h"
-#include "components/arc/common/midis.mojom.h"
-#include "components/arc/common/net.mojom.h"
-#include "components/arc/common/notifications.mojom.h"
-#include "components/arc/common/obb_mounter.mojom.h"
-#include "components/arc/common/oemcrypto.mojom.h"
-#include "components/arc/common/pip.mojom.h"
-#include "components/arc/common/policy.mojom.h"
-#include "components/arc/common/power.mojom.h"
-#include "components/arc/common/print.mojom.h"
-#include "components/arc/common/print_spooler.mojom.h"
-#include "components/arc/common/process.mojom.h"
-#include "components/arc/common/property.mojom.h"
-#include "components/arc/common/rotation_lock.mojom.h"
-#include "components/arc/common/screen_capture.mojom.h"
-#include "components/arc/common/storage_manager.mojom.h"
-#include "components/arc/common/timer.mojom.h"
-#include "components/arc/common/tracing.mojom.h"
-#include "components/arc/common/tts.mojom.h"
-#include "components/arc/common/usb_host.mojom.h"
-#include "components/arc/common/video.mojom.h"
-#include "components/arc/common/voice_interaction_arc_home.mojom.h"
-#include "components/arc/common/voice_interaction_framework.mojom.h"
-#include "components/arc/common/volume_mounter.mojom.h"
-#include "components/arc/common/wake_lock.mojom.h"
-#include "components/arc/common/wallpaper.mojom.h"
+#include "components/arc/mojom/accessibility_helper.mojom.h"
+#include "components/arc/mojom/app.mojom.h"
+#include "components/arc/mojom/app_permissions.mojom.h"
+#include "components/arc/mojom/appfuse.mojom.h"
+#include "components/arc/mojom/arc_bridge.mojom.h"
+#include "components/arc/mojom/audio.mojom.h"
+#include "components/arc/mojom/auth.mojom.h"
+#include "components/arc/mojom/backup_settings.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
+#include "components/arc/mojom/boot_phase_monitor.mojom.h"
+#include "components/arc/mojom/camera.mojom.h"
+#include "components/arc/mojom/cast_receiver.mojom.h"
+#include "components/arc/mojom/cert_store.mojom.h"
+#include "components/arc/mojom/clipboard.mojom.h"
+#include "components/arc/mojom/crash_collector.mojom.h"
+#include "components/arc/mojom/disk_quota.mojom.h"
+#include "components/arc/mojom/enterprise_reporting.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
+#include "components/arc/mojom/ime.mojom.h"
+#include "components/arc/mojom/input_method_manager.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
+#include "components/arc/mojom/keymaster.mojom.h"
+#include "components/arc/mojom/kiosk.mojom.h"
+#include "components/arc/mojom/lock_screen.mojom.h"
+#include "components/arc/mojom/media_session.mojom.h"
+#include "components/arc/mojom/metrics.mojom.h"
+#include "components/arc/mojom/midis.mojom.h"
+#include "components/arc/mojom/net.mojom.h"
+#include "components/arc/mojom/notifications.mojom.h"
+#include "components/arc/mojom/obb_mounter.mojom.h"
+#include "components/arc/mojom/oemcrypto.mojom.h"
+#include "components/arc/mojom/pip.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
+#include "components/arc/mojom/power.mojom.h"
+#include "components/arc/mojom/print.mojom.h"
+#include "components/arc/mojom/print_spooler.mojom.h"
+#include "components/arc/mojom/process.mojom.h"
+#include "components/arc/mojom/property.mojom.h"
+#include "components/arc/mojom/rotation_lock.mojom.h"
+#include "components/arc/mojom/screen_capture.mojom.h"
+#include "components/arc/mojom/storage_manager.mojom.h"
+#include "components/arc/mojom/timer.mojom.h"
+#include "components/arc/mojom/tracing.mojom.h"
+#include "components/arc/mojom/tts.mojom.h"
+#include "components/arc/mojom/usb_host.mojom.h"
+#include "components/arc/mojom/video.mojom.h"
+#include "components/arc/mojom/voice_interaction_arc_home.mojom.h"
+#include "components/arc/mojom/voice_interaction_framework.mojom.h"
+#include "components/arc/mojom/volume_mounter.mojom.h"
+#include "components/arc/mojom/wake_lock.mojom.h"
+#include "components/arc/mojom/wallpaper.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_arc_bridge_host.h b/components/arc/test/fake_arc_bridge_host.h
index 4bb07b26..3e0fb49 100644
--- a/components/arc/test/fake_arc_bridge_host.h
+++ b/components/arc/test/fake_arc_bridge_host.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_TEST_FAKE_ARC_BRIDGE_HOST_H_
 
 #include "base/macros.h"
-#include "components/arc/common/arc_bridge.mojom.h"
+#include "components/arc/mojom/arc_bridge.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_backup_settings_instance.h b/components/arc/test/fake_backup_settings_instance.h
index 5ad0d194..d6e681b 100644
--- a/components/arc/test/fake_backup_settings_instance.h
+++ b/components/arc/test/fake_backup_settings_instance.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_TEST_FAKE_BACKUP_SETTINGS_INSTANCE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/backup_settings.mojom.h"
+#include "components/arc/mojom/backup_settings.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_bluetooth_instance.h b/components/arc/test/fake_bluetooth_instance.h
index ba8f993..95b12b9 100644
--- a/components/arc/test/fake_bluetooth_instance.h
+++ b/components/arc/test/fake_bluetooth_instance.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/arc/common/bluetooth.mojom.h"
+#include "components/arc/mojom/bluetooth.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace device {
diff --git a/components/arc/test/fake_clipboard_instance.h b/components/arc/test/fake_clipboard_instance.h
index 489d594..baa64a40 100644
--- a/components/arc/test/fake_clipboard_instance.h
+++ b/components/arc/test/fake_clipboard_instance.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_TEST_FAKE_CLIPBOARD_INSTANCE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/clipboard.mojom.h"
+#include "components/arc/mojom/clipboard.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_file_system_instance.h b/components/arc/test/fake_file_system_instance.h
index 6c5e57e..ffe8595 100644
--- a/components/arc/test/fake_file_system_instance.h
+++ b/components/arc/test/fake_file_system_instance.h
@@ -16,7 +16,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/file_system.mojom.h"
+#include "components/arc/mojom/file_system.mojom.h"
 #include "storage/browser/fileapi/watcher_manager.h"
 
 namespace arc {
diff --git a/components/arc/test/fake_intent_helper_instance.h b/components/arc/test/fake_intent_helper_instance.h
index 67872ca1..3aeb07d 100644
--- a/components/arc/test/fake_intent_helper_instance.h
+++ b/components/arc/test/fake_intent_helper_instance.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/callback.h"
-#include "components/arc/common/intent_helper.mojom.h"
+#include "components/arc/mojom/intent_helper.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_notifications_instance.h b/components/arc/test/fake_notifications_instance.h
index c67e314..73b0e9a0 100644
--- a/components/arc/test/fake_notifications_instance.h
+++ b/components/arc/test/fake_notifications_instance.h
@@ -9,7 +9,7 @@
 #include <utility>
 #include <vector>
 
-#include "components/arc/common/notifications.mojom.h"
+#include "components/arc/mojom/notifications.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_pip_instance.h b/components/arc/test/fake_pip_instance.h
index d8e4a8b..c4ffb56 100644
--- a/components/arc/test/fake_pip_instance.h
+++ b/components/arc/test/fake_pip_instance.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_TEST_FAKE_PIP_INSTANCE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/pip.mojom.h"
+#include "components/arc/mojom/pip.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_policy_instance.h b/components/arc/test/fake_policy_instance.h
index b45e4da..4f0467a0 100644
--- a/components/arc/test/fake_policy_instance.h
+++ b/components/arc/test/fake_policy_instance.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "components/arc/common/policy.mojom.h"
+#include "components/arc/mojom/policy.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_power_instance.h b/components/arc/test/fake_power_instance.h
index c2e3240..c928d8eb7 100644
--- a/components/arc/test/fake_power_instance.h
+++ b/components/arc/test/fake_power_instance.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_TEST_FAKE_POWER_INSTANCE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/power.mojom.h"
+#include "components/arc/mojom/power.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_timer_instance.h b/components/arc/test/fake_timer_instance.h
index a12b4c1..3a54a16 100644
--- a/components/arc/test/fake_timer_instance.h
+++ b/components/arc/test/fake_timer_instance.h
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "components/arc/common/timer.mojom.h"
+#include "components/arc/mojom/timer.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_wake_lock_instance.h b/components/arc/test/fake_wake_lock_instance.h
index 4f828ef..02982da 100644
--- a/components/arc/test/fake_wake_lock_instance.h
+++ b/components/arc/test/fake_wake_lock_instance.h
@@ -6,7 +6,7 @@
 #define COMPONENTS_ARC_TEST_FAKE_WAKE_LOCK_INSTANCE_H_
 
 #include "base/macros.h"
-#include "components/arc/common/wake_lock.mojom.h"
+#include "components/arc/mojom/wake_lock.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/test/fake_wallpaper_instance.h b/components/arc/test/fake_wallpaper_instance.h
index d0f18f9..f93548a 100644
--- a/components/arc/test/fake_wallpaper_instance.h
+++ b/components/arc/test/fake_wallpaper_instance.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "components/arc/common/wallpaper.mojom.h"
+#include "components/arc/mojom/wallpaper.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/timer/OWNERS b/components/arc/timer/OWNERS
index ef5cf84..012a33c 100644
--- a/components/arc/timer/OWNERS
+++ b/components/arc/timer/OWNERS
@@ -1,3 +1,3 @@
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=file://components/arc/common/ARC_SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=file://components/arc/mojom/ARC_SECURITY_OWNERS
diff --git a/components/arc/timer/arc_timer_bridge.cc b/components/arc/timer/arc_timer_bridge.cc
index 5f327b7..c7a4be1 100644
--- a/components/arc/timer/arc_timer_bridge.cc
+++ b/components/arc/timer/arc_timer_bridge.cc
@@ -17,7 +17,7 @@
 #include "components/arc/arc_service_manager.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/timer/arc_timer_bridge.h"
-#include "components/arc/timer/arc_timer_struct_traits.h"
+#include "components/arc/timer/arc_timer_mojom_traits.h"
 #include "mojo/public/cpp/system/handle.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
diff --git a/components/arc/timer/arc_timer_bridge.h b/components/arc/timer/arc_timer_bridge.h
index 7657e36e..01f49b7 100644
--- a/components/arc/timer/arc_timer_bridge.h
+++ b/components/arc/timer/arc_timer_bridge.h
@@ -15,7 +15,7 @@
 #include "base/optional.h"
 #include "base/sequenced_task_runner.h"
 #include "base/time/time.h"
-#include "components/arc/common/timer.mojom.h"
+#include "components/arc/mojom/timer.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/binding.h"
diff --git a/components/arc/timer/arc_timer_bridge_unittest.cc b/components/arc/timer/arc_timer_bridge_unittest.cc
index f0b6ecb4..51011d7f 100644
--- a/components/arc/timer/arc_timer_bridge_unittest.cc
+++ b/components/arc/timer/arc_timer_bridge_unittest.cc
@@ -17,14 +17,14 @@
 #include "base/time/time.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/arc/arc_service_manager.h"
-#include "components/arc/common/timer.mojom.h"
+#include "components/arc/mojom/timer.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_timer_instance.h"
 #include "components/arc/test/test_browser_context.h"
 #include "components/arc/timer/arc_timer_bridge.h"
-#include "components/arc/timer/arc_timer_struct_traits.h"
+#include "components/arc/timer/arc_timer_mojom_traits.h"
 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "mojo/public/cpp/system/handle.h"
diff --git a/components/arc/timer/arc_timer_struct_traits.cc b/components/arc/timer/arc_timer_mojom_traits.cc
similarity index 94%
rename from components/arc/timer/arc_timer_struct_traits.cc
rename to components/arc/timer/arc_timer_mojom_traits.cc
index 77c37ae8..c6360545 100644
--- a/components/arc/timer/arc_timer_struct_traits.cc
+++ b/components/arc/timer/arc_timer_mojom_traits.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 "components/arc/timer/arc_timer_struct_traits.h"
+#include "components/arc/timer/arc_timer_mojom_traits.h"
 
 #include <utility>
 
diff --git a/components/arc/timer/arc_timer_struct_traits.h b/components/arc/timer/arc_timer_mojom_traits.h
similarity index 66%
rename from components/arc/timer/arc_timer_struct_traits.h
rename to components/arc/timer/arc_timer_mojom_traits.h
index 40adac5..3ab26b0 100644
--- a/components/arc/timer/arc_timer_struct_traits.h
+++ b/components/arc/timer/arc_timer_mojom_traits.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_TIMER_ARC_TIMER_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_TIMER_ARC_TIMER_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_TIMER_ARC_TIMER_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_TIMER_ARC_TIMER_MOJOM_TRAITS_H_
 
 #include <time.h>
 
-#include "components/arc/common/timer.mojom.h"
+#include "components/arc/mojom/timer.mojom.h"
 
 namespace mojo {
 
@@ -19,4 +19,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_TIMER_ARC_TIMER_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_TIMER_ARC_TIMER_MOJOM_TRAITS_H_
diff --git a/components/arc/usb/usb_host_bridge.h b/components/arc/usb/usb_host_bridge.h
index 265e060..afcd3f1 100644
--- a/components/arc/usb/usb_host_bridge.h
+++ b/components/arc/usb/usb_host_bridge.h
@@ -12,7 +12,7 @@
 #include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/sequence_checker.h"
-#include "components/arc/common/usb_host.mojom.h"
+#include "components/arc/mojom/usb_host.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
diff --git a/components/arc/video_accelerator/BUILD.gn b/components/arc/video_accelerator/BUILD.gn
index 4f20af52..5674e65 100644
--- a/components/arc/video_accelerator/BUILD.gn
+++ b/components/arc/video_accelerator/BUILD.gn
@@ -19,7 +19,7 @@
   ]
 
   deps = [
-    "//components/arc/common:media",
+    "//components/arc/mojom:media",
     "//media",
     "//ui/ozone",
   ]
diff --git a/components/arc/video_accelerator/DEPS b/components/arc/video_accelerator/DEPS
index ab60a062..affce5e 100644
--- a/components/arc/video_accelerator/DEPS
+++ b/components/arc/video_accelerator/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
-  "+components/arc/common",
+  "+components/arc/mojom",
   "+gpu/config/gpu_preferences.h",
   "+media/base",
   "+media/gpu",
diff --git a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
index 6063482..51ce887 100644
--- a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
+++ b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.cc
@@ -416,15 +416,17 @@
         mojom::VideoDecodeAccelerator::Result::INVALID_ARGUMENT);
     return;
   }
+  if (assign_picture_buffers_called_) {
+    VLOGF(1) << "AssignPictureBuffers is called twice without "
+             << "ImportBufferForPicture()";
+    client_->NotifyError(
+        mojom::VideoDecodeAccelerator::Result::INVALID_ARGUMENT);
+    return;
+  }
 
   coded_size_ = pending_coded_size_;
-  std::vector<media::PictureBuffer> buffers;
-  for (uint32_t id = 0; id < count; ++id) {
-    buffers.push_back(
-        media::PictureBuffer(static_cast<int32_t>(id), coded_size_));
-  }
   output_buffer_count_ = static_cast<size_t>(count);
-  vda_->AssignPictureBuffers(buffers);
+  assign_picture_buffers_called_ = true;
 }
 
 void GpuArcVideoDecodeAccelerator::ImportBufferForPicture(
@@ -514,6 +516,21 @@
     }
   }
 
+  // This is the first time of ImportBufferForPicture() after
+  // AssignPictureBuffers() is called. Call VDA::AssignPictureBuffers() here.
+  if (assign_picture_buffers_called_) {
+    gfx::Size picture_size(gmb_handle.native_pixmap_handle.planes[0].stride,
+                           coded_size_.height());
+    std::vector<media::PictureBuffer> buffers;
+    for (size_t id = 0; id < output_buffer_count_; ++id) {
+      buffers.push_back(
+          media::PictureBuffer(static_cast<int32_t>(id), picture_size));
+    }
+
+    vda_->AssignPictureBuffers(std::move(buffers));
+    assign_picture_buffers_called_ = false;
+  }
+
   vda_->ImportBufferForPicture(picture_buffer_id, pixel_format,
                                std::move(gmb_handle));
 }
diff --git a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h
index ee2e938..5de7665 100644
--- a/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h
+++ b/components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h
@@ -13,7 +13,7 @@
 #include "base/callback_forward.h"
 #include "base/files/scoped_file.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/video_decode_accelerator.mojom.h"
+#include "components/arc/mojom/video_decode_accelerator.mojom.h"
 #include "gpu/config/gpu_preferences.h"
 #include "media/video/video_decode_accelerator.h"
 
@@ -151,6 +151,7 @@
 
   bool secure_mode_ = false;
   size_t output_buffer_count_ = 0;
+  bool assign_picture_buffers_called_ = false;
 
   THREAD_CHECKER(thread_checker_);
   DISALLOW_COPY_AND_ASSIGN(GpuArcVideoDecodeAccelerator);
diff --git a/components/arc/video_accelerator/gpu_arc_video_encode_accelerator.h b/components/arc/video_accelerator/gpu_arc_video_encode_accelerator.h
index 806b8dc..523e04f 100644
--- a/components/arc/video_accelerator/gpu_arc_video_encode_accelerator.h
+++ b/components/arc/video_accelerator/gpu_arc_video_encode_accelerator.h
@@ -11,7 +11,7 @@
 
 #include "base/files/scoped_file.h"
 #include "base/macros.h"
-#include "components/arc/common/video_encode_accelerator.mojom.h"
+#include "components/arc/mojom/video_encode_accelerator.mojom.h"
 #include "components/arc/video_accelerator/video_frame_plane.h"
 #include "gpu/config/gpu_preferences.h"
 #include "media/video/video_encode_accelerator.h"
diff --git a/components/arc/video_accelerator/gpu_arc_video_protected_buffer_allocator.h b/components/arc/video_accelerator/gpu_arc_video_protected_buffer_allocator.h
index 4235d86..26fe128 100644
--- a/components/arc/video_accelerator/gpu_arc_video_protected_buffer_allocator.h
+++ b/components/arc/video_accelerator/gpu_arc_video_protected_buffer_allocator.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
-#include "components/arc/common/video_protected_buffer_allocator.mojom.h"
+#include "components/arc/mojom/video_protected_buffer_allocator.mojom.h"
 #include "mojo/public/cpp/system/handle.h"
 
 namespace arc {
diff --git a/components/arc/video_accelerator/protected_buffer_manager_proxy.h b/components/arc/video_accelerator/protected_buffer_manager_proxy.h
index 79e3c2c..3390984 100644
--- a/components/arc/video_accelerator/protected_buffer_manager_proxy.h
+++ b/components/arc/video_accelerator/protected_buffer_manager_proxy.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_ARC_VIDEO_ACCELERATOR_PROTECTED_BUFFER_MANAGER_PROXY_H_
 #define COMPONENTS_ARC_VIDEO_ACCELERATOR_PROTECTED_BUFFER_MANAGER_PROXY_H_
 
-#include "components/arc/common/protected_buffer_manager.mojom.h"
+#include "components/arc/mojom/protected_buffer_manager.mojom.h"
 
 namespace arc {
 
diff --git a/components/arc/volume_mounter/OWNERS b/components/arc/volume_mounter/OWNERS
index be9c82a..a4479e9 100644
--- a/components/arc/volume_mounter/OWNERS
+++ b/components/arc/volume_mounter/OWNERS
@@ -1,5 +1,5 @@
 hashimoto@chromium.org
 
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=file://components/arc/common/ARC_SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=file://components/arc/mojom/ARC_SECURITY_OWNERS
diff --git a/components/arc/volume_mounter/arc_volume_mounter_bridge.h b/components/arc/volume_mounter/arc_volume_mounter_bridge.h
index abc8daf..5c1ce473 100644
--- a/components/arc/volume_mounter/arc_volume_mounter_bridge.h
+++ b/components/arc/volume_mounter/arc_volume_mounter_bridge.h
@@ -10,7 +10,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "chromeos/disks/disk_mount_manager.h"
-#include "components/arc/common/volume_mounter.mojom.h"
+#include "components/arc/mojom/volume_mounter.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/prefs/pref_change_registrar.h"
diff --git a/components/arc/volume_mounter/volume_mounter_struct_traits.cc b/components/arc/volume_mounter/volume_mounter_mojom_traits.cc
similarity index 97%
rename from components/arc/volume_mounter/volume_mounter_struct_traits.cc
rename to components/arc/volume_mounter/volume_mounter_mojom_traits.cc
index b516fd7..54299f5 100644
--- a/components/arc/volume_mounter/volume_mounter_struct_traits.cc
+++ b/components/arc/volume_mounter/volume_mounter_mojom_traits.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 "components/arc/volume_mounter/volume_mounter_struct_traits.h"
+#include "components/arc/volume_mounter/volume_mounter_mojom_traits.h"
 
 #include "base/logging.h"
 
diff --git a/components/arc/volume_mounter/volume_mounter_struct_traits.h b/components/arc/volume_mounter/volume_mounter_mojom_traits.h
similarity index 76%
rename from components/arc/volume_mounter/volume_mounter_struct_traits.h
rename to components/arc/volume_mounter/volume_mounter_mojom_traits.h
index e235db2..c18da66 100644
--- a/components/arc/volume_mounter/volume_mounter_struct_traits.h
+++ b/components/arc/volume_mounter/volume_mounter_mojom_traits.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_STRUCT_TRAITS_H_
-#define COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_STRUCT_TRAITS_H_
+#ifndef COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_MOJOM_TRAITS_H_
+#define COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_MOJOM_TRAITS_H_
 
 #include "chromeos/disks/disk_mount_manager.h"
-#include "components/arc/common/volume_mounter.mojom.h"
+#include "components/arc/mojom/volume_mounter.mojom.h"
 
 namespace mojo {
 
@@ -28,4 +28,4 @@
 
 }  // namespace mojo
 
-#endif  // COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_STRUCT_TRAITS_H_
+#endif  // COMPONENTS_ARC_VOLUME_MOUNTER_VOLUME_MOUNTER_MOJOM_TRAITS_H_
diff --git a/components/arc/wake_lock/arc_wake_lock_bridge.h b/components/arc/wake_lock/arc_wake_lock_bridge.h
index 4a1d1cd..93b08c2 100644
--- a/components/arc/wake_lock/arc_wake_lock_bridge.h
+++ b/components/arc/wake_lock/arc_wake_lock_bridge.h
@@ -10,7 +10,7 @@
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "components/arc/common/wake_lock.mojom.h"
+#include "components/arc/mojom/wake_lock.mojom.h"
 #include "components/arc/session/connection_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/common/service_manager_connection.h"
diff --git a/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc b/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc
index e0605d8..af2e3c1 100644
--- a/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc
+++ b/components/arc/wake_lock/arc_wake_lock_bridge_unittest.cc
@@ -10,7 +10,7 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
-#include "components/arc/common/power.mojom.h"
+#include "components/arc/mojom/power.mojom.h"
 #include "components/arc/session/arc_bridge_service.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_power_instance.h"
diff --git a/components/assist_ranker/ranker_url_fetcher.cc b/components/assist_ranker/ranker_url_fetcher.cc
index 6b8a2616..b57f161 100644
--- a/components/assist_ranker/ranker_url_fetcher.cc
+++ b/components/assist_ranker/ranker_url_fetcher.cc
@@ -77,8 +77,7 @@
         })");
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = url_;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   simple_url_loader_ = network::SimpleURLLoader::Create(
       std::move(resource_request), traffic_annotation);
   if (max_retry_on_5xx_ > 0) {
diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/components/autofill/core/browser/autofill_download_manager.cc
index 48ef6d2..7eb87bd 100644
--- a/components/autofill/core/browser/autofill_download_manager.cc
+++ b/components/autofill/core/browser/autofill_download_manager.cc
@@ -847,8 +847,7 @@
 
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = request_url;
-  resource_request->load_flags =
-      net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request->method = method;
 
   // Add Chrome experiment state to the request headers.
diff --git a/components/autofill/core/browser/autofill_external_delegate.cc b/components/autofill/core/browser/autofill_external_delegate.cc
index 9c5d33c..50d988b 100644
--- a/components/autofill/core/browser/autofill_external_delegate.cc
+++ b/components/autofill/core/browser/autofill_external_delegate.cc
@@ -367,7 +367,7 @@
     suggestions->back().icon = "googlePay";
 #else
     suggestions->back().icon =
-        ui::NativeTheme::GetInstanceForNativeUi()->SystemDarkModeEnabled()
+        ui::NativeTheme::GetInstanceForNativeUi()->ShouldUseDarkColors()
             ? "googlePayDark"
             : "googlePay";
 #endif
diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc
index 9cde44a..f864c52 100644
--- a/components/autofill/core/browser/payments/payments_client.cc
+++ b/components/autofill/core/browser/payments/payments_client.cc
@@ -1080,9 +1080,8 @@
 void PaymentsClient::InitializeResourceRequest() {
   resource_request_ = std::make_unique<network::ResourceRequest>();
   resource_request_->url = GetRequestUrl(request_->GetRequestUrlPath());
-  resource_request_->load_flags = net::LOAD_DO_NOT_SAVE_COOKIES |
-                                  net::LOAD_DO_NOT_SEND_COOKIES |
-                                  net::LOAD_DISABLE_CACHE;
+  resource_request_->load_flags = net::LOAD_DISABLE_CACHE;
+  resource_request_->credentials_mode = network::mojom::CredentialsMode::kOmit;
   resource_request_->method = "POST";
   if (base::FeatureList::IsEnabled(
           features::kAutofillSendExperimentIdsInPaymentsRPCs)) {
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc
index 5d47a0f..a0b4e48 100644
--- a/components/autofill/core/browser/personal_data_manager.cc
+++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -1304,11 +1304,8 @@
       base::FeatureList::IsEnabled(
           features::kAutofillEnableAccountWalletStorage)) {
     // For SyncTransport, only show server cards if the user has opted in to
-    // seeing them in the dropdown, or if the feature to always show server
-    // cards is enabled.
-    if (!base::FeatureList::IsEnabled(
-            features::kAutofillAlwaysShowServerCardsInSyncTransport) &&
-        !prefs::IsUserOptedInWalletSyncTransport(
+    // seeing them in the dropdown.
+    if (!prefs::IsUserOptedInWalletSyncTransport(
             pref_service_,
             sync_service_->GetAuthenticatedAccountInfo().account_id)) {
       return false;
@@ -1949,13 +1946,6 @@
   DCHECK(base::FeatureList::IsEnabled(
       features::kAutofillEnableAccountWalletStorage));
 
-  // If the feature to always show the server cards in sync transport mode is
-  // enabled, don't show the option.
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillAlwaysShowServerCardsInSyncTransport)) {
-    return false;
-  }
-
   bool is_opted_in = prefs::IsUserOptedInWalletSyncTransport(
       pref_service_, sync_service_->GetAuthenticatedAccountInfo().account_id);
 
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc
index 7e5c712..1e20f7ba 100644
--- a/components/autofill/core/browser/personal_data_manager_unittest.cc
+++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -6740,11 +6740,6 @@
 // Make sure that the opt in is necessary to show server cards if the
 // appropriate feature is disabled.
 TEST_F(PersonalDataManagerTest, ServerCardsShowInTransportMode_NeedOptIn) {
-  // Disable the feature that always shows server cards in sync transport.
-  base::test::ScopedFeatureList scoped_features;
-  scoped_features.InitAndDisableFeature(
-      features::kAutofillAlwaysShowServerCardsInSyncTransport);
-
   // Set up PersonalDataManager in transport mode.
   ResetPersonalDataManager(USER_MODE_NORMAL,
                            /*use_sync_transport_mode=*/true);
@@ -6772,29 +6767,6 @@
   EXPECT_EQ(1U, personal_data_->GetLocalCreditCards().size());
   EXPECT_EQ(2U, personal_data_->GetServerCreditCards().size());
 }
-
-// Make sure that the opt in is not necessary to show server cards if the
-// appropriate feature is enabled.
-TEST_F(PersonalDataManagerTest, ServerCardsShowInTransportMode_NoOptInNeeded) {
-  // Enable the feature that always shows server cards in sync transport.
-  base::test::ScopedFeatureList scoped_features;
-  scoped_features.InitAndEnableFeature(
-      features::kAutofillAlwaysShowServerCardsInSyncTransport);
-
-  // Set up PersonalDataManager in transport mode.
-  ResetPersonalDataManager(USER_MODE_NORMAL,
-                           /*use_sync_transport_mode=*/true);
-  SetUpThreeCardTypes();
-  AccountInfo active_info = SetActiveSecondaryAccount();
-
-  // Check that the server cards are available for suggestion.
-  EXPECT_EQ(3U, personal_data_->GetCreditCards().size());
-  EXPECT_EQ(
-      3U, personal_data_->GetCreditCardsToSuggest(/*include_server_cards=*/true)
-              .size());
-  EXPECT_EQ(1U, personal_data_->GetLocalCreditCards().size());
-  EXPECT_EQ(2U, personal_data_->GetServerCreditCards().size());
-}
 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
 
 // Tests that all the non settings origins of autofill profiles are cleared but
@@ -7649,18 +7621,6 @@
     histogram_tester.ExpectUniqueSample(kHistogramName, false, 1);
   }
 
-  // Enable feature to always show server cards. The function should now return
-  // false.
-  {
-    base::test::ScopedFeatureList scoped_features;
-    scoped_features.InitWithFeatures(
-        /*enabled_features=*/
-        {features::kAutofillEnableAccountWalletStorage,
-         features::kAutofillAlwaysShowServerCardsInSyncTransport},
-        /*disabled_features=*/{});
-    EXPECT_FALSE(personal_data_->ShouldShowCardsFromAccountOption());
-  }
-
   // Set that the user already opted-in. Check that the function now returns
   // false.
   ::autofill::prefs::SetUserOptedInWalletSyncTransport(
@@ -7767,18 +7727,6 @@
   // Make sure the function returns false.
   EXPECT_FALSE(personal_data_->ShouldShowCardsFromAccountOption());
 
-  // Enable feature to always show server cards. The function should still
-  // return false.
-  {
-    base::test::ScopedFeatureList scoped_features;
-    scoped_features.InitWithFeatures(
-        /*enabled_features=*/
-        {features::kAutofillEnableAccountWalletStorage,
-         features::kAutofillAlwaysShowServerCardsInSyncTransport},
-        /*disabled_features=*/{});
-    EXPECT_FALSE(personal_data_->ShouldShowCardsFromAccountOption());
-  }
-
   // Set that the user already opted-in. Check that the function still returns
   // false.
   ::autofill::prefs::SetUserOptedInWalletSyncTransport(
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
index edde051..0c5c72f 100644
--- a/components/autofill/core/common/autofill_features.cc
+++ b/components/autofill/core/common/autofill_features.cc
@@ -34,11 +34,6 @@
 const base::Feature kAutofillAlwaysFillAddresses{
     "AlwaysFillAddresses", base::FEATURE_ENABLED_BY_DEFAULT};
 
-// Controls whether the server cards are always shown when the user is in sync
-// transport mode, or if an explicit opt-in is required.
-const base::Feature kAutofillAlwaysShowServerCardsInSyncTransport{
-    "AlwaysShowServerCardsInSyncTransport", base::FEATURE_DISABLED_BY_DEFAULT};
-
 // Controls the use of GET (instead of POST) to fetch cacheable autofill query
 // responses.
 const base::Feature kAutofillCacheQueryResponses{
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h
index be02d8a..ed09e3e 100644
--- a/components/autofill/core/common/autofill_features.h
+++ b/components/autofill/core/common/autofill_features.h
@@ -24,7 +24,6 @@
 extern const base::Feature kAutofillAddressNormalizer;
 extern const base::Feature kAutofillAllowNonHttpActivation;
 extern const base::Feature kAutofillAlwaysFillAddresses;
-extern const base::Feature kAutofillAlwaysShowServerCardsInSyncTransport;
 extern const base::Feature kAutofillCacheQueryResponses;
 extern const base::Feature kAutofillCreateDataForTest;
 extern const base::Feature kAutofillCreditCardAssist;
diff --git a/components/autofill_assistant/browser/script_executor.cc b/components/autofill_assistant/browser/script_executor.cc
index c59430d..f60eafd 100644
--- a/components/autofill_assistant/browser/script_executor.cc
+++ b/components/autofill_assistant/browser/script_executor.cc
@@ -300,10 +300,6 @@
 }
 
 void ScriptExecutor::CancelPrompt() {
-  // Delete on_terminate_prompt_ if necessary, without running.
-  if (on_terminate_prompt_)
-    std::move(on_terminate_prompt_);
-
   delegate_->SetUserActions(nullptr);
   CleanUpAfterPrompt();
 }
diff --git a/components/autofill_assistant/browser/script_executor.h b/components/autofill_assistant/browser/script_executor.h
index f4ed444f..caaed0f 100644
--- a/components/autofill_assistant/browser/script_executor.h
+++ b/components/autofill_assistant/browser/script_executor.h
@@ -373,10 +373,6 @@
   TopPadding last_focused_element_top_padding_;
   std::unique_ptr<ElementAreaProto> touchable_element_area_;
 
-  // Callback set by Prompt(). This is called when the prompt is terminated
-  // without selecting any chips. nullptr unless showing a prompt.
-  base::OnceCallback<void()> on_terminate_prompt_;
-
   // Steps towards the requirements for calling |on_expected_navigation_done_|
   // to be fulfilled.
   enum class ExpectedNavigationStep {
diff --git a/components/browser_sync/profile_sync_components_factory_impl.cc b/components/browser_sync/profile_sync_components_factory_impl.cc
index 5a2b17c..78d6ba50 100644
--- a/components/browser_sync/profile_sync_components_factory_impl.cc
+++ b/components/browser_sync/profile_sync_components_factory_impl.cc
@@ -339,6 +339,15 @@
                                 base::Unretained(sync_client_),
                                 syncer::PRINTERS))));
   }
+  if (!disabled_types.Has(syncer::WIFI_CONFIGURATIONS) &&
+      base::FeatureList::IsEnabled(switches::kSyncWifiConfigurations)) {
+    controllers.push_back(std::make_unique<ModelTypeController>(
+        syncer::WIFI_CONFIGURATIONS,
+        std::make_unique<syncer::ForwardingModelTypeControllerDelegate>(
+            sync_client_
+                ->GetControllerDelegateForModelType(syncer::WIFI_CONFIGURATIONS)
+                .get())));
+  }
 #endif
 
   // Reading list sync is enabled by default only on iOS. Register unless
diff --git a/components/cdm/browser/BUILD.gn b/components/cdm/browser/BUILD.gn
index e0458ff..2ea9d0b 100644
--- a/components/cdm/browser/BUILD.gn
+++ b/components/cdm/browser/BUILD.gn
@@ -15,7 +15,7 @@
   public_deps = [
     "//base",
     "//content/public/browser",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//url",
   ]
 
diff --git a/components/cdm/browser/media_drm_storage_impl.h b/components/cdm/browser/media_drm_storage_impl.h
index 009668d4..f0204eb 100644
--- a/components/cdm/browser/media_drm_storage_impl.h
+++ b/components/cdm/browser/media_drm_storage_impl.h
@@ -18,7 +18,7 @@
 #include "content/public/browser/frame_service_base.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents_observer.h"
-#include "media/mojo/interfaces/media_drm_storage.mojom.h"
+#include "media/mojo/mojom/media_drm_storage.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "url/gurl.h"
 #include "url/origin.h"
diff --git a/components/chromeos_camera/common/BUILD.gn b/components/chromeos_camera/common/BUILD.gn
index cba4b6e..cb50b458 100644
--- a/components/chromeos_camera/common/BUILD.gn
+++ b/components/chromeos_camera/common/BUILD.gn
@@ -11,7 +11,7 @@
   ]
 
   public_deps = [
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/mojom/base",
     "//ui/gfx/geometry/mojom",
   ]
diff --git a/components/chromeos_camera/common/jpeg_encode_accelerator.mojom b/components/chromeos_camera/common/jpeg_encode_accelerator.mojom
index 8077bfb..a831d319 100644
--- a/components/chromeos_camera/common/jpeg_encode_accelerator.mojom
+++ b/components/chromeos_camera/common/jpeg_encode_accelerator.mojom
@@ -4,7 +4,7 @@
 
 module chromeos_camera.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 // Encode errors (see components/chromeos_camera/jpeg_encode_accelerator.h).
 enum EncodeStatus {
diff --git a/components/chromeos_camera/common/mjpeg_decode_accelerator.mojom b/components/chromeos_camera/common/mjpeg_decode_accelerator.mojom
index c5280007..30425a3 100644
--- a/components/chromeos_camera/common/mjpeg_decode_accelerator.mojom
+++ b/components/chromeos_camera/common/mjpeg_decode_accelerator.mojom
@@ -4,7 +4,7 @@
 
 module chromeos_camera.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 
diff --git a/components/crash/content/app/BUILD.gn b/components/crash/content/app/BUILD.gn
index 633a18c..8d816597 100644
--- a/components/crash/content/app/BUILD.gn
+++ b/components/crash/content/app/BUILD.gn
@@ -95,13 +95,14 @@
       "//content/public/common:result_codes",
       "//sandbox",
     ]
+  }
 
-    if (is_linux) {
-      deps += [
-        "//content/public/common",
-        "//third_party/breakpad:client",
-      ]
-    }
+  if (is_linux) {
+    deps += [ "//third_party/breakpad:client" ]
+  }
+
+  if (is_chromeos) {
+    deps += [ "//content/public/common" ]
   }
 
   if (is_win) {
diff --git a/components/crash/content/app/breakpad_linux.cc b/components/crash/content/app/breakpad_linux.cc
index 73075082..f3f9932d 100644
--- a/components/crash/content/app/breakpad_linux.cc
+++ b/components/crash/content/app/breakpad_linux.cc
@@ -45,8 +45,6 @@
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/core/common/crash_keys.h"
 #include "content/public/common/content_descriptors.h"
-#include "content/public/common/content_switches.h"
-#include "services/service_manager/embedder/switches.h"
 #include "third_party/breakpad/breakpad/src/client/linux/crash_generation/crash_generation_client.h"
 #include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
 #include "third_party/breakpad/breakpad/src/client/linux/minidump_writer/directory_reader.h"
@@ -64,6 +62,11 @@
 #endif
 #include "third_party/lss/linux_syscall_support.h"
 
+#if defined(OS_CHROMEOS)
+#include "content/public/common/content_switches.h"      // nogncheck
+#include "services/service_manager/embedder/switches.h"  // nogncheck
+#endif
+
 #if defined(ADDRESS_SANITIZER)
 #include <ucontext.h>  // for getcontext().
 #endif
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn
index 68a462d..69827e3 100644
--- a/components/cronet/android/BUILD.gn
+++ b/components/cronet/android/BUILD.gn
@@ -576,7 +576,6 @@
   deps = [
     ":package_api_java",
     ":package_impl_common_java",
-    ":package_impl_util_java",
     ":repackage_platform",
   ]
 }
@@ -586,7 +585,6 @@
   deps = [
     ":package_api_java",
     ":package_impl_common_java",
-    ":package_impl_util_java",
     ":repackage_fake",
   ]
 }
@@ -762,7 +760,7 @@
 repackage_jars("repackage_common") {
   output = "$_package_dir/cronet_impl_common_java.jar"
   deps = cronet_impl_common_java_deps_to_package +
-         [ ":cronet_impl_common_base_java" ]
+         [ ":cronet_impl_common_base_java", ":cronet_impl_java_util_java" ]
 }
 
 if (!is_component_build) {
diff --git a/components/domain_reliability/quic_error_mapping.cc b/components/domain_reliability/quic_error_mapping.cc
index 487332b8..521488c07c 100644
--- a/components/domain_reliability/quic_error_mapping.cc
+++ b/components/domain_reliability/quic_error_mapping.cc
@@ -307,6 +307,8 @@
     {quic::QUIC_IETF_GQUIC_ERROR_MISSING, "quic.ietf.gquic.error_missing"},
     {quic::QUIC_WINDOW_UPDATE_RECEIVED_ON_READ_UNIDIRECTIONAL_STREAM,
      "quic.window.update.received.on.read.unidirectional.stream"},
+    {quic::QUIC_TOO_MANY_BUFFERED_CONTROL_FRAMES,
+     "quic.too.many.buffered.control.frames"},
 
     // QUIC_INVALID_APPLICATION_CLOSE_DATA was code 101. The code has been
     // deprecated, but to keep the assert below happy, there needs to be
diff --git a/components/download/internal/common/download_file_impl.cc b/components/download/internal/common/download_file_impl.cc
index f0ebeb5..2bf878b 100644
--- a/components/download/internal/common/download_file_impl.cc
+++ b/components/download/internal/common/download_file_impl.cc
@@ -564,9 +564,6 @@
   DCHECK(is_paused_);
   is_paused_ = false;
 
-  if (!base::FeatureList::IsEnabled(network::features::kNetworkService))
-    return;
-
   for (auto& stream : source_streams_) {
     SourceStream* source_stream = stream.second.get();
     if (!source_stream->is_finished()) {
@@ -578,8 +575,7 @@
 void DownloadFileImpl::StreamActive(SourceStream* source_stream,
                                     MojoResult result) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  if (base::FeatureList::IsEnabled(network::features::kNetworkService) &&
-      is_paused_)
+  if (is_paused_)
     return;
 
   base::TimeTicks start(base::TimeTicks::Now());
diff --git a/components/exo/drag_drop_operation.cc b/components/exo/drag_drop_operation.cc
index 016eae9..10ba94ec 100644
--- a/components/exo/drag_drop_operation.cc
+++ b/components/exo/drag_drop_operation.cc
@@ -129,6 +129,11 @@
     drag_drop_controller_->DragCancel();
 }
 
+void DragDropOperation::AbortIfPending() {
+  if (!started_by_this_object_)
+    delete this;
+}
+
 void DragDropOperation::OnTextRead(const std::string& mime_type,
                                    base::string16 data) {
   DCHECK(os_exchange_data_);
diff --git a/components/exo/drag_drop_operation.h b/components/exo/drag_drop_operation.h
index d928e2f..0f425951 100644
--- a/components/exo/drag_drop_operation.h
+++ b/components/exo/drag_drop_operation.h
@@ -52,6 +52,9 @@
       Surface* icon,
       ui::DragDropTypes::DragEventSource event_source);
 
+  // Abort the operation if it hasn't been started yet, otherwise do nothing.
+  void AbortIfPending();
+
   // DataSourceObserver:
   void OnDataSourceDestroying(DataSource* source) override;
 
diff --git a/components/exo/gamepad_delegate.h b/components/exo/gamepad_delegate.h
index fc8c5b07..8ca47f8 100644
--- a/components/exo/gamepad_delegate.h
+++ b/components/exo/gamepad_delegate.h
@@ -13,16 +13,11 @@
   // Called when the gamepad has been removed.
   virtual void OnRemoved() = 0;
 
-  // Called when the user moved an axis of the gamepad. Valid axes are defined
-  // by the W3C 'standard gamepad' specification.
-  virtual void OnAxis(int axis, int raw_axis, double value) = 0;
+  // Called when the user moved an axis of the gamepad.
+  virtual void OnAxis(int axis, double value) = 0;
 
   // Called when the user pressed or moved a button of the gamepad.
-  // Valid buttons are defined by the W3C 'standard gamepad' specification.
-  virtual void OnButton(int button,
-                        int raw_button,
-                        bool pressed,
-                        double value) = 0;
+  virtual void OnButton(int button, bool pressed) = 0;
 
   // Called after all gamepad information of this frame has been set and the
   // client should evaluate the updated state.
diff --git a/components/exo/gaming_seat.cc b/components/exo/gaming_seat.cc
index 8a8a3dbd..c578348 100644
--- a/components/exo/gaming_seat.cc
+++ b/components/exo/gaming_seat.cc
@@ -97,11 +97,10 @@
 
   switch (event.type()) {
     case ui::GamepadEventType::BUTTON:
-      it->second->OnButton(event.code(), event.raw_code(), event.value(),
-                           event.value());
+      it->second->OnButton(event.code(), event.value());
       break;
     case ui::GamepadEventType::AXIS:
-      it->second->OnAxis(event.code(), event.raw_code(), event.value());
+      it->second->OnAxis(event.code(), event.value());
       break;
     case ui::GamepadEventType::FRAME:
       it->second->OnFrame();
diff --git a/components/exo/gaming_seat_unittest.cc b/components/exo/gaming_seat_unittest.cc
index dd153f39..6a04350f 100644
--- a/components/exo/gaming_seat_unittest.cc
+++ b/components/exo/gaming_seat_unittest.cc
@@ -37,8 +37,8 @@
 
   // Overridden from GamepadDelegate:
   MOCK_METHOD0(OnRemoved, void());
-  MOCK_METHOD3(OnAxis, void(int, int, double));
-  MOCK_METHOD4(OnButton, void(int, int, bool, double));
+  MOCK_METHOD2(OnAxis, void(int, double));
+  MOCK_METHOD2(OnButton, void(int, bool));
   MOCK_METHOD0(OnFrame, void());
 };
 
@@ -67,7 +67,7 @@
 
   void SendFrameToGamepads(const std::vector<int>& gamepad_device_ids) {
     for (auto& id : gamepad_device_ids) {
-      ui::GamepadEvent event(id, ui::GamepadEventType::FRAME, 0, 0, 0,
+      ui::GamepadEvent event(id, ui::GamepadEventType::FRAME, 0, 0,
                              base::TimeTicks());
       ui::GamepadProviderOzone::GetInstance()->DispatchGamepadEvent(event);
     }
diff --git a/components/exo/pointer.cc b/components/exo/pointer.cc
index 9e0bbed..5c86392 100644
--- a/components/exo/pointer.cc
+++ b/components/exo/pointer.cc
@@ -12,6 +12,7 @@
 #include "components/exo/pointer_delegate.h"
 #include "components/exo/pointer_gesture_pinch_delegate.h"
 #include "components/exo/relative_pointer_delegate.h"
+#include "components/exo/seat.h"
 #include "components/exo/shell_surface_util.h"
 #include "components/exo/surface.h"
 #include "components/exo/wm_helper.h"
@@ -95,9 +96,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 // Pointer, public:
 
-Pointer::Pointer(PointerDelegate* delegate)
+Pointer::Pointer(PointerDelegate* delegate, Seat* seat)
     : SurfaceTreeHost("ExoPointer"),
       delegate_(delegate),
+      seat_(seat),
       cursor_(ui::CursorType::kNull),
       capture_scale_(GetCaptureDisplayInfo().device_scale_factor()),
       capture_ratio_(GetCaptureDisplayInfo().GetDensityRatio()),
@@ -365,10 +367,11 @@
       delegate_->OnPointerFrame();
     }
   }
-
   switch (event->type()) {
-    case ui::ET_MOUSE_PRESSED:
-    case ui::ET_MOUSE_RELEASED: {
+    case ui::ET_MOUSE_RELEASED:
+      seat_->AbortPendingDragOperation();
+      FALLTHROUGH;
+    case ui::ET_MOUSE_PRESSED: {
       delegate_->OnPointerButton(event->time_stamp(),
                                  event->changed_button_flags(),
                                  event->type() == ui::ET_MOUSE_PRESSED);
diff --git a/components/exo/pointer.h b/components/exo/pointer.h
index 823adc5..9cadd43 100644
--- a/components/exo/pointer.h
+++ b/components/exo/pointer.h
@@ -38,6 +38,7 @@
 class PointerDelegate;
 class PointerGesturePinchDelegate;
 class RelativePointerDelegate;
+class Seat;
 class Surface;
 class SurfaceTreeHost;
 
@@ -50,7 +51,7 @@
                 public aura::client::CursorClientObserver,
                 public aura::client::FocusChangeObserver {
  public:
-  explicit Pointer(PointerDelegate* delegate);
+  Pointer(PointerDelegate* delegate, Seat* seat);
   ~Pointer() override;
 
   PointerDelegate* delegate() const { return delegate_; }
@@ -142,6 +143,8 @@
   // The delegate instance that all events are dispatched to.
   PointerDelegate* const delegate_;
 
+  Seat* const seat_;
+
   // The delegate instance that all pinch related events are dispatched to.
   PointerGesturePinchDelegate* pinch_delegate_ = nullptr;
 
diff --git a/components/exo/pointer_unittest.cc b/components/exo/pointer_unittest.cc
index 0674da9..3f712a28 100644
--- a/components/exo/pointer_unittest.cc
+++ b/components/exo/pointer_unittest.cc
@@ -11,7 +11,10 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "components/exo/buffer.h"
+#include "components/exo/data_source.h"
+#include "components/exo/data_source_delegate.h"
 #include "components/exo/pointer_delegate.h"
+#include "components/exo/seat.h"
 #include "components/exo/shell_surface.h"
 #include "components/exo/sub_surface.h"
 #include "components/exo/surface.h"
@@ -46,6 +49,22 @@
   MOCK_METHOD0(OnPointerFrame, void());
 };
 
+class TestDataSourceDelegate : public DataSourceDelegate {
+ public:
+  TestDataSourceDelegate() {}
+
+  // Overridden from DataSourceDelegate:
+  void OnDataSourceDestroying(DataSource* device) override {}
+  void OnTarget(const std::string& mime_type) override {}
+  void OnSend(const std::string& mime_type, base::ScopedFD fd) override {}
+  void OnCancelled() override {}
+  void OnDndDropPerformed() override {}
+  void OnDndFinished() override {}
+  void OnAction(DndAction dnd_action) override {}
+
+  DISALLOW_COPY_AND_ASSIGN(TestDataSourceDelegate);
+};
+
 class PointerTest : public test::ExoTestBase {
  public:
   PointerTest() = default;
@@ -72,7 +91,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -134,7 +154,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -165,7 +186,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -223,7 +245,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -255,7 +278,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -328,7 +352,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -372,7 +397,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -395,7 +421,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -428,7 +455,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -501,7 +529,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -531,7 +560,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
   gfx::Point location = surface->window()->GetBoundsInScreen().origin();
 
@@ -566,7 +596,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
   gfx::Point location = surface->window()->GetBoundsInScreen().origin();
 
@@ -601,7 +632,8 @@
   surface->Commit();
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptPointerEventsForSurface(surface.get()))
@@ -636,7 +668,8 @@
   EXPECT_TRUE(ash::Shell::IsSystemModalWindowOpen());
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, OnPointerFrame()).Times(testing::AnyNumber());
@@ -694,7 +727,8 @@
   EXPECT_TRUE(ash::Shell::IsSystemModalWindowOpen());
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, OnPointerFrame()).Times(testing::AnyNumber());
@@ -755,7 +789,8 @@
   EXPECT_TRUE(ash::Shell::IsSystemModalWindowOpen());
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, OnPointerFrame()).Times(testing::AnyNumber());
@@ -802,7 +837,8 @@
   ash::CenterWindow(shell_surface2->GetWidget()->GetNativeWindow());
 
   MockPointerDelegate delegate;
-  std::unique_ptr<Pointer> pointer(new Pointer(&delegate));
+  Seat seat;
+  std::unique_ptr<Pointer> pointer(new Pointer(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, OnPointerFrame()).Times(testing::AnyNumber());
@@ -846,5 +882,41 @@
   pointer.reset();
 }
 
+TEST_F(PointerTest, DragDropAbort) {
+  Seat seat;
+  MockPointerDelegate pointer_delegate;
+  std::unique_ptr<Pointer> pointer(new Pointer(&pointer_delegate, &seat));
+  TestDataSourceDelegate data_source_delegate;
+  DataSource source(&data_source_delegate);
+  Surface origin, icon;
+
+  // Make origin into a real window so the pointer can click it
+  ShellSurface shell_surface(&origin);
+  Buffer buffer(exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(10, 10)));
+  origin.Attach(&buffer);
+  origin.Commit();
+
+  ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
+
+  EXPECT_CALL(pointer_delegate, CanAcceptPointerEventsForSurface(&origin))
+      .WillRepeatedly(testing::Return(true));
+  EXPECT_CALL(pointer_delegate, OnPointerFrame()).Times(3);
+  EXPECT_CALL(pointer_delegate, OnPointerEnter(&origin, gfx::PointF(), 0));
+  generator.MoveMouseTo(origin.window()->GetBoundsInScreen().origin());
+
+  seat.StartDrag(&source, &origin, &icon,
+                 ui::DragDropTypes::DragEventSource::DRAG_EVENT_SOURCE_MOUSE);
+  EXPECT_TRUE(seat.get_drag_drop_operation_for_testing());
+
+  EXPECT_CALL(pointer_delegate, OnPointerButton).Times(2);
+  generator.PressLeftButton();
+  EXPECT_TRUE(seat.get_drag_drop_operation_for_testing());
+  generator.ReleaseLeftButton();
+  EXPECT_FALSE(seat.get_drag_drop_operation_for_testing());
+
+  EXPECT_CALL(pointer_delegate, OnPointerDestroying(pointer.get()));
+  pointer.reset();
+}
+
 }  // namespace
 }  // namespace exo
diff --git a/components/exo/seat.cc b/components/exo/seat.cc
index d9835d4d..43c069f 100644
--- a/components/exo/seat.cc
+++ b/components/exo/seat.cc
@@ -89,7 +89,13 @@
                      Surface* icon,
                      ui::DragDropTypes::DragEventSource event_source) {
   // DragDropOperation manages its own lifetime.
-  DragDropOperation::Create(source, origin, icon, event_source);
+  drag_drop_operation_ =
+      DragDropOperation::Create(source, origin, icon, event_source);
+}
+
+void Seat::AbortPendingDragOperation() {
+  if (drag_drop_operation_)
+    drag_drop_operation_->AbortIfPending();
 }
 
 void Seat::SetSelection(DataSource* source) {
diff --git a/components/exo/seat.h b/components/exo/seat.h
index 5353c947..29d64480 100644
--- a/components/exo/seat.h
+++ b/components/exo/seat.h
@@ -24,6 +24,7 @@
 }  // namespace ui
 
 namespace exo {
+class DragDropOperation;
 class ScopedDataSource;
 class SeatObserver;
 class Surface;
@@ -71,6 +72,9 @@
                  Surface* icon,
                  ui::DragDropTypes::DragEventSource event_source);
 
+  // Abort any drag operations that haven't been started yet.
+  void AbortPendingDragOperation();
+
   // Overridden from aura::client::FocusChangeObserver:
   void OnWindowFocused(aura::Window* gained_focus,
                        aura::Window* lost_focus) override;
@@ -94,6 +98,10 @@
         physical_code_for_currently_processing_event;
   }
 
+  base::WeakPtr<DragDropOperation> get_drag_drop_operation_for_testing() {
+    return drag_drop_operation_;
+  }
+
  private:
   class RefCountedScopedClipboardWriter
       : public ui::ScopedClipboardWriter,
@@ -146,6 +154,8 @@
   // Data source being used as a clipboard content.
   std::unique_ptr<ScopedDataSource> selection_source_;
 
+  base::WeakPtr<DragDropOperation> drag_drop_operation_;
+
   // True while Seat is updating clipboard data to selection source.
   bool changing_clipboard_data_to_selection_source_;
 
diff --git a/components/exo/seat_unittest.cc b/components/exo/seat_unittest.cc
index e5959687..c97aa8d7 100644
--- a/components/exo/seat_unittest.cc
+++ b/components/exo/seat_unittest.cc
@@ -11,6 +11,7 @@
 #include "components/exo/data_source.h"
 #include "components/exo/data_source_delegate.h"
 #include "components/exo/seat_observer.h"
+#include "components/exo/surface.h"
 #include "components/exo/test/exo_test_base.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/clipboard/clipboard.h"
@@ -443,5 +444,21 @@
   EXPECT_TRUE(seat.pressed_keys().empty());
 }
 
+TEST_F(SeatTest, DragDropAbort) {
+  Seat seat;
+  TestDataSourceDelegate delegate;
+  DataSource source(&delegate);
+  Surface origin, icon;
+
+  // Give origin a root window for DragDropOperation.
+  CurrentContext()->AddChild(origin.window());
+
+  seat.StartDrag(&source, &origin, &icon,
+                 ui::DragDropTypes::DragEventSource::DRAG_EVENT_SOURCE_MOUSE);
+  EXPECT_TRUE(seat.get_drag_drop_operation_for_testing());
+  seat.AbortPendingDragOperation();
+  EXPECT_FALSE(seat.get_drag_drop_operation_for_testing());
+}
+
 }  // namespace
 }  // namespace exo
diff --git a/components/exo/touch.cc b/components/exo/touch.cc
index a7b27e1b..f68b336f 100644
--- a/components/exo/touch.cc
+++ b/components/exo/touch.cc
@@ -5,6 +5,7 @@
 #include "components/exo/touch.h"
 
 #include "components/exo/input_trace.h"
+#include "components/exo/seat.h"
 #include "components/exo/shell_surface_util.h"
 #include "components/exo/surface.h"
 #include "components/exo/touch_delegate.h"
@@ -47,7 +48,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 // Touch, public:
 
-Touch::Touch(TouchDelegate* delegate) : delegate_(delegate) {
+Touch::Touch(TouchDelegate* delegate, Seat* seat)
+    : delegate_(delegate), seat_(seat) {
   WMHelper::GetInstance()->AddPreTargetHandler(this);
 }
 
@@ -127,6 +129,7 @@
       }
 
       delegate_->OnTouchUp(event->time_stamp(), touch_pointer_id);
+      seat_->AbortPendingDragOperation();
     } break;
     case ui::ET_TOUCH_MOVED: {
       auto it = FindVectorItem(touch_points_, touch_pointer_id);
@@ -155,6 +158,7 @@
       // Cancel the full set of touch sequences as soon as one is canceled.
       touch_points_.clear();
       delegate_->OnTouchCancel();
+      seat_->AbortPendingDragOperation();
     } break;
     default:
       NOTREACHED();
diff --git a/components/exo/touch.h b/components/exo/touch.h
index bfe7878..4177305 100644
--- a/components/exo/touch.h
+++ b/components/exo/touch.h
@@ -18,6 +18,7 @@
 }
 
 namespace exo {
+class Seat;
 class TouchDelegate;
 class TouchStylusDelegate;
 
@@ -25,7 +26,7 @@
 // touch devices.
 class Touch : public ui::EventHandler, public SurfaceObserver {
  public:
-  explicit Touch(TouchDelegate* delegate);
+  Touch(TouchDelegate* delegate, Seat* seat);
   ~Touch() override;
 
   TouchDelegate* delegate() const { return delegate_; }
@@ -47,6 +48,8 @@
   // The delegate instance that all events are dispatched to.
   TouchDelegate* const delegate_;
 
+  Seat* const seat_;
+
   // The delegate instance that all stylus related events are dispatched to.
   TouchStylusDelegate* stylus_delegate_ = nullptr;
 
diff --git a/components/exo/touch_unittest.cc b/components/exo/touch_unittest.cc
index f9737e1..b872f73 100644
--- a/components/exo/touch_unittest.cc
+++ b/components/exo/touch_unittest.cc
@@ -9,6 +9,9 @@
 #include "ash/wm/window_positioner.h"
 #include "ash/wm/window_positioning_utils.h"
 #include "components/exo/buffer.h"
+#include "components/exo/data_source.h"
+#include "components/exo/data_source_delegate.h"
+#include "components/exo/seat.h"
 #include "components/exo/shell_surface.h"
 #include "components/exo/surface.h"
 #include "components/exo/test/exo_test_base.h"
@@ -52,9 +55,26 @@
   MOCK_METHOD3(OnTouchTilt, void(base::TimeTicks, int, const gfx::Vector2dF&));
 };
 
+class TestDataSourceDelegate : public DataSourceDelegate {
+ public:
+  TestDataSourceDelegate() {}
+
+  // Overridden from DataSourceDelegate:
+  void OnDataSourceDestroying(DataSource* device) override {}
+  void OnTarget(const std::string& mime_type) override {}
+  void OnSend(const std::string& mime_type, base::ScopedFD fd) override {}
+  void OnCancelled() override {}
+  void OnDndDropPerformed() override {}
+  void OnDndFinished() override {}
+  void OnAction(DndAction dnd_action) override {}
+
+  DISALLOW_COPY_AND_ASSIGN(TestDataSourceDelegate);
+};
+
 TEST_F(TouchTest, OnTouchDown) {
   MockTouchDelegate delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   auto bottom_window = exo_test_helper()->CreateWindow(10, 10, false);
@@ -89,7 +109,8 @@
   auto window = exo_test_helper()->CreateWindow(10, 10, false);
 
   MockTouchDelegate delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
@@ -119,7 +140,8 @@
   auto window = exo_test_helper()->CreateWindow(10, 10, false);
 
   MockTouchDelegate delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
@@ -154,7 +176,8 @@
   auto window = exo_test_helper()->CreateWindow(10, 10, false);
 
   MockTouchDelegate delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, CanAcceptTouchEventsForSurface(window.surface()))
@@ -191,7 +214,8 @@
   auto window = exo_test_helper()->CreateWindow(10, 10, false);
 
   MockTouchDelegate delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   EXPECT_CALL(delegate, OnTouchShape(testing::_, testing::_, testing::_))
@@ -223,7 +247,8 @@
   auto modal = exo_test_helper()->CreateWindow(5, 5, true);
 
   MockTouchDelegate delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
 
   // Make the window modal.
@@ -295,7 +320,8 @@
 
   MockTouchDelegate delegate;
   MockTouchStylusDelegate stylus_delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
   touch->SetStylusDelegate(&stylus_delegate);
 
@@ -329,7 +355,8 @@
 
   MockTouchDelegate delegate;
   MockTouchStylusDelegate stylus_delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
   touch->SetStylusDelegate(&stylus_delegate);
 
@@ -365,7 +392,8 @@
 
   MockTouchDelegate delegate;
   MockTouchStylusDelegate stylus_delegate;
-  std::unique_ptr<Touch> touch(new Touch(&delegate));
+  Seat seat;
+  std::unique_ptr<Touch> touch(new Touch(&delegate, &seat));
   ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
   touch->SetStylusDelegate(&stylus_delegate);
 
@@ -397,5 +425,42 @@
   touch.reset();
 }
 
+TEST_F(TouchTest, DragDropAbort) {
+  Seat seat;
+  MockTouchDelegate touch_delegate;
+  std::unique_ptr<Touch> touch(new Touch(&touch_delegate, &seat));
+  TestDataSourceDelegate data_source_delegate;
+  DataSource source(&data_source_delegate);
+  Surface origin, icon;
+
+  // Make origin into a real window so the touch can click it
+  ShellSurface shell_surface(&origin);
+  Buffer buffer(exo_test_helper()->CreateGpuMemoryBuffer(gfx::Size(10, 10)));
+  origin.Attach(&buffer);
+  origin.Commit();
+
+  ui::test::EventGenerator generator(ash::Shell::GetPrimaryRootWindow());
+
+  EXPECT_CALL(touch_delegate, CanAcceptTouchEventsForSurface(&origin))
+      .WillRepeatedly(testing::Return(true));
+  EXPECT_CALL(touch_delegate, OnTouchFrame()).Times(2);
+  generator.MoveTouch(origin.window()->GetBoundsInScreen().origin());
+
+  seat.StartDrag(&source, &origin, &icon,
+                 ui::DragDropTypes::DragEventSource::DRAG_EVENT_SOURCE_MOUSE);
+  EXPECT_TRUE(seat.get_drag_drop_operation_for_testing());
+
+  EXPECT_CALL(touch_delegate, OnTouchDown).Times(1);
+  EXPECT_CALL(touch_delegate, OnTouchUp).Times(1);
+  EXPECT_CALL(touch_delegate, OnTouchShape).Times(1);
+  generator.PressTouch();
+  EXPECT_TRUE(seat.get_drag_drop_operation_for_testing());
+  generator.ReleaseTouch();
+  EXPECT_FALSE(seat.get_drag_drop_operation_for_testing());
+
+  EXPECT_CALL(touch_delegate, OnTouchDestroying(touch.get()));
+  touch.reset();
+}
+
 }  // namespace
 }  // namespace exo
diff --git a/components/exo/wayland/serial_tracker.cc b/components/exo/wayland/serial_tracker.cc
index 4dfdb7d..80f3217 100644
--- a/components/exo/wayland/serial_tracker.cc
+++ b/components/exo/wayland/serial_tracker.cc
@@ -28,6 +28,23 @@
   if ((max_event_ - min_event_) > kMaxEventsTracked)
     min_event_ = max_event_ - kMaxEventsTracked;
 
+  switch (type) {
+    case EventType::POINTER_BUTTON_DOWN:
+      pointer_down_serial_ = serial;
+      break;
+    case EventType::POINTER_BUTTON_UP:
+      pointer_down_serial_ = base::nullopt;
+      break;
+    case EventType::TOUCH_DOWN:
+      touch_down_serial_ = serial;
+      break;
+    case EventType::TOUCH_UP:
+      touch_down_serial_ = base::nullopt;
+      break;
+    default:
+      break;
+  }
+
   return serial;
 }
 
@@ -49,5 +66,17 @@
   return events_[serial % kMaxEventsTracked];
 }
 
+base::Optional<uint32_t> SerialTracker::GetPointerDownSerial() {
+  return pointer_down_serial_;
+}
+
+base::Optional<uint32_t> SerialTracker::GetTouchDownSerial() {
+  return touch_down_serial_;
+}
+
+void SerialTracker::ResetTouchDownSerial() {
+  touch_down_serial_ = base::nullopt;
+}
+
 }  // namespace wayland
 }  // namespace exo
diff --git a/components/exo/wayland/serial_tracker.h b/components/exo/wayland/serial_tracker.h
index 92e51491..81d1126 100644
--- a/components/exo/wayland/serial_tracker.h
+++ b/components/exo/wayland/serial_tracker.h
@@ -22,7 +22,8 @@
   enum EventType {
     POINTER_ENTER,
     POINTER_LEAVE,
-    POINTER_BUTTON,
+    POINTER_BUTTON_DOWN,
+    POINTER_BUTTON_UP,
 
     TOUCH_DOWN,
     TOUCH_UP,
@@ -35,6 +36,15 @@
 
   uint32_t GetNextSerial(EventType type);
 
+  // Get the serial number of the last {pointer,touch} pressed event, or nullopt
+  // if the press has since been released.
+  base::Optional<uint32_t> GetPointerDownSerial();
+  base::Optional<uint32_t> GetTouchDownSerial();
+
+  // Needed because wl_touch::cancel doesn't send a serial number, so we can't
+  // test for it in GetNextSerial.
+  void ResetTouchDownSerial();
+
   // Get the EventType for a serial number, or nullopt if the serial number was
   // never sent or is too old.
   base::Optional<EventType> GetEventType(uint32_t serial) const;
@@ -54,6 +64,9 @@
   uint32_t min_event_ = 1;
   uint32_t max_event_ = 1;
 
+  base::Optional<uint32_t> pointer_down_serial_;
+  base::Optional<uint32_t> touch_down_serial_;
+
   DISALLOW_COPY_AND_ASSIGN(SerialTracker);
 };
 
diff --git a/components/exo/wayland/wayland_pointer_delegate.cc b/components/exo/wayland/wayland_pointer_delegate.cc
index b1717e07..0dff8a6 100644
--- a/components/exo/wayland/wayland_pointer_delegate.cc
+++ b/components/exo/wayland/wayland_pointer_delegate.cc
@@ -81,9 +81,11 @@
   for (auto button : buttons) {
     if (button_flags & button.flag) {
       SendTimestamp(time_stamp);
+      SerialTracker::EventType event_type =
+          pressed ? SerialTracker::EventType::POINTER_BUTTON_DOWN
+                  : SerialTracker::EventType::POINTER_BUTTON_UP;
       wl_pointer_send_button(pointer_resource_,
-                             serial_tracker_->GetNextSerial(
-                                 SerialTracker::EventType::POINTER_BUTTON),
+                             serial_tracker_->GetNextSerial(event_type),
                              TimeTicksToMilliseconds(time_stamp), button.value,
                              pressed ? WL_POINTER_BUTTON_STATE_PRESSED
                                      : WL_POINTER_BUTTON_STATE_RELEASED);
diff --git a/components/exo/wayland/wayland_touch_delegate.cc b/components/exo/wayland/wayland_touch_delegate.cc
index 023700a4..040e8ef 100644
--- a/components/exo/wayland/wayland_touch_delegate.cc
+++ b/components/exo/wayland/wayland_touch_delegate.cc
@@ -74,6 +74,7 @@
 }
 void WaylandTouchDelegate::OnTouchCancel() {
   wl_touch_send_cancel(touch_resource_);
+  serial_tracker_->ResetTouchDownSerial();
 }
 
 wl_client* WaylandTouchDelegate::client() const {
diff --git a/components/exo/wayland/wl_data_device_manager.cc b/components/exo/wayland/wl_data_device_manager.cc
index 3cdccdb..bdb5386 100644
--- a/components/exo/wayland/wl_data_device_manager.cc
+++ b/components/exo/wayland/wl_data_device_manager.cc
@@ -295,11 +295,13 @@
                  uint32_t serial) {
     base::Optional<wayland::SerialTracker::EventType> event_type =
         serial_tracker_->GetEventType(serial);
-    if (event_type == wayland::SerialTracker::EventType::POINTER_BUTTON) {
+    if (event_type == wayland::SerialTracker::EventType::POINTER_BUTTON_DOWN &&
+        serial_tracker_->GetPointerDownSerial() == serial) {
       data_device->StartDrag(
           source, origin, icon,
           ui::DragDropTypes::DragEventSource::DRAG_EVENT_SOURCE_MOUSE);
-    } else if (event_type == wayland::SerialTracker::EventType::TOUCH_DOWN) {
+    } else if (event_type == wayland::SerialTracker::EventType::TOUCH_DOWN &&
+               serial_tracker_->GetTouchDownSerial() == serial) {
       data_device->StartDrag(
           source, origin, icon,
           ui::DragDropTypes::DragEventSource::DRAG_EVENT_SOURCE_TOUCH);
diff --git a/components/exo/wayland/wl_seat.cc b/components/exo/wayland/wl_seat.cc
index 571e553d..80c2f2b 100644
--- a/components/exo/wayland/wl_seat.cc
+++ b/components/exo/wayland/wl_seat.cc
@@ -78,9 +78,11 @@
   wl_resource* pointer_resource = wl_resource_create(
       client, &wl_pointer_interface, wl_resource_get_version(resource), id);
 
-  SetImplementation(pointer_resource, &pointer_implementation,
-                    std::make_unique<Pointer>(new WaylandPointerDelegate(
-                        pointer_resource, data->serial_tracker)));
+  SetImplementation(
+      pointer_resource, &pointer_implementation,
+      std::make_unique<Pointer>(
+          new WaylandPointerDelegate(pointer_resource, data->serial_tracker),
+          data->seat));
 }
 
 void seat_get_keyboard(wl_client* client, wl_resource* resource, uint32_t id) {
@@ -117,9 +119,11 @@
   wl_resource* touch_resource = wl_resource_create(
       client, &wl_touch_interface, wl_resource_get_version(resource), id);
 
-  SetImplementation(touch_resource, &touch_implementation,
-                    std::make_unique<Touch>(new WaylandTouchDelegate(
-                        touch_resource, data->serial_tracker)));
+  SetImplementation(
+      touch_resource, &touch_implementation,
+      std::make_unique<Touch>(
+          new WaylandTouchDelegate(touch_resource, data->serial_tracker),
+          data->seat));
 }
 
 void seat_release(wl_client* client, wl_resource* resource) {
diff --git a/components/exo/wayland/zcr_gaming_input.cc b/components/exo/wayland/zcr_gaming_input.cc
index 515b205..ad9a746 100644
--- a/components/exo/wayland/zcr_gaming_input.cc
+++ b/components/exo/wayland/zcr_gaming_input.cc
@@ -21,11 +21,6 @@
 
 namespace {
 
-// Expose raw gamepad device information to the client.
-// TODO(tetsui): Remove when the change becomes default.
-const base::Feature kRawGamepadInfoFeature{"ExoRawGamepadInfo",
-                                           base::FEATURE_ENABLED_BY_DEFAULT};
-
 unsigned int GetGamepadBusType(ui::InputDeviceType type) {
   switch (type) {
     case ui::INPUT_DEVICE_BLUETOOTH:
@@ -69,37 +64,21 @@
     wl_resource_set_user_data(gamepad_resource_, nullptr);
     delete this;
   }
-  void OnAxis(int axis, int raw_axis, double value) override {
+  void OnAxis(int axis, double value) override {
     if (!gamepad_resource_) {
       return;
     }
-    // There are two types of axis events: Web Gamepad remapped and raw. When
-    // |axis| is not WG_ABS_COUNT, it's Web Gamepad remapped. ExoRawGamepadInfo
-    // expects raw events to be forawrded, so we should discard remapped ones.
-    // TODO(tetsui): Remove this when Web Gamepad mapping in Ozone is removed.
-    if (base::FeatureList::IsEnabled(kRawGamepadInfoFeature) &&
-        axis != ui::WG_ABS_COUNT) {
-      return;
-    }
-    zcr_gamepad_v2_send_axis(
-        gamepad_resource_, NowInMilliseconds(),
-        base::FeatureList::IsEnabled(kRawGamepadInfoFeature) ? raw_axis : axis,
-        wl_fixed_from_double(value));
+    zcr_gamepad_v2_send_axis(gamepad_resource_, NowInMilliseconds(), axis,
+                             wl_fixed_from_double(value));
   }
-  void OnButton(int button,
-                int raw_button,
-                bool pressed,
-                double value) override {
+  void OnButton(int button, bool pressed) override {
     if (!gamepad_resource_) {
       return;
     }
     uint32_t state = pressed ? ZCR_GAMEPAD_V2_BUTTON_STATE_PRESSED
                              : ZCR_GAMEPAD_V2_BUTTON_STATE_RELEASED;
-    zcr_gamepad_v2_send_button(
-        gamepad_resource_, NowInMilliseconds(),
-        base::FeatureList::IsEnabled(kRawGamepadInfoFeature) ? raw_button
-                                                             : button,
-        state, wl_fixed_from_double(value));
+    zcr_gamepad_v2_send_button(gamepad_resource_, NowInMilliseconds(), button,
+                               state, wl_fixed_from_double(0));
   }
   void OnFrame() override {
     if (!gamepad_resource_) {
@@ -158,22 +137,17 @@
         gamepad_resource, &gamepad_implementation, gamepad_delegate,
         &WaylandGamepadDelegate::ResetGamepadResource);
 
-    if (base::FeatureList::IsEnabled(kRawGamepadInfoFeature)) {
-      zcr_gaming_seat_v2_send_gamepad_added_with_device_info(
-          gaming_seat_resource_, gamepad_resource, device.name.c_str(),
-          GetGamepadBusType(device.type), device.vendor_id, device.product_id,
-          device.version);
+    zcr_gaming_seat_v2_send_gamepad_added_with_device_info(
+        gaming_seat_resource_, gamepad_resource, device.name.c_str(),
+        GetGamepadBusType(device.type), device.vendor_id, device.product_id,
+        device.version);
 
-      for (const auto& axis : device.axes) {
-        zcr_gamepad_v2_send_axis_added(gamepad_resource, axis.code,
-                                       axis.min_value, axis.max_value,
-                                       axis.flat, axis.fuzz, axis.resolution);
-      }
-      zcr_gamepad_v2_send_activated(gamepad_resource);
-    } else {
-      zcr_gaming_seat_v2_send_gamepad_added(gaming_seat_resource_,
-                                            gamepad_resource);
+    for (const auto& axis : device.axes) {
+      zcr_gamepad_v2_send_axis_added(gamepad_resource, axis.code,
+                                     axis.min_value, axis.max_value, axis.flat,
+                                     axis.fuzz, axis.resolution);
     }
+    zcr_gamepad_v2_send_activated(gamepad_resource);
     wl_client_flush(wl_resource_get_client(gaming_seat_resource_));
 
     return gamepad_delegate;
diff --git a/components/exo/wayland/zcr_remote_shell.cc b/components/exo/wayland/zcr_remote_shell.cc
index 0ab01749..8e0254e6 100644
--- a/components/exo/wayland/zcr_remote_shell.cc
+++ b/components/exo/wayland/zcr_remote_shell.cc
@@ -37,6 +37,7 @@
 #include "ui/display/screen.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/window/caption_button_types.h"
+#include "ui/wm/core/coordinate_conversion.h"
 #include "ui/wm/core/window_animations.h"
 #include "ui/wm/public/activation_change_observer.h"
 
@@ -976,10 +977,23 @@
       reason = ZCR_REMOTE_SURFACE_V1_BOUNDS_CHANGE_REASON_SNAP_TO_RIGHT;
     }
   }
-  zcr_remote_surface_v1_send_bounds_changed(
-      resource, static_cast<uint32_t>(display_id >> 32),
-      static_cast<uint32_t>(display_id), bounds.x(), bounds.y(), bounds.width(),
-      bounds.height(), reason);
+  if (wl_resource_get_version(resource) >= 22) {
+    // Notify bounds change by local bounds.
+     auto* widget = GetUserDataAs<ShellSurfaceBase>(resource)->GetWidget();
+    gfx::Rect bounds_in_display = gfx::Rect(bounds);
+    wm::ConvertRectFromScreen(widget->GetNativeWindow()->parent(),
+                              &bounds_in_display);
+    zcr_remote_surface_v1_send_bounds_changed(
+        resource, static_cast<uint32_t>(display_id >> 32),
+        static_cast<uint32_t>(display_id), bounds_in_display.x(),
+        bounds_in_display.y(), bounds_in_display.width(),
+        bounds_in_display.height(), reason);
+  } else {
+    zcr_remote_surface_v1_send_bounds_changed(
+        resource, static_cast<uint32_t>(display_id >> 32),
+        static_cast<uint32_t>(display_id), bounds.x(), bounds.y(),
+        bounds.width(), bounds.height(), reason);
+  }
   wl_client_flush(wl_resource_get_client(resource));
 }
 
diff --git a/components/exo/wayland/zcr_remote_shell.h b/components/exo/wayland/zcr_remote_shell.h
index 3d55ad7..4b9112d 100644
--- a/components/exo/wayland/zcr_remote_shell.h
+++ b/components/exo/wayland/zcr_remote_shell.h
@@ -22,7 +22,7 @@
 namespace exo {
 namespace wayland {
 
-constexpr uint32_t kZcrRemoteShellVersion = 21;
+constexpr uint32_t kZcrRemoteShellVersion = 22;
 
 void bind_remote_shell(wl_client* client,
                        void* data,
diff --git a/components/gcm_driver/android/BUILD.gn b/components/gcm_driver/android/BUILD.gn
index 81aa2f8..ec731b371 100644
--- a/components/gcm_driver/android/BUILD.gn
+++ b/components/gcm_driver/android/BUILD.gn
@@ -24,6 +24,7 @@
     "java/src/org/chromium/components/gcm_driver/GoogleCloudMessagingSubscriber.java",
     "java/src/org/chromium/components/gcm_driver/GoogleCloudMessagingV2.java",
     "java/src/org/chromium/components/gcm_driver/LazySubscriptionsManager.java",
+    "java/src/org/chromium/components/gcm_driver/SubscriptionFlagManager.java",
   ]
 }
 
diff --git a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/SubscriptionFlagManager.java b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/SubscriptionFlagManager.java
new file mode 100644
index 0000000..383e668
--- /dev/null
+++ b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/SubscriptionFlagManager.java
@@ -0,0 +1,74 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.gcm_driver;
+
+import android.content.Context;
+
+import org.chromium.base.ContextUtils;
+import org.chromium.base.StrictModeContext;
+
+/**
+ * This class is responsible for persisting subscription specific flags to make them available
+ * before native has loaded.
+ */
+public class SubscriptionFlagManager {
+    private static final String TAG = "SubscriptionFlagManager";
+    private static final String PREF_PACKAGE =
+            "org.chromium.components.gcm_driver.subscription_flags";
+
+    // Private constructor because all methods in this class are static, and it
+    // shouldn't be instantiated.
+    private SubscriptionFlagManager() {}
+
+    /**
+     * Given an appId and a senderId, this methods builds a unique identifier for a subscription.
+     * Currently implementation concatenates both senderId and appId.
+     * @param appId
+     * @param senderId
+     * @return The unique identifier for the subscription.
+     */
+    public static String buildSubscriptionUniqueId(final String appId, final String senderId) {
+        return appId + senderId;
+    }
+
+    /**
+     * Stores the flags for a |subscriptionId| in SharedPreferences.
+     */
+    public static void setFlags(final String subscriptionId, int flags) {
+        if (flags == 0) {
+            clearFlags(subscriptionId);
+            return;
+        }
+        ContextUtils.getApplicationContext()
+                .getSharedPreferences(PREF_PACKAGE, Context.MODE_PRIVATE)
+                .edit()
+                .putInt(subscriptionId, flags)
+                .apply();
+    }
+
+    /**
+     * Removes flags for |subscriptionId| from SharedPreferences.
+     */
+    public static void clearFlags(final String subscriptionId) {
+        ContextUtils.getApplicationContext()
+                .getSharedPreferences(PREF_PACKAGE, Context.MODE_PRIVATE)
+                .edit()
+                .remove(subscriptionId)
+                .apply();
+    }
+
+    /**
+     * Returns whether the subscription with |subscriptionId| has all |flags|.
+     */
+    public static boolean hasFlags(final String subscriptionId, int flags) {
+        try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
+            int subscriptionFlags =
+                    ContextUtils.getApplicationContext()
+                            .getSharedPreferences(PREF_PACKAGE, Context.MODE_PRIVATE)
+                            .getInt(subscriptionId, 0);
+            return (subscriptionFlags & flags) == flags;
+        }
+    }
+}
diff --git a/components/gcm_driver/instance_id/BUILD.gn b/components/gcm_driver/instance_id/BUILD.gn
index 5a316155..b3a28a69 100644
--- a/components/gcm_driver/instance_id/BUILD.gn
+++ b/components/gcm_driver/instance_id/BUILD.gn
@@ -4,6 +4,10 @@
 
 import("//components/gcm_driver/config.gni")
 
+if (is_android) {
+  import("//build/config/android/rules.gni")
+}
+
 static_library("instance_id") {
   sources = [
     "instance_id.cc",
@@ -77,3 +81,11 @@
     "//testing/gtest",
   ]
 }
+
+if (is_android) {
+  java_cpp_enum("instance_id_java_enums_srcjar") {
+    sources = [
+      "instance_id.h",
+    ]
+  }
+}
diff --git a/components/gcm_driver/instance_id/android/BUILD.gn b/components/gcm_driver/instance_id/android/BUILD.gn
index e5b2483..a0e0775 100644
--- a/components/gcm_driver/instance_id/android/BUILD.gn
+++ b/components/gcm_driver/instance_id/android/BUILD.gn
@@ -23,6 +23,9 @@
     "//components/gcm_driver/android:gcm_driver_java",
   ]
 
+  srcjar_deps =
+      [ "//components/gcm_driver/instance_id:instance_id_java_enums_srcjar" ]
+
   java_files = [
     "java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java",
     "java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java",
diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java
index 28440cfd..8e06aaf 100644
--- a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java
+++ b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java
@@ -9,7 +9,9 @@
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.task.AsyncTask;
+import org.chromium.components.gcm_driver.InstanceIDFlags;
 import org.chromium.components.gcm_driver.LazySubscriptionsManager;
+import org.chromium.components.gcm_driver.SubscriptionFlagManager;
 
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
@@ -101,7 +103,7 @@
      * messages are deferred until there are visible activities.*/
     @CalledByNative
     private void getToken(final int requestId, final String authorizedEntity, final String scope,
-            String[] extrasStrings, boolean isLazy) {
+            String[] extrasStrings, int flags) {
         final Bundle extras = new Bundle();
         assert extrasStrings.length % 2 == 0;
         for (int i = 0; i < extrasStrings.length; i += 2) {
@@ -112,10 +114,16 @@
             @Override
             protected String doBackgroundWork() {
                 try {
+                    // TODO(knollr): Migrate stored LazySubscriptionsManager data to
+                    // SubscriptionFlagManager.
                     LazySubscriptionsManager.storeLazinessInformation(
                             LazySubscriptionsManager.buildSubscriptionUniqueId(
                                     mSubtype, authorizedEntity),
-                            isLazy);
+                            (flags & InstanceIDFlags.IS_LAZY) == InstanceIDFlags.IS_LAZY);
+                    SubscriptionFlagManager.setFlags(
+                            SubscriptionFlagManager.buildSubscriptionUniqueId(
+                                    mSubtype, authorizedEntity),
+                            flags);
                     return mInstanceID.getToken(authorizedEntity, scope, extras);
                 } catch (IOException ex) {
                     return "";
@@ -143,6 +151,9 @@
                         LazySubscriptionsManager.deletePersistedMessagesForSubscriptionId(
                                 subscriptionId);
                     }
+                    SubscriptionFlagManager.clearFlags(
+                            SubscriptionFlagManager.buildSubscriptionUniqueId(
+                                    mSubtype, authorizedEntity));
                     return true;
                 } catch (IOException ex) {
                     return false;
diff --git a/components/gcm_driver/instance_id/instance_id.h b/components/gcm_driver/instance_id/instance_id.h
index dfe35b404..e9e3be48 100644
--- a/components/gcm_driver/instance_id/instance_id.h
+++ b/components/gcm_driver/instance_id/instance_id.h
@@ -7,6 +7,7 @@
 
 #include <map>
 #include <memory>
+#include <set>
 #include <string>
 
 #include "base/callback.h"
@@ -49,6 +50,18 @@
     LAST_RESULT = UNKNOWN_ERROR
   };
 
+  // Flags to be used to create a token. These might be platform specific.
+  // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.gcm_driver
+  // GENERATED_JAVA_CLASS_NAME_OVERRIDE: InstanceIDFlags
+  enum class Flags {
+    // Whether delivery of received messages should be deferred until there is a
+    // visible activity. Only applicable for Android.
+    kIsLazy = 1 << 0,
+    // Whether delivery of received messages should bypass the background task
+    // scheduler. Only applicable for high priority messages on Android.
+    kBypassScheduler = 1 << 1,
+  };
+
   // Asynchronous callbacks. Must not synchronously delete |this| (using
   // InstanceIDDriver::RemoveInstanceID).
   using TokenRefreshCallback =
@@ -95,13 +108,12 @@
   // |options|: allows including a small number of string key/value pairs that
   //            will be associated with the token and may be used in processing
   //            the request.
-  // |is_lazy|: Whether delivery of received messages should be deferred until
-  //            there is a visible activity. Only applicable for Android.
+  // |flags|: Flags used to create this token.
   // |callback|: to be called once the asynchronous operation is done.
   virtual void GetToken(const std::string& authorized_entity,
                         const std::string& scope,
                         const std::map<std::string, std::string>& options,
-                        bool is_lazy,
+                        std::set<Flags> flags,
                         GetTokenCallback callback) = 0;
 
   // Checks that the provided |token| matches the stored token for (|app_id()|,
diff --git a/components/gcm_driver/instance_id/instance_id_android.cc b/components/gcm_driver/instance_id/instance_id_android.cc
index 65126a9..065aa4f 100644
--- a/components/gcm_driver/instance_id/instance_id_android.cc
+++ b/components/gcm_driver/instance_id/instance_id_android.cc
@@ -6,6 +6,7 @@
 
 #include <stdint.h>
 #include <memory>
+#include <numeric>
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
@@ -14,6 +15,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
+#include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "components/gcm_driver/instance_id/android/jni_headers/InstanceIDBridge_jni.h"
@@ -93,7 +95,7 @@
     const std::string& authorized_entity,
     const std::string& scope,
     const std::map<std::string, std::string>& options,
-    bool is_lazy,
+    std::set<Flags> flags,
     GetTokenCallback callback) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
@@ -108,12 +110,16 @@
     options_strings.push_back(entry.second);
   }
 
+  int java_flags = std::accumulate(
+      flags.begin(), flags.end(), 0,
+      [](int sum, Flags flag) { return sum + static_cast<int>(flag); });
+
   JNIEnv* env = AttachCurrentThread();
   Java_InstanceIDBridge_getToken(
       env, java_ref_, request_id,
       ConvertUTF8ToJavaString(env, authorized_entity),
       ConvertUTF8ToJavaString(env, scope),
-      base::android::ToJavaArrayOfStrings(env, options_strings), is_lazy);
+      base::android::ToJavaArrayOfStrings(env, options_strings), java_flags);
 }
 
 void InstanceIDAndroid::ValidateToken(const std::string& authorized_entity,
diff --git a/components/gcm_driver/instance_id/instance_id_android.h b/components/gcm_driver/instance_id/instance_id_android.h
index d82c039..ede64fd 100644
--- a/components/gcm_driver/instance_id/instance_id_android.h
+++ b/components/gcm_driver/instance_id/instance_id_android.h
@@ -46,7 +46,7 @@
   void GetToken(const std::string& audience,
                 const std::string& scope,
                 const std::map<std::string, std::string>& options,
-                bool is_lazy,
+                std::set<Flags> flags,
                 GetTokenCallback callback) override;
   void ValidateToken(const std::string& authorized_entity,
                      const std::string& scope,
diff --git a/components/gcm_driver/instance_id/instance_id_driver_unittest.cc b/components/gcm_driver/instance_id/instance_id_driver_unittest.cc
index 8e77f01..af1d93f 100644
--- a/components/gcm_driver/instance_id/instance_id_driver_unittest.cc
+++ b/components/gcm_driver/instance_id/instance_id_driver_unittest.cc
@@ -181,7 +181,7 @@
   result_ = InstanceID::UNKNOWN_ERROR;
   instance_id->GetToken(
       authorized_entity, scope, options,
-      /*is_lazy=*/false,
+      /*flags=*/{},
       base::BindRepeating(&InstanceIDDriverTest::GetTokenCompleted,
                           base::Unretained(this)));
   WaitForAsyncOperation();
diff --git a/components/gcm_driver/instance_id/instance_id_impl.cc b/components/gcm_driver/instance_id/instance_id_impl.cc
index dbc3dc77..064c648 100644
--- a/components/gcm_driver/instance_id/instance_id_impl.cc
+++ b/components/gcm_driver/instance_id/instance_id_impl.cc
@@ -91,7 +91,7 @@
 void InstanceIDImpl::GetToken(const std::string& authorized_entity,
                               const std::string& scope,
                               const std::map<std::string, std::string>& options,
-                              bool is_lazy,
+                              std::set<Flags> flags,
                               GetTokenCallback callback) {
   DCHECK(!authorized_entity.empty());
   DCHECK(!scope.empty());
diff --git a/components/gcm_driver/instance_id/instance_id_impl.h b/components/gcm_driver/instance_id/instance_id_impl.h
index 09d05da..5698718 100644
--- a/components/gcm_driver/instance_id/instance_id_impl.h
+++ b/components/gcm_driver/instance_id/instance_id_impl.h
@@ -36,7 +36,7 @@
   void GetToken(const std::string& authorized_entity,
                 const std::string& scope,
                 const std::map<std::string, std::string>& options,
-                bool is_lazy,
+                std::set<Flags> flags,
                 GetTokenCallback callback) override;
   void ValidateToken(const std::string& authorized_entity,
                      const std::string& scope,
diff --git a/components/heap_profiling/BUILD.gn b/components/heap_profiling/BUILD.gn
index 7650cc81..19cada14 100644
--- a/components/heap_profiling/BUILD.gn
+++ b/components/heap_profiling/BUILD.gn
@@ -16,6 +16,7 @@
 
   deps = [
     "//base",
+    "//components/services/heap_profiling",
     "//components/services/heap_profiling/public/cpp",
     "//content/public/browser",
     "//content/public/common",
diff --git a/components/heap_profiling/DEPS b/components/heap_profiling/DEPS
index 8d9b92b..06e4ca6f 100644
--- a/components/heap_profiling/DEPS
+++ b/components/heap_profiling/DEPS
@@ -1,6 +1,8 @@
 include_rules = [
+  "+components/services/heap_profiling/heap_profiling_service.h",
   "+components/services/heap_profiling/public",
   "+content/public",
-  "+services/resource_coordinator/public/cpp",
+  "+mojo/public",
+  "+services/resource_coordinator/public",
   "+services/service_manager/public/cpp",
 ]
diff --git a/components/heap_profiling/client_connection_manager.cc b/components/heap_profiling/client_connection_manager.cc
index 57c96d9..5f51d9e9 100644
--- a/components/heap_profiling/client_connection_manager.cc
+++ b/components/heap_profiling/client_connection_manager.cc
@@ -24,39 +24,13 @@
 #include "content/public/common/child_process_host.h"
 #include "content/public/common/process_type.h"
 #include "content/public/common/service_names.mojom.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "services/service_manager/public/cpp/connector.h"
 
 namespace heap_profiling {
 
 namespace {
 
-// This helper class cleans up initialization boilerplate for the callers who
-// need to create ProfilingClients bound to various different things.
-class ProfilingClientBinder {
- public:
-  // Binds to a non-renderer-child-process' ProfilingClient.
-  explicit ProfilingClientBinder(content::BrowserChildProcessHost* host)
-      : ProfilingClientBinder() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-    content::BindInterface(host->GetHost(), std::move(request_));
-  }
-
-  // Binds to a renderer's ProfilingClient.
-  explicit ProfilingClientBinder(content::RenderProcessHost* host)
-      : ProfilingClientBinder() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-    content::BindInterface(host, std::move(request_));
-  }
-
-  mojom::ProfilingClientPtr take() { return std::move(memlog_client_); }
-
- private:
-  ProfilingClientBinder() : request_(mojo::MakeRequest(&memlog_client_)) {}
-
-  mojom::ProfilingClientPtr memlog_client_;
-  mojom::ProfilingClientRequest request_;
-};
-
 bool ShouldProfileNonRendererProcessType(Mode mode, int process_type) {
   switch (mode) {
     case Mode::kAll:
@@ -124,21 +98,23 @@
           : mojom::ProcessType::OTHER;
 
   // Tell the child process to start profiling.
-  ProfilingClientBinder client(host);
-  controller->StartProfilingClient(client.take(), data.GetProcess().Pid(),
+  mojo::PendingRemote<mojom::ProfilingClient> client;
+  host->GetHost()->BindReceiver(client.InitWithNewPipeAndPassReceiver());
+  controller->StartProfilingClient(std::move(client), data.GetProcess().Pid(),
                                    process_type);
 }
 
-void StartProfilingClientOnIOThread(base::WeakPtr<Controller> controller,
-                                    ProfilingClientBinder client,
-                                    base::ProcessId pid,
-                                    mojom::ProcessType process_type) {
+void StartProfilingClientOnIOThread(
+    base::WeakPtr<Controller> controller,
+    mojo::PendingRemote<mojom::ProfilingClient> client,
+    base::ProcessId pid,
+    mojom::ProcessType process_type) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
 
   if (!controller)
     return;
 
-  controller->StartProfilingClient(client.take(), pid, process_type);
+  controller->StartProfilingClient(std::move(client), pid, process_type);
 }
 
 void StartProfilingBrowserProcessOnIOThread(
@@ -149,9 +125,9 @@
     return;
 
   static base::NoDestructor<ProfilingClient> client;
-  mojom::ProfilingClientPtr proxy;
-  client->BindToInterface(mojo::MakeRequest(&proxy));
-  controller->StartProfilingClient(std::move(proxy), base::GetCurrentProcId(),
+  mojo::PendingRemote<mojom::ProfilingClient> remote;
+  client->BindToInterface(remote.InitWithNewPipeAndPassReceiver());
+  controller->StartProfilingClient(std::move(remote), base::GetCurrentProcId(),
                                    mojom::ProcessType::BROWSER);
 }
 
@@ -360,9 +336,8 @@
 
   profiled_renderers_.insert(host);
 
-  // Tell the child process to start profiling.
-  ProfilingClientBinder client(host);
-
+  mojo::PendingRemote<mojom::ProfilingClient> client;
+  host->BindReceiver(client.InitWithNewPipeAndPassReceiver());
   base::CreateSingleThreadTaskRunner({content::BrowserThread::IO})
       ->PostTask(FROM_HERE,
                  base::BindOnce(&StartProfilingClientOnIOThread, controller_,
diff --git a/components/heap_profiling/supervisor.cc b/components/heap_profiling/supervisor.cc
index ba3950d..fecdbf45 100644
--- a/components/heap_profiling/supervisor.cc
+++ b/components/heap_profiling/supervisor.cc
@@ -9,12 +9,15 @@
 #include "base/no_destructor.h"
 #include "base/task/post_task.h"
 #include "components/heap_profiling/client_connection_manager.h"
+#include "components/services/heap_profiling/heap_profiling_service.h"
 #include "components/services/heap_profiling/public/cpp/controller.h"
 #include "components/services/heap_profiling/public/cpp/settings.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/tracing_controller.h"
 #include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h"
+#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
+#include "services/resource_coordinator/public/mojom/service_constants.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
 
 namespace heap_profiling {
@@ -170,8 +173,24 @@
     base::OnceClosure closure) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
 
-  controller_.reset(
-      new Controller(std::move(connector), stack_mode, sampling_rate));
+  // The heap profiling service requires the injection of a few Resource
+  // Coordinator dependencies.
+  mojo::Remote<memory_instrumentation::mojom::Coordinator> coordinator;
+  connector->Connect(resource_coordinator::mojom::kServiceName,
+                     coordinator.BindNewPipeAndPassReceiver());
+  mojo::PendingRemote<memory_instrumentation::mojom::HeapProfilerHelper> helper;
+  connector->Connect(resource_coordinator::mojom::kServiceName,
+                     helper.InitWithNewPipeAndPassReceiver());
+
+  memory_instrumentation::mojom::HeapProfilerPtr heap_profiler;
+  auto profiler_request = mojo::MakeRequest(&heap_profiler);
+  coordinator->RegisterHeapProfiler(std::move(heap_profiler));
+
+  mojo::PendingRemote<mojom::ProfilingService> service =
+      LaunchService(std::move(profiler_request), std::move(helper));
+
+  controller_ = std::make_unique<Controller>(std::move(service), stack_mode,
+                                             sampling_rate);
   base::WeakPtr<Controller> controller_weak_ptr = controller_->GetWeakPtr();
 
   base::CreateSingleThreadTaskRunner({content::BrowserThread::UI})
diff --git a/components/invalidation/impl/fcm_invalidation_service_unittest.cc b/components/invalidation/impl/fcm_invalidation_service_unittest.cc
index e8a99ce..0d50ec4 100644
--- a/components/invalidation/impl/fcm_invalidation_service_unittest.cc
+++ b/components/invalidation/impl/fcm_invalidation_service_unittest.cc
@@ -95,15 +95,15 @@
   void GetToken(const std::string& authorized_entity,
                 const std::string& scope,
                 const std::map<std::string, std::string>& options,
-                bool is_lazy,
+                std::set<Flags> flags,
                 GetTokenCallback callback) override {
-    GetToken_(authorized_entity, scope, options, is_lazy, callback);
+    GetToken_(authorized_entity, scope, options, std::move(flags), callback);
   }
   MOCK_METHOD5(GetToken_,
                void(const std::string& authorized_entity,
                     const std::string& scope,
                     const std::map<std::string, std::string>& options,
-                    bool is_lazy,
+                    std::set<Flags> flags,
                     GetTokenCallback& callback));
   MOCK_METHOD4(ValidateToken,
                void(const std::string& authorized_entity,
diff --git a/components/invalidation/impl/fcm_network_handler.cc b/components/invalidation/impl/fcm_network_handler.cc
index f4affa2d..067d5a9 100644
--- a/components/invalidation/impl/fcm_network_handler.cc
+++ b/components/invalidation/impl/fcm_network_handler.cc
@@ -123,7 +123,7 @@
   instance_id_driver_->GetInstanceID(app_id_)->GetToken(
       sender_id_, kGCMScope,
       /*options=*/std::map<std::string, std::string>(),
-      /*is_lazy=*/true,
+      /*flags=*/{InstanceID::Flags::kIsLazy},
       base::BindRepeating(&FCMNetworkHandler::DidRetrieveToken,
                           weak_ptr_factory_.GetWeakPtr()));
 }
@@ -183,7 +183,7 @@
   diagnostic_info_.token_validation_requested_num++;
   instance_id_driver_->GetInstanceID(app_id_)->GetToken(
       sender_id_, kGCMScope, std::map<std::string, std::string>(),
-      /*is_lazy=*/true,
+      /*flags=*/{InstanceID::Flags::kIsLazy},
       base::Bind(&FCMNetworkHandler::DidReceiveTokenForValidation,
                  weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/components/invalidation/impl/fcm_network_handler_unittests.cc b/components/invalidation/impl/fcm_network_handler_unittests.cc
index 129472ff..bc082e0a 100644
--- a/components/invalidation/impl/fcm_network_handler_unittests.cc
+++ b/components/invalidation/impl/fcm_network_handler_unittests.cc
@@ -67,15 +67,15 @@
   void GetToken(const std::string& authorized_entity,
                 const std::string& scope,
                 const std::map<std::string, std::string>& options,
-                bool is_lazy,
+                std::set<Flags> flags,
                 GetTokenCallback callback) override {
-    GetToken_(authorized_entity, scope, options, is_lazy, callback);
+    GetToken_(authorized_entity, scope, options, std::move(flags), callback);
   }
   MOCK_METHOD5(GetToken_,
                void(const std::string& authorized_entity,
                     const std::string& scope,
                     const std::map<std::string, std::string>& options,
-                    bool is_lazy,
+                    std::set<Flags> flags,
                     GetTokenCallback& callback));
   MOCK_METHOD4(ValidateToken,
                void(const std::string& authorized_entity,
diff --git a/components/media_message_center/media_controls_progress_view_unittest.cc b/components/media_message_center/media_controls_progress_view_unittest.cc
index e562b917..2638e96 100644
--- a/components/media_message_center/media_controls_progress_view_unittest.cc
+++ b/components/media_message_center/media_controls_progress_view_unittest.cc
@@ -22,9 +22,9 @@
   // ViewsTestBase:
   void SetUp() override {
     // Setup a mocked time environment.
-    scoped_task_environment_ = new ScopedTaskEnvironment(
-        ScopedTaskEnvironment::MainThreadType::UI,
-        ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW);
+    scoped_task_environment_ =
+        new ScopedTaskEnvironment(ScopedTaskEnvironment::MainThreadType::UI,
+                                  ScopedTaskEnvironment::TimeSource::MOCK_TIME);
     set_scoped_task_environment(base::WrapUnique(scoped_task_environment_));
 
     ViewsTestBase::SetUp();
diff --git a/components/mirroring/browser/BUILD.gn b/components/mirroring/browser/BUILD.gn
index f73a468..d21847d 100644
--- a/components/mirroring/browser/BUILD.gn
+++ b/components/mirroring/browser/BUILD.gn
@@ -22,7 +22,7 @@
     "//media/cast:common",
     "//media/cast:net",
     "//media/mojo/common:common",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom:remoting",
     "//mojo/public/cpp/bindings",
   ]
 }
@@ -42,7 +42,7 @@
     "//media/cast:common",
     "//media/cast:net",
     "//media/cast:test_support",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom:remoting",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/system",
     "//testing/gmock",
diff --git a/components/mirroring/browser/cast_remoting_sender.h b/components/mirroring/browser/cast_remoting_sender.h
index f4cecc7..fecef9e 100644
--- a/components/mirroring/browser/cast_remoting_sender.h
+++ b/components/mirroring/browser/cast_remoting_sender.h
@@ -12,7 +12,7 @@
 #include "media/cast/cast_config.h"
 #include "media/cast/net/cast_transport.h"
 #include "media/cast/net/rtcp/rtcp_defines.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace media {
diff --git a/components/mirroring/browser/cast_remoting_sender_unittest.cc b/components/mirroring/browser/cast_remoting_sender_unittest.cc
index 5be55054..bf8493691 100644
--- a/components/mirroring/browser/cast_remoting_sender_unittest.cc
+++ b/components/mirroring/browser/cast_remoting_sender_unittest.cc
@@ -14,7 +14,7 @@
 #include "media/cast/constants.h"
 #include "media/cast/net/cast_transport.h"
 #include "media/cast/test/utility/default_config.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/mirroring/mojom/BUILD.gn b/components/mirroring/mojom/BUILD.gn
index dfb16fc..466db8c 100644
--- a/components/mirroring/mojom/BUILD.gn
+++ b/components/mirroring/mojom/BUILD.gn
@@ -42,8 +42,8 @@
   public_deps = [
     ":common",
     "//media/capture/mojom:video_capture",
-    "//media/mojo/interfaces:interfaces",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:remoting",
     "//services/network/public/mojom",
     "//ui/gfx/geometry/mojom",
   ]
diff --git a/components/mirroring/mojom/resource_provider.mojom b/components/mirroring/mojom/resource_provider.mojom
index 7605585..eac2fe7 100644
--- a/components/mirroring/mojom/resource_provider.mojom
+++ b/components/mirroring/mojom/resource_provider.mojom
@@ -6,10 +6,10 @@
 
 import "media/capture/mojom/video_capture.mojom";
 import "services/network/public/mojom/network_context.mojom";
-import "media/mojo/interfaces/remoting.mojom";
-import "media/mojo/interfaces/audio_data_pipe.mojom";
-import "media/mojo/interfaces/audio_input_stream.mojom";
-import "media/mojo/interfaces/audio_parameters.mojom";
+import "media/mojo/mojom/remoting.mojom";
+import "media/mojo/mojom/audio_data_pipe.mojom";
+import "media/mojo/mojom/audio_input_stream.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
 
 // This interface is used by ResourceProvider to notify that an audio input
 // stream is created as requested. The lifetime of the stream is limited by the
diff --git a/components/mirroring/service/BUILD.gn b/components/mirroring/service/BUILD.gn
index 759ef85a..6c02d8cf 100644
--- a/components/mirroring/service/BUILD.gn
+++ b/components/mirroring/service/BUILD.gn
@@ -56,8 +56,8 @@
     "//media/gpu",
     "//media/mojo/clients",
     "//media/mojo/common:common",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:remoting",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/system",
     "//net",
@@ -103,8 +103,8 @@
     "//media/cast:net",
     "//media/cast:sender",
     "//media/cast:test_support",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:remoting",
     "//mojo/public/cpp/bindings",
     "//net",
     "//services/network:test_support",
diff --git a/components/mirroring/service/captured_audio_input.cc b/components/mirroring/service/captured_audio_input.cc
index c863499..7137fc5 100644
--- a/components/mirroring/service/captured_audio_input.cc
+++ b/components/mirroring/service/captured_audio_input.cc
@@ -5,7 +5,7 @@
 #include "components/mirroring/service/captured_audio_input.h"
 
 #include "base/logging.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
 namespace mirroring {
diff --git a/components/mirroring/service/captured_audio_input.h b/components/mirroring/service/captured_audio_input.h
index cf4441c..b0f79aa 100644
--- a/components/mirroring/service/captured_audio_input.h
+++ b/components/mirroring/service/captured_audio_input.h
@@ -11,7 +11,7 @@
 #include "base/sequence_checker.h"
 #include "components/mirroring/mojom/resource_provider.mojom.h"
 #include "media/audio/audio_input_ipc.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace mirroring {
diff --git a/components/mirroring/service/captured_audio_input_unittest.cc b/components/mirroring/service/captured_audio_input_unittest.cc
index 59541ba..060c14b75 100644
--- a/components/mirroring/service/captured_audio_input_unittest.cc
+++ b/components/mirroring/service/captured_audio_input_unittest.cc
@@ -9,7 +9,7 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/components/mirroring/service/media_remoter.h b/components/mirroring/service/media_remoter.h
index 3546a294..dbedaa5 100644
--- a/components/mirroring/service/media_remoter.h
+++ b/components/mirroring/service/media_remoter.h
@@ -8,8 +8,8 @@
 #include "base/component_export.h"
 #include "base/macros.h"
 #include "media/cast/cast_config.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
-#include "media/mojo/interfaces/remoting_common.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
+#include "media/mojo/mojom/remoting_common.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace media {
diff --git a/components/mirroring/service/remoting_sender.h b/components/mirroring/service/remoting_sender.h
index 2912022..ec027ed0 100644
--- a/components/mirroring/service/remoting_sender.h
+++ b/components/mirroring/service/remoting_sender.h
@@ -14,7 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "media/cast/sender/frame_sender.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace base {
diff --git a/components/mirroring/service/remoting_sender_unittest.cc b/components/mirroring/service/remoting_sender_unittest.cc
index 93d97f08..2dab6e4 100644
--- a/components/mirroring/service/remoting_sender_unittest.cc
+++ b/components/mirroring/service/remoting_sender_unittest.cc
@@ -16,7 +16,7 @@
 #include "media/cast/constants.h"
 #include "media/cast/net/cast_transport.h"
 #include "media/cast/test/utility/default_config.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/components/mirroring/service/session.cc b/components/mirroring/service/session.cc
index c9dce67..138effe 100644
--- a/components/mirroring/service/session.cc
+++ b/components/mirroring/service/session.cc
@@ -39,6 +39,7 @@
 #include "media/gpu/gpu_video_accelerator_util.h"
 #include "media/mojo/clients/mojo_video_encode_accelerator.h"
 #include "media/video/video_encode_accelerator.h"
+#include "mojo/public/cpp/base/shared_memory_utils.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "net/base/ip_endpoint.h"
@@ -552,23 +553,13 @@
     const media::cast::ReceiveVideoEncodeMemoryCallback& callback) {
   DVLOG(1) << __func__;
 
-  mojo::ScopedSharedBufferHandle mojo_buf =
-      mojo::SharedBufferHandle::Create(size);
-  if (!mojo_buf->is_valid()) {
-    LOG(WARNING) << "Browser failed to allocate shared memory.";
-    callback.Run(nullptr);
-    return;
-  }
+  base::UnsafeSharedMemoryRegion buf =
+      mojo::CreateUnsafeSharedMemoryRegion(size);
 
-  base::SharedMemoryHandle shared_buf;
-  if (mojo::UnwrapSharedMemoryHandle(std::move(mojo_buf), &shared_buf, nullptr,
-                                     nullptr) != MOJO_RESULT_OK) {
+  if (!buf.IsValid())
     LOG(WARNING) << "Browser failed to allocate shared memory.";
-    callback.Run(nullptr);
-    return;
-  }
 
-  callback.Run(std::make_unique<base::SharedMemory>(shared_buf, false));
+  callback.Run(std::move(buf));
 }
 
 void Session::OnTransportStatusChanged(CastTransportStatus status) {
diff --git a/components/mirroring/service/session.h b/components/mirroring/service/session.h
index a281fb9b..1f259fb 100644
--- a/components/mirroring/service/session.h
+++ b/components/mirroring/service/session.h
@@ -22,7 +22,7 @@
 #include "gpu/config/gpu_info.h"
 #include "media/cast/cast_environment.h"
 #include "media/cast/net/cast_transport_defines.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 
 namespace media {
diff --git a/components/ntp_snippets_strings_grdp/OWNERS b/components/ntp_snippets_strings_grdp/OWNERS
index c7f9cc3f..f276860 100644
--- a/components/ntp_snippets_strings_grdp/OWNERS
+++ b/components/ntp_snippets_strings_grdp/OWNERS
@@ -1 +1,2 @@
 file://components/ntp_snippets/OWNERS
+# COMPONENT: UI>Browser>NewTabPage
diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc
index b329c04..436c138 100644
--- a/components/omnibox/browser/omnibox_field_trial.cc
+++ b/components/omnibox/browser/omnibox_field_trial.cc
@@ -673,24 +673,6 @@
       omnibox::kHideSteadyStateUrlTrivialSubdomains);
 }
 
-base::Optional<int>
-OmniboxFieldTrial::GetSuggestionVerticalMarginFieldTrialOverride() {
-  if (!base::FeatureList::IsEnabled(omnibox::kUIExperimentVerticalMargin))
-    return base::nullopt;
-
-  if (base::FeatureList::IsEnabled(
-          omnibox::kUIExperimentVerticalMarginLimitToNonTouchOnly) &&
-      ui::MaterialDesignController::touch_ui()) {
-    return base::nullopt;
-  }
-
-  // When the vertical margin is set to 2dp, the suggestion height is the
-  // closest to the pre-Refresh height. In fact it's 1dp taller than the
-  // pre-Refresh height on Linux.
-  return base::GetFieldTrialParamByFeatureAsInt(
-      omnibox::kUIExperimentVerticalMargin, kUIVerticalMarginParam, 2);
-}
-
 bool OmniboxFieldTrial::IsExperimentalKeywordModeEnabled() {
   return base::FeatureList::IsEnabled(omnibox::kExperimentalKeywordMode);
 }
@@ -781,7 +763,6 @@
     "UIMaxAutocompleteMatches";
 const char OmniboxFieldTrial::kUIMaxAutocompleteMatchesByProviderParam[] =
     "UIMaxAutocompleteMatchesByProvider";
-const char OmniboxFieldTrial::kUIVerticalMarginParam[] = "UIVerticalMargin";
 
 const char OmniboxFieldTrial::kOnFocusSuggestionsEndpointExperimentIdParam[] =
     "CustomEndpointExperimentID";
diff --git a/components/omnibox/browser/omnibox_field_trial.h b/components/omnibox/browser/omnibox_field_trial.h
index 6f65c40..1854115 100644
--- a/components/omnibox/browser/omnibox_field_trial.h
+++ b/components/omnibox/browser/omnibox_field_trial.h
@@ -409,11 +409,6 @@
 // subdomains is enabled.
 bool IsHideSteadyStateUrlTrivialSubdomainsEnabled();
 
-// Returns the field trial override for the vertical margin size that should be
-// used in the suggestion view. Returns base::nullopt if the UI code should use
-// the default vertical margin.
-base::Optional<int> GetSuggestionVerticalMarginFieldTrialOverride();
-
 // Simply a convenient wrapper for testing a flag. Used downstream for an
 // assortment of keyword mode experiments.
 bool IsExperimentalKeywordModeEnabled();
@@ -492,7 +487,6 @@
 // Parameter names used by UI experiments.
 extern const char kUIMaxAutocompleteMatchesParam[];
 extern const char kUIMaxAutocompleteMatchesByProviderParam[];
-extern const char kUIVerticalMarginParam[];
 
 // Parameter names used by On Focus Suggestions Custom Endpoint.
 extern const char kOnFocusSuggestionsEndpointExperimentIdParam[];
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc
index a57364b..9b0a2a4 100644
--- a/components/omnibox/common/omnibox_features.cc
+++ b/components/omnibox/common/omnibox_features.cc
@@ -240,17 +240,6 @@
 #endif
 };
 
-// Feature used for the vertical margin UI experiment, currently only used on
-// desktop platforms.
-const base::Feature kUIExperimentVerticalMargin{
-    "OmniboxUIExperimentVerticalMargin", base::FEATURE_DISABLED_BY_DEFAULT};
-
-// Feature used to limit the vertical margin UI experiment to non-touch
-// devices only. Has no effect if kUIExperimentVerticalMargin is not enabled.
-const base::Feature kUIExperimentVerticalMarginLimitToNonTouchOnly{
-    "OmniboxUIExperimentVerticalMarginLimitToNonTouchOnly",
-    base::FEATURE_DISABLED_BY_DEFAULT};
-
 // Shows the "Search Google or type a URL" omnibox placeholder even when the
 // caret (text edit cursor) is showing / when focused. views::Textfield works
 // this way, as does <input placeholder="">. Omnibox and the NTP's "fakebox"
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h
index 19edd216..44a0491b 100644
--- a/components/omnibox/common/omnibox_features.h
+++ b/components/omnibox/common/omnibox_features.h
@@ -40,8 +40,6 @@
 extern const base::Feature kUIExperimentMaxAutocompleteMatches;
 extern const base::Feature kUIExperimentShowSuggestionFavicons;
 extern const base::Feature kUIExperimentSwapTitleAndUrl;
-extern const base::Feature kUIExperimentVerticalMargin;
-extern const base::Feature kUIExperimentVerticalMarginLimitToNonTouchOnly;
 extern const base::Feature kUIExperimentShowPlaceholderWhenCaretShowing;
 extern const base::Feature kSpeculativeServiceWorkerStartOnQueryInput;
 extern const base::Feature kDocumentProvider;
diff --git a/components/open_from_clipboard/clipboard_recent_content_generic.cc b/components/open_from_clipboard/clipboard_recent_content_generic.cc
index 5fab0b93..3d16126 100644
--- a/components/open_from_clipboard/clipboard_recent_content_generic.cc
+++ b/components/open_from_clipboard/clipboard_recent_content_generic.cc
@@ -65,7 +65,19 @@
 
 base::Optional<base::string16>
 ClipboardRecentContentGeneric::GetRecentTextFromClipboard() {
-  return base::nullopt;
+  if (GetClipboardContentAge() > MaximumAgeOfClipboard())
+    return base::nullopt;
+
+  base::string16 text_from_clipboard;
+  ui::Clipboard::GetForCurrentThread()->ReadText(ui::ClipboardType::kCopyPaste,
+                                                 &text_from_clipboard);
+  base::TrimWhitespace(text_from_clipboard, base::TrimPositions::TRIM_ALL,
+                       &text_from_clipboard);
+  if (text_from_clipboard.empty()) {
+    return base::nullopt;
+  }
+
+  return text_from_clipboard;
 }
 
 base::Optional<gfx::Image>
diff --git a/components/open_from_clipboard/clipboard_recent_content_generic_unittest.cc b/components/open_from_clipboard/clipboard_recent_content_generic_unittest.cc
index cb2a7d9..febd864 100644
--- a/components/open_from_clipboard/clipboard_recent_content_generic_unittest.cc
+++ b/components/open_from_clipboard/clipboard_recent_content_generic_unittest.cc
@@ -9,6 +9,7 @@
 
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/clipboard/test/test_clipboard.h"
@@ -118,3 +119,17 @@
   test_clipboard_->SetLastModifiedTime(now);
   EXPECT_TRUE(recent_content.GetRecentURLFromClipboard().has_value());
 }
+
+TEST_F(ClipboardRecentContentGenericTest, GetRecentTextFromClipboard) {
+  // Make sure the Text is suggested.
+  ClipboardRecentContentGeneric recent_content;
+  base::Time now = base::Time::Now();
+  std::string text = "  Foo Bar   ";
+  test_clipboard_->WriteText(text.data(), text.length());
+  test_clipboard_->SetLastModifiedTime(now - base::TimeDelta::FromSeconds(10));
+  EXPECT_TRUE(recent_content.GetRecentTextFromClipboard().has_value());
+  EXPECT_STREQ(
+      "Foo Bar",
+      base::UTF16ToUTF8(recent_content.GetRecentTextFromClipboard().value())
+          .c_str());
+}
diff --git a/components/policy/content/policy_blacklist_navigation_throttle.cc b/components/policy/content/policy_blacklist_navigation_throttle.cc
index 3982ea6..f9a6213 100644
--- a/components/policy/content/policy_blacklist_navigation_throttle.cc
+++ b/components/policy/content/policy_blacklist_navigation_throttle.cc
@@ -35,8 +35,8 @@
 PolicyBlacklistNavigationThrottle::WillStartRequest() {
   GURL url = navigation_handle()->GetURL();
 
-  // Ignore blob scheme because PlzNavigate may use it to deliver navigation
-  // responses to the renderer process.
+  // Ignore blob scheme because we may use it to deliver navigation responses
+  // to the renderer process.
   if (url.SchemeIs(url::kBlobScheme))
     return PROCEED;
 
diff --git a/components/policy/core/browser/url_blacklist_manager.cc b/components/policy/core/browser/url_blacklist_manager.cc
index 12b0f66..c0d6daf 100644
--- a/components/policy/core/browser/url_blacklist_manager.cc
+++ b/components/policy/core/browser/url_blacklist_manager.cc
@@ -492,7 +492,7 @@
 bool URLBlacklistManager::IsURLBlocked(const GURL& url) const {
   DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
   // Ignore blob scheme for two reasons:
-  // 1) PlzNavigate uses it to deliver the response to the renderer.
+  // 1) Its used to deliver the response to the renderer.
   // 2) A whitelisted page can use blob URLs internally.
   return !url.SchemeIs(url::kBlobScheme) && blacklist_->IsURLBlocked(url);
 }
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 7a5f2dd5..92446dd 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -14324,7 +14324,8 @@
                           'minimum': 0,
                           'maximum': 59
                         },
-                      }
+                      },
+                      'required': ['hour', 'minute']
                     },
                     'ends_at': { '$ref': 'Time' },
                     'last_updated_millis': { 'type': 'string' }
@@ -16583,10 +16584,10 @@
             '$ref': 'WeekDay'
           },
           'day_of_month': {
-            'description': '''Day of month [1-28] when the update check should happen, interpreted in the device's local time zone. Only used when 'frequency' is 'MONTHLY'. If this is more than the maximum number of days in a given month then the last day of the month will be chosen. Currently it is restricted to 28 to resolve month rollover ambiguities.''',
+            'description': '''Day of month [1-31] when the update check should happen, interpreted in the device's local time zone. Only used when 'frequency' is 'MONTHLY'. If this is more than the maximum number of days in a given month then the last day of the month will be chosen.''',
             'type': 'integer',
             'minimum': 1,
-            'maximum': 28
+            'maximum': 31
           }
         },
         'required': ['update_check_time', 'frequency']
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index e54d92c..803d85a 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -2014,7 +2014,7 @@
 <translation id="4508686775017063528">Si se asigna el valor "True" a esta política o esta no se define, <ph name="PRODUCT_NAME" /> se habilitará y los usuarios podrán iniciarla desde el menú de aplicaciones, los menús contextuales de las páginas, los controles multimedia de sitios web compatibles con Google Cast y (si aparece) el icono de la barra de herramientas para enviar contenido.
 
           Si se asigna el valor "False" a esta política, <ph name="PRODUCT_NAME" /> se inhabilitará.</translation>
-<translation id="4510923771103268849">El usuario puede tener acceso raíz a los contenedores de Crostini</translation>
+<translation id="4510923771103268849">El usuario puede tener acceso root a los contenedores de Crostini</translation>
 <translation id="4515404363392014383">Habilitar Navegación Segura en fuentes de confianza</translation>
 <translation id="4518251772179446575">Preguntar siempre que un sitio quiera hacer un seguimiento de la ubicación física de los usuarios</translation>
 <translation id="4519046672992331730">Permite habilitar las sugerencias de búsqueda del omnibox de <ph name="PRODUCT_NAME" /> e impide que los usuarios modifiquen esta configuración.
@@ -2098,10 +2098,10 @@
 
           Si no se establece esta política, <ph name="PRODUCT_NAME" /> no delegará las credenciales de usuarios, aunque se detecte una intranet como servidor.</translation>
 <translation id="4752880493649142945">Certificado del cliente para establecer conexión con RemoteAccessHostTokenValidationUrl</translation>
-<translation id="4756984056524699088">Permite a este usuario el acceso raíz a los contenedores de Crostini.
+<translation id="4756984056524699088">Permite a este usuario el acceso root a los contenedores de Crostini.
 
-      Si se asigna el valor "True" a esta política o no se le asigna ningún valor, el usuario tendrá acceso raíz a los contenedores de Crostini.
-      Si se le asigna el valor "False", el usuario no tendrá acceso raíz a los contenedores de Crostini nuevos ni a los ya creados.</translation>
+      Si se asigna el valor "True" a esta política o no se le asigna ningún valor, el usuario tendrá acceso root a los contenedores de Crostini.
+      Si se le asigna el valor "False", el usuario no tendrá acceso root a los contenedores de Crostini nuevos ni a los ya creados.</translation>
 <translation id="4759650396863318477">Permite establecer el periodo de tiempo (en milisegundos) durante el que los usuarios recibirán una notificación informándoles de que deben reiniciar <ph name="PRODUCT_NAME" /> o un dispositivo <ph name="PRODUCT_OS_NAME" /> para aplicar una actualización pendiente.
 
       Durante este periodo de tiempo, se informará de forma reiterada al usuario de que la actualización es necesaria. En el caso de los dispositivos <ph name="PRODUCT_OS_NAME" />, se mostrará una notificación de reinicio en la bandeja del sistema de acuerdo con la política <ph name="RELAUNCH_HEADS_UP_PERIOD_POLICY_NAME" />. En el caso de los navegadores <ph name="PRODUCT_NAME" />, el menú de aplicaciones cambiará para indicar que es necesario reiniciar cuando haya transcurrido un tercio del periodo de notificación. Esta notificación cambiará de color cuando hayan transcurrido dos tercios del periodo de notificación y, de nuevo, cuando este periodo haya finalizado. Las notificaciones adicionales habilitadas por la política <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> siguen esta misma programación.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 6b04e85..2e0269e 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -1416,7 +1416,7 @@
 <translation id="3487623755010328395">
         Als dit beleid is ingesteld, probeert <ph name="PRODUCT_NAME" /> zichzelf te registreren en het bijbehorende cloudbeleid voor alle profielen toe te passen.
 
-        De waarde van dit beleid is een inschrijftoken die kan worden opgehaald via de Google Beheerdersconsole.</translation>
+        De waarde van dit beleid is een inschrijftoken die kan worden opgehaald via de Google Admin Console.</translation>
 <translation id="3489247539215560634">Als deze instelling is ingeschakeld, kunnen gebruikers <ph name="PRODUCT_NAME" /> wachtwoorden laten onthouden en deze automatisch invullen wanneer ze opnieuw inloggen op een site.
 
           Als deze instelling is uitgeschakeld, kunnen gebruikers geen nieuwe wachtwoorden opslaan, maar kunnen ze nog wel gebruikmaken van de wachtwoorden die eerder zijn opgeslagen.
@@ -2016,7 +2016,7 @@
       Als je deze instelling in- of uitschakelt, kunnen gebruikers de instelling niet aanpassen of negeren in <ph name="PRODUCT_NAME" />.
 
       Als dit beleid niet wordt ingesteld, wordt dit ingeschakeld maar kan de gebruiker dit wijzigen.</translation>
-<translation id="4531706050939927436">De installatie van Android-apps kan via de Google Beheerdersconsole worden afgedwongen door gebruik te maken van Google Play. Deze apps gebruiken dit beleid niet.</translation>
+<translation id="4531706050939927436">De installatie van Android-apps kan via de Google Admin Console worden afgedwongen door gebruik te maken van Google Play. Deze apps gebruiken dit beleid niet.</translation>
 <translation id="4534500438517478692">Naam Android-beperking:</translation>
 <translation id="4541530620466526913">Lokale accounts op apparaat</translation>
 <translation id="4543502256674577024">Update-instellingen voor apparaat</translation>
@@ -2867,10 +2867,10 @@
 
           Als dit beleid niet wordt ingesteld, wordt de algemene standaardwaarde gebruikt voor alle sites op basis van het beleid 'DefaultJavaScriptSetting' (als dit is ingesteld) of anders op basis van de configuratie van de gebruiker.</translation>
 <translation id="614662973812186053">Met dit beleid wordt ook het gebruik van Android en het verzamelen van diagnostische gegevens bepaald.</translation>
-<translation id="6153048425064249648">Met dit beleid wordt cloudrapportage voor <ph name="PRODUCT_NAME" /> beheerd, waarmee informatie over de werking van de browser naar Google Beheerdersconsole wordt geüpload.
+<translation id="6153048425064249648">Met dit beleid wordt cloudrapportage voor <ph name="PRODUCT_NAME" /> beheerd, waarmee informatie over de werking van de browser naar Google Admin Console wordt geüpload.
 
       Wanneer dit beleid niet is ingesteld of is ingesteld op 'False', worden er geen gegevens verzameld of geüpload.
-      Wanneer dit beleid wordt ingesteld op 'True', worden er gegevens verzameld en naar Google Beheerdersconsole geüpload.
+      Wanneer dit beleid wordt ingesteld op 'True', worden er gegevens verzameld en naar Google Admin Console geüpload.
       Als je wilt beheren welke gegevens er worden geüpload, gebruik je het beleid in de groep 'Chrome Reporting Extension'.
 
       Dit beleid werkt alleen wanneer het apparaat is ingeschreven voor <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.
@@ -4341,7 +4341,7 @@
 
       Als dit beleid niet wordt ingesteld, kan de gebruiker zelf besluiten Google Sync wel of niet te gebruiken.
 
-      Als je Google Sync volledig wilt uitschakelen, kun je de Google Sync-service het beste uitschakelen in de Google Beheerdersconsole.
+      Als je Google Sync volledig wilt uitschakelen, kun je de Google Sync-service het beste uitschakelen in de Google Admin Console.
 
       Dit beleid moet niet worden ingeschakeld wanneer het beleid <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> is ingeschakeld, omdat die functie dezelfde functionaliteit aan clientzijde gebruikt. De door Google gehoste synchronisatie wordt in dit geval volledig uitgeschakeld.</translation>
 <translation id="8955719471735800169">Bovenkant pagina</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index f45db59..eeea447 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -67,6 +67,7 @@
 
           如果停用或未配置此设置,远程协助主机则会在用户的环境中运行,而远程用户将无法在桌面上操控提权后的窗口。</translation>
 <translation id="1096105751829466145">默认搜索服务提供商</translation>
+<translation id="1099024407376270611">实时检查所访问网址的安全浏览声誉</translation>
 <translation id="1099282607296956954">为所有网站启用网站隔离功能</translation>
 <translation id="1100570158310952027">
       此政策可指定针对不安全来源的安全性限制不适用于哪些来源(网址)或主机名模式(例如“*.example.com”)。
@@ -663,6 +664,11 @@
           如果此设置已配置,系统将会根据此设置的值要求那些使用“快速解锁”的用户在锁定屏幕上输入密码。
 
           如果此设置未配置,系统每天都会要求那些使用“快速解锁”的用户在锁定屏幕上输入密码。</translation>
+<translation id="219297066914002620">指示 <ph name="PRODUCT_OS_NAME" />启用或停用虚拟机管理控制台工具。
+
+      如果此政策设为 true 或未设置,用户将能使用虚拟机管理 CLI。
+      否则,所有虚拟机管理 CLI 会被停用并隐藏。
+      </translation>
 <translation id="2194470398825717446">我们在 M61 中弃用了此政策,请改用 EcryptfsMigrationStrategy。
 
       用于指定内置了 ecryptfs 且需要转换为采用 ext4 加密功能的设备的行为方式。
@@ -1902,6 +1908,7 @@
 <translation id="4508686775017063528">如果此政策设为 true 或未设置,系统将会启用 <ph name="PRODUCT_NAME" />,且用户将能通过以下途径启动这项功能:应用菜单、页面上下文菜单、支持 Cast 的网站上的媒体控件,以及(如果显示的话)Cast 工具栏图标。
 
           如果此政策设为 false,系统将会停用 <ph name="PRODUCT_NAME" />。</translation>
+<translation id="4510923771103268849">允许用户拥有 Crostini 容器的 root 权限</translation>
 <translation id="4515404363392014383">针对可信来源启用安全浏览功能</translation>
 <translation id="4518251772179446575">每次网站尝试跟踪用户的地理位置时都询问我</translation>
 <translation id="4519046672992331730">在 <ph name="PRODUCT_NAME" /> 的多功能框中启用搜索建议功能,并禁止用户更改此设置。
@@ -1985,6 +1992,10 @@
 
           如果此政策未设置,那么即使检测到某个服务器在内网上,<ph name="PRODUCT_NAME" /> 也不会委托用户凭据。</translation>
 <translation id="4752880493649142945">连接到 RemoteAccessHostTokenValidationUrl 时使用的客户端证书</translation>
+<translation id="4756984056524699088">允许此用户拥有 Crostini 容器的 root 权限。
+
+      如果此政策设为 true 或未设置,用户会获得对 Crostini 容器的 root 权限。
+      如果此政策设为 false,则用户不会获得对现有以及新的 Crostini 容器的 root 权限。</translation>
 <translation id="4759650396863318477">让您能够设置一个时间段(以毫秒为单位),在该时间段内,如果必须重新启动 <ph name="PRODUCT_NAME" /> 或必须重启 <ph name="PRODUCT_OS_NAME" />设备以应用待应用的更新,用户将会收到通知。
 
       在该时间段内,如果需要更新,系统会反复通知用户。对于 <ph name="PRODUCT_OS_NAME" />设备,系统会根据 <ph name="RELAUNCH_HEADS_UP_PERIOD_POLICY_NAME" /> 政策在系统任务栏中显示重启通知。对于 <ph name="PRODUCT_NAME" /> 浏览器,应用菜单会在通知时间段过去三分之一后立即发生变化,以指示需要重新启动浏览器。此通知会在通知时间段过去三分之二后立即改变颜色,并会在整个通知时间段过后再次立即改变颜色。由 <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME" /> 政策启用的其他通知也会遵循这一时间表。
@@ -2136,6 +2147,9 @@
       如果您停用了或未指定此设置,系统仅会从优先级最高的那个来源中获取列表条目;所有其他来源都会显示为与该来源冲突,但会被忽略。</translation>
 <translation id="5141670636904227950">设置登录屏幕上启用的默认放大镜类型</translation>
 <translation id="5142301680741828703">总是通过“<ph name="PRODUCT_FRAME_NAME" />”呈现以下网址格式</translation>
+<translation id="5146261336206349846">如果此政策设为启用,安全浏览功能会实时检查所访问的所有网址。
+
+      如果此政策设为停用或未设置,系统会应用用户的安全浏览检查设置。</translation>
 <translation id="5148753489738115745">可让您指定在 <ph name="PRODUCT_FRAME_NAME" />启动 <ph name="PRODUCT_NAME" />时所使用的其他参数。
 
           如果未设置此政策,系统将会使用默认命令行。</translation>
@@ -2186,6 +2200,7 @@
 
           此政策仅适用于已加入 <ph name="MS_AD_NAME" /> 网域的 Windows 实例,或者已注册设备管理服务的 Windows 10 Pro 或 Enterprise 实例。</translation>
 <translation id="5208240613060747912">可让您设置网址格式的列表,这些网址格式用于指定不允许显示通知的网站。在未设置此政策的情况下,如果设置了“DefaultNotificationsSetting”政策,那么将对该政策中的所有网站使用全局默认值,否则将对用户个人配置中的所有网站使用全局默认值。</translation>
+<translation id="5212810195096589189">指定虚拟机 CLI 权限</translation>
 <translation id="5213038356678567351">始终不应触发浏览器切换的网站。</translation>
 <translation id="5219844027738217407">对于 Android 应用,此政策仅会影响麦克风。当此政策设为 true 时,系统会针对所有 Android 应用(无一例外)将麦克风设为静音。</translation>
 <translation id="5221394278852982313">让您能够以列表的形式设置一系列网址,以指定将会自动授权哪些网站通过给定的供应商 ID 和产品 ID 访问 USB 设备。列表中的每项内容都必须包含设备和网址这两个部分,此政策才会有效。设备部分中的每项都可包含供应商 ID 和产品 ID 字段。被省略的任何 ID 都会被视为通配符,但例外情况是:如果未指定供应商 ID,便无法指定产品 ID。否则,此政策将会无效并会被忽略。
diff --git a/components/safe_browsing/features.cc b/components/safe_browsing/features.cc
index dd98876..d82ef7b 100644
--- a/components/safe_browsing/features.cc
+++ b/components/safe_browsing/features.cc
@@ -34,16 +34,6 @@
 const base::Feature kCaptureSafetyNetId{"SafeBrowsingCaptureSafetyNetId",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
 
-// If enabled in pre-network-service world, SafeBrowsing URL checks are done by
-// applying SafeBrowsing's URLLoaderThrottle subclasses to ThrottlingURLLoader.
-//
-// This flag has no effect if network service is enabled. With network service,
-// SafeBrowsing URL checks are always done by SafeBrowsing's URLLoaderThrottle
-// subclasses.
-const base::Feature kCheckByURLLoaderThrottle{
-    "S13nSafeBrowsingCheckByURLLoaderThrottle",
-    base::FEATURE_DISABLED_BY_DEFAULT};
-
 const base::Feature kCommittedSBInterstitials{
     "SafeBrowsingCommittedInterstitials", base::FEATURE_DISABLED_BY_DEFAULT};
 
@@ -94,7 +84,6 @@
     {&kAdSamplerTriggerFeature, false},
     {&kCaptureInlineJavascriptForGoogleAds, true},
     {&kCaptureSafetyNetId, true},
-    {&kCheckByURLLoaderThrottle, true},
     {&kCommittedSBInterstitials, true},
     {&kForceUseAPDownloadProtection, false},
     {&kPasswordProtectionForSignedInUsers, true},
diff --git a/components/safe_browsing/features.h b/components/safe_browsing/features.h
index 7775c5f8..e3f3439 100644
--- a/components/safe_browsing/features.h
+++ b/components/safe_browsing/features.h
@@ -37,8 +37,6 @@
 // a SBER user downloads an APK file.
 extern const base::Feature kCaptureSafetyNetId;
 
-extern const base::Feature kCheckByURLLoaderThrottle;
-
 // Controls if safe browsing interstitials are implemented as committed
 // navigations instead of overlays.
 extern const base::Feature kCommittedSBInterstitials;
diff --git a/components/safe_browsing/triggers/suspicious_site_trigger_unittest.cc b/components/safe_browsing/triggers/suspicious_site_trigger_unittest.cc
index 17f8fdb0..78129d39 100644
--- a/components/safe_browsing/triggers/suspicious_site_trigger_unittest.cc
+++ b/components/safe_browsing/triggers/suspicious_site_trigger_unittest.cc
@@ -68,6 +68,7 @@
     GURL gurl(url);
     auto navigation_simulator =
         NavigationSimulator::CreateRendererInitiated(gurl, frame);
+    navigation_simulator->SetKeepLoading(true);
     navigation_simulator->Commit();
     RenderFrameHost* final_frame_host =
         navigation_simulator->GetFinalRenderFrameHost();
diff --git a/components/services/heap_profiling/BUILD.gn b/components/services/heap_profiling/BUILD.gn
index 77cfbdf..8dcbe7d 100644
--- a/components/services/heap_profiling/BUILD.gn
+++ b/components/services/heap_profiling/BUILD.gn
@@ -14,8 +14,14 @@
     "json_exporter.h",
   ]
 
-  deps = [
+  public_deps = [
     "//base",
+    "//components/services/heap_profiling/public/mojom",
+    "//mojo/public/cpp/bindings",
+    "//services/resource_coordinator/public/mojom",
+  ]
+
+  deps = [
     "//components/services/heap_profiling/public/cpp",
     "//services/resource_coordinator/public/cpp:resource_coordinator_cpp",
   ]
diff --git a/components/services/heap_profiling/connection_manager.cc b/components/services/heap_profiling/connection_manager.cc
index f2af464..3a0c23ca 100644
--- a/components/services/heap_profiling/connection_manager.cc
+++ b/components/services/heap_profiling/connection_manager.cc
@@ -41,7 +41,7 @@
 
 struct ConnectionManager::Connection {
   Connection(CompleteCallback complete_cb,
-             mojom::ProfilingClientPtr client,
+             mojo::PendingRemote<mojom::ProfilingClient> client,
              mojom::ProcessType process_type,
              uint32_t sampling_rate,
              mojom::StackMode stack_mode)
@@ -49,7 +49,7 @@
         process_type(process_type),
         stack_mode(stack_mode),
         sampling_rate(sampling_rate) {
-    this->client.set_connection_error_handler(std::move(complete_cb));
+    this->client.set_disconnect_handler(std::move(complete_cb));
   }
 
   bool HeapDumpNeedsVmRegions() {
@@ -58,7 +58,7 @@
            stack_mode == mojom::StackMode::MIXED;
   }
 
-  mojom::ProfilingClientPtr client;
+  mojo::Remote<mojom::ProfilingClient> client;
   mojom::ProcessType process_type;
   mojom::StackMode stack_mode;
 
@@ -78,10 +78,11 @@
 }
 ConnectionManager::~ConnectionManager() = default;
 
-void ConnectionManager::OnNewConnection(base::ProcessId pid,
-                                        mojom::ProfilingClientPtr client,
-                                        mojom::ProcessType process_type,
-                                        mojom::ProfilingParamsPtr params) {
+void ConnectionManager::OnNewConnection(
+    base::ProcessId pid,
+    mojo::PendingRemote<mojom::ProfilingClient> client,
+    mojom::ProcessType process_type,
+    mojom::ProfilingParamsPtr params) {
   base::AutoLock lock(connections_lock_);
 
   // Attempting to start profiling on an already profiled processs should have
diff --git a/components/services/heap_profiling/connection_manager.h b/components/services/heap_profiling/connection_manager.h
index cb576e9..c8ac48f8 100644
--- a/components/services/heap_profiling/connection_manager.h
+++ b/components/services/heap_profiling/connection_manager.h
@@ -20,6 +20,7 @@
 #include "build/build_config.h"
 #include "components/services/heap_profiling/allocation.h"
 #include "components/services/heap_profiling/public/mojom/heap_profiling_service.mojom.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
 
 namespace heap_profiling {
@@ -56,7 +57,7 @@
                                VmRegions vm_regions);
 
   void OnNewConnection(base::ProcessId pid,
-                       mojom::ProfilingClientPtr client,
+                       mojo::PendingRemote<mojom::ProfilingClient> client,
                        mojom::ProcessType process_type,
                        mojom::ProfilingParamsPtr params);
 
diff --git a/components/services/heap_profiling/heap_profiling_service.cc b/components/services/heap_profiling/heap_profiling_service.cc
index c970022..068fbc4 100644
--- a/components/services/heap_profiling/heap_profiling_service.cc
+++ b/components/services/heap_profiling/heap_profiling_service.cc
@@ -1,4 +1,4 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -9,8 +9,15 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
+#include "base/memory/weak_ptr.h"
+#include "base/no_destructor.h"
 #include "base/task/post_task.h"
+#include "components/services/heap_profiling/connection_manager.h"
 #include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/resource_coordinator/public/cpp/resource_coordinator_features.h"
 #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
@@ -18,107 +25,110 @@
 
 namespace heap_profiling {
 
-HeapProfilingService::HeapProfilingService(
-    service_manager::mojom::ServiceRequest request)
-    : service_binding_(this, std::move(request)) {}
+namespace {
 
-HeapProfilingService::~HeapProfilingService() = default;
+class ProfilingServiceImpl;
 
-// static
-base::RepeatingCallback<void(service_manager::mojom::ServiceRequest)>
-HeapProfilingService::GetServiceFactory() {
-  return base::BindRepeating(
-      [](service_manager::mojom::ServiceRequest request) {
-        // base::WithBaseSyncPrimitives() and thus DEDICATED are needed
-        // because the thread owned by ConnectionManager::Connection is doing
-        // blocking Join during dectruction.
-        scoped_refptr<base::SingleThreadTaskRunner> task_runner =
-            base::CreateSingleThreadTaskRunner(
-                {base::ThreadPool(), base::TaskPriority::BEST_EFFORT,
-                 base::WithBaseSyncPrimitives()},
-                base::SingleThreadTaskRunnerThreadMode::DEDICATED);
-        task_runner->PostTask(
-            FROM_HERE,
-            base::BindOnce(
-                [](service_manager::mojom::ServiceRequest request) {
-                  service_manager::Service::RunAsyncUntilTermination(
-                      std::make_unique<heap_profiling::HeapProfilingService>(
-                          std::move(request)));
-                },
-                std::move(request)));
-      });
-}
+class ProfilingServiceImpl
+    : public mojom::ProfilingService,
+      public memory_instrumentation::mojom::HeapProfiler {
+ public:
+  ProfilingServiceImpl(
+      mojo::PendingReceiver<memory_instrumentation::mojom::HeapProfiler>
+          profiler_receiver,
+      mojo::PendingRemote<memory_instrumentation::mojom::HeapProfilerHelper>
+          helper)
+      : heap_profiler_receiver_(this, std::move(profiler_receiver)),
+        helper_(std::move(helper)) {}
 
-void HeapProfilingService::OnStart() {
-  registry_.AddInterface(
-      base::Bind(&HeapProfilingService::OnProfilingServiceRequest,
-                 base::Unretained(this)));
-  registry_.AddInterface(base::Bind(
-      &HeapProfilingService::OnHeapProfilerRequest, base::Unretained(this)));
-}
+  ~ProfilingServiceImpl() override = default;
 
-void HeapProfilingService::OnBindInterface(
-    const service_manager::BindSourceInfo& source_info,
-    const std::string& interface_name,
-    mojo::ScopedMessagePipeHandle interface_pipe) {
-  registry_.BindInterface(interface_name, std::move(interface_pipe));
-}
-
-void HeapProfilingService::OnProfilingServiceRequest(
-    mojom::ProfilingServiceRequest request) {
-  binding_.Bind(std::move(request));
-}
-
-void HeapProfilingService::OnHeapProfilerRequest(
-    memory_instrumentation::mojom::HeapProfilerRequest request) {
-  heap_profiler_binding_.Bind(std::move(request));
-}
-
-void HeapProfilingService::AddProfilingClient(
-    base::ProcessId pid,
-    mojom::ProfilingClientPtr client,
-    mojom::ProcessType process_type,
-    mojom::ProfilingParamsPtr params) {
-  if (params->sampling_rate == 0)
-    params->sampling_rate = 1;
-  connection_manager_.OnNewConnection(pid, std::move(client), process_type,
-                                      std::move(params));
-}
-
-void HeapProfilingService::GetProfiledPids(GetProfiledPidsCallback callback) {
-  std::move(callback).Run(connection_manager_.GetConnectionPids());
-}
-
-void HeapProfilingService::DumpProcessesForTracing(
-    bool strip_path_from_mapped_files,
-    DumpProcessesForTracingCallback callback) {
-  std::vector<base::ProcessId> pids =
-      connection_manager_.GetConnectionPidsThatNeedVmRegions();
-  if (pids.empty()) {
-    connection_manager_.DumpProcessesForTracing(
-        strip_path_from_mapped_files, std::move(callback), VmRegions());
-    return;
+  // mojom::ProfilingService implementation:
+  void AddProfilingClient(base::ProcessId pid,
+                          mojo::PendingRemote<mojom::ProfilingClient> client,
+                          mojom::ProcessType process_type,
+                          mojom::ProfilingParamsPtr params) override {
+    if (params->sampling_rate == 0)
+      params->sampling_rate = 1;
+    connection_manager_.OnNewConnection(pid, std::move(client), process_type,
+                                        std::move(params));
   }
 
-  // Need a memory map to make sense of the dump. The dump will be triggered
-  // in the memory map global dump callback.
-  if (!helper_) {
-    service_binding_.GetConnector()->BindInterface(
-        resource_coordinator::mojom::kServiceName, &helper_);
+  void GetProfiledPids(GetProfiledPidsCallback callback) override {
+    std::move(callback).Run(connection_manager_.GetConnectionPids());
   }
-  helper_->GetVmRegionsForHeapProfiler(
-      pids, base::BindOnce(&HeapProfilingService::
-                               OnGetVmRegionsCompleteForDumpProcessesForTracing,
-                           weak_factory_.GetWeakPtr(),
-                           strip_path_from_mapped_files, std::move(callback)));
+
+  // memory_instrumentation::mojom::HeapProfiler implementation:
+  void DumpProcessesForTracing(
+      bool strip_path_from_mapped_files,
+      DumpProcessesForTracingCallback callback) override {
+    std::vector<base::ProcessId> pids =
+        connection_manager_.GetConnectionPidsThatNeedVmRegions();
+    if (pids.empty()) {
+      connection_manager_.DumpProcessesForTracing(
+          strip_path_from_mapped_files, std::move(callback), VmRegions());
+      return;
+    }
+
+    // Need a memory map to make sense of the dump. The dump will be triggered
+    // in the memory map global dump callback.
+    helper_->GetVmRegionsForHeapProfiler(
+        pids,
+        base::BindOnce(&ProfilingServiceImpl::
+                           OnGetVmRegionsCompleteForDumpProcessesForTracing,
+                       weak_factory_.GetWeakPtr(), strip_path_from_mapped_files,
+                       std::move(callback)));
+  }
+
+ private:
+  void OnGetVmRegionsCompleteForDumpProcessesForTracing(
+      bool strip_path_from_mapped_files,
+      DumpProcessesForTracingCallback callback,
+      VmRegions vm_regions) {
+    connection_manager_.DumpProcessesForTracing(strip_path_from_mapped_files,
+                                                std::move(callback),
+                                                std::move(vm_regions));
+  }
+
+  mojo::Receiver<memory_instrumentation::mojom::HeapProfiler>
+      heap_profiler_receiver_{this};
+  mojo::Remote<memory_instrumentation::mojom::HeapProfilerHelper> helper_;
+  ConnectionManager connection_manager_;
+
+  base::WeakPtrFactory<ProfilingServiceImpl> weak_factory_{this};
+
+  DISALLOW_COPY_AND_ASSIGN(ProfilingServiceImpl);
+};
+
+void RunHeapProfilingService(
+    mojo::PendingReceiver<mojom::ProfilingService> receiver,
+    mojo::PendingReceiver<memory_instrumentation::mojom::HeapProfiler>
+        profiler_receiver,
+    mojo::PendingRemote<memory_instrumentation::mojom::HeapProfilerHelper>
+        helper) {
+  mojo::MakeSelfOwnedReceiver(
+      std::make_unique<ProfilingServiceImpl>(std::move(profiler_receiver),
+                                             std::move(helper)),
+      std::move(receiver));
 }
 
-void HeapProfilingService::OnGetVmRegionsCompleteForDumpProcessesForTracing(
-    bool strip_path_from_mapped_files,
-    DumpProcessesForTracingCallback callback,
-    VmRegions vm_regions) {
-  connection_manager_.DumpProcessesForTracing(
-      strip_path_from_mapped_files, std::move(callback), std::move(vm_regions));
+}  // namespace
+
+mojo::PendingRemote<mojom::ProfilingService> LaunchService(
+    mojo::PendingReceiver<memory_instrumentation::mojom::HeapProfiler>
+        profiler_receiver,
+    mojo::PendingRemote<memory_instrumentation::mojom::HeapProfilerHelper>
+        helper) {
+  mojo::PendingRemote<mojom::ProfilingService> remote;
+  auto task_runner = base::CreateSingleThreadTaskRunner(
+      {base::TaskPriority::BEST_EFFORT, base::WithBaseSyncPrimitives()},
+      base::SingleThreadTaskRunnerThreadMode::DEDICATED);
+  task_runner->PostTask(
+      FROM_HERE,
+      base::BindOnce(&RunHeapProfilingService,
+                     remote.InitWithNewPipeAndPassReceiver(),
+                     std::move(profiler_receiver), std::move(helper)));
+  return remote;
 }
 
 }  // namespace heap_profiling
diff --git a/components/services/heap_profiling/heap_profiling_service.h b/components/services/heap_profiling/heap_profiling_service.h
index ea657c0..4b3e7677 100644
--- a/components/services/heap_profiling/heap_profiling_service.h
+++ b/components/services/heap_profiling/heap_profiling_service.h
@@ -1,82 +1,28 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #ifndef COMPONENTS_SERVICES_HEAP_PROFILING_HEAP_PROFILING_SERVICE_H_
 #define COMPONENTS_SERVICES_HEAP_PROFILING_HEAP_PROFILING_SERVICE_H_
 
-#include "base/memory/weak_ptr.h"
-#include "components/services/heap_profiling/connection_manager.h"
 #include "components/services/heap_profiling/public/mojom/heap_profiling_service.mojom.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
-#include "services/service_manager/public/cpp/binder_registry.h"
-#include "services/service_manager/public/cpp/service.h"
-#include "services/service_manager/public/cpp/service_binding.h"
-#include "services/service_manager/public/mojom/service.mojom.h"
 
 namespace heap_profiling {
 
-// Service implementation for Profiling. This will be called in the profiling
-// process (which is a sandboxed utility process created on demand by the
-// ServiceManager) to set manage the global state as well as the bound
-// interface.
+// Returns a PendingRemote which can be bound to control a new ProfilingService
+// instance running on a dedicated thread. The service will run until this
+// remote is disconnected.
 //
-// This class lives in the I/O thread of the Utility process.
-class HeapProfilingService
-    : public service_manager::Service,
-      public mojom::ProfilingService,
-      public memory_instrumentation::mojom::HeapProfiler {
-  using DumpProcessesForTracingCallback = memory_instrumentation::mojom::
-      HeapProfiler::DumpProcessesForTracingCallback;
-
- public:
-  explicit HeapProfilingService(service_manager::mojom::ServiceRequest request);
-  ~HeapProfilingService() override;
-
-  static base::RepeatingCallback<void(service_manager::mojom::ServiceRequest)>
-  GetServiceFactory();
-
-  // Lifescycle events that occur after the service has started to spinup.
-  void OnStart() override;
-  void OnBindInterface(const service_manager::BindSourceInfo& source_info,
-                       const std::string& interface_name,
-                       mojo::ScopedMessagePipeHandle interface_pipe) override;
-
-  // ProfilingService implementation.
-  void AddProfilingClient(base::ProcessId pid,
-                          mojom::ProfilingClientPtr client,
-                          mojom::ProcessType process_type,
-                          mojom::ProfilingParamsPtr params) override;
-  void GetProfiledPids(GetProfiledPidsCallback callback) override;
-
-  // HeapProfiler implementation.
-  void DumpProcessesForTracing(
-      bool strip_path_from_mapped_files,
-      DumpProcessesForTracingCallback callback) override;
-
- private:
-  void OnProfilingServiceRequest(mojom::ProfilingServiceRequest request);
-  void OnHeapProfilerRequest(
-      memory_instrumentation::mojom::HeapProfilerRequest request);
-
-  void OnGetVmRegionsCompleteForDumpProcessesForTracing(
-      bool strip_path_from_mapped_files,
-      DumpProcessesForTracingCallback callback,
-      VmRegions vm_regions);
-
-  service_manager::ServiceBinding service_binding_;
-  service_manager::BinderRegistry registry_;
-  mojo::Binding<mojom::ProfilingService> binding_{this};
-
-  mojo::Binding<memory_instrumentation::mojom::HeapProfiler>
-      heap_profiler_binding_{this};
-
-  memory_instrumentation::mojom::HeapProfilerHelperPtr helper_;
-  ConnectionManager connection_manager_;
-  // Must be the last.
-  base::WeakPtrFactory<HeapProfilingService> weak_factory_{this};
-};
+// |profiler_receiver| must be valid and will receive heap profiling requests.
+// |helper| must be valid and will be used by the service to retrieve memory
+// maps.
+mojo::PendingRemote<mojom::ProfilingService> LaunchService(
+    mojo::PendingReceiver<memory_instrumentation::mojom::HeapProfiler>
+        profiler_receiver,
+    mojo::PendingRemote<memory_instrumentation::mojom::HeapProfilerHelper>
+        helper);
 
 }  // namespace heap_profiling
 
diff --git a/components/services/heap_profiling/public/cpp/BUILD.gn b/components/services/heap_profiling/public/cpp/BUILD.gn
index 4098903..e016a91 100644
--- a/components/services/heap_profiling/public/cpp/BUILD.gn
+++ b/components/services/heap_profiling/public/cpp/BUILD.gn
@@ -15,15 +15,14 @@
   ]
 
   public_deps = [
-    "//components/services/heap_profiling/public/mojom",
-  ]
-  deps = [
     "//base",
+    "//components/services/heap_profiling/public/mojom",
+    "//mojo/public/cpp/bindings",
+  ]
+
+  deps = [
     "//base:debugging_buildflags",
     "//base/allocator:buildflags",
-    "//services/resource_coordinator/public/mojom:",
-    "//services/service_manager/public/cpp",
-    "//services/service_manager/sandbox",
   ]
 }
 
@@ -40,17 +39,3 @@
     "//testing/gtest",
   ]
 }
-
-source_set("manifest") {
-  sources = [
-    "manifest.cc",
-    "manifest.h",
-  ]
-
-  deps = [
-    "//base",
-    "//components/services/heap_profiling/public/mojom",
-    "//services/resource_coordinator/public/mojom",
-    "//services/service_manager/public/cpp",
-  ]
-}
diff --git a/components/services/heap_profiling/public/cpp/OWNERS b/components/services/heap_profiling/public/cpp/OWNERS
deleted file mode 100644
index 6faeaa47..0000000
--- a/components/services/heap_profiling/public/cpp/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-per-file manifest.cc=set noparent
-per-file manifest.cc=file://ipc/SECURITY_OWNERS
-per-file manifest.h=set noparent
-per-file manifest.h=file://ipc/SECURITY_OWNERS
diff --git a/components/services/heap_profiling/public/cpp/controller.cc b/components/services/heap_profiling/public/cpp/controller.cc
index a0c76f7..5bb6676 100644
--- a/components/services/heap_profiling/public/cpp/controller.cc
+++ b/components/services/heap_profiling/public/cpp/controller.cc
@@ -5,39 +5,24 @@
 #include "components/services/heap_profiling/public/cpp/controller.h"
 
 #include "components/services/heap_profiling/public/cpp/settings.h"
-#include "components/services/heap_profiling/public/mojom/constants.mojom.h"
-#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
-#include "services/resource_coordinator/public/mojom/service_constants.mojom.h"
-#include "services/service_manager/public/cpp/connector.h"
 
 namespace heap_profiling {
 
-Controller::Controller(std::unique_ptr<service_manager::Connector> connector,
+Controller::Controller(mojo::PendingRemote<mojom::ProfilingService> service,
                        mojom::StackMode stack_mode,
                        uint32_t sampling_rate)
-    : connector_(std::move(connector)),
+    : heap_profiling_service_(std::move(service)),
       sampling_rate_(sampling_rate),
       stack_mode_(stack_mode) {
   DCHECK_NE(sampling_rate, 0u);
-
-  // Start the Heap Profiling service.
-  connector_->BindInterface(mojom::kServiceName, &heap_profiling_service_);
-
-  // Grab a HeapProfiler InterfacePtr and pass that to memory instrumentation.
-  memory_instrumentation::mojom::HeapProfilerPtr heap_profiler;
-  connector_->BindInterface(mojom::kServiceName, &heap_profiler);
-
-  memory_instrumentation::mojom::CoordinatorPtr coordinator;
-  connector_->BindInterface(resource_coordinator::mojom::kServiceName,
-                            &coordinator);
-  coordinator->RegisterHeapProfiler(std::move(heap_profiler));
 }
 
 Controller::~Controller() = default;
 
-void Controller::StartProfilingClient(mojom::ProfilingClientPtr client,
-                                      base::ProcessId pid,
-                                      mojom::ProcessType process_type) {
+void Controller::StartProfilingClient(
+    mojo::PendingRemote<mojom::ProfilingClient> client,
+    base::ProcessId pid,
+    mojom::ProcessType process_type) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   mojom::ProfilingParamsPtr params = mojom::ProfilingParams::New();
@@ -57,9 +42,4 @@
   return weak_factory_.GetWeakPtr();
 }
 
-service_manager::Connector* Controller::GetConnector() {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  return connector_.get();
-}
-
 }  // namespace heap_profiling
diff --git a/components/services/heap_profiling/public/cpp/controller.h b/components/services/heap_profiling/public/cpp/controller.h
index 02762d5..ed19b9a0 100644
--- a/components/services/heap_profiling/public/cpp/controller.h
+++ b/components/services/heap_profiling/public/cpp/controller.h
@@ -10,17 +10,13 @@
 #include "base/sequence_checker.h"
 #include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
 #include "components/services/heap_profiling/public/mojom/heap_profiling_service.mojom.h"
-
-namespace service_manager {
-class Connector;
-}
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace heap_profiling {
 
-// This class is responsible for
-//   * Starting the Heap Profiling Service
-//   * Hooking up clients to the service
-//   * Getting information about profiled clients
+// This class is responsible for hooking up clients to the heap profiling
+// service and getting information about profiled clients.
 //
 // This class is sequence-affine. The public non-getter methods must be called
 // from a single sequence. Getters return const members set during the
@@ -30,7 +26,8 @@
 // create OS pipes.
 class Controller {
  public:
-  // |connector| is used to connect to other services.
+  // |service| must be connected to an instance of the Heap Profiling service.
+  //
   // |stack_mode| describes the type of metadata to record for each allocation.
   // A |sampling_rate| of 1 indicates that all allocations should be recorded.
   // A |sampling_rate| greater than 1 describes the Poisson Process sampling
@@ -40,13 +37,13 @@
   // Note: The name |sampling_rate| is a bit confusing. A higher sampling rate
   // causes there to be fewer samples taken. This probably should have been
   // named |sampling_interval|.
-  Controller(std::unique_ptr<service_manager::Connector> connector,
+  Controller(mojo::PendingRemote<mojom::ProfilingService> service,
              mojom::StackMode stack_mode,
              uint32_t sampling_rate);
   ~Controller();
 
   // Starts Heap Profiling for the client.
-  void StartProfilingClient(mojom::ProfilingClientPtr client,
+  void StartProfilingClient(mojo::PendingRemote<mojom::ProfilingClient> client,
                             base::ProcessId pid,
                             mojom::ProcessType);
 
@@ -61,11 +58,8 @@
   // This method must be called from the same sequence the instance is bound to.
   base::WeakPtr<Controller> GetWeakPtr();
 
-  service_manager::Connector* GetConnector();
-
  private:
-  std::unique_ptr<service_manager::Connector> connector_;
-  mojom::ProfilingServicePtr heap_profiling_service_;
+  mojo::Remote<mojom::ProfilingService> heap_profiling_service_;
 
   // The same sampling rate and stack mode is used for each client.
   const uint32_t sampling_rate_ = 1;
diff --git a/components/services/heap_profiling/public/cpp/manifest.cc b/components/services/heap_profiling/public/cpp/manifest.cc
deleted file mode 100644
index bd3e16b..0000000
--- a/components/services/heap_profiling/public/cpp/manifest.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/services/heap_profiling/public/cpp/manifest.h"
-
-#include "base/no_destructor.h"
-#include "components/services/heap_profiling/public/mojom/constants.mojom.h"
-#include "components/services/heap_profiling/public/mojom/heap_profiling_service.mojom.h"
-#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
-#include "services/resource_coordinator/public/mojom/service_constants.mojom.h"
-#include "services/service_manager/public/cpp/manifest_builder.h"
-
-namespace heap_profiling {
-
-const service_manager::Manifest& GetManifest() {
-  static base::NoDestructor<service_manager::Manifest> manifest{
-      service_manager::ManifestBuilder()
-          .WithServiceName(mojom::kServiceName)
-          .WithDisplayName("Heap Profiling Service")
-          .WithOptions(service_manager::ManifestOptionsBuilder()
-                           .WithSandboxType("profiling")
-                           .WithInstanceSharingPolicy(
-                               service_manager::Manifest::
-                                   InstanceSharingPolicy::kSharedAcrossGroups)
-                           .Build())
-          .ExposeCapability("profiling",
-                            service_manager::Manifest::InterfaceList<
-                                mojom::ProfilingService>())
-          .ExposeCapability("heap_profiler",
-                            service_manager::Manifest::InterfaceList<
-                                memory_instrumentation::mojom::HeapProfiler>())
-          .RequireCapability(resource_coordinator::mojom::kServiceName,
-                             "heap_profiler_helper")
-          .Build()};
-  return *manifest;
-}
-
-}  // namespace heap_profiling
diff --git a/components/services/heap_profiling/public/cpp/manifest.h b/components/services/heap_profiling/public/cpp/manifest.h
deleted file mode 100644
index 96f7f0c..0000000
--- a/components/services/heap_profiling/public/cpp/manifest.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_SERVICES_HEAP_PROFILING_PUBLIC_CPP_MANIFEST_H_
-#define COMPONENTS_SERVICES_HEAP_PROFILING_PUBLIC_CPP_MANIFEST_H_
-
-#include "services/service_manager/public/cpp/manifest.h"
-
-namespace heap_profiling {
-
-const service_manager::Manifest& GetManifest();
-
-}  // namespace heap_profiling
-
-#endif  // COMPONENTS_SERVICES_HEAP_PROFILING_PUBLIC_CPP_MANIFEST_H_
diff --git a/components/services/heap_profiling/public/cpp/profiling_client.cc b/components/services/heap_profiling/public/cpp/profiling_client.cc
index 251bb1c..abd844b 100644
--- a/components/services/heap_profiling/public/cpp/profiling_client.cc
+++ b/components/services/heap_profiling/public/cpp/profiling_client.cc
@@ -29,8 +29,9 @@
 ProfilingClient::ProfilingClient() = default;
 ProfilingClient::~ProfilingClient() = default;
 
-void ProfilingClient::BindToInterface(mojom::ProfilingClientRequest request) {
-  bindings_.AddBinding(this, std::move(request));
+void ProfilingClient::BindToInterface(
+    mojo::PendingReceiver<mojom::ProfilingClient> receiver) {
+  receivers_.Add(this, std::move(receiver));
 }
 
 void ProfilingClient::StartProfiling(mojom::ProfilingParamsPtr params) {
diff --git a/components/services/heap_profiling/public/cpp/profiling_client.h b/components/services/heap_profiling/public/cpp/profiling_client.h
index f167bac..2ae9505 100644
--- a/components/services/heap_profiling/public/cpp/profiling_client.h
+++ b/components/services/heap_profiling/public/cpp/profiling_client.h
@@ -6,7 +6,8 @@
 #define COMPONENTS_SERVICES_HEAP_PROFILING_PUBLIC_CPP_PROFILING_CLIENT_H_
 
 #include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
 
 namespace heap_profiling {
 
@@ -22,20 +23,20 @@
   void StartProfiling(mojom::ProfilingParamsPtr params) override;
   void RetrieveHeapProfile(RetrieveHeapProfileCallback callback) override;
 
-  void BindToInterface(mojom::ProfilingClientRequest request);
+  void BindToInterface(mojo::PendingReceiver<mojom::ProfilingClient> receiver);
 
  private:
   ~ProfilingClient() override;
 
   void StartProfilingInternal(mojom::ProfilingParamsPtr params);
 
-  // Ideally, this would be a mojo::Binding that would only keep alive one
-  // client request. However, the service that makes the client requests
+  // Ideally, this would be a mojo::Receiver that would only keep alive one
+  // client receiver. However, the service that makes the client requests
   // [content_browser] is different from the service that dedupes the client
   // requests [profiling service]. This means that there may be a brief
   // intervals where there are two active bindings, until the profiling service
   // has a chance to figure out which one to keep.
-  mojo::BindingSet<mojom::ProfilingClient> bindings_;
+  mojo::ReceiverSet<mojom::ProfilingClient> receivers_;
 
   bool started_profiling_{false};
 };
diff --git a/components/services/heap_profiling/public/mojom/BUILD.gn b/components/services/heap_profiling/public/mojom/BUILD.gn
index fa28fe7..bc27caa3 100644
--- a/components/services/heap_profiling/public/mojom/BUILD.gn
+++ b/components/services/heap_profiling/public/mojom/BUILD.gn
@@ -6,7 +6,6 @@
 
 mojom("mojom") {
   sources = [
-    "constants.mojom",
     "heap_profiling_client.mojom",
     "heap_profiling_service.mojom",
   ]
diff --git a/components/services/heap_profiling/public/mojom/constants.mojom b/components/services/heap_profiling/public/mojom/constants.mojom
deleted file mode 100644
index 085a130..0000000
--- a/components/services/heap_profiling/public/mojom/constants.mojom
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-module heap_profiling.mojom;
-
-const string kServiceName = "heap_profiling";
diff --git a/components/services/heap_profiling/public/mojom/heap_profiling_service.mojom b/components/services/heap_profiling/public/mojom/heap_profiling_service.mojom
index e8e0ff60..ba5e336 100644
--- a/components/services/heap_profiling/public/mojom/heap_profiling_service.mojom
+++ b/components/services/heap_profiling/public/mojom/heap_profiling_service.mojom
@@ -24,8 +24,10 @@
   //
   // The "client" interface will be for the instrumented process. It allows the
   // profiling process to talk to the new process.
-  AddProfilingClient(mojo_base.mojom.ProcessId pid, ProfilingClient client,
-                     ProcessType process_type, ProfilingParams params);
+  AddProfilingClient(mojo_base.mojom.ProcessId pid,
+                     pending_remote<ProfilingClient> client,
+                     ProcessType process_type,
+                     ProfilingParams params);
 
   // Returns the pids of all profiled processes.
   GetProfiledPids() => (array<mojo_base.mojom.ProcessId> pids);
diff --git a/components/signin/internal/identity_manager/DEPS b/components/signin/internal/identity_manager/DEPS
index 4485df3..5898a12 100644
--- a/components/signin/internal/identity_manager/DEPS
+++ b/components/signin/internal/identity_manager/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
-  "+chromeos/constants/chromeos_switches.h",
+  "+chromeos/constants/chromeos_features.h",
   "+mojo/public",
 ]
 
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc b/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc
index 7c95f143..8544d3a 100644
--- a/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc
+++ b/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc
@@ -22,7 +22,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chromeos/components/account_manager/account_manager.h"
-#include "chromeos/constants/chromeos_switches.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "components/signin/internal/identity_manager/profile_oauth2_token_service_delegate_chromeos.h"
 #include "components/user_manager/user_manager.h"
 #endif  // defined(OS_CHROMEOS)
@@ -141,7 +141,7 @@
                                 account_tracker_service);
 #else  // !defined(OS_ANDROID) && !defined(OS_IOS)
 #if defined(OS_CHROMEOS)
-  if (chromeos::switches::IsAccountManagerEnabled()) {
+  if (chromeos::features::IsAccountManagerEnabled()) {
     return CreateCrOsOAuthDelegate(account_tracker_service,
                                    network_connection_tracker, account_manager,
                                    is_regular_profile);
@@ -150,7 +150,7 @@
   // Fall back to |MutableProfileOAuth2TokenServiceDelegate|:
   // 1. On all platforms other than Android and Chrome OS.
   // 2. On Chrome OS, if Account Manager has not been switched on yet
-  // (chromeos::switches::IsAccountManagerEnabled).
+  // (chromeos::features::IsAccountManagerEnabled).
   return CreateMutableProfileOAuthDelegate(
       account_tracker_service, account_consistency,
       delete_signin_cookies_on_exit, token_web_data, signin_client,
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index f38944e..afeab6c 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -295,6 +295,7 @@
 <translation id="2485387744899240041">የእርስዎ መሣሪያ እና አሳሽ የተጠቃሚ ስሞች</translation>
 <translation id="2491120439723279231">የአገልጋይ እውቅና ማረጋገጫ ስህተቶችን ይዟል።</translation>
 <translation id="2493640343870896922">ደብዳቤ-ፕላስ</translation>
+<translation id="2494497504885199552">&lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;ን በብዛት ይጎበኛሉ። አሁን ለመጎብኘት የሞከሩት ጣቢያ ታሪክዎ ላይ ካለው ጣቢያ ጋር ይመሳሰላል፣ ግን በትክክል አንድ አይነት አይደለም። አጥቂዎች አንዳንድ ጊዜ እርስዎን ለማታለል ወይም ለማጭበርበር ይህን ዘዴ ይጠቀማሉ።</translation>
 <translation id="2495083838625180221">JSON ተንታኝ</translation>
 <translation id="2495093607237746763">ምልክት ከተደረገበት Chromium ለተሻለ የቅጽ አሞላል ፍጥነት የካርድዎን ቅጂ በዚህ መሣሪያ ላይ ያከማቻል።</translation>
 <translation id="2498091847651709837">አዲስ ካርድ ቃኝ</translation>
@@ -360,6 +361,7 @@
 <translation id="2826760142808435982">ግንኙነቱ የተመሰጠረ እና <ph name="CIPHER" />ን በመጠቀም የተረጋገጠ ነው፣ እና <ph name="KX" />ን እንደ የቁልፍ መቀያየሪያ ስልት ይጠቀምበታል።</translation>
 <translation id="2835170189407361413">ቅጽ አጽዳ</translation>
 <translation id="2847118875340931228">ማንነት የማያሳውቅ መስኮት ክፈት</translation>
+<translation id="2849445596171421624">ቀጥልን ጠቅ ማድረግ ይበልጥ የተለመደ ወደ ሆነው የ&lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; ጣቢያ ይወስደዎታል።</translation>
 <translation id="2850739647070081192">ግብዣ (የደብዳቤ ፖስታ)</translation>
 <translation id="2851634818064021665">ይህን ጣቢያ ለመጎብኘት ፈቃድ ያስፈልገዎታል</translation>
 <translation id="2856444702002559011">አጥቂዎች የእርስዎን መረጃ (ለምሳሌ፦ የይለፍ ቃላትን፣ መልዕክቶችን፣ ወይም የክሬዲት ካርዶችን የመሳሰሉ) ከ<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ለመስረቅ እየሞከሩ ሊሆኑ ይችላሉ። <ph name="BEGIN_LEARN_MORE_LINK" />የበለጠ ለመረዳት<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -678,6 +680,7 @@
 <translation id="4582204425268416675">ካርድ አስወግድ</translation>
 <translation id="4587425331216688090">አድራሻ ከChrome ይወገድ?</translation>
 <translation id="4592951414987517459">ወደ የእርስዎ <ph name="DOMAIN" /> ግንኙነት ዘመናዊ የምስጠራ ጥቅል በመጠቀም ተመስጥሯል።</translation>
+<translation id="4594047029158047642">የከፈቱት አገናኝ ወደ ያልተለመደ ጣቢያ ይሄዳል። እርስዎን ግራ ለማጋባት ይሞክር ይሆናል።</translation>
 <translation id="4594403342090139922">&amp;ሰርዝን ቀልብስ</translation>
 <translation id="4597348597567598915">መጠን 8</translation>
 <translation id="4600854749408232102">C6/C5 (የደብዳቤ ፖስታ)</translation>
@@ -780,6 +783,7 @@
 <translation id="5169827969064885044">የድርጅት መለያዎን መዳረሻ ሊያጡ ወይም የማንነት ስርቆት ሊያጋጥመዎት ይችላሉ። Chrome የይለፍ ቃልዎን አሁን እንዲቀይሩ ይመክራል።</translation>
 <translation id="5171045022955879922">ይፈልጉ ወይም ዩአርኤል ይጻፉ</translation>
 <translation id="5171689220826475070">ፋንፎልድ-አውሮፓ</translation>
+<translation id="5172068981283436906">&lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;ን በብዛት ይጎበኛሉ። አሁን ለመጎብኘት የሞከሩት ዩአርኤል ታሪክዎ ላይ ካለው ጣቢያ ጋር ይመሳሰላል፣ ግን በትክክል አንድ አይነት አይደለም። አጥቂዎች አንዳንድ ጊዜ እርስዎን ለማታለል ወይም ለማጭበርበር ይህን ዘዴ ይጠቀማሉ።</translation>
 <translation id="5172758083709347301">ማሽን</translation>
 <translation id="5179510805599951267">በ<ph name="ORIGINAL_LANGUAGE" /> አይደለም? ይህን ስህተት ሪፖርት ያድርጉ</translation>
 <translation id="5190835502935405962">የዕልባቶች አሞሌ</translation>
@@ -908,6 +912,7 @@
 <translation id="5860033963881614850">አጥፋ</translation>
 <translation id="5863847714970149516">ከፊት ያለው ገጽ እርስዎን ገንዘብ ለማስከፈል ሊሞክር ይችላል</translation>
 <translation id="5866257070973731571">ስልክ ቁጥር ያክሉ</translation>
+<translation id="5866898949289125849">እርስዎ የገንቢ መሣሪያዎች ገጽ እየተመለከቱ ነው</translation>
 <translation id="5869405914158311789">ይህ ጣቢያ ሊደረስበት አይችልም</translation>
 <translation id="5869522115854928033">የተቀመጡ የይለፍ ቃሎች</translation>
 <translation id="5887400589839399685">ካርድ ተቀምጧል</translation>
@@ -1076,7 +1081,6 @@
 <translation id="6891596781022320156">የመመሪያ ደረጃ አይደገፍም።</translation>
 <translation id="6895330447102777224">የእርስዎ ካርድ ተረጋግጧል</translation>
 <translation id="6897140037006041989">የተጠቀሚ ተወካይ</translation>
-<translation id="6903319715792422884">አንዳንድ <ph name="BEGIN_WHITEPAPER_LINK" />የሥርዓት መረጃ እና የገጽ ይዘት<ph name="END_WHITEPAPER_LINK" />ን ወደ Google በመላክ የጥንቃቄ አሰሳን ለማሻሻል እንዲቻል ያግዙ።<ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">ተጠቃሚ፦</translation>
 <translation id="6934672428414710184">ይህ ስም ከእርስዎ Google መለያ የተገኘ ነው</translation>
 <translation id="6944692733090228304">በ<ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ወደ የማይተዳደር ጣቢያ ላይ የእርስዎን የይለፍ ቃል አስገብተዋል። ለእርስዎ መለያ ጥበቃ ለማድረግ፣ በሌሎች መተግበሪያዎች እና ጣቢያዎች ላይ የእርስዎን የይለፍ ቃል ዳግም አይጠቀሙ።</translation>
@@ -1143,6 +1147,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">የእርስዎ የኮምፒዩተር ቀን እና ሰዓት (<ph name="DATE_AND_TIME" />) ልክ ስላልሆኑ የግል ግንኙነት ወደ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ሊመሰረት አይችልም።</translation>
 <translation id="7260504762447901703">መዳረሻን ሻር</translation>
+<translation id="726226871651201355">ወደ &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; ይቀጥሉ?</translation>
 <translation id="7271803869921933038">ተቀባይነት ያላቸው የቅድመ-ክፍያ ካርዶች</translation>
 <translation id="7275334191706090484">የተዳደሩ እልባቶች</translation>
 <translation id="7298195798382681320">የተመከሩ</translation>
@@ -1481,6 +1486,7 @@
 <translation id="9078964945751709336">ተጨማሪ መረጃ ያስፈልጋል</translation>
 <translation id="9080712759204168376">የትዕዛዝ ማጠቃለያ</translation>
 <translation id="9089260154716455634">ከሰዓታት ውጭ መመሪያ፦</translation>
+<translation id="9093075372111400787">የላቀን ዝጋ</translation>
 <translation id="9095388113577226029">ተጨማሪ ቋንቋዎች...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> የእርስዎን መረጃ ለመጠበቅ በመደበኝነት ምስጠራን ይጠቀማል። Chromium አሁን ከ<ph name="SITE" /> ጋር ለመገናኘት ሲሞክር ድር ጣቢያው ያልተለመዱ እና ትክክል ያልሆኑ ምስክርነቶችን መልሷል። ይህ አንድ አጥቂ <ph name="SITE" />ን አስመስሎ ለመቅረብ ሲሞክር ነው ወይም አንድ የWi-Fi መግቢያ ገጽ ግንኙነቱን ሲቋረጥ ሊከሰት ይችላል። Chromium ማንኛውም የውሂብ ልውውጥ ከመካሄዱ በፊት ግንኙነቱን ስላቋረጠው አሁንም የእርስዎ መረጃ ደህንነት የተጠበቀ ነው።</translation>
 <translation id="9106062320799175032">የመክፈያ አድራሻ ያክሉ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index db9c2d1..6667d59b 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">أسماء المستخدمين لجهازك ومتصفِّحك</translation>
 <translation id="2491120439723279231">تحتوي شهادة الخادم على أخطاء.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">‏أنت تنتقل عادةً إلى &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. يبدو الموقع الإلكتروني الذي حاولت زيارته مشابهًا للموقع من السجلّ ولكن لا يتطابقان تمامًا. يستخدم المهاجمون أحيانًا هذا الأسلوب للاحتيال عليك أو خداعك.</translation>
 <translation id="2495083838625180221">‏محلل JSON اللغوي</translation>
 <translation id="2495093607237746763">‏عند وضع علامة على هذا الخيار، سيخزّن Chromium نسخة من بطاقتك على هذا الجهاز لتعبئة النماذج بشكل أسرع.</translation>
 <translation id="2498091847651709837">فحص بطاقة جديدة</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">تم تشفير الاتصال ومصادقته باستخدام <ph name="CIPHER" />، ويستخدم <ph name="KX" /> كآلية التبادل الرئيسية.</translation>
 <translation id="2835170189407361413">محو النموذج</translation>
 <translation id="2847118875340931228">فتح نافذة التصفُّح المتخفي</translation>
+<translation id="2849445596171421624">‏سينقلك النقر على "متابعة" إلى الموقع الإلكتروني الأكثر شيوعًا &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">دعوة (مغلف)</translation>
 <translation id="2851634818064021665">يلزمك الحصول على إذن لزيارة هذا الموقع</translation>
 <translation id="2856444702002559011">قد يحاول المهاجمون سرقة معلوماتك من <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (مثل كلمات المرور أو الرسائل أو بطاقات الائتمان). <ph name="BEGIN_LEARN_MORE_LINK" />مزيد من المعلومات<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">إزالة البطاقة</translation>
 <translation id="4587425331216688090">‏هل تريد إزالة العنوان من Chrome؟</translation>
 <translation id="4592951414987517459">يتم ترميز اتصالك بالنطاق <ph name="DOMAIN" /> باستخدام مجموعة تشفير حديثة.</translation>
+<translation id="4594047029158047642">ينتقل الرابط الذي تم فتحه إلى موقع إلكتروني غير شائع. قد يكون ذلك لمحاولة إرباكك.</translation>
 <translation id="4594403342090139922">تراجع عن الحذ&amp;ف</translation>
 <translation id="4597348597567598915">الحجم 8</translation>
 <translation id="4600854749408232102">‏C6/C5 (مغلف)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">‏قد تفقد إمكانية الوصول إلى حساب مؤسستك أو تتعرَّض لسرقة هويتك. لذا، يوصي Chrome بتغيير كلمة مرورك الآن.</translation>
 <translation id="5171045022955879922">‏البحث أو إدخال عنوان URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">‏أنت تنتقل عادةً إلى &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. يبدو عنوان URL الذي حاولت زيارته مشابهًا للموقع الإلكتروني من السجلّ ولكن لا يتطابقان تمامًا. يستخدم المهاجمون أحيانًا هذا الأسلوب للاحتيال عليك أو خداعك.</translation>
 <translation id="5172758083709347301">الجهاز</translation>
 <translation id="5179510805599951267">هل الصفحة ليست باللغة <ph name="ORIGINAL_LANGUAGE" />؟ الإبلاغ عن هذا الخطأ</translation>
 <translation id="5190835502935405962">شريط الإشارات</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">غير مفعّل</translation>
 <translation id="5863847714970149516">قد تحاول الصفحة التالية تحصيل رسوم منك</translation>
 <translation id="5866257070973731571">إضافة رقم الهاتف</translation>
+<translation id="5866898949289125849">أنت تطّلع على صفحة أدوات المطوّرين.</translation>
 <translation id="5869405914158311789">لا يمكن الوصول إلى موقع الويب هذا</translation>
 <translation id="5869522115854928033">كلمات المرور المحفوظة</translation>
 <translation id="5887400589839399685">تم حفظ البطاقة</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">مستوى السياسة غير مدعوم.</translation>
 <translation id="6895330447102777224">تم التأكد من بطاقتك</translation>
 <translation id="6897140037006041989">وكيل المستخدم</translation>
-<translation id="6903319715792422884">‏يمكنك المساعدة في تحسين التصفُّح الآمن عن طريق إرسال بعض <ph name="BEGIN_WHITEPAPER_LINK" />معلومات النظام ومحتوى الصفحة<ph name="END_WHITEPAPER_LINK" /> إلى Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">المستخدم:</translation>
 <translation id="6934672428414710184">‏هذا الاسم من حسابك على Google</translation>
 <translation id="6944692733090228304">لقد أدخلتَ كلمة المرور في موقع ويب لا تديره <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. ويُرجى عدم إعادة استخدام كلمة المرور في التطبيقات ومواقع الويب الأخرى لحماية حسابك.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">تعذر إنشاء اتصال خاص بـ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> نظرًا لأن التاريخ والوقت لجهاز الكمبيوتر (<ph name="DATE_AND_TIME" />) غير صحيحين.</translation>
 <translation id="7260504762447901703">إبطال حق الدخول</translation>
+<translation id="726226871651201355">‏هل تريد المتابعة إلى &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;؟</translation>
 <translation id="7271803869921933038">بطاقات الدفع المُسبق المقبولة</translation>
 <translation id="7275334191706090484">الإشارات المرجعية المُدارة</translation>
 <translation id="7298195798382681320">موصى بها</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">مطلوب مزيد من المعلومات</translation>
 <translation id="9080712759204168376">ملخص الطلبات</translation>
 <translation id="9089260154716455634">سياسة "التوقف عن العمل":</translation>
+<translation id="9093075372111400787">إغلاق "الخيارات المتقدمة"</translation>
 <translation id="9095388113577226029">مزيد من اللغات...</translation>
 <translation id="9103872766612412690">‏يستخدم <ph name="SITE" /> التشفير عادة لحماية معلوماتك. عندما حاول Chromium الاتصال بموقع <ph name="SITE" /> هذه المرة، أرجَع موقع الويب بيانات اعتماد غير عادية وغير صحيحة. وقد يحدث هذا عندما يحاول أحد المهاجمين التظاهر بأنه موقع <ph name="SITE" />، أو إذا قاطعت شاشة تسجيل دخول Wi-Fi الاتصال. ولكن لا تزال معلوماتك آمنة نظرًا لأن Chromium أوقَفَ الاتصال قبل تبادل أي بيانات.</translation>
 <translation id="9106062320799175032">إضافة عنوان إرسال الفواتير</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index a70be4d..76091526 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Потребителските имена за устройството и браузъра ви</translation>
 <translation id="2491120439723279231">Сертификатът на сървъра съдържа грешки.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Обикновено посещавате &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Сайтът, който току-що се опитахте да отворите, изглежда подобен на този от историята ви, но не е точно същият. Понякога атакуващите използват тази техника, за да ви подведат или измамят.</translation>
 <translation id="2495083838625180221">Синтактичен анализ на JSON</translation>
 <translation id="2495093607237746763">Ако поставите отметка, Chromium ще съхранява на това устройство копие на картата ви с цел по-бързо попълване на формуляри.</translation>
 <translation id="2498091847651709837">Сканиране на нова карта</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Връзката е шифрована и удостоверена посредством <ph name="CIPHER" /> и използва <ph name="KX" /> като механизъм за обмен на ключове.</translation>
 <translation id="2835170189407361413">Изчистване на формуляра</translation>
 <translation id="2847118875340931228">Отваряне на прозорец в режим „инкогнито“</translation>
+<translation id="2849445596171421624">При кликване върху „Напред“ ще се отвори по-често посещаваният сайт &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (плик)</translation>
 <translation id="2851634818064021665">Необходимо ви е разрешение, за да посетите този сайт</translation>
 <translation id="2856444702002559011">Възможно е извършители на атака да опитват да откраднат информацията ви от <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (например пароли, съобщения или номера на кредитни карти). <ph name="BEGIN_LEARN_MORE_LINK" />Научете повече<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Премахване на картата</translation>
 <translation id="4587425331216688090">Адресът да се премахне ли от Chrome?</translation>
 <translation id="4592951414987517459">Връзката ви с/ъс <ph name="DOMAIN" /> е шифрована със съвременен криптографски пакет.</translation>
+<translation id="4594047029158047642">Отворената от вас връзка води до необичаен сайт. Възможно е тя да се опитва да ви обърка.</translation>
 <translation id="4594403342090139922">&amp;Отмяна на изтриването</translation>
 <translation id="4597348597567598915">Размер 8</translation>
 <translation id="4600854749408232102">C6/C5 (плик)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Възможно е да загубите достъп до профила си в организацията или самоличността ви да бъде открадната. Chrome препоръчва да промените паролата си сега.</translation>
 <translation id="5171045022955879922">Търсете или въведете URL адрес</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Обикновено посещавате &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL адресът, който току-що се опитахте да отворите, изглежда подобен на сайта от историята ви, но не е точно същият. Понякога атакуващите използват тази техника, за да ви подведат или измамят.</translation>
 <translation id="5172758083709347301">Машината</translation>
 <translation id="5179510805599951267">Не е на <ph name="ORIGINAL_LANGUAGE" />? Подайте сигнал за тази грешка</translation>
 <translation id="5190835502935405962">Лента на отметките</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Изключено</translation>
 <translation id="5863847714970149516">На страницата, която искате да посетите, е възможно да ви бъдат удържани средства</translation>
 <translation id="5866257070973731571">Добавяне на телефонен номер</translation>
+<translation id="5866898949289125849">Преглеждате страница с инструменти за програмисти</translation>
 <translation id="5869405914158311789">Няма достъп до този сайт</translation>
 <translation id="5869522115854928033">Запазени пароли</translation>
 <translation id="5887400589839399685">Картата бе запазена</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Нивото на правилото не се поддържа.</translation>
 <translation id="6895330447102777224">Картата ви е потвърдена</translation>
 <translation id="6897140037006041989">Потребителски агент</translation>
-<translation id="6903319715792422884">Помогнете за подобряването на Безопасно сърфиране, като ни изпращате <ph name="BEGIN_WHITEPAPER_LINK" />системна информация и част от съдържанието на страниците<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Потребител:</translation>
 <translation id="6934672428414710184">Това име е от профила ви в Google</translation>
 <translation id="6944692733090228304">Въведохте паролата си на сайт, който не се управлява от <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. За да защитите профила си, не използвайте паролата си повторно в други приложения и сайтове.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Не може да се установи частна връзка с/ъс <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, тъй като датата и часът на компютъра ви (<ph name="DATE_AND_TIME" />) са неправилни.</translation>
 <translation id="7260504762447901703">Отмяна на достъпа</translation>
+<translation id="726226871651201355">Искате ли да продължите към &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Приемани предплатени карти</translation>
 <translation id="7275334191706090484">Управлявани отметки</translation>
 <translation id="7298195798382681320">Препоръчително</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">Изисква се още информация</translation>
 <translation id="9080712759204168376">Обобщена информация за поръчката</translation>
 <translation id="9089260154716455634">Пренебрегване на правилата:</translation>
+<translation id="9093075372111400787">Скриване на подробностите</translation>
 <translation id="9095388113577226029">Още езици...</translation>
 <translation id="9103872766612412690">Обикновено <ph name="SITE" /> използва шифроване за защита на информацията ви. Когато Chromium опита да установи връзка с/ъс <ph name="SITE" /> този път, уебсайтът върна необичайни и неправилни идентификационни данни. Това може да се случи, когато извършител на атака пробва да се представи за <ph name="SITE" /> или връзката е прекъсната от екран за вход в Wi-Fi. Информацията ви продължава да е защитена, тъй като Chromium спря връзката, преди да бъдат обменени данни.</translation>
 <translation id="9106062320799175032">Добавяне на адрес за фактуриране</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 8794fbbf..02bf05b 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -302,6 +302,7 @@
 <translation id="2485387744899240041">আপনার ডিভাইস এবং ব্রাউজারের জন্য ইউজারনেম</translation>
 <translation id="2491120439723279231">সার্ভারের সার্টিফিকেটে ত্রুটি আছে৷</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">আপনি সাধারণত &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; সাইটে যান। আপনি এইমাত্র যে সাইট দেখার চেষ্টা করেছিলেন সেটি পূর্বে দেখা কোনও সাইটের মতো মনে হলেও আসলে এটি অন্য সাইট। আক্রমণকারীরা আপনাকে প্রতারণা করার জন্য কখনও কখনও এই কৌশল ব্যবহার করে।</translation>
 <translation id="2495083838625180221">JSON বিশ্লেষক</translation>
 <translation id="2495093607237746763">টিক চিহ্ণ দেওয়া থাকলে, ফর্ম পূরণের কাজ দ্রুত করতে Chromium এই ডিভাইসে আপনার কার্ডের একটি কপি স্টোর করবে।</translation>
 <translation id="2498091847651709837">নতুন কার্ড স্ক্যান করুন</translation>
@@ -367,6 +368,7 @@
 <translation id="2826760142808435982"><ph name="CIPHER" /> ব্যবহার করে এই সংযোগটি এনক্রিপ্টেড এবং প্রমাণীকৃত করা হয়েছে এবং কী এক্সচেঞ্জ প্রক্রিয়া হিসাবে <ph name="KX" /> ব্যবহার করে৷</translation>
 <translation id="2835170189407361413">ফর্ম সাফ করুন</translation>
 <translation id="2847118875340931228">ছদ্মবেশী উইন্ডো খুলুন</translation>
+<translation id="2849445596171421624">'চালিয়ে যান' বোতামে ক্লিক করলে আপনাকে আরও জনপ্রিয় সাইট &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;-এ নিয়ে যাওয়া হবে।</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">এই সাইট দেখার জন্য আপনার অনুমতির প্রয়োজন</translation>
 <translation id="2856444702002559011">আক্রমণকারীরা হয়ত <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> থেকে আপনার তথ্য (যেমন পাসওয়ার্ড, মেসেজ বা ক্রেডিট কার্ড) চুরি করার চেষ্টা করছে। <ph name="BEGIN_LEARN_MORE_LINK" />আরও জানুন<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -686,6 +688,7 @@
 <translation id="4582204425268416675">কার্ডটি সরিয়ে দিন</translation>
 <translation id="4587425331216688090">Chrome থেকে ঠিকানা সরাবেন?</translation>
 <translation id="4592951414987517459">একটি আধুনিক সাইফার স্যুট ব্যবহার করে <ph name="DOMAIN" />-এ আপনার সংযোগ এনক্রিপ্ট করা হয়েছে।</translation>
+<translation id="4594047029158047642">আপনি যে লিঙ্কটি খুলেছেন, সেটি এমন একটি সাইটে নিয়ে যায় যা খুব একটা পরিচিত নয়। এটি আপনাকে সম্ভবত বিভ্রান্ত করার চেষ্টা করছে।</translation>
 <translation id="4594403342090139922">&amp;মুছে ফেলাকে পূর্বাবস্থায় ফেরান</translation>
 <translation id="4597348597567598915">সাইজ ৮</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -788,6 +791,7 @@
 <translation id="5169827969064885044">আপনি নিজের প্রতিষ্ঠানের অ্যাকাউন্টের অ্যাক্সেস হারাতে পারেন অথবা আপনার পরিচয় চুরি হয়ে যেতে পারে। Chrome এখনই আপনার পাসওয়ার্ড পরিবর্তন করার আর্জি জানাচ্ছে।</translation>
 <translation id="5171045022955879922">খুঁজুন বা URL লিখুন</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">আপনি সাধারণত &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; সাইটে যান। আপনি এইমাত্র যে ইউআরএল দেখার চেষ্টা করেছিলেন সেটি পূর্বে দেখা কোনও সাইটের মতো মনে হলেও আসলে এটি অন্য সাইট। আক্রমণকারীরা আপনাকে প্রতারণা করার জন্য কখনও কখনও এই কৌশল ব্যবহার করে।</translation>
 <translation id="5172758083709347301">যন্ত্র</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" />-এ নেই? এই ত্রুটি রিপোর্ট করুন</translation>
 <translation id="5190835502935405962">বুকমার্ক বার</translation>
@@ -916,6 +920,7 @@
 <translation id="5860033963881614850">বন্ধ করুন</translation>
 <translation id="5863847714970149516">পরের পৃষ্ঠাতে আপনাকে চার্জ করা হতে পারে</translation>
 <translation id="5866257070973731571">ফোন নম্বর যোগ করুন</translation>
+<translation id="5866898949289125849">আপনি ডেভেলপারের টুল পৃষ্ঠা দেখছেন</translation>
 <translation id="5869405914158311789">এই সাইটটিতে পৌছানো যাচ্ছে না</translation>
 <translation id="5869522115854928033">সংরক্ষিত পাসওয়ার্ড</translation>
 <translation id="5887400589839399685">কার্ড সেভ করা হয়েছে</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">নীতি স্তর সমর্থিত নয়।</translation>
 <translation id="6895330447102777224">আপনার কার্ডটি নিশ্চিত করা হয়েছে</translation>
 <translation id="6897140037006041989">ব্যবহারকারী এজেন্ট</translation>
-<translation id="6903319715792422884">সিস্টেমের কিছু <ph name="BEGIN_WHITEPAPER_LINK" />তথ্য এবং পৃষ্ঠার কন্টেন্ট<ph name="END_WHITEPAPER_LINK" /> Google-কে পাঠানোর মাধ্যমে আপনি নিরাপদ ব্রাউজিং আরও ভাল করে তুলতে সহায়তা করতে পারেন। <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">ব্যবহারকারী:</translation>
 <translation id="6934672428414710184">এই নাম আপনার Google অ্যাকাউন্ট থেকে নেওয়া</translation>
 <translation id="6944692733090228304">আপনার <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />-এর নয় এমন একটি সাইটে আপনার পাসওয়ার্ড লিখেছেন। আপনার অ্যাকাউন্টের সুরক্ষার জন্য অন্যান্য অ্যাপ এবং সাইটে আপনার এই পাসওয়ার্ডটি ব্যবহার করবেন না।</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> এ একটি ব্যক্তিগত সংযোগ স্থাপন করা যায়নি কারণ আপনার কম্পিউটারের তারিখ এবং সময় (<ph name="DATE_AND_TIME" />) সঠিক নয়৷</translation>
 <translation id="7260504762447901703">অ্যাক্সেস প্রত্যাহার করুন</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;-এ যেতে চান?</translation>
 <translation id="7271803869921933038">এই প্রিপেড কার্ডগুলি গ্রহণ করা হয়</translation>
 <translation id="7275334191706090484">পরিচালিত বুকমার্কগুলি</translation>
 <translation id="7298195798382681320">প্রস্তাবিত</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">আরও তথ্য প্রয়োজন</translation>
 <translation id="9080712759204168376">অর্ডারের সারসংক্ষেপ</translation>
 <translation id="9089260154716455634">Off-Hours সংক্রান্ত নীতি:</translation>
+<translation id="9093075372111400787">'উন্নত' বোতামটি বন্ধ করুন</translation>
 <translation id="9095388113577226029">আরও ভাষা...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> সাধারণত আপনার তথ্য সুরক্ষিত রাখতে এনক্রিপশন ব্যবহার করে। এবার Chromium, <ph name="SITE" />-এর সাথে কানেক্ট করার চেষ্টা করলে ওয়েবসাইটটি অস্বাভাবিক এবং ভুল ক্রেডেনশিয়াল পাঠিয়ে দেয়। হয় একজন আক্রমণকারী <ph name="SITE" /> হতে চাইছে অথবা একটি ওয়াই-ফাই সাইন-ইন স্ক্রিন কানেকশনকে বাধা দিয়েছে। আপনার তথ্য এখনো নিরাপদ আছে কারণ কোনো ডেটা আদানপ্রদানের আগেই Chromium কানেকশন বন্ধ করে দিয়েছে।</translation>
 <translation id="9106062320799175032">বিলিংয়ের ঠিকানা যোগ করুন</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index e02e320d..dfec589 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Noms d'usuari del dispositiu i del navegador</translation>
 <translation id="2491120439723279231">El certificat del servidor conté errors.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Normalment visites &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. El lloc web que vols visitar és molt semblant, però no coincideix exactament amb el lloc web del teu historial. Els atacants de vegades utilitzen aquesta tècnica per enganyar o estafar els usuaris.</translation>
 <translation id="2495083838625180221">Analitzador JSON</translation>
 <translation id="2495093607237746763">Si s'activa aquesta casella, Chromium desa una còpia de la vostra targeta al dispositiu per agilitzar l'emplenament de formularis.</translation>
 <translation id="2498091847651709837">Escaneja una targeta nova</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">La connexió s'ha encriptat i autenticat mitjançant <ph name="CIPHER" /> i fa servir <ph name="KX" /> com a mecanisme d'intercanvi clau.</translation>
 <translation id="2835170189407361413">Esborra el formulari</translation>
 <translation id="2847118875340931228">Obre una finestra d'incògnit</translation>
+<translation id="2849445596171421624">En fer clic a Continua, se't dirigirà al lloc web que visites més habitualment: &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (sobre)</translation>
 <translation id="2851634818064021665">Necessites permís per visitar aquest lloc web</translation>
 <translation id="2856444702002559011">Pot ser que els atacants provin de robar la teva informació del lloc web <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (per exemple, contrasenyes, missatges o targetes de crèdit). <ph name="BEGIN_LEARN_MORE_LINK" />Més informació<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -677,6 +679,7 @@
 <translation id="4582204425268416675">Suprimeix la targeta</translation>
 <translation id="4587425331216688090">Voleu suprimir l'adreça de Chrome?</translation>
 <translation id="4592951414987517459">La connexió a <ph name="DOMAIN" /> s'ha encriptat amb un sistema de xifratge modern.</translation>
+<translation id="4594047029158047642">L'enllaç que has obert dirigeix a un lloc web poc habitual. Pot ser que estigui provant de confondre't.</translation>
 <translation id="4594403342090139922">&amp;Desfés la supressió</translation>
 <translation id="4597348597567598915">Mida 8</translation>
 <translation id="4600854749408232102">C6/C5 (sobre)</translation>
@@ -779,6 +782,7 @@
 <translation id="5169827969064885044">Podries perdre l'accés al compte de la teva organització o ser víctima d'un robatori d'identitat. Chrome et recomana que canviïs la contrasenya ara.</translation>
 <translation id="5171045022955879922">Cerqueu o escriviu l'URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Normalment visites &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. L'URL que vols visitar és molt semblant, però no coincideix exactament amb el lloc web del teu historial. Els atacants de vegades utilitzen aquesta tècnica per enganyar o estafar els usuaris.</translation>
 <translation id="5172758083709347301">Automàtica</translation>
 <translation id="5179510805599951267">No està escrita en <ph name="ORIGINAL_LANGUAGE" />? Informa d'aquest error</translation>
 <translation id="5190835502935405962">Barra d'adreces d'interès</translation>
@@ -907,6 +911,7 @@
 <translation id="5860033963881614850">Desactivat</translation>
 <translation id="5863847714970149516">És possible que aquesta pàgina provi de fer-te algun càrrec</translation>
 <translation id="5866257070973731571">Afegeix un número de telèfon</translation>
+<translation id="5866898949289125849">Estàs consultant una pàgina d'eines per a desenvolupadors</translation>
 <translation id="5869405914158311789">No es pot accedir a aquest lloc web</translation>
 <translation id="5869522115854928033">Contrasenyes desades</translation>
 <translation id="5887400589839399685">S'ha desat la targeta</translation>
@@ -1075,7 +1080,6 @@
 <translation id="6891596781022320156">No s'admet el nivell de la política.</translation>
 <translation id="6895330447102777224">La teva targeta s'ha confirmat</translation>
 <translation id="6897140037006041989">Agent d'usuari</translation>
-<translation id="6903319715792422884">Per ajudar a millorar Navegació segura, envia a Google <ph name="BEGIN_WHITEPAPER_LINK" />algunes dades del sistema i contingut de les pàgines<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Usuari:</translation>
 <translation id="6934672428414710184">Aquest nom prové del teu Compte de Google</translation>
 <translation id="6944692733090228304">Has introduït la contrasenya en un lloc web que no està gestionat per <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Per protegir el teu compte, no facis servir la mateixa contrasenya en altres aplicacions ni llocs web.</translation>
@@ -1142,6 +1146,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">No s'ha pogut establir una connexió privada amb <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> perquè la data i l'hora (<ph name="DATE_AND_TIME" />) de l'ordinador no són correctes.</translation>
 <translation id="7260504762447901703">Revoca l'accés</translation>
+<translation id="726226871651201355">Vols continuar a &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Targetes de prepagament acceptades</translation>
 <translation id="7275334191706090484">Adreces d'interès gestionades</translation>
 <translation id="7298195798382681320">Recomanada</translation>
@@ -1479,6 +1484,7 @@
 <translation id="9078964945751709336">Necessitem més informació</translation>
 <translation id="9080712759204168376">Resum de la comanda</translation>
 <translation id="9089260154716455634">Política fora de l'horari:</translation>
+<translation id="9093075372111400787">Oculta la informació addicional</translation>
 <translation id="9095388113577226029">Més idiomes...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> utilitza normalment l'encriptació per protegir la vostra informació. En aquesta ocasió, quan Chromium ha provat de connectar-se a <ph name="SITE" />, el lloc web ha enviat credencials poc comunes i incorrectes. Pot ser que un atacant estigui provant de fer-se passar per <ph name="SITE" /> o que una pantalla d'inici de sessió a la xarxa Wi-Fi hagi interromput la connexió. En qualsevol cas, la vostra informació continua estant segura, perquè Chromium ha aturat la connexió abans no s'intercanviés cap dada.</translation>
 <translation id="9106062320799175032">Afegeix una adreça de facturació</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 30e0223..75dd977 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Uživatelská jména pro zařízení a prohlížeč</translation>
 <translation id="2491120439723279231">Certifikát serveru obsahuje chyby.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Obvykle navštěvujete web &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Web, který jste se právě pokusili navštívit, se tomuto webu z vaší historie podobá, ale úplně se s ním neshoduje. Tuto techniku někdy útočníci používají k nekalým účelům.</translation>
 <translation id="2495083838625180221">Analyzátor souborů JSON</translation>
 <translation id="2495093607237746763">Pokud je tato možnost zaškrtnuta, prohlížeč Chromium do zařízení uloží kopii karty za účelem rychlejšího vyplňování formulářů.</translation>
 <translation id="2498091847651709837">Naskenovat novou kartu</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">Připojení je šifrováno a ověřeno pomocí šifry <ph name="CIPHER" /> a jako mechanismus výměny klíčů používá <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Vymazat formulář</translation>
 <translation id="2847118875340931228">Otevřít anonymní okno</translation>
+<translation id="2849445596171421624">Kliknutím na Pokračovat přejdete na častěji navštěvovaný web &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (obálka)</translation>
 <translation id="2851634818064021665">K návštěvě tohoto webu potřebujete povolení</translation>
 <translation id="2856444702002559011">Útočníci se mohou pokusit odcizit vaše údaje na webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (například hesla, zprávy nebo informace o platebních kartách). <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -673,6 +675,7 @@
 <translation id="4582204425268416675">Odebrat kartu</translation>
 <translation id="4587425331216688090">Odstranit adresu z Chromu?</translation>
 <translation id="4592951414987517459">Vaše připojení k doméně <ph name="DOMAIN" /> je šifrováno za použití moderní šifrovací sady.</translation>
+<translation id="4594047029158047642">Odkaz, který jste otevřeli, směřuje na neobvyklý web. Je možné, že se vás pokouší zmást.</translation>
 <translation id="4594403342090139922">&amp;Vrátit smazání zpět</translation>
 <translation id="4597348597567598915">Velikost 8</translation>
 <translation id="4600854749408232102">C6/C5 (obálka)</translation>
@@ -775,6 +778,7 @@
 <translation id="5169827969064885044">Mohli byste ztratit přístup k účtu organizace nebo by mohlo dojít k odcizení vaší identity. Chrome doporučuje okamžitě změnit heslo.</translation>
 <translation id="5171045022955879922">Vyhledávejte či zadejte URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Obvykle navštěvujete web &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Adresa URL, kterou jste se právě pokusili navštívit, se tomuto webu z vaší historie podobá, ale úplně se s ním neshoduje. Tuto techniku někdy útočníci používají k nekalým účelům.</translation>
 <translation id="5172758083709347301">Počítač</translation>
 <translation id="5179510805599951267">Nejedná se o jazyk <ph name="ORIGINAL_LANGUAGE" />? Nahlaste tuto chybu.</translation>
 <translation id="5190835502935405962">Lišta záložek</translation>
@@ -903,6 +907,7 @@
 <translation id="5860033963881614850">Vypnuto</translation>
 <translation id="5863847714970149516">Následující stránka se vám může pokusit naúčtovat poplatky</translation>
 <translation id="5866257070973731571">Přidání telefonního čísla</translation>
+<translation id="5866898949289125849">Prohlížíte si stránku nástrojů pro vývojáře</translation>
 <translation id="5869405914158311789">Tento web není dostupný</translation>
 <translation id="5869522115854928033">Uložená hesla</translation>
 <translation id="5887400589839399685">Karta byla uložena</translation>
@@ -1070,7 +1075,6 @@
 <translation id="6891596781022320156">Úroveň zásady není podporována.</translation>
 <translation id="6895330447102777224">Vaše karta je ověřena</translation>
 <translation id="6897140037006041989">User agent</translation>
-<translation id="6903319715792422884">Pomozte zlepšit Bezpečné vyhledávání tím, že budete část <ph name="BEGIN_WHITEPAPER_LINK" />informací o systému a obsahu stránek<ph name="END_WHITEPAPER_LINK" /> odesílat do Googlu. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Uživatel:</translation>
 <translation id="6934672428414710184">Toto jméno pochází z vašeho účtu Google</translation>
 <translation id="6944692733090228304">Zadali jste heslo na webu, který není spravován organizací <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Aby byl váš účet chráněn, nepoužívejte jeho heslo v jiných aplikacích a na jiných webech.</translation>
@@ -1136,6 +1140,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Soukromé připojení k doméně <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nelze navázat, protože máte v počítači nastaveno chybné datum a čas (<ph name="DATE_AND_TIME" />).</translation>
 <translation id="7260504762447901703">Zrušit přístup</translation>
+<translation id="726226871651201355">Pokračovat na &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Přijímané předplacené karty</translation>
 <translation id="7275334191706090484">Spravované záložky</translation>
 <translation id="7298195798382681320">Doporučeno</translation>
@@ -1474,6 +1479,7 @@
 <translation id="9078964945751709336">Jsou potřeba další informace</translation>
 <translation id="9080712759204168376">Přehled objednávky</translation>
 <translation id="9089260154716455634">Zásada Off-Hours:</translation>
+<translation id="9093075372111400787">Zavřít rozšířené možnosti</translation>
 <translation id="9095388113577226029">Další jazyky...</translation>
 <translation id="9103872766612412690">Web <ph name="SITE" /> vaše informace běžně chrání šifrováním. Když se prohlížeč Chromium k webu <ph name="SITE" /> pokusil připojit tentokrát, web vrátil neobvyklé a nesprávné identifikační údaje. K tomuto problému může dojít, pokud se za web <ph name="SITE" /> pokouší vydávat nějaký útočník nebo pokud bylo připojení přerušeno přihlašovací obrazovkou sítě Wi-Fi. Vaše informace jsou i nadále v bezpečí, protože prohlížeč Chromium připojení přerušil dříve, než došlo k odeslání jakýchkoliv dat.</translation>
 <translation id="9106062320799175032">Přidání fakturační adresy</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 5e12fba..c4281ce 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Brugernavne for din enhed og browser</translation>
 <translation id="2491120439723279231">Serverens certifikat indeholder fejl.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Du besøger normalt &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Det website, du netop har forsøgt at besøge, ligner, men er ikke helt det samme, som websitet fra din historik. Svindlere bruger nogle gange denne metode til at narre eller svindle dig.</translation>
 <translation id="2495083838625180221">Værktøj til parsing af JSON-filer</translation>
 <translation id="2495093607237746763">Hvis dette felt er markeret, gemmer Chromium en kopi af dit kort på denne enhed for at gøre det hurtigere at udfylde formularer.</translation>
 <translation id="2498091847651709837">Scan et nyt kort</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Forbindelsen er krypteret og godkendt ved hjælp af <ph name="CIPHER" />, og den anvender <ph name="KX" /> som primær udvekslingsmekanisme.</translation>
 <translation id="2835170189407361413">Ryd formular</translation>
 <translation id="2847118875340931228">Åbn inkognitovindue</translation>
+<translation id="2849445596171421624">Hvis du klikker på Fortsæt, føres du til det mere almindelige website &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">Du skal have tilladelse til at besøge dette website</translation>
 <translation id="2856444702002559011">Brugere med ondsindede hensigter kan forsøge at stjæle dine oplysninger fra <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (f.eks. adgangskoder, beskeder eller kreditkort). <ph name="BEGIN_LEARN_MORE_LINK" />Få flere oplysninger<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Fjern kort</translation>
 <translation id="4587425331216688090">Vil du fjerne adressen fra Chrome?</translation>
 <translation id="4592951414987517459">Din forbindelse til <ph name="DOMAIN" /> er krypteret ved hjælp af en moderne krypteringspakke.</translation>
+<translation id="4594047029158047642">Det link, du åbnede, omdirigerer til et ualmindeligt website. Det forsøger muligvis at forvirre dig.</translation>
 <translation id="4594403342090139922">&amp;Fortryd sletning</translation>
 <translation id="4597348597567598915">Størrelse 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Du kan miste adgangen til din organisations konto eller udsættes for identitetstyveri. Chrome anbefaler, at du skifter din adgangskode nu.</translation>
 <translation id="5171045022955879922">Søg, eller angiv webadresse</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Du besøger normalt &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Den webadresse, du netop har forsøgt at besøge, ligner, men er ikke helt den samme, som websitet fra din historik. Svindlere bruger nogle gange denne metode til at narre eller svindle dig.</translation>
 <translation id="5172758083709347301">Maskine</translation>
 <translation id="5179510805599951267">Ikke på <ph name="ORIGINAL_LANGUAGE" />? Rapporter denne fejl</translation>
 <translation id="5190835502935405962">Bogmærkelinje</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Fra</translation>
 <translation id="5863847714970149516">Siden forude kan forsøge at opkræve dig penge</translation>
 <translation id="5866257070973731571">Tilføj telefonnummer</translation>
+<translation id="5866898949289125849">Du kigger på en side for udviklerværktøjer</translation>
 <translation id="5869405914158311789">Der kan ikke oprettes forbindelse til dette website</translation>
 <translation id="5869522115854928033">Gemte adgangskoder</translation>
 <translation id="5887400589839399685">Kortet er gemt</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Politikniveauet understøttes ikke.</translation>
 <translation id="6895330447102777224">Dit kort er bekræftet</translation>
 <translation id="6897140037006041989">Brugeragent</translation>
-<translation id="6903319715792422884">Hjælp med at forbedre Beskyttet browsing ved at sende nogle <ph name="BEGIN_WHITEPAPER_LINK" />systemoplysninger og noget sideindhold<ph name="END_WHITEPAPER_LINK" /> til Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Bruger:</translation>
 <translation id="6934672428414710184">Dette navn er fra din Google-konto</translation>
 <translation id="6944692733090228304">Du indtastede din adgangskode på et website, der ikke administreres af <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Du kan beskytte din konto ved at undgå at bruge din adgangskode i andre apps og på andre websites.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Der kunne ikke oprettes en privat forbindelse til <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, da dato og tid (<ph name="DATE_AND_TIME" />) på din enhed er forkerte.</translation>
 <translation id="7260504762447901703">Tilbagekald adgangstilladelsen</translation>
+<translation id="726226871651201355">Vil du fortsætte til &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Accepterede forudbetalte kort</translation>
 <translation id="7275334191706090484">Administrerede bogmærker</translation>
 <translation id="7298195798382681320">Anbefalet</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">Flere oplysninger kræves</translation>
 <translation id="9080712759204168376">Bestillingsoversigt</translation>
 <translation id="9089260154716455634">Politik uden for åbningstiden:</translation>
+<translation id="9093075372111400787">Luk avancerede oplysninger</translation>
 <translation id="9095388113577226029">Flere sprog...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> bruger normalt kryptering til at beskytte dine oplysninger. Da Chromium forsøgte at oprette forbindelse til <ph name="SITE" /> denne gang, returnerede websitet usædvanlige og forkerte loginoplysninger. Dette kan skyldes, at en hacker forsøger at udgive sig for at være <ph name="SITE" />, eller at en Wi-Fi-loginskærm har forstyrret forbindelsen. Dine oplysninger er stadig sikre, idet Chromium afbrød forbindelsen, inden der blev udvekslet data.</translation>
 <translation id="9106062320799175032">Tilføj faktureringsadresse</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 084cee8..f5586e7 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Nutzernamen für Ihr Gerät und Ihren Browser</translation>
 <translation id="2491120439723279231">Das Serverzertifikat enthält Fehler.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Normalerweise rufen Sie &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; auf. Die Website, die Sie öffnen möchten, ist ähnlich, stimmt aber nicht genau mit der Website aus Ihrem Verlauf überein. Angreifer gehen manchmal so vor, um Nutzer zu täuschen oder zu betrügen.</translation>
 <translation id="2495083838625180221">JSON-Parser</translation>
 <translation id="2495093607237746763">Wenn Sie diese Option auswählen, speichert Chromium eine Kopie Ihrer Karte auf diesem Gerät, damit Formulare schneller ausgefüllt werden können.</translation>
 <translation id="2498091847651709837">Neue Karte scannen</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">Die Verbindung ist mit <ph name="CIPHER" /> verschlüsselt und authentifiziert und verwendet <ph name="KX" /> als Mechanismus für den Schlüsselaustausch.</translation>
 <translation id="2835170189407361413">Formular leeren</translation>
 <translation id="2847118875340931228">Inkognitofenster öffnen</translation>
+<translation id="2849445596171421624">Wenn Sie auf "Weiter" klicken, gelangen Sie zur Website aus Ihrem Verlauf &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Umschlag)</translation>
 <translation id="2851634818064021665">Du benötigst eine Berechtigung, um auf diese Website zuzugreifen</translation>
 <translation id="2856444702002559011">Hacker könnten versuchen, Ihre Daten von <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> zu stehlen, zum Beispiel Passwörter, Nachrichten oder Kreditkartendaten. <ph name="BEGIN_LEARN_MORE_LINK" />Weitere Informationen<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -675,6 +677,7 @@
 <translation id="4582204425268416675">Karte entfernen</translation>
 <translation id="4587425331216688090">Adresse aus Chrome entfernen?</translation>
 <translation id="4592951414987517459">Ihre Verbindung zu <ph name="DOMAIN" /> ist mit einer modernen Codier-Suite verschlüsselt.</translation>
+<translation id="4594047029158047642">Der geöffnete Link verweist auf eine Website, die Sie normalerweise nicht besuchen. Es könnte sich um einen Täuschungsversuch handeln.</translation>
 <translation id="4594403342090139922">&amp;Löschen rückgängig machen</translation>
 <translation id="4597348597567598915">Größe 8</translation>
 <translation id="4600854749408232102">C6/C5 (Umschlag)</translation>
@@ -777,6 +780,7 @@
 <translation id="5169827969064885044">Sie könnten den Zugriff auf das Konto Ihres Unternehmens verlieren oder zum Opfer von Identitätsdiebstahl werden. Chrome empfiehlt Ihnen, Ihr Passwort jetzt zu ändern.</translation>
 <translation id="5171045022955879922">Suchen oder URL eingeben</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Normalerweise rufen Sie &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; auf. Die URL, die Sie öffnen möchten, ist ähnlich, stimmt aber nicht genau mit der Website aus Ihrem Verlauf überein. Angreifer gehen manchmal so vor, um Nutzer zu täuschen oder zu betrügen.</translation>
 <translation id="5172758083709347301">Computer</translation>
 <translation id="5179510805599951267">Nicht auf <ph name="ORIGINAL_LANGUAGE" />? Diesen Fehler melden</translation>
 <translation id="5190835502935405962">Lesezeichenleiste</translation>
@@ -905,6 +909,7 @@
 <translation id="5860033963881614850">Aus</translation>
 <translation id="5863847714970149516">Auf der nächsten Seite wird möglicherweise versucht, Ihnen etwas in Rechnung zu stellen</translation>
 <translation id="5866257070973731571">Telefonnummer hinzufügen</translation>
+<translation id="5866898949289125849">Sie haben eine Entwicklertools-Seite aufgerufen</translation>
 <translation id="5869405914158311789">Die Website ist nicht erreichbar</translation>
 <translation id="5869522115854928033">Gespeicherte Passwörter</translation>
 <translation id="5887400589839399685">Karte gespeichert</translation>
@@ -1073,7 +1078,6 @@
 <translation id="6891596781022320156">Richtlinienebene wird nicht unterstützt.</translation>
 <translation id="6895330447102777224">Ihre Karte wurde bestätigt</translation>
 <translation id="6897140037006041989">User-Agent</translation>
-<translation id="6903319715792422884">Sie können uns dabei helfen, Safe Browsing weiter zu verbessern, indem Sie einige <ph name="BEGIN_WHITEPAPER_LINK" />Systeminformationen und Seiteninhalte<ph name="END_WHITEPAPER_LINK" /> an Google senden. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Nutzer: </translation>
 <translation id="6934672428414710184">Dieser Name stammt aus Ihrem Google-Konto</translation>
 <translation id="6944692733090228304">Sie haben Ihr Passwort auf einer Website eingegeben, die nicht von <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> verwaltet wird. Zum Schutz Ihres Kontos sollten Sie das Passwort nicht für andere Apps und Websites verwenden.</translation>
@@ -1140,6 +1144,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Es kann keine private Verbindung zu <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> hergestellt werden, weil Datum und Uhrzeit Ihres Computers falsch sind (<ph name="DATE_AND_TIME" />).</translation>
 <translation id="7260504762447901703">Zugriff entziehen</translation>
+<translation id="726226871651201355">Weiter zu &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Akzeptierte Prepaidkarten</translation>
 <translation id="7275334191706090484">Verwaltete Lesezeichen</translation>
 <translation id="7298195798382681320">Empfohlen</translation>
@@ -1479,6 +1484,7 @@
 <translation id="9078964945751709336">Weitere Informationen erforderlich</translation>
 <translation id="9080712759204168376">Bestellübersicht</translation>
 <translation id="9089260154716455634">Richtlinie für Abwesenheitszeiten:</translation>
+<translation id="9093075372111400787">"Erweitert" schließen</translation>
 <translation id="9095388113577226029">Weitere Sprachen...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> schützt Ihre Daten in der Regel durch Verschlüsselung. Als Chromium dieses Mal versuchte, eine Verbindung zu <ph name="SITE" /> herzustellen, gab die Website ungewöhnliche und falsche Anmeldedaten zurück. Entweder versucht ein Angreifer, sich als <ph name="SITE" /> auszugeben, oder die Verbindung wurde durch eine WLAN-Anmeldeseite unterbrochen. Da Chromium die Verbindung vor dem Austausch von Daten unterbrochen hat, sind Ihre Informationen weiterhin sicher.</translation>
 <translation id="9106062320799175032">Rechnungsadresse hinzufügen</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 98624c0..0d7a6d6 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Τα ονόματα χρήστη για τη συσκευή και το πρόγραμμα περιήγησής σας</translation>
 <translation id="2491120439723279231">Το πιστοποιητικό του διακομιστή περιέχει σφάλματα.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Συνήθως επισκέπτεστε τον ιστότοπο &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Ο ιστότοπος που προσπαθήσατε να επισκεφτείτε μόλις φαίνεται παρόμοιος, αλλά δεν υπάρχει ακριβής αντιστοίχιση με τον ιστότοπο από το ιστορικό σας. Οι εισβολείς χρησιμοποιούν μερικές φορές αυτήν την τεχνική για να σας εξαπατήσουν.</translation>
 <translation id="2495083838625180221">Συντακτικός αναλυτής JSON</translation>
 <translation id="2495093607237746763">Εάν επιλεγεί, το Chromium θα αποθηκεύσει ένα αντίγραφο της κάρτας σας σε αυτήν τη συσκευή για ταχύτερη συμπλήρωση φορμών.</translation>
 <translation id="2498091847651709837">Σάρωση νέας κάρτας</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Η κρυπτογράφηση και ο έλεγχος ταυτότητας της σύνδεσης γίνονται με <ph name="CIPHER" /> και χρησιμοποιεί το <ph name="KX" /> ως μηχανισμό ανταλλαγής κλειδιών.</translation>
 <translation id="2835170189407361413">Διαγραφή φόρμας</translation>
 <translation id="2847118875340931228">Άνοιγμα παραθύρου για ανώνυμη περιήγηση</translation>
+<translation id="2849445596171421624">Κάνοντας κλικ στο κουμπί Συνέχεια, θα μεταφερθείτε στον πιο συνηθισμένο ιστότοπο &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Φάκελος)</translation>
 <translation id="2851634818064021665">Απαιτείται άδεια για να επισκεφτείτε αυτόν τον ιστότοπο</translation>
 <translation id="2856444702002559011">Οι εισβολείς ενδέχεται να προσπαθήσουν να υποκλέψουν τα στοιχεία σας από τον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (για παράδειγμα, κωδικούς πρόσβασης, μηνύματα ή πιστωτικές κάρτες). <ph name="BEGIN_LEARN_MORE_LINK" />Μάθετε περισσότερα<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -686,6 +688,7 @@
 <translation id="4582204425268416675">Κατάργηση κάρτας</translation>
 <translation id="4587425331216688090">Κατάργηση διεύθυνσης από το Chrome;</translation>
 <translation id="4592951414987517459">Η σύνδεσή σας στο <ph name="DOMAIN" /> κρυπτογραφείται χρησιμοποιώντας ένα σύγχρονο πρόγραμμα κρυπτογράφησης.</translation>
+<translation id="4594047029158047642">Ο σύνδεσμος που ανοίξατε οδηγεί σε έναν ασυνήθιστο ιστότοπο. Ενδεχομένως να προσπαθεί να σας προκαλέσει σύγχυση.</translation>
 <translation id="4594403342090139922">&amp;Αναίρεση διαγραφής</translation>
 <translation id="4597348597567598915">Μέγεθος 8</translation>
 <translation id="4600854749408232102">C6/C5 (Φάκελος)</translation>
@@ -788,6 +791,7 @@
 <translation id="5169827969064885044">Υπάρχει κίνδυνος να χάσετε την πρόσβαση στον λογαριασμό της επιχείρησής σας ή να σας κλέψουν τη διαδικτυακή σας ταυτότητα. Το Chrome συνιστά να αλλάξετε τον κωδικό πρόσβασής σας τώρα.</translation>
 <translation id="5171045022955879922">Αναζήτηση ή πληκτρολόγηση διεύθυνσης URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Συνήθως επισκέπτεστε τον ιστότοπο &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Το URL που προσπαθήσατε να επισκεφτείτε μόλις φαίνεται παρόμοιο, αλλά δεν υπάρχει ακριβής αντιστοίχιση με τον ιστότοπο από το ιστορικό σας. Οι εισβολείς χρησιμοποιούν μερικές φορές αυτήν την τεχνική για να σας εξαπατήσουν.</translation>
 <translation id="5172758083709347301">Υπολογιστής</translation>
 <translation id="5179510805599951267">Δεν είναι στα <ph name="ORIGINAL_LANGUAGE" />; Αναφέρετε αυτό το σφάλμα</translation>
 <translation id="5190835502935405962">Γραμμή σελιδοδεικτών</translation>
@@ -916,6 +920,7 @@
 <translation id="5860033963881614850">Απενεργοποιημένη</translation>
 <translation id="5863847714970149516">Η σελίδα που ακολουθεί μπορεί να προσπαθήσει να σας χρεώσει</translation>
 <translation id="5866257070973731571">Προσθήκη αριθμού τηλεφώνου</translation>
+<translation id="5866898949289125849">Προβάλετε μια σελίδα εργαλείων προγραμματιστή.</translation>
 <translation id="5869405914158311789">Δεν είναι δυνατή η πρόσβαση σε αυτόν τον ιστότοπο</translation>
 <translation id="5869522115854928033">Αποθηκευμένοι κωδικοί πρόσβασης</translation>
 <translation id="5887400589839399685">Η κάρτα αποθηκεύτηκε</translation>
@@ -1084,7 +1089,6 @@
 <translation id="6891596781022320156">Το επίπεδο πολιτικής δεν υποστηρίζεται.</translation>
 <translation id="6895330447102777224">Η κάρτα σας επιβεβαιώθηκε</translation>
 <translation id="6897140037006041989">Παράγοντας χρήστη</translation>
-<translation id="6903319715792422884">Συμβάλετε στη βελτίωση της Ασφαλούς περιήγησης στέλνοντας ορισμένες <ph name="BEGIN_WHITEPAPER_LINK" />πληροφορίες συστήματος και περιεχόμενο σελίδων<ph name="END_WHITEPAPER_LINK" /> στην Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Χρήστης</translation>
 <translation id="6934672428414710184">Αυτό το όνομα προέρχεται από τον Λογαριασμό σας Google</translation>
 <translation id="6944692733090228304">Καταχωρίσατε τον κωδικό πρόσβασής σας σε έναν ιστότοπο τον οποίο δεν διαχειρίζεται ο οργανισμός <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Για να προστατεύσετε τον λογαριασμό σας, μην χρησιμοποιήσετε ξανά αυτόν τον κωδικό πρόσβασης σε άλλες εφαρμογές και ιστότοπους.</translation>
@@ -1154,6 +1158,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Δεν είναι δυνατή η επίτευξη ιδιωτικής σύνδεσης με τον τομέα <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> επειδή η ημερομηνία και η ώρα (<ph name="DATE_AND_TIME" />) του υπολογιστή σας είναι λανθασμένες.</translation>
 <translation id="7260504762447901703">Ανάκληση πρόσβασης</translation>
+<translation id="726226871651201355">Συνέχεια σε &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;;</translation>
 <translation id="7271803869921933038">Αποδεκτές προπληρωμένες κάρτες</translation>
 <translation id="7275334191706090484">Διαχειριζόμενοι σελιδοδείκτες</translation>
 <translation id="7298195798382681320">Προτεινόμενες</translation>
@@ -1492,6 +1497,7 @@
 <translation id="9078964945751709336">Απαιτούνται περισσότερες πληροφορίες</translation>
 <translation id="9080712759204168376">Σύνοψη παραγγελίας</translation>
 <translation id="9089260154716455634">Πολιτική ελεύθερου χρόνου:</translation>
+<translation id="9093075372111400787">Κλείσιμο επιλογών Για προχωρημένους</translation>
 <translation id="9095388113577226029">Περισσότερες γλώσσες…</translation>
 <translation id="9103872766612412690">Κανονικά, ο ιστότοπος <ph name="SITE" /> χρησιμοποιεί κρυπτογράφηση για να προστατεύει τα στοιχεία σας. Όταν το Chromium επιχείρησε πρόσφατα να συνδεθεί στο <ph name="SITE" />, ο ιστότοπος ανταποκρίθηκε δημιουργώντας ασυνήθιστα και εσφαλμένα διαπιστευτήρια. Αυτό μπορεί να συμβεί όταν κάποιος εισβολέας προσπαθεί να υποκριθεί ότι είναι ο ιστότοπος <ph name="SITE" /> ή όταν κάποια οθόνη σύνδεσης Wi-Fi έχει διακόψει τη σύνδεσή σας. Τα στοιχεία σας εξακολουθούν να είναι ασφαλή επειδή το Chromium διέκοψε τη σύνδεση πριν από την ανταλλαγή δεδομένων.</translation>
 <translation id="9106062320799175032">Προσθήκη διεύθυνσης χρέωσης</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index e13b6b7..c76351b 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Usernames for your device and browser</translation>
 <translation id="2491120439723279231">Server's certificate contains errors.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">You usually visit &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. The site you just tried to visit appears similar to, but does not exactly match, the site from your history. Attackers sometimes use this technique to trick or scam you.</translation>
 <translation id="2495083838625180221">JSON Parser</translation>
 <translation id="2495093607237746763">If ticked, Chromium will store a copy of your card on this device for faster form filling.</translation>
 <translation id="2498091847651709837">Scan new card</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">The connection is encrypted and authenticated using <ph name="CIPHER" /> and uses <ph name="KX" /> as the key exchange mechanism.</translation>
 <translation id="2835170189407361413">Clear form</translation>
 <translation id="2847118875340931228">Open incognito window</translation>
+<translation id="2849445596171421624">Clicking continue will take you to the more common site &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">You need permission to visit this site</translation>
 <translation id="2856444702002559011">Attackers might be trying to steal your information from <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (for example, passwords, messages or credit cards). <ph name="BEGIN_LEARN_MORE_LINK" />Learn more<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -677,6 +679,7 @@
 <translation id="4582204425268416675">Remove card</translation>
 <translation id="4587425331216688090">Remove address from Chrome?</translation>
 <translation id="4592951414987517459">Your connection to <ph name="DOMAIN" /> is encrypted using a modern cipher suite.</translation>
+<translation id="4594047029158047642">The link that you opened goes to an uncommon site. It might be trying to confuse you.</translation>
 <translation id="4594403342090139922">&amp;Undo Delete</translation>
 <translation id="4597348597567598915">Size 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -779,6 +782,7 @@
 <translation id="5169827969064885044">You could lose access to your organisation's account or experience identity theft. Chrome recommends changing your password now.</translation>
 <translation id="5171045022955879922">Search or type URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">You usually visit &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. The URL you just tried to visit appears similar, but does not exactly match the site from your history. Attackers sometimes use this technique to trick or scam you.</translation>
 <translation id="5172758083709347301">Machine</translation>
 <translation id="5179510805599951267">Not in <ph name="ORIGINAL_LANGUAGE" />? Report this error</translation>
 <translation id="5190835502935405962">Bookmarks Bar</translation>
@@ -907,6 +911,7 @@
 <translation id="5860033963881614850">Off</translation>
 <translation id="5863847714970149516">The page ahead may try to charge you money</translation>
 <translation id="5866257070973731571">Add Phone Number</translation>
+<translation id="5866898949289125849">You're viewing a developer tools page</translation>
 <translation id="5869405914158311789">This site can’t be reached</translation>
 <translation id="5869522115854928033">Saved passwords</translation>
 <translation id="5887400589839399685">Card saved</translation>
@@ -1075,7 +1080,6 @@
 <translation id="6891596781022320156">Policy level is not supported.</translation>
 <translation id="6895330447102777224">Your card is confirmed</translation>
 <translation id="6897140037006041989">User Agent</translation>
-<translation id="6903319715792422884">Help improve Safe Browsing by sending some <ph name="BEGIN_WHITEPAPER_LINK" />system information and page content<ph name="END_WHITEPAPER_LINK" /> to Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">User:</translation>
 <translation id="6934672428414710184">This name is from your Google Account</translation>
 <translation id="6944692733090228304">You entered your password on a site that’s not managed by <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. To protect your account, don’t reuse your password on other apps and sites.</translation>
@@ -1142,6 +1146,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">A private connection to <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> can't be established because your computer's date and time (<ph name="DATE_AND_TIME" />) are incorrect.</translation>
 <translation id="7260504762447901703">Revoke access</translation>
+<translation id="726226871651201355">Continue to &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Accepted Prepaid Cards</translation>
 <translation id="7275334191706090484">Managed Bookmarks</translation>
 <translation id="7298195798382681320">Recommended</translation>
@@ -1479,6 +1484,7 @@
 <translation id="9078964945751709336">More information required</translation>
 <translation id="9080712759204168376">Order Summary</translation>
 <translation id="9089260154716455634">Off-hours policy:</translation>
+<translation id="9093075372111400787">Close advanced</translation>
 <translation id="9095388113577226029">More languages...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> normally uses encryption to protect your information. When Chromium tried to connect to <ph name="SITE" /> this time, the website sent back unusual and incorrect credentials. This may happen when an attacker is trying to pretend to be <ph name="SITE" />, or a Wi-Fi sign-in screen has interrupted the connection. Your information is still secure because Chromium stopped the connection before any data was exchanged.</translation>
 <translation id="9106062320799175032">Add Billing Address</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index ee357b5..a1c91b0 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Nombres de usuario para tu dispositivo y navegador</translation>
 <translation id="2491120439723279231">El certificado del servidor contiene errores.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Por lo general, visitas &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. El sitio que quisiste visitar hace un instante es similar al sitio que aparece en tu historial, pero no es el mismo. Los atacantes a veces usan esta técnica para engañarte o estafarte.</translation>
 <translation id="2495083838625180221">Analizador de JSON</translation>
 <translation id="2495093607237746763">Si marcas esta opción, Chromium almacenará una copia de la tarjeta en el dispositivo para completar más rápidamente los formularios.</translation>
 <translation id="2498091847651709837">Escanear tarjeta nueva</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">La conexión se encriptó y autenticó con <ph name="CIPHER" />, y utiliza <ph name="KX" /> como el mecanismo de intercambio de claves.</translation>
 <translation id="2835170189407361413">Eliminar formulario</translation>
 <translation id="2847118875340931228">Abrir ventana de incógnito</translation>
+<translation id="2849445596171421624">Si haces clic en Continuar, se te redirigirá al sitio &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; que sueles visitar.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">Necesitas permiso para visitar este sitio</translation>
 <translation id="2856444702002559011">Es posible que algunos atacantes intenten robar tu información de <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (p. ej., contraseñas, mensajes o tarjetas de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -686,6 +688,7 @@
 <translation id="4582204425268416675">Quitar tarjeta</translation>
 <translation id="4587425331216688090">¿Confirmas que quieres quitar la dirección de Chrome?</translation>
 <translation id="4592951414987517459">Tu conexión a <ph name="DOMAIN" /> está encriptada con un conjunto de cifrado moderno.</translation>
+<translation id="4594047029158047642">El vínculo que abriste te redirige a un sitio que no sueles visitar. Es posible que quiera engañarte.</translation>
 <translation id="4594403342090139922">&amp;Deshacer Eliminar</translation>
 <translation id="4597348597567598915">Tamaño 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -788,6 +791,7 @@
 <translation id="5169827969064885044">Es posible que hayas perdido el acceso a la cuenta de tu organización o sufrido un robo de identidad. Chrome te recomienda que cambies la contraseña ahora.</translation>
 <translation id="5171045022955879922">Buscar o escribir URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Por lo general, visitas &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. El sitio que quisiste visitar hace un instante es similar al sitio que aparece en tu historial, pero no es el mismo. Los atacantes a veces usan esta técnica para engañarte o estafarte.</translation>
 <translation id="5172758083709347301">Equipo</translation>
 <translation id="5179510805599951267">¿No está en <ph name="ORIGINAL_LANGUAGE" />? Informa este error</translation>
 <translation id="5190835502935405962">Barra de favoritos</translation>
@@ -916,6 +920,7 @@
 <translation id="5860033963881614850">No</translation>
 <translation id="5863847714970149516">Es posible que la página siguiente intente cobrarte dinero</translation>
 <translation id="5866257070973731571">Agregar número de teléfono</translation>
+<translation id="5866898949289125849">Estás viendo una página de herramientas para desarrolladores</translation>
 <translation id="5869405914158311789">No se puede acceder a este sitio</translation>
 <translation id="5869522115854928033">Contraseñas almacenadas</translation>
 <translation id="5887400589839399685">Tarjeta guardada</translation>
@@ -1084,7 +1089,6 @@
 <translation id="6891596781022320156">No se admite el nivel de políticas.</translation>
 <translation id="6895330447102777224">Tu tarjeta se confirmó</translation>
 <translation id="6897140037006041989">User agent</translation>
-<translation id="6903319715792422884">Para mejorar la Navegación segura, envía <ph name="BEGIN_WHITEPAPER_LINK" />información del sistema y contenido de la página<ph name="END_WHITEPAPER_LINK" /> a Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Usuario:</translation>
 <translation id="6934672428414710184">Este nombre es de tu Cuenta de Google</translation>
 <translation id="6944692733090228304">Ingresaste tu contraseña en un sitio que no está administrado por <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Para proteger tu cuenta, no vuelvas a usar la contraseña en otras apps y sitios.</translation>
@@ -1154,6 +1158,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">No se puede establecer una conexión privada a <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> porque la fecha y la hora del equipo (<ph name="DATE_AND_TIME" />) son incorrectas.</translation>
 <translation id="7260504762447901703">Revocar acceso</translation>
+<translation id="726226871651201355">¿Quieres continuar a &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Tarjetas de prepago aceptadas</translation>
 <translation id="7275334191706090484">Favoritos administrados</translation>
 <translation id="7298195798382681320">Recomendada</translation>
@@ -1492,6 +1497,7 @@
 <translation id="9078964945751709336">Se requiere más información</translation>
 <translation id="9080712759204168376">Resumen del pedido</translation>
 <translation id="9089260154716455634">Política fuera de horario:</translation>
+<translation id="9093075372111400787">Cerrar opciones avanzadas</translation>
 <translation id="9095388113577226029">Más idiomas…</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> suele utilizar la encriptación para proteger la información. Cuando Chromium intentó conectarse a <ph name="SITE" />, el sitio web devolvió credenciales incorrectas y poco comunes. Es posible que un atacante quiera suplantar a <ph name="SITE" /> o que una pantalla de acceso Wi-Fi haya interrumpido la conexión. Tu información permanece segura porque Chromium detuvo la conexión para evitar el intercambio de datos.</translation>
 <translation id="9106062320799175032">Agregar dirección de facturación</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 3b191dd..ef07f6e2 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Nombres de usuario de tu dispositivo y navegador</translation>
 <translation id="2491120439723279231">El certificado del servidor contiene errores.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Normalmente sueles visitar &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. El sitio web al que acabas de intentar acceder tiene un aspecto parecido, pero no coincide exactamente con el sitio web de tu historial. Los atacantes a veces usan esta técnica para intentar engañarte o estafarte.</translation>
 <translation id="2495083838625180221">Analizador de archivos JSON</translation>
 <translation id="2495093607237746763">Si se activa esta opción, Chromium guardará una copia de tu tarjeta en este dispositivo para completar formularios más rápidamente.</translation>
 <translation id="2498091847651709837">Escanear nueva tarjeta</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">La conexión se ha encriptado y autenticado con <ph name="CIPHER" />, y utiliza <ph name="KX" /> como el mecanismo de intercambio clave.</translation>
 <translation id="2835170189407361413">Eliminar formulario</translation>
 <translation id="2847118875340931228">Abrir una ventana de incógnito</translation>
+<translation id="2849445596171421624">Si haces clic en Continuar, accederás al sitio web más popular &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (sobre)</translation>
 <translation id="2851634818064021665">Necesitas permiso para acceder a este sitio web</translation>
 <translation id="2856444702002559011">Es posible que los atacantes estén intentando robar tu información de <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (por ejemplo, contraseñas, mensajes o tarjetas de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -677,6 +679,7 @@
 <translation id="4582204425268416675">Eliminar tarjeta</translation>
 <translation id="4587425331216688090">¿Eliminar dirección de Chrome?</translation>
 <translation id="4592951414987517459">Tu conexión con <ph name="DOMAIN" /> está cifrada con un conjunto de cifrado moderno.</translation>
+<translation id="4594047029158047642">El enlace que has abierto te lleva a un sitio web poco popular. Podría intentar confundirte.</translation>
 <translation id="4594403342090139922">&amp;Deshacer eliminación</translation>
 <translation id="4597348597567598915">Tamaño 8</translation>
 <translation id="4600854749408232102">C6/C5 (sobre)</translation>
@@ -779,6 +782,7 @@
 <translation id="5169827969064885044">Podrías perder el acceso a la cuenta de tu organización o tener problemas de suplantación de identidad. Chrome te recomienda que cambies tu contraseña ahora.</translation>
 <translation id="5171045022955879922">Busca o escribe una URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Normalmente sueles visitar &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. La URL a la que acabas de intentar acceder tiene un aspecto parecido, pero no coincide exactamente con el sitio web de tu historial. Los atacantes a veces usan esta técnica para intentar engañarte o estafarte.</translation>
 <translation id="5172758083709347301">Equipo</translation>
 <translation id="5179510805599951267">¿Esta página no está escrita en <ph name="ORIGINAL_LANGUAGE" />? Informa de este error.</translation>
 <translation id="5190835502935405962">Barra de marcadores</translation>
@@ -907,6 +911,7 @@
 <translation id="5860033963881614850">No</translation>
 <translation id="5863847714970149516">Es posible que la página a la que vas a acceder intente aplicar algún cargo</translation>
 <translation id="5866257070973731571">Añade un número de teléfono</translation>
+<translation id="5866898949289125849">Estás viendo una página de las herramientas de desarrollo</translation>
 <translation id="5869405914158311789">No se puede acceder a este sitio web</translation>
 <translation id="5869522115854928033">Contraseñas guardadas</translation>
 <translation id="5887400589839399685">Tarjeta guardada</translation>
@@ -1002,7 +1007,7 @@
 <translation id="6433490469411711332">Editar información de contacto</translation>
 <translation id="6433595998831338502">La página <ph name="HOST_NAME" /> ha rechazado la conexión.</translation>
 <translation id="6434309073475700221">Rechazar</translation>
-<translation id="6440503408713884761">Ignorados</translation>
+<translation id="6440503408713884761">Ignorada</translation>
 <translation id="6446163441502663861">Kahu (sobre)</translation>
 <translation id="6446608382365791566">Añadir más información</translation>
 <translation id="6447842834002726250">Cookies</translation>
@@ -1075,7 +1080,6 @@
 <translation id="6891596781022320156">No se admite el nivel de la política.</translation>
 <translation id="6895330447102777224">Tu tarjeta se ha confirmado</translation>
 <translation id="6897140037006041989">User-agent</translation>
-<translation id="6903319715792422884">Ayuda a mejorar la Navegación Segura enviando <ph name="BEGIN_WHITEPAPER_LINK" />datos del sistema y contenido de las páginas<ph name="END_WHITEPAPER_LINK" /> a Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Usuario:</translation>
 <translation id="6934672428414710184">Este nombre proviene de tu cuenta de Google</translation>
 <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> no gestiona el sitio web en el que has introducido tu contraseña. Para proteger tu cuenta, no utilices la misma contraseña en otras aplicaciones o sitios web.</translation>
@@ -1142,6 +1146,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">No se puede establecer una conexión privada con <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> porque la fecha y la hora de tu ordenador (<ph name="DATE_AND_TIME" />) no son correctas.</translation>
 <translation id="7260504762447901703">Revoca el acceso</translation>
+<translation id="726226871651201355">¿Quieres ir a &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Tarjetas prepago aceptadas</translation>
 <translation id="7275334191706090484">Marcadores administrados</translation>
 <translation id="7298195798382681320">Recomendada</translation>
@@ -1479,6 +1484,7 @@
 <translation id="9078964945751709336">Se necesita más información</translation>
 <translation id="9080712759204168376">Resumen del pedido</translation>
 <translation id="9089260154716455634">Política fuera del horario:</translation>
+<translation id="9093075372111400787">Cerrar información adicional</translation>
 <translation id="9095388113577226029">Más idiomas...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> utiliza normalmente el cifrado para proteger tu información. Cuando Chromium intentó establecer conexión con <ph name="SITE" />, el sitio web devolvió unas credenciales inusuales e incorrectas. Esto puede ocurrir si un atacante intenta suplantar la identidad de <ph name="SITE" /> o si una pantalla de inicio de sesión Wi-Fi interrumpe la conexión. Tu información sigue estando protegida, ya que Chromium detuvo la conexión antes de que se intercambiaran datos.</translation>
 <translation id="9106062320799175032">Añade una dirección de facturación</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index d0fa296..6d1ae9f3 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Teie seadme ja brauseri kasutajanimed</translation>
 <translation id="2491120439723279231">Serveri sertifikaat sisaldab vigu.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Külastate tavaliselt saiti &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Sait, mida külastada üritasite, näib sarnane, kuid ei ühti täpselt saidiga teie ajaloost. Ründajad võivad vahel kasutada sellist võtet teie petmiseks või eksitamiseks.</translation>
 <translation id="2495083838625180221">JSON-i parser</translation>
 <translation id="2495093607237746763">Kui see on märgitud, salvestab Chromium teie kaardi koopia vormide kiiremaks täitmiseks sellesse seadmesse.</translation>
 <translation id="2498091847651709837">Uue kaardi skannimine</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Ühendus on krüptitud ja autenditud üksusega <ph name="CIPHER" /> ning kasutab peamise vahetusmehhanismina üksust <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Tühjenda vorm</translation>
 <translation id="2847118875340931228">Ava inkognito aken</translation>
+<translation id="2849445596171421624">Kui klõpsate nupul Jätka, suunatakse teid tavapärasele saidile &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (ümbrik)</translation>
 <translation id="2851634818064021665">Vajate selle saidi külastamiseks luba</translation>
 <translation id="2856444702002559011">Ründajad võivad üritada varastada teie teavet (nt paroole, sõnumeid või krediitkaarditeavet) saidilt <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />. <ph name="BEGIN_LEARN_MORE_LINK" />Lisateave<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Kaardi eemaldamine</translation>
 <translation id="4587425331216688090">Kas eemaldada Chrome'ist aadress?</translation>
 <translation id="4592951414987517459">Teie ühendus domeeniga <ph name="DOMAIN" /> on krüpteeritud tänapäevase šifreerimiskomplektiga.</translation>
+<translation id="4594047029158047642">Avatud link suunab tavapäratule saidile. See võib üritada teid segadusse ajada.</translation>
 <translation id="4594403342090139922">&amp;Võta kustutamine tagasi</translation>
 <translation id="4597348597567598915">Suurus 8</translation>
 <translation id="4600854749408232102">C6/C5 (ümbrik)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Võite kaotada juurdepääsu oma organisatsiooni kontole või teie identiteet võidakse varastada. Chrome soovitab teil kohe oma parooli muuta.</translation>
 <translation id="5171045022955879922">Otsige või sisestage URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Külastate tavaliselt saiti &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL, mida külastada üritasite, näib sarnane, kuid ei ühti täpselt saidiga teie ajaloost. Ründajad võivad vahel kasutada sellist võtet teie petmiseks või eksitamiseks.</translation>
 <translation id="5172758083709347301">Masin</translation>
 <translation id="5179510805599951267">Tegu ei ole <ph name="ORIGINAL_LANGUAGE" /> keelega? Andke veast teada</translation>
 <translation id="5190835502935405962">Järjehoidjariba</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Väljas</translation>
 <translation id="5863847714970149516">Järgmisel lehel võidakse teilt üritada tasu võtta</translation>
 <translation id="5866257070973731571">Telefoninumbri lisamine</translation>
+<translation id="5866898949289125849">Vaatate arendaja tööriistade lehte</translation>
 <translation id="5869405914158311789">Selle saidiga ei saa ühendust</translation>
 <translation id="5869522115854928033">Salvestatud paroolid</translation>
 <translation id="5887400589839399685">Kaart on salvestatud</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Reegli taset ei toetata.</translation>
 <translation id="6895330447102777224">Teie kaart on kinnitatud</translation>
 <translation id="6897140037006041989">Kasutajaagent</translation>
-<translation id="6903319715792422884">Aidake ohutu sirvimise funktsiooni täiustada, saates Google'ile <ph name="BEGIN_WHITEPAPER_LINK" />süsteemiteavet ja lehesisu<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Kasutaja:</translation>
 <translation id="6934672428414710184">Nimi pärineb teie Google'i kontolt</translation>
 <translation id="6944692733090228304">Sisestasite oma parooli saidile, mida ei halda <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Oma konto kaitsmiseks ärge kasutage oma parooli muudes rakendustes ega saitidel.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Privaatset ühendust ei saa domeeniga <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> luua, kuna arvuti kuupäev ja kellaaeg (<ph name="DATE_AND_TIME" />) on valed.</translation>
 <translation id="7260504762447901703">Juurdepääsu tühistamine</translation>
+<translation id="726226871651201355">Kas minna edasi saidile &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Aktsepteeritavad ettemakstud kaardid</translation>
 <translation id="7275334191706090484">Hallatud järjehoidjad</translation>
 <translation id="7298195798382681320">Soovitatud</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">Vaja on rohkem teavet</translation>
 <translation id="9080712759204168376">Tellimuse kokkuvõte</translation>
 <translation id="9089260154716455634">Eemalolekuaegade eeskirjad:</translation>
+<translation id="9093075372111400787">Sule täpsemad seaded</translation>
 <translation id="9095388113577226029">Rohkem keeli …</translation>
 <translation id="9103872766612412690">Sait <ph name="SITE" /> kasutab teie teabe kaitsmiseks tavaliselt krüpteerimist. Kui Chromium püüdis seekord saidiga <ph name="SITE" /> ühendust luua, tagastas veebisait ebatavalised ja valed mandaadid. See võib juhtuda siis, kui ründaja proovib teeselda, et on sait <ph name="SITE" />, või WiFi sisselogimisekraan on ühenduse katkestanud. Teie teave on endiselt kaitstud, sest Chromium peatas ühenduse enne andmevahetust.</translation>
 <translation id="9106062320799175032">Arveldusaadressi lisamine</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 8a3aa9e7d..f4fbe67 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">نام کاربری دستگاه و مرورگرتان</translation>
 <translation id="2491120439723279231">گواهی سرور دارای چندین خطاست.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">‏شما معمولاً از &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; بازدید می‌کنید. سایتی را که الان سعی داشتید بازدید کنید، شبیه به سایتی است که در سابقه‌تان موجود است، اما دقیقاً با آن مطابقت ندارد. حمله‌کنندگان از این تکنیک‌ها برای کلاهبرداری یا فریب دادن شما استفاده می‌کنند.</translation>
 <translation id="2495083838625180221">‏تجزیه‌کننده JSON</translation>
 <translation id="2495093607237746763">‏اگر علامت زده شود، Chromium برای پر کردن سریع‌تر فرم، یک کپی از کارت شما در این دستگاه ذخیره می‌کند.</translation>
 <translation id="2498091847651709837">اسکن کارت جدید</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">اتصال با استفاده از <ph name="CIPHER" /> رمزگذاری و راستی‌آزمایی شده است و از <ph name="KX" /> به عنوان مکانیسم تبادل کلید استفاده می‌کند.</translation>
 <translation id="2835170189407361413">پاک کردن فرم</translation>
 <translation id="2847118875340931228">پنجره ناشناس باز کنید</translation>
+<translation id="2849445596171421624">‏با کلیک کردن روی «ادامه»، به سایتی وارد می‌شوید که آن را بیشتر بازدید کرده‌اید &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;‏.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">برای بازدید کردن از این سایت، مجوز لازم دارید</translation>
 <translation id="2856444702002559011">شاید مهاجم‌ها در تلاش باشند اطلاعات شما (مانند گذرواژه‌ها، پیام‌ها یا کارت‌های اعتباری) را از <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> سرقت کنند. <ph name="BEGIN_LEARN_MORE_LINK" />بیشتر بدانید<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">برداشتن کارت</translation>
 <translation id="4587425331216688090">‏آدرس از Chrome پاک شود؟</translation>
 <translation id="4592951414987517459">اتصال شما به <ph name="DOMAIN" /> با استفاده از یک مجموعه رمز مدرن، رمزگذاری شده است.</translation>
+<translation id="4594047029158047642">پیوندی که باز کردید به سایتی هدایت می‌شود که معمولاً از آن بازدید نمی‌کنید. شاید این پیوند سعی می‌کند شما را دچار اشتباه کند.</translation>
 <translation id="4594403342090139922">&amp;واگرد حذف</translation>
 <translation id="4597348597567598915">اندازه ۸</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">‏ممکن است دسترسی به حساب سازمانتان را از دست بدهید یا به سرقت هویت دچار شوید. Chrome توصیه می‌کند هم‌اکنون گذرواژه‌تان را تغییر دهید.</translation>
 <translation id="5171045022955879922">‏جستجو یا تایپ URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">‏شما معمولاً از &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; بازدید می‌کنید. نشانی وبی را که الان سعی داشتید بازدید کنید، شبیه به نشانی وب سایتی است که در سابقه‌تان موجود است، اما دقیقاً با آن مطابقت ندارد. حمله‌کنندگان از این تکنیک‌ها برای کلاهبرداری یا فریب دادن شما استفاده می‌کنند.</translation>
 <translation id="5172758083709347301">دستگاه</translation>
 <translation id="5179510805599951267">به زبان <ph name="ORIGINAL_LANGUAGE" /> نیست؟ گزارش این خطا</translation>
 <translation id="5190835502935405962">نوار نشانک‌ها</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">خاموش</translation>
 <translation id="5863847714970149516">صفحه پیش‌رو ممکن است تلاش کند از شما پول دریافت کند</translation>
 <translation id="5866257070973731571">افزودن شماره تلفن</translation>
+<translation id="5866898949289125849">درحال مشاهده یک صفحه ابزار برنامه‌نویس هستید</translation>
 <translation id="5869405914158311789">دسترسی به این سایت امکان‌پذیر نیست</translation>
 <translation id="5869522115854928033">گذرواژه‌های ذخیره‌شده</translation>
 <translation id="5887400589839399685">کارت ذخیره‌ شد</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">سطح خط‌مشی پشتیبانی نمی‌شود.</translation>
 <translation id="6895330447102777224">کارتتان تأیید شد</translation>
 <translation id="6897140037006041989">نماینده کاربر</translation>
-<translation id="6903319715792422884">‏با ارسال برخی <ph name="BEGIN_WHITEPAPER_LINK" />اطلاعات سیستم و محتوای صفحه<ph name="END_WHITEPAPER_LINK" /> به Google، به بهبود «مرور ایمن» کمک کنید. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">کاربر:</translation>
 <translation id="6934672428414710184">‏این نام از حساب Google شما گرفته شده است</translation>
 <translation id="6944692733090228304">گذرواژه‌تان را در سایتی وارد کردید که توسط <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> مدیریت نمی‌شود. برای محافظت از حسابتان، از گذرواژه‌تان در برنامه‌ها و سایت‌های دیگر استفاده نکنید.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">اتصال خصوصی به <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> برقرار نمی‌شود زیرا تاریخ و زمان رایانه شما (<ph name="DATE_AND_TIME" />) نادرست است.</translation>
 <translation id="7260504762447901703">لغو دسترسی</translation>
+<translation id="726226871651201355">‏به &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; می‌روید؟</translation>
 <translation id="7271803869921933038">کارت‌های پیش‌پرداخت قابل‌قبول</translation>
 <translation id="7275334191706090484">نشانک‌های مدیریت شده</translation>
 <translation id="7298195798382681320">توصیه می‌شود</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">اطلاعات بیشتری نیاز است</translation>
 <translation id="9080712759204168376">خلاصه سفارش</translation>
 <translation id="9089260154716455634">خط‌مشی ساعت‌های خاموشی:</translation>
+<translation id="9093075372111400787">بستن موارد پیشرفته</translation>
 <translation id="9095388113577226029">زبان‌های بیشتر...</translation>
 <translation id="9103872766612412690">‏<ph name="SITE" /> معمولاً برای محافظت از اطلاعات شما از رمزگذاری استفاده می‌کند. اما این بار که Chromium تلاش کرد به <ph name="SITE" /> متصل شود، وب‌سایت اعتبارنامه‌ای نامعمول و نادرست را برگرداند. ممکن است مهاجمی در تلاش باشد خود را به‌جای <ph name="SITE" /> معرفی کند یا یک صفحه ورود به سیستم Wi-Fi در ارتباط اختلال ایجاد کرده باشد. اطلاعات شما همچنان ایمن است، زیرا Chromium قبل از هرگونه تبادل داده، اتصال را متوقف کرد.</translation>
 <translation id="9106062320799175032">افزودن نشانی صورت‌حساب</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index c8785b7c..d5a5af3 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Laitteen ja selaimen käyttäjänimet</translation>
 <translation id="2491120439723279231">Palvelimen varmenteessa on virheitä.</translation>
 <translation id="2493640343870896922">Kirje-plus</translation>
+<translation id="2494497504885199552">Käytät yleensä sivustoa &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Sivusto, jolle yritit juuri siirtyä vaikuttaa samanlaiselta, mutta se ei ole sama sivusto kuin historiassasi. Hyökkääjät käyttävät joskus tätä tekniikkaa huijaamiseen.</translation>
 <translation id="2495083838625180221">JSON-jäsentäjä</translation>
 <translation id="2495093607237746763">Jos tämä on valittu, Chromium tallentaa kortin kopion tälle laitteelle nopeuttaakseen lomakkeiden täyttöä.</translation>
 <translation id="2498091847651709837">Skannaa uusi kortti</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Yhteys on salattu ja todennettu <ph name="CIPHER" />:n avulla ja se käyttää menetelmää <ph name="KX" /> avainvaihtomekanismina.</translation>
 <translation id="2835170189407361413">Tyhjennä lomake</translation>
 <translation id="2847118875340931228">Avaa incognito-ikkuna</translation>
+<translation id="2849445596171421624">Jos valitset Jatka, sinut ohjataan yleisemmälle sivustolle &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Kutsu (kirjekuori)</translation>
 <translation id="2851634818064021665">Tarvitset luvan tälle sivustolle siirtymiseen.</translation>
 <translation id="2856444702002559011">Sivustolle <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> hyökännyt taho voi yrittää varastaa tietojasi (esimerkiksi salasanoja, viestejä tai luottokorttitietoja). <ph name="BEGIN_LEARN_MORE_LINK" />Lisätietoja<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -686,6 +688,7 @@
 <translation id="4582204425268416675">Poista kortti</translation>
 <translation id="4587425331216688090">Poistetaanko osoite Chromen tiedoista?</translation>
 <translation id="4592951414987517459">Yhteytesi kohteeseen <ph name="DOMAIN" /> on salattu nykyaikaisella salaustekniikalla.</translation>
+<translation id="4594047029158047642">Avaamasi linkki johtaa epätavalliselle sivustolle. Se voi yrittää johtaa sinua harhaan.</translation>
 <translation id="4594403342090139922">K&amp;umoa poisto</translation>
 <translation id="4597348597567598915">Koko 8</translation>
 <translation id="4600854749408232102">C6/C5 (kirjekuori)</translation>
@@ -788,6 +791,7 @@
 <translation id="5169827969064885044">Voit menettää organisaatiosi tilin käyttöoikeuden tai joutua identiteettivarkauden uhriksi. Chrome suosittelee vaihtamaan salasanan välittömästi.</translation>
 <translation id="5171045022955879922">Kirjoita hakusanoja tai URL-osoite</translation>
 <translation id="5171689220826475070">European Fanfold</translation>
+<translation id="5172068981283436906">Käytät yleensä sivustoa &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Sivusto, jolle yritit juuri siirtyä vaikuttaa samanlaiselta, mutta se ei ole sama sivusto kuin historiassasi. Hyökkääjät käyttävät joskus tätä tekniikkaa huijaamiseen.</translation>
 <translation id="5172758083709347301">Kaikki tietokoneen käyttäjät</translation>
 <translation id="5179510805599951267">Eikö kieli ole <ph name="ORIGINAL_LANGUAGE" />? Ilmoita virheestä</translation>
 <translation id="5190835502935405962">Kirjanmerkkipalkki</translation>
@@ -916,6 +920,7 @@
 <translation id="5860033963881614850">Pois käytöstä</translation>
 <translation id="5863847714970149516">Avaamasi sivu voi yrittää veloittaa sinulta rahaa</translation>
 <translation id="5866257070973731571">Lisää puhelinnumero</translation>
+<translation id="5866898949289125849">Katselet kehittäjätyökalut-sivustoa</translation>
 <translation id="5869405914158311789">Sivustoon ei saada yhteyttä</translation>
 <translation id="5869522115854928033">Tallennetut salasanat</translation>
 <translation id="5887400589839399685">Kortti tallennettu</translation>
@@ -1084,7 +1089,6 @@
 <translation id="6891596781022320156">Käytännön tasoa ei tueta.</translation>
 <translation id="6895330447102777224">Korttisi vahvistettiin.</translation>
 <translation id="6897140037006041989">User agent</translation>
-<translation id="6903319715792422884">Auta kehittämään Selaussuojaa lähettämällä <ph name="BEGIN_WHITEPAPER_LINK" />järjestelmätietoja ja sivujen sisältöä<ph name="END_WHITEPAPER_LINK" /> Googlelle. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Käyttäjä:</translation>
 <translation id="6934672428414710184">Tämä nimi on peräisin Google-tililtäsi</translation>
 <translation id="6944692733090228304">Kirjoitit salasanan sivustolle, jota <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ei ylläpidä. Älä käytä samaa salasanaa muissa sovelluksissa tai muilla sivustoilla tilisi turvallisuuden vuoksi.</translation>
@@ -1154,6 +1158,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Verkkotunnukseen <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ei voi muodostaa salattua yhteyttä, koska tietokoneesi aika ja päivämäärä (<ph name="DATE_AND_TIME" />) ovat virheelliset.</translation>
 <translation id="7260504762447901703">Peruuta käyttöoikeus</translation>
+<translation id="726226871651201355">Jatketaanko osoitteeseen &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Hyväksytyt prepaid-kortit</translation>
 <translation id="7275334191706090484">Hallinnoidut kirjanmerkit</translation>
 <translation id="7298195798382681320">Suositus</translation>
@@ -1492,6 +1497,7 @@
 <translation id="9078964945751709336">Lisätietoja tarvitaan</translation>
 <translation id="9080712759204168376">Tilauksen yhteenveto</translation>
 <translation id="9089260154716455634">Ei-aktiivisen ajan käytäntö:</translation>
+<translation id="9093075372111400787">Sulje lisätiedot</translation>
 <translation id="9095388113577226029">Lisää kieliä…</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> suojaa tietosi normaalisti salauksen avulla. Kun Chromium yritti tällä kertaa yhdistää sivustoon <ph name="SITE" />, sivusto palautti epätavalliset ja virheelliset kirjautumistiedot. Hyökkääjä saattaa yrittää esiintyä sivustona <ph name="SITE" />, tai Wi-Fi-kirjautumisruutu on keskeyttänyt yhteyden. Tietosi ovat edelleen turvassa, sillä Chromium katkaisi yhteyden, ennen kuin mitään tietoja vaihdettiin.</translation>
 <translation id="9106062320799175032">Lisää laskutusosoite</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index dd493e21..f02fcff 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -1083,7 +1083,6 @@
 <translation id="6891596781022320156">Hindi sinusuportahan ang antas ng patakaran.</translation>
 <translation id="6895330447102777224">Nakumpirma na ang iyong card</translation>
 <translation id="6897140037006041989">User Agent</translation>
-<translation id="6903319715792422884">Tumulong sa pagpapahusay ng Ligtas na Pag-browse sa pamamagitan ng pagpapadala sa Google ng ilang <ph name="BEGIN_WHITEPAPER_LINK" />impormasyon ng system at content ng page<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">User:</translation>
 <translation id="6934672428414710184">Nagmula ang pangalang ito sa iyong Google Account</translation>
 <translation id="6944692733090228304">Inilagay mo ang iyong password sa site na hindi pinapamahalaan ng <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Para protektahan ang iyong account, huwag gamiting muli ang password mo sa iba pang app at site.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 07e965b1..a2c39b7 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Noms d'utilisateur pour votre appareil et votre navigateur</translation>
 <translation id="2491120439723279231">Le certificat du serveur contient des erreurs.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Vous consultez habituellement &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Le site auquel vous tentez d'accéder paraît similaire, mais il ne correspond pas exactement à celui figurant dans votre historique. Les pirates utilisent parfois cette technique pour piéger ou escroquer les utilisateurs.</translation>
 <translation id="2495083838625180221">Analyse de fichiers JSON</translation>
 <translation id="2495093607237746763">Si cette case est cochée, Chromium enregistre une copie de votre carte sur cet appareil pour vous permettre de remplir plus rapidement les formulaires.</translation>
 <translation id="2498091847651709837">Lire une nouvelle carte</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">La connexion est chiffrée et authentifiée avec la clé <ph name="CIPHER" />. La méthode d'échange de clés utilisée est <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Effacer le formulaire</translation>
 <translation id="2847118875340931228">Ouvrir une fenêtre de navigation privée</translation>
+<translation id="2849445596171421624">Si vous cliquez sur "Continuer", vous serez redirigé vers le site le plus courant, &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (enveloppe)</translation>
 <translation id="2851634818064021665">Tu n'es pas autorisé à consulter ce site</translation>
 <translation id="2856444702002559011">Des individus malveillants tentent peut-être de subtiliser vos informations personnelles sur le site <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (mots de passe, messages ou numéros de carte de crédit, par exemple). <ph name="BEGIN_LEARN_MORE_LINK" />En savoir plus<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -677,6 +679,7 @@
 <translation id="4582204425268416675">Supprimer la carte</translation>
 <translation id="4587425331216688090">Supprimer l'adresse de Chrome ?</translation>
 <translation id="4592951414987517459">Votre connexion à <ph name="DOMAIN" /> est chiffrée à l'aide d'une méthode de chiffrement récente.</translation>
+<translation id="4594047029158047642">Le lien que vous avez ouvert redirige vers un site inhabituel. Il s'agit peut-être d'une tentative de tromperie.</translation>
 <translation id="4594403342090139922">&amp;Annuler la suppression</translation>
 <translation id="4597348597567598915">Taille 8</translation>
 <translation id="4600854749408232102">C6/C5 (enveloppe)</translation>
@@ -779,6 +782,7 @@
 <translation id="5169827969064885044">Vous risquez de perdre l'accès au compte de votre organisation ou d'être victime d'usurpation d'identité. L'équipe Chrome vous recommande de modifier votre mot de passe maintenant.</translation>
 <translation id="5171045022955879922">Rechercher ou saisir une URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Vous consultez habituellement &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. L'URL à laquelle vous tentez d'accéder paraît similaire, mais elle ne correspond pas exactement à celle figurant dans votre historique. Les pirates utilisent parfois cette technique pour piéger ou escroquer les utilisateurs.</translation>
 <translation id="5172758083709347301">Ordinateur</translation>
 <translation id="5179510805599951267">Cette page n'est pas rédigée en <ph name="ORIGINAL_LANGUAGE" /> ? Signaler l'erreur</translation>
 <translation id="5190835502935405962">Barre de favoris</translation>
@@ -907,6 +911,7 @@
 <translation id="5860033963881614850">Désactivé</translation>
 <translation id="5863847714970149516">Il se peut que l'accès à la page suivante engendre des frais</translation>
 <translation id="5866257070973731571">Ajouter un numéro de téléphone</translation>
+<translation id="5866898949289125849">Vous consultez une page d'outils pour les développeurs</translation>
 <translation id="5869405914158311789">Ce site est inaccessible</translation>
 <translation id="5869522115854928033">Mots de passe enregistrés</translation>
 <translation id="5887400589839399685">Carte enregistrée</translation>
@@ -1075,7 +1080,6 @@
 <translation id="6891596781022320156">Le niveau de la règle n'est pas accepté.</translation>
 <translation id="6895330447102777224">Carte validée</translation>
 <translation id="6897140037006041989">Agent utilisateur</translation>
-<translation id="6903319715792422884">Aidez-nous à améliorer la navigation sécurisée en nous envoyant <ph name="BEGIN_WHITEPAPER_LINK" />des informations système et du contenu de pages<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Utilisateur : </translation>
 <translation id="6934672428414710184">Ce nom provient de votre compte Google</translation>
 <translation id="6944692733090228304">Vous avez saisi votre mot de passe sur un site qui n'est pas géré par <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Pour protéger votre compte, ne réutilisez pas ce mot de passe dans d'autres applications ni sur d'autres sites.</translation>
@@ -1142,6 +1146,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Impossible d'établir une connexion privée à <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> : la date et l'heure de votre ordinateur (<ph name="DATE_AND_TIME" />) sont incorrectes.</translation>
 <translation id="7260504762447901703">Révoquer l'accès</translation>
+<translation id="726226871651201355">Accéder à &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; ?</translation>
 <translation id="7271803869921933038">Cartes prépayées acceptées</translation>
 <translation id="7275334191706090484">Favoris gérés</translation>
 <translation id="7298195798382681320">Recommandé</translation>
@@ -1479,6 +1484,7 @@
 <translation id="9078964945751709336">Veuillez fournir d'autres informations</translation>
 <translation id="9080712759204168376">Récapitulatif de la commande</translation>
 <translation id="9089260154716455634">Règle en heures creuses :</translation>
+<translation id="9093075372111400787">Fermer les informations avancées</translation>
 <translation id="9095388113577226029">Plus de langues…</translation>
 <translation id="9103872766612412690">Un chiffrement est normalement utilisé sur le site <ph name="SITE" /> pour protéger vos informations. Lors de la dernière tentative de connexion de Chromium au site <ph name="SITE" />, des identifiants inhabituels et incorrects ont été retournés. Il est possible qu'un individu malveillant tente de se faire passer pour <ph name="SITE" /> ou qu'un écran de connexion Wi-Fi ait interrompu la connexion. Vos informations restent sécurisées, car nous avons arrêté la connexion avant l'échange des données.</translation>
 <translation id="9106062320799175032">Ajouter une adresse de facturation</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index be8e84be..b3c37b3 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">તમારા ડિવાઇસ અને બ્રાઉઝર માટે વપરાશકર્તાનું નામ</translation>
 <translation id="2491120439723279231">સર્વરના પ્રમાણપત્રમાં ભૂલો છે.</translation>
 <translation id="2493640343870896922">લેટર-પ્લસ</translation>
+<translation id="2494497504885199552">તમે સામાન્ય રીતે &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;ની મુલાકાત લો છો. તમે હમણાં જે સાઇટની મુલાકાત લેવાનો પ્રયાસ કર્યો તે લગભગ એના જેવી જ લાગે છે, પણ તમારા ઇતિહાસમાં છે તે સાઇટ સાથે એકદમ મેળ ખાતી નથી. હુમલાખોરો તમારી સાથે કપટ અથવા સ્કૅમ કરવા માટે કેટલીક વખત આ તકનીકનો ઉપયોગ કરી શકે છે.</translation>
 <translation id="2495083838625180221">JSON વિશ્લેષક</translation>
 <translation id="2495093607237746763">જો ચેક કરેલું હોય, તો ઝડપથી ફોર્મ ભરવા માટે Chromium આ ઉપકરણ પર તમારા કાર્ડની એક કૉપિ સંગ્રહિત કરશે.</translation>
 <translation id="2498091847651709837">નવું કાર્ડ સ્કૅન કરો</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">કનેક્શન <ph name="CIPHER" />નો ઉપયોગ કરીને એન્ક્રિપ્ટ અને પ્રમાણિત કરેલુંં છે અને મુખ્ય એક્સચેન્જ મેકેનિઝ્મ તરીકે <ph name="KX" />નો ઉપયોગ કરે છે.</translation>
 <translation id="2835170189407361413">ફોર્મ સાફ કરો</translation>
 <translation id="2847118875340931228">છુપી વિન્ડો ખોલો</translation>
+<translation id="2849445596171421624">ચાલુ રાખો ક્લિક કરવાથી તમને વધુ સામાન્ય સાઇટ &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; પર લઈ જવામાં આવશે.</translation>
 <translation id="2850739647070081192">આમંત્રણ (એન્વલપ)</translation>
 <translation id="2851634818064021665">આ સાઇટની મુલાકાત લેવા માટે તમને પરનાવગીની જરૂર છે</translation>
 <translation id="2856444702002559011">હુમલાખોરો કદાચ <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />માંથી તમારી માહિતી (ઉદાહરણ તરીકે, પાસવર્ડ, સંદેશા અથવા ક્રેડિટ કાર્ડ) ચોરવાનો પ્રયાસ કરી રહ્યાં હોઈ શકે છે. <ph name="BEGIN_LEARN_MORE_LINK" />વધુ જાણો<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -684,6 +686,7 @@
 <translation id="4582204425268416675">કાર્ડ કાઢી નાખો</translation>
 <translation id="4587425331216688090">Chrome માંથી સરનામું દૂર કરીએ?</translation>
 <translation id="4592951414987517459">આધુનિક સાઇફર સ્યૂટનો ઉપયોગ કરીને <ph name="DOMAIN" /> સાથેનું તમારું કનેક્શન એન્ક્રિપ્ટ કરાયું છે.</translation>
+<translation id="4594047029158047642">તમે ખોલેલી લિંક કોઈ અસાધારણ સાઇટ પર જાય છે. તે કદાચ તમને ગૂંચવણમાં મૂકવાનો પ્રયાસ કરતી હોય શકે.</translation>
 <translation id="4594403342090139922">&amp;ડિલીટ રદ કરો</translation>
 <translation id="4597348597567598915">કદ 8</translation>
 <translation id="4600854749408232102">C6/C5 (એન્વલપ)</translation>
@@ -786,6 +789,7 @@
 <translation id="5169827969064885044">તમે તમારી સંસ્થાના એકાઉન્ટ માટે ઍક્સેસ ગુમાવી શકો છો અથવા તમને ઓળખ ચોરીનો અનુભવ થઈ શકે છે. Chrome તમને હમણાં જ તમારો પાસવર્ડ બદલવાની ભલામણ કરે છે.</translation>
 <translation id="5171045022955879922">URL શોધો અથવા લખો</translation>
 <translation id="5171689220826475070">Fanfold-યુરોપિયન</translation>
+<translation id="5172068981283436906">તમે સામાન્ય રીતે &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;ની મુલાકાત લો છો. તમે હમણાં જે URLની મુલાકાત લેવાનો પ્રયાસ કર્યો તે લગભગ સમાન લાગે છે, પણ તમારા ઇતિહાસમાં છે તે સાઇટ સાથે એકદમ મેળ ખાતું નથી. હુમલાખોરો તમારી સાથે કપટ અથવા સ્કૅમ કરવા માટે કેટલીક વખત આ તકનીકનો ઉપયોગ કરી શકે છે.</translation>
 <translation id="5172758083709347301">મશીન</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> માં નથી? આ ભૂલની જાણ કરો </translation>
 <translation id="5190835502935405962">બુકમાર્ક્સ બાર</translation>
@@ -914,6 +918,7 @@
 <translation id="5860033963881614850">બંધ</translation>
 <translation id="5863847714970149516">આગળનું પેજ તમને શુલ્ક લાગુ કરી શકે છે</translation>
 <translation id="5866257070973731571">ફોન નંબર ઉમેરો</translation>
+<translation id="5866898949289125849">તમે ડેવલપર સાધનોનું પેજ જોઈ રહ્યાં છો</translation>
 <translation id="5869405914158311789">આ સાઇટ પર પહોંચી શકાતું નથી</translation>
 <translation id="5869522115854928033">સાચવેલા પાસવર્ડ્સ</translation>
 <translation id="5887400589839399685">કાર્ડ સાચવ્યું</translation>
@@ -1082,7 +1087,6 @@
 <translation id="6891596781022320156">નીતિ સ્તર સમર્થિત નથી.</translation>
 <translation id="6895330447102777224">તમારા કાર્ડની પુષ્ટિ કરવામાં આવી છે</translation>
 <translation id="6897140037006041989">વપરાશકર્તા એજન્ટ</translation>
-<translation id="6903319715792422884">Googleને અમુક <ph name="BEGIN_WHITEPAPER_LINK" />સિસ્ટમ માહિતી અને પેજ કન્ટેન્ટ<ph name="END_WHITEPAPER_LINK" />મોકલીને સલામત બ્રાઉઝિંગ બહેતર બનાવવામાં સહાય કરો. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">વપરાશકર્તા: </translation>
 <translation id="6934672428414710184">આ નામ તમારા Google એકાઉન્ટમાંથી લીધું છે</translation>
 <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> દ્વારા સંચાલિત ન થતી હોય, તેવી સાઇટ પર તમે તમારો પાસવર્ડ દાખલ કર્યો છે. તમારા એકાઉન્ટની સુરક્ષા માટે, અન્ય ઍપ અને સાઇટ પર તમારા પાસવર્ડનો ફરી ઉપયોગ ન કરો.</translation>
@@ -1152,6 +1156,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> પર ખાનગી કનેક્શન સ્થાપિત કરી શકાતું નથી કારણ કે તમારા ઉપકરણની તારીખ અને સમય (<ph name="DATE_AND_TIME" />) અયોગ્ય છે.</translation>
 <translation id="7260504762447901703">ઍક્સેસ રદબાતલ કરો</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; પર ચાલુ રાખીએ?</translation>
 <translation id="7271803869921933038">સ્વીકૃત પ્રિપેઇડ કાર્ડ</translation>
 <translation id="7275334191706090484">સંચાલિત બુકમાર્ક્સ</translation>
 <translation id="7298195798382681320">ભલામણ કરેલ</translation>
@@ -1489,6 +1494,7 @@
 <translation id="9078964945751709336">વધુ માહિતી આવશ્યક</translation>
 <translation id="9080712759204168376">ઑર્ડરનો સારાંશ</translation>
 <translation id="9089260154716455634">બિન-કામકાજી સમય સંબંધી નીતિ:</translation>
+<translation id="9093075372111400787">વિગતવારને બંધ કરો</translation>
 <translation id="9095388113577226029">વધુ ભાષાઓ...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> સામાન્ય રીતે તમારી માહિતીને સુરક્ષિત રાખવા માટે એન્ક્રિપ્શનનો ઉપયોગ કરે છે. જ્યારે આ સમયે Chromium દ્વારા <ph name="SITE" />થી કનેક્ટ કરવાનો પ્રયાસ થયો, ત્યારે વેબસાઇટે અસામાન્ય અને ખોટા લૉગ ઇન વિગતને પાછા મોકલ્યાં. આવું ત્યારે થઈ શકે જ્યારે કોઈ હુમલાખોર <ph name="SITE" /> હોવાનો ડોળ કરવાનો પ્રયાસ કરી રહ્યો હોવ અથવા કોઈ Wi-Fi સાઇન-ઇન સ્ક્રીને કનેક્શનમાં વિક્ષેપ પાડ્યો હોય. તમારી માહિતી હજી પણ સુરક્ષિત છે કારણ કે Chromium એ કોઈ પણ ડેટા વિનિમય થાય એ પહેલાં જ કનેક્શન રોકી દીધું.</translation>
 <translation id="9106062320799175032">બિલિંગ સરનામું ઉમેરો</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 0a28ab2..e029dcf 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -300,6 +300,7 @@
 <translation id="2485387744899240041">आपके डिवाइस और ब्राउज़र के लिए उपयोगकर्ता नाम</translation>
 <translation id="2491120439723279231">सर्वर के प्रमाणपत्र में त्रुटियां हैं.</translation>
 <translation id="2493640343870896922">लेटर-प्लस</translation>
+<translation id="2494497504885199552">आम तौर पर, आप &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; पर जाते हैं. आपने अभी जिस साइट पर जाने की कोशिश की है उसका यूआरएल आपके खोज इतिहास में मौजूद साइट के यूआरएल से काफ़ी मिलता-जुलता है, लेकिन पूरी तरह से मेल नहीं खाता. हैकर कभी-कभी आपको धोखा देने या धोखाधड़ी करने के लिए इस तकनीक का इस्तेमाल करते हैं.</translation>
 <translation id="2495083838625180221">JSON पार्सर</translation>
 <translation id="2495093607237746763">अगर चेक किया गया हो, तो ज़्यादा तेज़ी से फ़ॉर्म भरने के लिए क्रोमियम इस डिवाइस पर आपके कार्ड की कॉपी संग्रहित करेगा.</translation>
 <translation id="2498091847651709837">नया कार्ड स्‍कैन करें</translation>
@@ -365,6 +366,7 @@
 <translation id="2826760142808435982">कनेक्शन को <ph name="CIPHER" /> का उपयोग करके एन्क्रिप्ट और प्रमाणित किया गया है और यह कुंजी विनिमय तकनीक के रूप में <ph name="KX" /> का उपयोग करता है.</translation>
 <translation id="2835170189407361413">फ़ॉर्म साफ़ करें</translation>
 <translation id="2847118875340931228">गुप्त विंडो खोलें</translation>
+<translation id="2849445596171421624">'जारी रखें' पर क्लिक करने से आपको सबसे आम साइट &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; पर ले जाया जाएगा.</translation>
 <translation id="2850739647070081192">न्योता (एन्वेलप)</translation>
 <translation id="2851634818064021665">आपको इस साइट पर जाने की अनुमति लेनी होगी</translation>
 <translation id="2856444702002559011">हो सकता है कि हमलावर <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> से आपकी जानकारी (जैसे- पासवर्ड, मैसेज या क्रेडिट कार्ड वगैरह) चुराने की कोशिश कर रहे हों. <ph name="BEGIN_LEARN_MORE_LINK" />ज़्यादा जानें<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -683,6 +685,7 @@
 <translation id="4582204425268416675">कार्ड हटाएं</translation>
 <translation id="4587425331216688090">Chrome से पता निकालें?</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> से आपके कनेक्शन को किसी आधुनिक सिफ़र सुइट का उपयोग करके एन्‍क्रिप्‍ट किया गया है.</translation>
+<translation id="4594047029158047642">जो लिंक आप खोलना चाहते हैं वह आपको ऐसी वेबसाइट तक ले जाएगा, जिस पर आप सामान्य तौर पर नहीं जाते. यह वेबसाइट आपको गुमराह कर सकती है.</translation>
 <translation id="4594403342090139922">मिटाना &amp;पहले जैसा करें</translation>
 <translation id="4597348597567598915">आकार 8</translation>
 <translation id="4600854749408232102">सी6/सी5 (एन्वेलप)</translation>
@@ -785,6 +788,7 @@
 <translation id="5169827969064885044">आपके संगठन के खाते का ऐक्सेस खो सकता है या आपकी पहचान चोरी हो सकती है. Chrome आपको अभी अपना पासवर्ड बदलने का सुझाव देता है.</translation>
 <translation id="5171045022955879922">URL खोजें या टाइप करें</translation>
 <translation id="5171689220826475070">फ़ैनफ़ोल्ड-यूरोपियन</translation>
+<translation id="5172068981283436906">आम तौर पर, आप &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. पर जाते हैं. अपने अभी जिस साइट पर जाने की कोशिश की है उसका यूआरएल आपके खोज इतिहास में मौजूद साइट के यूआरएल से काफ़ी मिलता-जुलता है, लेकिन पूरी तरह से मेल नहीं खाता. हैकर कभी-कभी आपको धोखा देने या धोखाधड़ी करने के लिए इस तकनीक का इस्तेमाल करते हैं.</translation>
 <translation id="5172758083709347301">मशीन</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> में नहीं है? इस गड़बड़ी की रिपोर्ट करें</translation>
 <translation id="5190835502935405962">बुकमार्क बार</translation>
@@ -913,6 +917,7 @@
 <translation id="5860033963881614850">बंद</translation>
 <translation id="5863847714970149516">आगे आने वाला पेज आपसे शुल्क लेने की कोशिश कर सकता है</translation>
 <translation id="5866257070973731571">फ़ोन नंबर जोड़ें</translation>
+<translation id="5866898949289125849">आप डेवलपर के टूल वाला पेज देख रहे हैं</translation>
 <translation id="5869405914158311789">इस साइट तक नहीं पहुंचा जा सकता</translation>
 <translation id="5869522115854928033">सेव किए गए पासवर्ड</translation>
 <translation id="5887400589839399685">कार्ड सेव किया गया</translation>
@@ -1081,7 +1086,6 @@
 <translation id="6891596781022320156">नीति स्तर समर्थित नहीं है.</translation>
 <translation id="6895330447102777224">आपके कार्ड की पुष्टि हो गई है</translation>
 <translation id="6897140037006041989">उपयोगकर्ता एजेंट</translation>
-<translation id="6903319715792422884">'सुरक्षित ब्राउज़िंग' को बेहतर बनाने में मदद करने के लिए, Google को कुछ <ph name="BEGIN_WHITEPAPER_LINK" />'सिस्टम जानकारी' और 'पेज सामग्री'<ph name="END_WHITEPAPER_LINK" /> भेजें. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">उपयोगकर्ता:</translation>
 <translation id="6934672428414710184">यह नाम आपके Google खाते से है</translation>
 <translation id="6944692733090228304">आपने एक ऐसी साइट पर अपना पासवर्ड डाला है जिसे <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> प्रबंधित नहीं करता है. अपने खाते को सुरक्षित रखने के लिए, दूसरे ऐप्लिकेशन और साइटों पर अपने पासवर्ड का दोबारा इस्तेमाल न करें.</translation>
@@ -1151,6 +1155,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> से एक निजी कनेक्‍शन स्‍थापित नहीं किया जा सकता क्‍योंकि आपके कंप्‍यूटर का तारीख और समय (<ph name="DATE_AND_TIME" />) गलत है.</translation>
 <translation id="7260504762447901703">ऐक्सेस रद्द करें</translation>
+<translation id="726226871651201355">क्या आप &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; पर जारी रखना चाहते हैं?</translation>
 <translation id="7271803869921933038">स्वीकार किए जाने वाले प्रीपेड कार्ड</translation>
 <translation id="7275334191706090484">प्रबंधित बुकमार्क</translation>
 <translation id="7298195798382681320">सुझाए गए</translation>
@@ -1489,6 +1494,7 @@
 <translation id="9078964945751709336">ज़्यादा जानकारी की आवश्यकता है</translation>
 <translation id="9080712759204168376">ऑर्डर की जानकारी</translation>
 <translation id="9089260154716455634">बंद रहने के समय के लिए नीति:</translation>
+<translation id="9093075372111400787">ज़्यादा जानकारी बंद करें</translation>
 <translation id="9095388113577226029">और भाषाएं...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> आपकी जानकारी की सुरक्षा करने के लिए आमतौर पर एन्क्रिप्शन का इस्तेमाल करती है. जब क्रोमियम ने इस बार <ph name="SITE" /> से कनेक्ट करने की कोशिश की, तो वेबसाइट ने असामान्य और गलत क्रेडेंशियल वापस भेजे. ऐसा तब हो सकता है जब कोई हमलावर <ph name="SITE" /> होने का दावा करने का प्रयास कर रहा हो या किसी वाई-फ़ाई साइन इन स्क्रीन ने कनेक्शन को रोक दिया हो. आपकी जानकारी अब भी सुरक्षित है क्योंकि किसी भी डेटा के लेन-देन से पहले ही क्रोमियम ने कनेक्शन को रोक दिया था.</translation>
 <translation id="9106062320799175032">बिलिंग पता जोड़ें</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index febcab2..b22c590 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Korisnička imena za uređaj i preglednik</translation>
 <translation id="2491120439723279231">Certifikat poslužitelja sadrži pogreške.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Obično posjećujete &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Web-lokacija koju ste upravo pokušali otvoriti izgleda slično web-lokaciji u vašoj povijesti, ali nije sasvim podudarna. Napadači se ponekad koriste tom tehnikom da bi vas prevarili.</translation>
 <translation id="2495083838625180221">Raščlanjivanje JSON datoteka</translation>
 <translation id="2495093607237746763">Ako je potvrđen taj okvir, Chromium će pohraniti kopiju vaše kartice na uređaj radi bržeg ispunjavanja obrazaca.</translation>
 <translation id="2498091847651709837">Skeniraj novu karticu</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Veza je kriptirana i autentificirana šifrom <ph name="CIPHER" />, a <ph name="KX" /> služi za mehanizam razmjene ključeva.</translation>
 <translation id="2835170189407361413">Obriši obrazac</translation>
 <translation id="2847118875340931228">Otvori anonimni prozor</translation>
+<translation id="2849445596171421624">Ako kliknete Nastavi, otvorit će se uobičajena web-lokacija &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (omotnica)</translation>
 <translation id="2851634818064021665">Potrebno ti je dopuštenje za posjet toj web-lokaciji</translation>
 <translation id="2856444702002559011">Napadači možda pokušavaju ukrasti vaše podatke s web-lokacije <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (na primjer zaporke, poruke ili brojeve kreditnih kartica). <ph name="BEGIN_LEARN_MORE_LINK" />Saznajte više<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -684,6 +686,7 @@
 <translation id="4582204425268416675">Uklonite karticu</translation>
 <translation id="4587425331216688090">Želite li s Chromea ukloniti adresu?</translation>
 <translation id="4592951414987517459">Vaša veza s domenom <ph name="DOMAIN" /> kriptirana je modernim kriptografskim paketom.</translation>
+<translation id="4594047029158047642">Veza koju ste otvorili vodi na neuobičajenu web-lokaciju. Možda vas pokušava zbuniti.</translation>
 <translation id="4594403342090139922">&amp;Poništi brisanje</translation>
 <translation id="4597348597567598915">Veličina 8</translation>
 <translation id="4600854749408232102">C6/C5 (omotnica)</translation>
@@ -786,6 +789,7 @@
 <translation id="5169827969064885044">Mogli biste izgubiti pristup računu svoje organizacije ili bi netko mogao ukrasti vaš identitet. Chrome preporučuje da odmah promijenite zaporku.</translation>
 <translation id="5171045022955879922">Pretražite ili upišite URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Obično posjećujete &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL koji ste upravo pokušali otvoriti izgleda slično web-lokaciji u vašoj povijesti, ali nije sasvim podudaran. Napadači se ponekad koriste tom tehnikom da bi vas prevarili.</translation>
 <translation id="5172758083709347301">Strojno</translation>
 <translation id="5179510805599951267">Nije <ph name="ORIGINAL_LANGUAGE" /> jezik? Prijavite tu pogrešku</translation>
 <translation id="5190835502935405962">Traka oznaka</translation>
@@ -914,6 +918,7 @@
 <translation id="5860033963881614850">Isključeno</translation>
 <translation id="5863847714970149516">Stranica koja će se otvoriti može vam pokušati nešto naplatiti</translation>
 <translation id="5866257070973731571">Dodajte telefonski broj</translation>
+<translation id="5866898949289125849">Pregledavate stranicu alata za razvojne programere</translation>
 <translation id="5869405914158311789">Web-lokacija ne može se dohvatiti</translation>
 <translation id="5869522115854928033">Spremljene zaporke</translation>
 <translation id="5887400589839399685">Kartica je spremljena</translation>
@@ -1082,7 +1087,6 @@
 <translation id="6891596781022320156">Razina pravila nije podržana.</translation>
 <translation id="6895330447102777224">Kartica je potvrđena</translation>
 <translation id="6897140037006041989">Korisnički agent</translation>
-<translation id="6903319715792422884">Pomognite poboljšati Sigurno pregledavanje tako što ćete Googleu slati neke <ph name="BEGIN_WHITEPAPER_LINK" />podatke o sustavu i sadržaj web-stranice<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Korisnik:</translation>
 <translation id="6934672428414710184">To je ime s vašeg Google računa</translation>
 <translation id="6944692733090228304">Unijeli ste zaporku na web-lokaciju kojom ne upravlja <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Da biste zaštitili račun, nemojte upotrebljavati tu zaporku za druge aplikacije i web-lokacije.</translation>
@@ -1152,6 +1156,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Sigurnu vezu s domenom <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nije moguće uspostaviti jer datum i vrijeme na računalu (<ph name="DATE_AND_TIME" />) nisu točni.</translation>
 <translation id="7260504762447901703">Opoziv pristupa</translation>
+<translation id="726226871651201355">Želite li nastaviti do &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Prihvaćene pretplatne kartice</translation>
 <translation id="7275334191706090484">Upravljane oznake</translation>
 <translation id="7298195798382681320">Preporučeno</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">Potrebno je više podataka</translation>
 <translation id="9080712759204168376">Sažetak narudžbe</translation>
 <translation id="9089260154716455634">Pravilo za prekid rada:</translation>
+<translation id="9093075372111400787">Zatvori Napredno</translation>
 <translation id="9095388113577226029">Više jezika...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> obično upotrebljava enkripciju radi zaštite vaših podataka. Prilikom ovog pokušaja povezivanja Chromiuma s web-lokacijom <ph name="SITE" /> ta je web-lokacija vratila neuobičajene
 i netočne vjerodajnice. To može značiti da se neki napadač pokušava predstaviti kao <ph name="SITE" /> ili je zaslon za prijavu na Wi-Fi prekinuo vezu. Vaši su podaci još uvijek sigurni jer je Chromium zaustavio povezivanje prije razmjene podataka.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 295b6a1..169727af 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Az eszköz és a böngésző felhasználónevei</translation>
 <translation id="2491120439723279231">A szervezet tanúsítványa hibákat tartalmaz.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Általában a következőt szokta felkeresni: &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. A webhely, amelyet most próbált megnyitni, hasonlít az előzményeiben lévő webhelyre, de nem egyezik meg vele tökéletesen. A támadók néha ezt a módszert használják a felhasználók megtévesztésére és átverésére.</translation>
 <translation id="2495083838625180221">JSON Parser</translation>
 <translation id="2495093607237746763">Ha be van jelölve, a Chromium megőrzi a kártya másolatát ezen az eszközön a gyorsabb űrlapkitöltés érdekében.</translation>
 <translation id="2498091847651709837">Új kártya beolvasása</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">A kapcsolat <ph name="KX" /> algoritmust használ kulcscserélő mechanizmusként, kódolása pedig <ph name="CIPHER" /> használatával történt.</translation>
 <translation id="2835170189407361413">Űrlap törlése</translation>
 <translation id="2847118875340931228">Inkognitóablak megnyitása</translation>
+<translation id="2849445596171421624">A Tovább gombra kattintva a rendszer a következő, gyakrabban látogatott oldalra irányítja át: &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (boríték)</translation>
 <translation id="2851634818064021665">A webhely felkereséséhez jogosultságra van szüksége</translation>
 <translation id="2856444702002559011">A támadók megpróbálhatják ellopni a(z) <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> webhelyen lévő adatait (például jelszavait, üzeneteit és hitelkártyaadatait). <ph name="BEGIN_LEARN_MORE_LINK" />További információ<ph name="END_LEARN_MORE_LINK" />.</translation>
@@ -683,6 +685,7 @@
 <translation id="4582204425268416675">Kártya eltávolítása</translation>
 <translation id="4587425331216688090">Eltávolítja a címet a Chrome-ból?</translation>
 <translation id="4592951414987517459">A(z) <ph name="DOMAIN" /> domainnel való kapcsolata modern kriptográfiával van titkosítva.</translation>
+<translation id="4594047029158047642">A megnyitott link egy nem megszokott webhelyre vezet. Lehet, hogy a link megpróbálja megtéveszteni Önt.</translation>
 <translation id="4594403342090139922">&amp;Törlés visszavonása</translation>
 <translation id="4597348597567598915">Méret: 8</translation>
 <translation id="4600854749408232102">C6/C5 (boríték)</translation>
@@ -785,6 +788,7 @@
 <translation id="5169827969064885044">Elveszítheti a hozzáférést szervezete fiókjához, vagy visszaélhetnek személyes adataival. A Chrome azt javasolja, hogy azonnal módosítsa jelszavát.</translation>
 <translation id="5171045022955879922">Keressen vagy írjon be egy URL-t</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Általában a következőt szokta felkeresni: &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Az URL, amelyet most próbált megnyitni, hasonlít az előzményeiben lévő webhelyre, de nem egyezik meg vele tökéletesen. A támadók néha ezt a módszert használják a felhasználók megtévesztésére és átverésére.</translation>
 <translation id="5172758083709347301">Számítógép</translation>
 <translation id="5179510805599951267">Nem <ph name="ORIGINAL_LANGUAGE" /> nyelven van? Hiba bejelentése</translation>
 <translation id="5190835502935405962">Könyvjelzősáv</translation>
@@ -913,6 +917,7 @@
 <translation id="5860033963881614850">Kikapcsolva</translation>
 <translation id="5863847714970149516">Előfordulhat, hogy a következő oldal megpróbál pénzt felszámolni Önnek</translation>
 <translation id="5866257070973731571">Telefonszám hozzáadása</translation>
+<translation id="5866898949289125849">A fejlesztői eszközök egyik oldalán tartózkodik</translation>
 <translation id="5869405914158311789">A webhely nem érhető el</translation>
 <translation id="5869522115854928033">Mentett jelszavak</translation>
 <translation id="5887400589839399685">Kártya elmentve</translation>
@@ -1081,7 +1086,6 @@
 <translation id="6891596781022320156">Ezt a házirendszintet a rendszer nem támogatja.</translation>
 <translation id="6895330447102777224">Kártyáját ellenőriztük</translation>
 <translation id="6897140037006041989">User agent</translation>
-<translation id="6903319715792422884">Segítse a Biztonságos Böngészés fejlesztését azzal, hogy bizonyos <ph name="BEGIN_WHITEPAPER_LINK" />rendszer-információkat és oldaltartalmakat<ph name="END_WHITEPAPER_LINK" /> elküld a Google-nak. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Felhasználó:</translation>
 <translation id="6934672428414710184">Ez a név a Google-fiókjából származik</translation>
 <translation id="6944692733090228304">Olyan webhelyen adta meg a jelszavát, amelyet nem a(z) <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> kezel. Fiókja védelme érdekében ne használja fel újra a jelszót más alkalmazásokban és webhelyeken.</translation>
@@ -1151,6 +1155,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Nem hozható létre privát kapcsolat a következővel: <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, mert a számítógép dátum- és időbeállítása helytelen (<ph name="DATE_AND_TIME" />).</translation>
 <translation id="7260504762447901703">Hozzáférés visszavonása</translation>
+<translation id="726226871651201355">Továbblép a(z) &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; webhelyre?</translation>
 <translation id="7271803869921933038">Elfogadott feltöltőkártyák</translation>
 <translation id="7275334191706090484">Kezelt könyvjelzők</translation>
 <translation id="7298195798382681320">Ajánlott</translation>
@@ -1489,6 +1494,7 @@
 <translation id="9078964945751709336">Több információra van szükség</translation>
 <translation id="9080712759204168376">Megrendelés összegzése</translation>
 <translation id="9089260154716455634">Házirend figyelmen kívül hagyása:</translation>
+<translation id="9093075372111400787">Speciális bezárása</translation>
 <translation id="9095388113577226029">További nyelvek…</translation>
 <translation id="9103872766612412690">A(z) <ph name="SITE" /> webhely rendes esetben titkosítást alkalmaz az Ön adatainak védelme érdekében. Amikor a Chromium most csatlakozni próbált, a(z) <ph name="SITE" /> webhely szokatlan és helytelen hitelesítési adatokat küldött vissza.Ez olyankor fordulhat elő, amikor egy támadó megpróbálja magát kiadni a(z) <ph name="SITE" /> webhelynek, vagy valamilyen Wi-Fi-bejelentkezési képernyő megszakította a kapcsolatot. Adatai továbbra is biztonságban vannak, mivel a Chromium még azt megelőzően megszakította a kapcsolatot, hogy bármiféle adatcserére sor kerülhetett volna.</translation>
 <translation id="9106062320799175032">Számlázási cím hozzáadása</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index ae8c43f..4b48189a 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Nama pengguna untuk perangkat dan browser Anda</translation>
 <translation id="2491120439723279231">Sertifikat server mengandung kesalahan.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Anda biasanya mengunjungi &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Situs yang baru saja Anda coba kunjungi terlihat mirip, tetapi tidak sama persis dengan situs dari histori Anda. Penyerang terkadang menggunakan teknik ini untuk memperdaya atau menipu Anda.</translation>
 <translation id="2495083838625180221">Pengurai JSON</translation>
 <translation id="2495093607237746763">Jika dicentang, Chromium akan menyimpan salinan kartu Anda di perangkat ini untuk pengisian formulir yang lebih cepat.</translation>
 <translation id="2498091847651709837">Pindai kartu baru</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Sambungan dienkripsi dan diautentikasi menggunakan <ph name="CIPHER" /> dan menggunakan <ph name="KX" /> sebagai mekanisme pertukaran kunci.</translation>
 <translation id="2835170189407361413">Hapus formulir</translation>
 <translation id="2847118875340931228">Buka Jendela Samaran</translation>
+<translation id="2849445596171421624">Mengklik Lanjutkan akan membawa Anda ke situs yang lebih umum &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">Anda memerlukan izin untuk membuka situs ini</translation>
 <translation id="2856444702002559011">Penyerang mungkin berusaha mencuri informasi Anda dari <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (misalnya, sandi, pesan, atau kartu kredit). <ph name="BEGIN_LEARN_MORE_LINK" />Pelajari lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -684,6 +686,7 @@
 <translation id="4582204425268416675">Hapus kartu</translation>
 <translation id="4587425331216688090">Hapus alamat dari Chrome?</translation>
 <translation id="4592951414987517459">Sambungan Anda ke <ph name="DOMAIN" /> dienkripsi menggunakan cipher suite modern.</translation>
+<translation id="4594047029158047642">Link yang Anda buka menuju ke situs yang tidak umum. Situs tersebut mungkin mencoba membingungkan Anda.</translation>
 <translation id="4594403342090139922">&amp;Urungkan Penghapusan</translation>
 <translation id="4597348597567598915">Ukuran 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -786,6 +789,7 @@
 <translation id="5169827969064885044">Anda dapat kehilangan akses ke akun organisasi atau mengalami pencurian identitas. Chrome menyarankan Anda untuk mengubah sandi sekarang.</translation>
 <translation id="5171045022955879922">Telusuri atau ketik URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Anda biasanya mengunjungi &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL yang baru saja Anda coba kunjungi terlihat mirip, tetapi tidak sama persis dengan situs dari histori Anda. Penyerang terkadang menggunakan teknik ini untuk memperdaya atau menipu Anda.</translation>
 <translation id="5172758083709347301">Mesin</translation>
 <translation id="5179510805599951267">Bukan <ph name="ORIGINAL_LANGUAGE" />? Laporkan kesalahan deteksi ini</translation>
 <translation id="5190835502935405962">Bilah Bookmark</translation>
@@ -914,6 +918,7 @@
 <translation id="5860033963881614850">Nonaktif</translation>
 <translation id="5863847714970149516">Halaman berikutnya mungkin mencoba menagih Anda.</translation>
 <translation id="5866257070973731571">Tambahkan Nomor Telepon</translation>
+<translation id="5866898949289125849">Anda sedang menampilkan halaman developer tools</translation>
 <translation id="5869405914158311789">Situs ini tidak dapat dijangkau</translation>
 <translation id="5869522115854928033">Sandi tersimpan</translation>
 <translation id="5887400589839399685">Kartu disimpan</translation>
@@ -1082,7 +1087,6 @@
 <translation id="6891596781022320156">Tingkat kebijakan tidak didukung.</translation>
 <translation id="6895330447102777224">Kartu telah dikonfirmasi</translation>
 <translation id="6897140037006041989">Agen Pengguna</translation>
-<translation id="6903319715792422884">Bantu sempurnakan Safe Browsing dengan mengirimkan sebagian <ph name="BEGIN_WHITEPAPER_LINK" />informasi sistem dan konten halaman<ph name="END_WHITEPAPER_LINK" /> ke Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Pengguna:</translation>
 <translation id="6934672428414710184">Nama ini dari Akun Google Anda</translation>
 <translation id="6944692733090228304">Anda memasukkan sandi di situs yang tidak dikelola oleh <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Untuk melindungi akun, jangan gunakan sandi yang sama di aplikasi dan situs lain.</translation>
@@ -1150,6 +1154,7 @@
 <translation id="7251437084390964440">Konfigurasi jaringan tidak mematuhi standar ONC. Sebagian konfigurasi mungkin tidak diimpor. Detail tambahan: <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Sambungan pribadi ke <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tidak dapat dibuat karena tanggal dan waktu (<ph name="DATE_AND_TIME" />) komputer Anda tidak benar.</translation>
 <translation id="7260504762447901703">Cabut akses</translation>
+<translation id="726226871651201355">Lanjutkan ke &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Kartu Prabayar yang Diterima</translation>
 <translation id="7275334191706090484">Bookmark yang Terkelola</translation>
 <translation id="7298195798382681320">Direkomendasikan</translation>
@@ -1485,6 +1490,7 @@
 <translation id="9078964945751709336">Dibutuhkan informasi lebih lanjut</translation>
 <translation id="9080712759204168376">Ringkasan Pesanan</translation>
 <translation id="9089260154716455634">Kebijakan Waktu Nonaktif:</translation>
+<translation id="9093075372111400787">Tutup lanjutan</translation>
 <translation id="9095388113577226029">Bahasa lainnya...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> biasanya menggunakan enkripsi untuk melindungi informasi Anda. Saat Chromium mencoba menyambung ke <ph name="SITE" /> kali ini, situs web mengembalikan kredensial yang salah dan tidak biasa. Hal ini dapat terjadi jika ada penyerang yang berpura-pura menjadi <ph name="SITE" />, atau layar masuk Wi-Fi mengganggu sambungan. Informasi Anda masih aman karena Chromium menghentikan sambungan sebelum terjadi pertukaran data apa pun.</translation>
 <translation id="9106062320799175032">Tambahkan Alamat Penagihan</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 521a848..d2c7013 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Nomi utente del dispositivo e del browser</translation>
 <translation id="2491120439723279231">Il certificato del server contiene degli errori.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Solitamente visiti il sito &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Il sito che hai appena provato a visitare sembra simile al sito della tua cronologia, ma non corrisponde esattamente. A volte i malintenzionati usano questa tecnica per ingannarti o truffarti.</translation>
 <translation id="2495083838625180221">JSON Parser</translation>
 <translation id="2495093607237746763">Se questa opzione viene selezionata, Chromium memorizza una copia della carta sul dispositivo per velocizzare la compilazione dei moduli.</translation>
 <translation id="2498091847651709837">Esegui scansione nuova carta</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">La connessione è stata criptata e autenticata utilizzando <ph name="CIPHER" /> e <ph name="KX" /> come meccanismo di scambio delle chiavi.</translation>
 <translation id="2835170189407361413">Cancella modulo</translation>
 <translation id="2847118875340931228">Apri finestra di navigazione in incognito</translation>
+<translation id="2849445596171421624">Se fai clic su Continua, accedi al sito più comune &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">Ti occorre l'autorizzazione per poter visitare questo sito</translation>
 <translation id="2856444702002559011">Gli utenti malintenzionati potrebbero provare a carpire le tue informazioni da <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (ad esempio, password, messaggi o carte di credito). <ph name="BEGIN_LEARN_MORE_LINK" />Ulteriori informazioni<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -682,6 +684,7 @@
 <translation id="4582204425268416675">Carta rimossa</translation>
 <translation id="4587425331216688090">Rimuovere l'indirizzo da Chrome?</translation>
 <translation id="4592951414987517459">La connessione a <ph name="DOMAIN" /> è criptata tramite un pacchetto di crittografia moderno.</translation>
+<translation id="4594047029158047642">Il link che hai aperto indirizza a un sito insolito. Potrebbe trattarsi di un tentativo per confonderti.</translation>
 <translation id="4594403342090139922">&amp;Annulla eliminazione</translation>
 <translation id="4597348597567598915">Dimensione 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -784,6 +787,7 @@
 <translation id="5169827969064885044">Potresti perdere l'accesso all'account della tua organizzazione o subire un furto d'identità. Chrome ti consiglia di cambiare subito la password.</translation>
 <translation id="5171045022955879922">Cerca o digita un URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Solitamente visiti il sito &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. L'URL che hai appena provato a visitare sembra simile al sito della tua cronologia, ma non corrisponde esattamente. A volte i malintenzionati usano questa tecnica per ingannarti o truffarti.</translation>
 <translation id="5172758083709347301">Computer</translation>
 <translation id="5179510805599951267">Non in <ph name="ORIGINAL_LANGUAGE" />? Segnala questo errore</translation>
 <translation id="5190835502935405962">Barra dei Preferiti</translation>
@@ -912,6 +916,7 @@
 <translation id="5860033963881614850">Off</translation>
 <translation id="5863847714970149516">La pagina che segue potrebbe tentare di addebitarti dei costi</translation>
 <translation id="5866257070973731571">Aggiungi numero di telefono</translation>
+<translation id="5866898949289125849">È visualizzata una pagina di strumenti per sviluppatori</translation>
 <translation id="5869405914158311789">Impossibile raggiungere il sito</translation>
 <translation id="5869522115854928033">Password salvate</translation>
 <translation id="5887400589839399685">Carta salvata</translation>
@@ -1079,7 +1084,6 @@
 <translation id="6891596781022320156">Il livello della norma non è supportato.</translation>
 <translation id="6895330447102777224">La carta è stata confermata</translation>
 <translation id="6897140037006041989">User-agent</translation>
-<translation id="6903319715792422884">Contribuisci a migliorare la Navigazione sicura inviando a Google <ph name="BEGIN_WHITEPAPER_LINK" />informazioni di sistema e contenuti delle pagine<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Utente:</translation>
 <translation id="6934672428414710184">Questo nome proviene dal tuo Account Google</translation>
 <translation id="6944692733090228304">Hai inserito la password in un sito non gestito da <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Per proteggere il tuo account, non riutilizzare la password con altri siti e app.</translation>
@@ -1149,6 +1153,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Impossibile stabilire una connessione privata con il sito <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> perché data e ora del computer (<ph name="DATE_AND_TIME" />) sono sbagliate.</translation>
 <translation id="7260504762447901703">Revoca accesso</translation>
+<translation id="726226871651201355">Vuoi continuare su &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Carte prepagate accettate</translation>
 <translation id="7275334191706090484">Preferiti gestiti</translation>
 <translation id="7298195798382681320">Consigliate</translation>
@@ -1486,6 +1491,7 @@
 <translation id="9078964945751709336">Sono necessarie maggiori informazioni</translation>
 <translation id="9080712759204168376">Riepilogo dell'ordine</translation>
 <translation id="9089260154716455634">Criterio Orari di disattivazione:</translation>
+<translation id="9093075372111400787">Chiudi avanzati</translation>
 <translation id="9095388113577226029">Altre lingue</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> in genere utilizza la crittografia per proteggere le tue informazioni. Questa volta, quando Chromium ha provato a connettersi a <ph name="SITE" />, il sito web ha restituito credenziali insolite e sbagliate. È possibile che un malintenzionato stia cercando di spacciarsi per il sito <ph name="SITE" /> oppure che una schermata di accesso alla rete Wi-Fi abbia interrotto la connessione. Le tue informazioni sono ancora al sicuro perché Chromium ha interrotto la connessione prima che avvenissero scambi di dati.</translation>
 <translation id="9106062320799175032">Aggiungi indirizzo di fatturazione</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 201109e..8b31a06 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -1080,7 +1080,6 @@
 <translation id="6891596781022320156">רמת המדיניות אינה נתמכת.</translation>
 <translation id="6895330447102777224">הכרטיס שלך מאושר</translation>
 <translation id="6897140037006041989">User agent</translation>
-<translation id="6903319715792422884">‏על-ידי שליחה של חלק מ<ph name="BEGIN_WHITEPAPER_LINK" />פרטי המערכת ותוכן הדפים<ph name="END_WHITEPAPER_LINK" /> אל Google, אפשר לעזור בשיפור של 'גלישה בטוחה'. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">משתמש:</translation>
 <translation id="6934672428414710184">‏השם הזה הוא מחשבון Google שלך</translation>
 <translation id="6944692733090228304">הזנת את הסיסמה שלך באתר שלא מנוהל על ידי <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. כדי להגן על החשבון, מומלץ לא להשתמש בסיסמה שלך באפליקציות ובאתרים אחרים.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 805b9cc..da74346 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">デバイスとブラウザのユーザー名</translation>
 <translation id="2491120439723279231">サーバーの証明書にエラーがあります。</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">アクセスしようとしているサイトは普段アクセスしている &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; と似ていますが、閲覧履歴のサイトと完全には一致しません。不正サイトに誘導する方法として、しばしばこの手口が使われることがあります。</translation>
 <translation id="2495083838625180221">JSON パーサー</translation>
 <translation id="2495093607237746763">チェックボックスをオンにすると、Chromium がカード情報をこのデバイスに保存するためフォームにすばやく入力できるようになります。</translation>
 <translation id="2498091847651709837">新しいカードをスキャン</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">接続は <ph name="CIPHER" /> を使用して暗号化および認証されており、<ph name="KX" /> が鍵交換メカニズムとして使用されています。</translation>
 <translation id="2835170189407361413">フォームをクリア</translation>
 <translation id="2847118875340931228">シークレット ウィンドウを開く</translation>
+<translation id="2849445596171421624">[次へ] をクリックすると、より一般的なサイト &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; に移動します。</translation>
 <translation id="2850739647070081192">Invite(封筒)</translation>
 <translation id="2851634818064021665">このサイトにアクセスするには許可が必要です</translation>
 <translation id="2856444702002559011"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> では、悪意のあるユーザーによって、パスワード、メッセージ、クレジット カードなどの情報が盗まれる可能性があります。<ph name="BEGIN_LEARN_MORE_LINK" />詳細<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -677,6 +679,7 @@
 <translation id="4582204425268416675">カードを削除</translation>
 <translation id="4587425331216688090">Chrome からアドレスを削除してもよろしいですか?</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> への接続は新しい暗号スイートにより暗号化されています。</translation>
+<translation id="4594047029158047642">一般的でないサイトにアクセスしようとしています。これは不正サイトの可能性があります。</translation>
 <translation id="4594403342090139922">削除の取り消し(&amp;U)</translation>
 <translation id="4597348597567598915">サイズ 8</translation>
 <translation id="4600854749408232102">C6 / C5(封筒)</translation>
@@ -779,6 +782,7 @@
 <translation id="5169827969064885044">組織のアカウントにアクセスできなくなったり、個人情報が盗まれたりする可能性があります。今すぐパスワードを変更することをおすすめします。</translation>
 <translation id="5171045022955879922">検索または URL を入力</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">アクセスしようとしている URL は普段アクセスしている &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; と似ていますが、閲覧履歴のサイトと完全には一致しません。不正サイトに誘導する方法として、しばしばこの手口が使われることがあります。</translation>
 <translation id="5172758083709347301">マシン</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" />でない場合はこのエラーを報告する</translation>
 <translation id="5190835502935405962">ブックマーク バー</translation>
@@ -907,6 +911,7 @@
 <translation id="5860033963881614850">オフ</translation>
 <translation id="5863847714970149516">表示しようとしているページでは課金される恐れがあります</translation>
 <translation id="5866257070973731571">電話番号の追加</translation>
+<translation id="5866898949289125849">デベロッパー ツール ページを表示しています</translation>
 <translation id="5869405914158311789">このサイトにアクセスできません</translation>
 <translation id="5869522115854928033">保存したパスワード</translation>
 <translation id="5887400589839399685">カードが保存されました</translation>
@@ -1075,7 +1080,6 @@
 <translation id="6891596781022320156">ポリシーレベルがサポートされていません。</translation>
 <translation id="6895330447102777224">カードを確認しました</translation>
 <translation id="6897140037006041989">ユーザー エージェント</translation>
-<translation id="6903319715792422884"><ph name="BEGIN_WHITEPAPER_LINK" />一部のシステム情報とページのコンテンツ<ph name="END_WHITEPAPER_LINK" />を Google に送信して、セーフ ブラウジングの改善にご協力ください。<ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">ユーザー:</translation>
 <translation id="6934672428414710184">Google アカウントで設定されている名前です</translation>
 <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> が管理していないサイトでパスワードを入力しました。アカウントを保護するには、他のアプリやサイトでパスワードを再使用しないでください。</translation>
@@ -1142,6 +1146,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">パソコンの日時(<ph name="DATE_AND_TIME" />)が正しくないため、<ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> へのプライベート接続を確立できません。</translation>
 <translation id="7260504762447901703">アクセス権を取り消します</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; に移動しますか?</translation>
 <translation id="7271803869921933038">利用可能なプリペイド カード</translation>
 <translation id="7275334191706090484">管理対象のブックマーク</translation>
 <translation id="7298195798382681320">推奨</translation>
@@ -1480,6 +1485,7 @@
 <translation id="9078964945751709336">その他の情報が必要です</translation>
 <translation id="9080712759204168376">ご注文の概要</translation>
 <translation id="9089260154716455634">管理時間外のポリシー:</translation>
+<translation id="9093075372111400787">詳細を閉じる</translation>
 <translation id="9095388113577226029">その他の言語...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> では通常、暗号化して情報を保護しています。今回、Chromium から <ph name="SITE" /> への接続試行時に、このウェブサイトからいつもとは異なる誤った認証情報が返されました。悪意のあるユーザーが <ph name="SITE" /> になりすまそうとしているか、Wi-Fi ログイン画面で接続が中断された可能性があります。データのやり取りが行われる前に Chromium によって接続が停止されたため、情報は引き続き保護されています。</translation>
 <translation id="9106062320799175032">請求先住所の追加</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index ba5eab1..2d87fbe 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -299,6 +299,7 @@
 <translation id="2485387744899240041">ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಬ್ರೌಸರ್‌ಗಾಗಿ ಬಳಕೆದಾರ ಹೆಸರುಗಳು</translation>
 <translation id="2491120439723279231">ಸರ್ವರ್‌ನ ಪ್ರಮಾಣಪತ್ರವು ದೋಷಗಳನ್ನು ಹೊಂದಿದೆ.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">ನೀವು ಸಾಮಾನ್ಯವಾಗಿ &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; ಗೆ ಭೇಟಿ ನೀಡುತ್ತೀರಿ. ಈಗಷ್ಟೇ ನೀವು ಭೇಟಿ ನೀಡಲು ಪ್ರಯತ್ನಿಸಿದ ಸೈಟ್, ನಿಮ್ಮ ಇತಿಹಾಸದಲ್ಲಿರುವ ಸೈಟ್‌ನಂತೆಯೇ ತೋರುತ್ತದೆ ಆದರೆ ಅದಕ್ಕೆ ನಿಖರವಾಗಿ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ. ನಿಮ್ಮನ್ನು ದಾರಿ ತಪ್ಪಿಸಲು ಅಥವಾ ಸ್ಕ್ಯಾಮ್ ಮಾಡಲು, ದಾಳಿಕೋರರು ಕೆಲವೊಮ್ಮೆ ಈ ತಂತ್ರವನ್ನು ಬಳಸುತ್ತಾರೆ.</translation>
 <translation id="2495083838625180221">JSON ವಿಶ್ಲೇಷಕ</translation>
 <translation id="2495093607237746763">ಪರಿಶೀಲಿಸಿದರೆ, ವೇಗವಾಗಿ ಫಾರ್ಮ್ ಭರ್ತಿ ಮಾಡಲು Chromium ಈ ಸಾಧನದಲ್ಲಿ ನಿಮ್ಮ ಕಾರ್ಡ್‌ನ ಪ್ರತಿಯನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ.</translation>
 <translation id="2498091847651709837">ಹೊಸ ಕಾರ್ಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</translation>
@@ -364,6 +365,7 @@
 <translation id="2826760142808435982"><ph name="CIPHER" /> ಬಳಸಿಕೊಂಡು ಸಂಪರ್ಕವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ದೃಢೀಕರಿಸಲಾಗಿದೆ ಮತ್ತು <ph name="KX" /> ಅನ್ನು ಕೀ ವಿನಿಮಯ ಯಾಂತ್ರಿಕತೆಯಂತೆ ಬಳಸುತ್ತದೆ.</translation>
 <translation id="2835170189407361413">ಫಾರ್ಮ್ ತೆರವುಗೊಳಿಸು</translation>
 <translation id="2847118875340931228">ಅದೃಶ್ಯ ವಿಂಡೋವನ್ನು ತೆರೆಯಿರಿ</translation>
+<translation id="2849445596171421624">’ಮುಂದುವರಿಸಿ’ ಎಂಬುದನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದರೆ, ಹೆಚ್ಚು ಸಾಮಾನ್ಯವಾದ ಸೈಟ್ &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; ಗೆ ನಿಮ್ಮನ್ನು ಕರೆದೊಯ್ಯಲಾಗುತ್ತದೆ.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">ಈ ಸೈಟ್‌ ಗೆ ಭೇಟಿ ನೀಡಲು ನಿಮ್ಮಗೆ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="2856444702002559011">ದಾಳಿಕೋರರು <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ನಿಂದ ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಕದಿಯಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರಬಹುದು (ಉದಾಹರಣೆಗೆ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್‌ಗಳು). <ph name="BEGIN_LEARN_MORE_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -680,6 +682,7 @@
 <translation id="4582204425268416675">ಕಾರ್ಡ್ ತೆಗೆದುಹಾಕಿ</translation>
 <translation id="4587425331216688090">Chrome ನಿಂದ ವಿಳಾಸವನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?</translation>
 <translation id="4592951414987517459">ಆಧುನಿಕ ಸೈಫರ್ ಸೂಟ್ ಬಳಸುವ ಮೂಲಕ <ph name="DOMAIN" /> ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ.</translation>
+<translation id="4594047029158047642">ನೀವು ತೆರೆದ ಲಿಂಕ್, ಅಸಹಜ ಸೈಟ್‌ಗೆ ಕರೆದೊಯ್ಯುತ್ತದೆ. ಅದು ನಿಮಗೆ ಗೊಂದಲ ಉಂಟುಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರಬಹುದು.</translation>
 <translation id="4594403342090139922">&amp;ಅಳಿಸುವುದನ್ನು ರದ್ದುಗೊಳಿಸಿ</translation>
 <translation id="4597348597567598915">ಗಾತ್ರ 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -782,6 +785,7 @@
 <translation id="5169827969064885044">ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಖಾತೆಗೆ ನೀವು ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಳ್ಳಬಹುದು ಅಥವಾ ಗುರುತು ಕಳ್ಳತನಕ್ಕೆ ಒಳಗಾಗಬಹುದು. ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಇದೀಗ ಬದಲಾಯಿಸುವಂತೆ Chrome ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
 <translation id="5171045022955879922">ಹುಡುಕಾಟ ನಡೆಸಿ ಅಥವಾ URL ಅನ್ನು ಟೈಪ್‌ ಮಾಡಿ</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">ನೀವು ಸಾಮಾನ್ಯವಾಗಿ &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; ಗೆ ಭೇಟಿ ನೀಡುತ್ತೀರಿ. ಈಗಷ್ಟೇ ನೀವು ಭೇಟಿ ನೀಡಲು ಪ್ರಯತ್ನಿಸಿದ URL, ನಿಮ್ಮ ಇತಿಹಾಸದಲ್ಲಿರುವ ಸೈಟ್‌ನಂತೆಯೇ ತೋರುತ್ತದೆ, ಆದರೆ ಅದಕ್ಕೆ ನಿಖರವಾಗಿ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ. ನಿಮ್ಮನ್ನು ದಾರಿ ತಪ್ಪಿಸಲು ಅಥವಾ ಸ್ಕ್ಯಾಮ್ ಮಾಡಲು, ದಾಳಿಕೋರರು ಕೆಲವೊಮ್ಮೆ ಈ ತಂತ್ರವನ್ನು ಬಳಸುತ್ತಾರೆ.</translation>
 <translation id="5172758083709347301">ಯಂತ್ರ</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> ರಲ್ಲಿ ಇಲ್ಲವೆ? ಈ ದೋಷವನ್ನು ವರದಿ ಮಾಡಿ</translation>
 <translation id="5190835502935405962">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳ ಬಾರ್</translation>
@@ -910,6 +914,7 @@
 <translation id="5860033963881614850">ಆಫ್</translation>
 <translation id="5863847714970149516">ಮುಂದಿನ ಪುಟವು ನಿಮಗೆ ಶುಲ್ಕ ವಿಧಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು</translation>
 <translation id="5866257070973731571">ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸಿ</translation>
+<translation id="5866898949289125849">ನೀವು, ಡೆವಲಪರ್ ಪರಿಕರಗಳ ಪುಟವನ್ನು ವೀಕ್ಷಿಸುತ್ತಿದ್ದೀರಿ</translation>
 <translation id="5869405914158311789">ಈ ಸೈಟ್ ತಲುಪಲಾಗುವುದಿಲ್ಲ</translation>
 <translation id="5869522115854928033">ಉಳಿಸಲಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು</translation>
 <translation id="5887400589839399685">ಕಾರ್ಡ್ ಉಳಿಸಲಾಗಿದೆ</translation>
@@ -1077,7 +1082,6 @@
 <translation id="6891596781022320156">ನೀತಿಯ ಮಟ್ಟವು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ.</translation>
 <translation id="6895330447102777224">ನಿಮ್ಮ ಕಾರ್ಡ್ ಅನ್ನು ದೃಢೀಕರಿಸಲಾಗಿದೆ</translation>
 <translation id="6897140037006041989">ಬಳಕೆದಾರ ಏಜೆಂಟ್</translation>
-<translation id="6903319715792422884"><ph name="BEGIN_WHITEPAPER_LINK" />ಸಿಸ್ಟಂ ಕುರಿತು ಕೆಲವೊಂದು ಮಾಹಿತಿಯನ್ನು ಮತ್ತು ಪುಟದ ವಿಷಯವನ್ನು<ph name="END_WHITEPAPER_LINK" /> Google ಗೆ ಕಳುಹಿಸುವ ಮೂಲಕ, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡಿ. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">ಬಳಕೆದಾರ:</translation>
 <translation id="6934672428414710184">ಈ ಹೆಸರು ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ಬಂದಿದೆ</translation>
 <translation id="6944692733090228304">ನೀವು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ನಿರ್ವಹಣೆ ಮಾಡದ ಸೈಟ್‌ನಲ್ಲಿ ನಮೂದಿಸಿದ್ದೀರಿ. ನಿಮ್ಮ ಖಾತೆಯನ್ನು ರಕ್ಷಿಸಲು, ಇತರ ಆ್ಯಪ್‌ಗಳಲ್ಲಿ ಮತ್ತು ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಬೇಡಿ.</translation>
@@ -1147,6 +1151,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನ ದಿನಾಂಕ ಮತ್ತು ಸಮಯ (<ph name="DATE_AND_TIME" />) ತಪ್ಪಾಗಿರುವುದರಿಂದ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ಗೆ ಖಾಸಗಿ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="7260504762447901703">ಪ್ರವೇಶವನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; ಗೆ ಮುಂದುವರಿಯಬೇಕೇ?</translation>
 <translation id="7271803869921933038">ಸ್ವೀಕೃತ ಪ್ರೀಪೇಯ್ಡ್ ಕಾರ್ಡ್‌ಗಳು</translation>
 <translation id="7275334191706090484">ನಿರ್ವಹಿಸಿದ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು</translation>
 <translation id="7298195798382681320">ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ</translation>
@@ -1484,6 +1489,7 @@
 <translation id="9078964945751709336">ಇನ್ನಷ್ಟು ಮಾಹಿತಿಯ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="9080712759204168376">ಆರ್ಡರ್ ಸಾರಾಂಶ</translation>
 <translation id="9089260154716455634">ಬಿಡುವಿನ ಅವಧಿಯ ಕಾರ್ಯನೀತಿ:</translation>
+<translation id="9093075372111400787">ಹೆಚ್ಚುವರಿ ಮಾಹಿತಿಯನ್ನು ಮರೆಮಾಡಿ</translation>
 <translation id="9095388113577226029">ಇನ್ನಷ್ಟು ಭಾಷೆಗಳು...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> ಸಾಮಾನ್ಯವಾಗಿ ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಸಂರಕ್ಷಿಸಲು ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಪ್ರಯೋಜನವನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ Chromium <ph name="SITE" /> ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ, ಆ ವೆಬ್‌ಸೈಟ್‌‌ ಅಸಹಜ ಮತ್ತು ತಪ್ಪು ರುಜುವಾತುಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿದೆ. ದಾಳಿಕೋರರು <ph name="SITE" /> ರೂಪದಲ್ಲಿ ಸೋಗು ಹಾಕಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವಾಗ ಅಥವಾ ವೈ-ಫೈ ಸೈನ್-ಇನ್ ಪರದೆಯು ಸಂಪರ್ಕಕ್ಕೆ ಅಡ್ಡಿಯುಂಟು ಮಾಡಿದಾಗ ಇದು ಕಂಡುಬರಬಹುದು. ಯಾವುದೇ ಡೇಟಾವನ್ನು ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳುವ ಮೊದಲೇ Chromium ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿರುವ ಕಾರಣ, ನಿಮ್ಮ ಮಾಹಿತಿ ಈಗಲೂ ಸುರಕ್ಷಿತವಾಗಿದೆ.</translation>
 <translation id="9106062320799175032">ಬಿಲ್ಲಿಂಗ್ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index bb89517b..9866ccb3 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">기기 및 브라우저에서 사용 중인 사용자 이름</translation>
 <translation id="2491120439723279231">서버 인증서에 오류가 있습니다.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">사용자가 주로 방문한 사이트는 &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;입니다. 방금 방문하려고 시도한 사이트는 기록된 사이트와 비슷해 보이지만 정확하게 일치하지 않습니다. 일부 공격자가 이러한 기법을 사용해 사용자를 속이거나 사기 페이지로 보냅니다.</translation>
 <translation id="2495083838625180221">JSON 파서</translation>
 <translation id="2495093607237746763">선택하면 이 기기에 카드 사본이 저장되어 Chromium에서 양식을 더 빠르게 입력할 수 있습니다.</translation>
 <translation id="2498091847651709837">새 카드 스캔</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">이 연결은 <ph name="CIPHER" />을(를) 사용하여 암호화되고 인증되며 <ph name="KX" />을(를) 키 교환 매커니즘으로 사용합니다.</translation>
 <translation id="2835170189407361413">서식 지우기</translation>
 <translation id="2847118875340931228">시크릿 창 열기</translation>
+<translation id="2849445596171421624">계속을 클릭하면 더 일반적인 사이트인 &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;(으)로 이동합니다.</translation>
 <translation id="2850739647070081192">Invite(봉투)</translation>
 <translation id="2851634818064021665">이 사이트에 방문하려면 권한이 필요합니다.</translation>
 <translation id="2856444702002559011">공격자가 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />에서 정보(예: 비밀번호, 메시지, 신용카드 등)를 도용하려고 시도 중일 수 있습니다. <ph name="BEGIN_LEARN_MORE_LINK" />자세히 알아보기<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">카드 삭제</translation>
 <translation id="4587425331216688090">Chrome에서 주소를 삭제하시겠습니까?</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" />에 대한 연결은 최신 암호화 기술을 사용하여 암호화됩니다.</translation>
+<translation id="4594047029158047642">열어본 링크가 일반적이지 않은 사이트로 이동합니다. 사용자에게 혼란을 주려는 시도일 수 있습니다.</translation>
 <translation id="4594403342090139922">삭제 실행 취소(&amp;U)</translation>
 <translation id="4597348597567598915">크기 8</translation>
 <translation id="4600854749408232102">C6/C5(봉투)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">조직의 계정에 액세스할 수 없게 되거나 신원 도용이 발생할 수도 있습니다. 지금 비밀번호를 변경하는 것이 좋습니다.</translation>
 <translation id="5171045022955879922">검색 또는 URL 입력</translation>
 <translation id="5171689220826475070">Fanfold-유럽</translation>
+<translation id="5172068981283436906">사용자가 주로 방문한 사이트는 &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;입니다. 방금 방문하려고 시도한 URL은 기록된 사이트와 비슷해 보이지만 정확하게 일치하지 않습니다. 일부 공격자가 이러한 기법을 사용해 사용자를 속이거나 사기 페이지로 보냅니다.</translation>
 <translation id="5172758083709347301">컴퓨터</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" />가 아닙니까? 오류 신고</translation>
 <translation id="5190835502935405962">북마크바</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">사용 안함</translation>
 <translation id="5863847714970149516">방문하려는 페이지에서 금액을 청구할 수 있습니다.</translation>
 <translation id="5866257070973731571">전화번호 추가</translation>
+<translation id="5866898949289125849">개발자 도구 페이지를 보는 중입니다.</translation>
 <translation id="5869405914158311789">사이트에 연결할 수 없음</translation>
 <translation id="5869522115854928033">저장된 비밀번호</translation>
 <translation id="5887400589839399685">저장된 카드</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">정책 수준이 지원되지 않습니다.</translation>
 <translation id="6895330447102777224">카드가 확인되었습니다.</translation>
 <translation id="6897140037006041989">사용자 에이전트</translation>
-<translation id="6903319715792422884">일부 <ph name="BEGIN_WHITEPAPER_LINK" />시스템 정보와 페이지 콘텐츠<ph name="END_WHITEPAPER_LINK" />를 Google로 전송하여 세이프 브라우징을 개선하도록 도와주세요. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">사용자:</translation>
 <translation id="6934672428414710184">Google 계정에 등록된 이름입니다.</translation>
 <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />에서 관리하지 않는 사이트에 비밀번호를 입력했습니다. 계정을 안전하게 보호하려면 다른 앱과 사이트에서 동일한 비밀번호를 재사용하지 마세요.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">컴퓨터의 날짜와 시간(<ph name="DATE_AND_TIME" />)이 잘못되어 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />에 대한 비공개 연결을 설정할 수 없습니다.</translation>
 <translation id="7260504762447901703">액세스 취소</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;(으)로 이동하시겠습니까?</translation>
 <translation id="7271803869921933038">사용 가능한 선불카드</translation>
 <translation id="7275334191706090484">관리 북마크</translation>
 <translation id="7298195798382681320">권장</translation>
@@ -1489,6 +1494,7 @@
 <translation id="9078964945751709336">자세한 정보 필요</translation>
 <translation id="9080712759204168376">주문 요약</translation>
 <translation id="9089260154716455634">제한 완화 시간 정책:</translation>
+<translation id="9093075372111400787">자세한 내용 닫기</translation>
 <translation id="9095388113577226029">다른 언어...</translation>
 <translation id="9103872766612412690"><ph name="SITE" />에서는 사용자 정보를 보호하기 위해 일반적으로 암호화를 사용합니다. 이번에 Chromium에서 <ph name="SITE" />에 연결을 시도했을 때 웹사이트에서 비정상적이고 잘못된 사용자 인증 정보를 반환했습니다. 이는 공격자가 <ph name="SITE" />인 것처럼 가장하려고 하거나 Wi-Fi 로그인 화면이 연결을 방해했기 때문일 수 있습니다. 데이터 교환이 발생하기 전에 Chromium에서 연결을 중단했으므로 사용자 정보는 안전합니다.</translation>
 <translation id="9106062320799175032">청구서 주소 추가</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index af900175..157ad4bf5 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Jūsų įrenginio ir naršyklės naudotojo vardai</translation>
 <translation id="2491120439723279231">Serverio sertifikate yra klaidų.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Dažniausiai lankotės adresu &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Svetainė, kurioje ką tik bandėte apsilankyti, atrodo panašiai, bet ne visiškai sutampa su svetaine iš istorijos. Kartais užpuolėjai naudoja šį metodą siekdami jus apgauti.</translation>
 <translation id="2495083838625180221">JSON analizavimo įrankis</translation>
 <translation id="2495093607237746763">Jei pažymėta, „Chromium“ išsaugos kortelės kopiją įrenginyje, kad galėtumėte greičiau užpildyti formas.</translation>
 <translation id="2498091847651709837">Nuskaityti naują kortelę</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Ryšys užšifruotas ir tapatybė nustatyta naudojant <ph name="CIPHER" />. <ph name="KX" /> naudojamas kaip pagrindinis mainų mechanizmas.</translation>
 <translation id="2835170189407361413">Valyti formą</translation>
 <translation id="2847118875340931228">Atidaryti inkognito langą</translation>
+<translation id="2849445596171421624">Spustelėję „Tęsti“ būsite nukreipti į dažniau lankomą svetainę &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">„Invite“ (vokas)</translation>
 <translation id="2851634818064021665">Jums reikalingas leidimas, kad galėtumėte apsilankykite šioje svetainėje</translation>
 <translation id="2856444702002559011">Užpuolikai gali bandyti pavogti jūsų informaciją iš <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (pvz., slaptažodžius, pranešimus ar kredito kortelių duomenis). <ph name="BEGIN_LEARN_MORE_LINK" />Sužinokite daugiau<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -686,6 +688,7 @@
 <translation id="4582204425268416675">Pašalinti kortelę</translation>
 <translation id="4587425331216688090">Pašalinti adresą iš „Chrome“?</translation>
 <translation id="4592951414987517459">Ryšys su <ph name="DOMAIN" /> užšifruotas naudojant modernų šifravimo paketą.</translation>
+<translation id="4594047029158047642">Nuoroda, kurią atidarėte, nukreipia į neįprastą svetainę. Gali būti bandoma jus suklaidinti.</translation>
 <translation id="4594403342090139922">&amp;Anuliuoti ištrynimą</translation>
 <translation id="4597348597567598915">Dydis: 8</translation>
 <translation id="4600854749408232102">C6 / C5 (vokas)</translation>
@@ -788,6 +791,7 @@
 <translation id="5169827969064885044">Galite prarasti prieigą prie organizacijos paskyros arba gali būti pavogta tapatybė. „Chrome“ rekomenduoja pakeisti slaptažodį dabar.</translation>
 <translation id="5171045022955879922">Ieškokite ar įveskite URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Dažniausiai lankotės adresu &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL, kuriuo ką tik bandėte apsilankyti, atrodo panašiai, bet ne visiškai sutampa su svetaine iš istorijos. Kartais užpuolėjai naudoja šį metodą siekdami jus apgauti.</translation>
 <translation id="5172758083709347301">Įrenginys</translation>
 <translation id="5179510805599951267">Ne <ph name="ORIGINAL_LANGUAGE" /> k.? Pranešti apie šią klaidą</translation>
 <translation id="5190835502935405962">Žymių juosta</translation>
@@ -916,6 +920,7 @@
 <translation id="5860033963881614850">Išjungta</translation>
 <translation id="5863847714970149516">Toliau pateiktame puslapyje gali būti bandoma jus apmokestinti</translation>
 <translation id="5866257070973731571">Telefono numerio pridėjimas</translation>
+<translation id="5866898949289125849">Peržiūrite kūrėjo įrankių puslapį</translation>
 <translation id="5869405914158311789">Nepavyksta pasiekti šios svetainės</translation>
 <translation id="5869522115854928033">Išsaugoti slaptažodžiai</translation>
 <translation id="5887400589839399685">Kortelė išsaugota</translation>
@@ -1084,7 +1089,6 @@
 <translation id="6891596781022320156">Politikos lygis nepalaikomas.</translation>
 <translation id="6895330447102777224">Kortelė patvirtinta</translation>
 <translation id="6897140037006041989">Naudotojo atstovas</translation>
-<translation id="6903319715792422884">Padėkite tobulinti Saugų naršymą siųsdami tam tikrą <ph name="BEGIN_WHITEPAPER_LINK" />sistemos informaciją ir puslapių turinį<ph name="END_WHITEPAPER_LINK" /> „Google“. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Naudotojas:</translation>
 <translation id="6934672428414710184">Šis vardas yra iš jūsų „Google“ paskyros</translation>
 <translation id="6944692733090228304">Įvedėte slaptažodį svetainėje, kurios netvarko organizacija <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Kad apsaugotumėte paskyrą, nenaudokite to paties slaptažodžio kitose programose ir svetainėse.</translation>
@@ -1154,6 +1158,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Nepavyksta užmegzti privataus ryšio su <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, nes kompiuterio data ir laikas (<ph name="DATE_AND_TIME" />) yra netinkami.</translation>
 <translation id="7260504762447901703">Anuliuoti prieigą</translation>
+<translation id="726226871651201355">Tęsti ir eiti į &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Tinkamos išankstinio mokėjimo kortelės</translation>
 <translation id="7275334191706090484">Tvarkomos žymės</translation>
 <translation id="7298195798382681320">Rekomenduojama</translation>
@@ -1492,6 +1497,7 @@
 <translation id="9078964945751709336">Būtina pateikti daugiau informacijos</translation>
 <translation id="9080712759204168376">Užsakymų suvestinė</translation>
 <translation id="9089260154716455634">Nenaudojimo valandų politika:</translation>
+<translation id="9093075372111400787">Uždaryti išplėstinį</translation>
 <translation id="9095388113577226029">Daugiau kalbų...</translation>
 <translation id="9103872766612412690">Svetainėje <ph name="SITE" /> įprastai naudojama šifruotė informacijai apsaugoti. Šį kartą „Chromium“ bandant prisijungti prie <ph name="SITE" />, ji pateikė neįprastus ir netinkamus prisijungimo duomenis. Gali būti, kad užpuolėjas bando apsimesti svetaine <ph name="SITE" /> arba „Wi-Fi“ prisijungimo ekrane nutrūko ryšys. Jūsų informacija vis tiek liko apsaugota, nes „Chromium“ sustabdė prisijungimą prieš apsikeitimą bet kokiais duomenimis.</translation>
 <translation id="9106062320799175032">Atsiskaitymo adreso pridėjimas</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index cc64fc9..b21719a 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -294,6 +294,7 @@
 <translation id="2485387744899240041">Lietotājvārdi jūsu ierīcei un pārlūkam</translation>
 <translation id="2491120439723279231">Servera sertifikātā ir kļūdas.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Jūs parasti apmeklējat vietni &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Vietne, kuru tikko mēģinājāt apmeklēt, šķiet līdzīga vietnei no jūsu vēstures, taču nav tai precīzi atbilstoša. Uzbrucēji dažreiz izmanto šo paņēmienu mānīšanas vai krāpniecības nolūkā.</translation>
 <translation id="2495083838625180221">JSON parsētājs</translation>
 <translation id="2495093607237746763">Ja šī izvēles rūtiņa ir atzīmēta, pārlūks Chromium saglabās jūsu kartes informāciju šajā ierīcē, lai nodrošinātu ātrāku veidlapu aizpildi.</translation>
 <translation id="2498091847651709837">Skenēt jaunu karti</translation>
@@ -359,6 +360,7 @@
 <translation id="2826760142808435982">Savienojums ir šifrēts un autentificēts, izmantojot <ph name="CIPHER" />, un tajā tiek izmantots <ph name="KX" /> kā atslēgu apmaiņas mehānisms.</translation>
 <translation id="2835170189407361413">Notīrīt veidlapu</translation>
 <translation id="2847118875340931228">Atvērt inkognito režīma logu</translation>
+<translation id="2849445596171421624">Noklikšķinot uz Turpināt, tiks veikta novirzīšana uz zināmāku vietni &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (aploksne)</translation>
 <translation id="2851634818064021665">Jums nepieciešama atļauja, lai apmeklētu šo vietni</translation>
 <translation id="2856444702002559011">Iespējams, uzbrucēji mēģina nozagt jūsu informāciju no vietnes <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (piemēram, paroles, ziņojumus vai kredītkaršu datus). <ph name="BEGIN_LEARN_MORE_LINK" />Uzziniet vairāk<ph name="END_LEARN_MORE_LINK" />.</translation>
@@ -677,6 +679,7 @@
 <translation id="4582204425268416675">Noņemt karti</translation>
 <translation id="4587425331216688090">Vai noņemt adresi no pārlūka Chrome?</translation>
 <translation id="4592951414987517459">Savienojums ar domēnu <ph name="DOMAIN" /> ir šifrēts, izmantojot mūsdienīgu šifra komplektu.</translation>
+<translation id="4594047029158047642">Atvērtā saite novirza uz neparastu vietni. Iespējams, jūs tiekat maldināts.</translation>
 <translation id="4594403342090139922">&amp;Dzēšanas atsaukšana</translation>
 <translation id="4597348597567598915">8. izmērs</translation>
 <translation id="4600854749408232102">C6/C5 (aploksne)</translation>
@@ -779,6 +782,7 @@
 <translation id="5169827969064885044">Varat zaudēt piekļuvi savam organizācijas kontam, vai jūsu identitāte var tikt nozagta. Chrome iesaka nekavējoties nomainīt paroli.</translation>
 <translation id="5171045022955879922">Meklējiet vai ievadiet URL.</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Jūs parasti apmeklējat URL &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Vietrādis URL, kuru tikko mēģinājāt apmeklēt, šķiet līdzīgs vietrādim URL no jūsu vēstures, taču nav tam precīzi atbilstošs. Uzbrucēji dažreiz izmanto šo paņēmienu mānīšanas vai krāpniecības nolūkā.</translation>
 <translation id="5172758083709347301">Ierīce</translation>
 <translation id="5179510805599951267">Vai nav valodā: <ph name="ORIGINAL_LANGUAGE" />? Ziņot par šo kļūdu</translation>
 <translation id="5190835502935405962">Grāmatzīmju josla</translation>
@@ -907,6 +911,7 @@
 <translation id="5860033963881614850">Izsl.</translation>
 <translation id="5863847714970149516">Nākamajā lapā var tikt mēģināts pieprasīt naudu</translation>
 <translation id="5866257070973731571">Tālruņa numura pievienošana</translation>
+<translation id="5866898949289125849">Jūs skatāt izstrādātāja rīku lapu</translation>
 <translation id="5869405914158311789">Šī vietne nav sasniedzama</translation>
 <translation id="5869522115854928033">Saglabātās paroles</translation>
 <translation id="5887400589839399685">Kartīte ir saglabāta</translation>
@@ -1075,7 +1080,6 @@
 <translation id="6891596781022320156">Politikas līmenis netiek atbalstīts.</translation>
 <translation id="6895330447102777224">Karte ir apstiprināta</translation>
 <translation id="6897140037006041989">Lietotāja aģents</translation>
-<translation id="6903319715792422884">Palīdziet uzlabot Drošo pārlūkošanu, nosūtot noteiktu <ph name="BEGIN_WHITEPAPER_LINK" />sistēmas informāciju un lapas saturu<ph name="END_WHITEPAPER_LINK" /> Google serveriem. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Lietotājs:</translation>
 <translation id="6934672428414710184">Šis vārds ir no jūsu Google konta</translation>
 <translation id="6944692733090228304">Jūs ievadījāt paroli vietnē, kuru nepārvalda <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Lai aizsargātu savu kontu, neizmantojiet šo paroli citās lietotnēs un vietnēs.</translation>
@@ -1142,6 +1146,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Nevar izveidot privātu savienojumu ar <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, jo jūsu datora datums un laiks (<ph name="DATE_AND_TIME" />) nav pareizs.</translation>
 <translation id="7260504762447901703">Atsaukt piekļuvi</translation>
+<translation id="726226871651201355">Vai pāriet uz vietni &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Atbalstītās priekšapmaksas kartes</translation>
 <translation id="7275334191706090484">Pārvaldītās grāmatzīmes</translation>
 <translation id="7298195798382681320">Ieteicams</translation>
@@ -1480,6 +1485,7 @@
 <translation id="9078964945751709336">Nepieciešama plašāka informācija.</translation>
 <translation id="9080712759204168376">Pasūtījuma kopsavilkums</translation>
 <translation id="9089260154716455634">Izslēgšanas stundu politika:</translation>
+<translation id="9093075372111400787">Aizvērt papildinformāciju</translation>
 <translation id="9095388113577226029">Citas valodas…</translation>
 <translation id="9103872766612412690">Vietnē <ph name="SITE" /> informācijas aizsargāšanai parasti tiek izmantota šifrēšana. Kad pārlūkā Chromium tika mēģināts izveidot savienojumu ar vietni <ph name="SITE" />, šoreiz tā nosūtīja neparastus un nepareizus akreditācijas datus. Iespējams, tas notika, jo uzbrucējs mēģināja uzdoties par vietni <ph name="SITE" />, vai arī Wi-Fi pierakstīšanās ekrāns pārtrauca savienojumu. Jūsu informācija joprojām ir drošībā, jo pārlūks Chromium pārtrauca savienojumu, pirms tika veikta jebkādu datu apmaiņa.</translation>
 <translation id="9106062320799175032">Norēķinu adreses pievienošana</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index f300939..45b53a9e 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">നിങ്ങളുടെ ഉപകരണത്തിനും ബ്രൗസറിനുമുള്ള ഉപയോക്തൃനാമങ്ങൾ</translation>
 <translation id="2491120439723279231">സെർവറിന്റെ സർട്ടിഫിക്കറ്റിൽ പിശകുകൾ ഉണ്ട്.</translation>
 <translation id="2493640343870896922">ലെറ്റർ-പ്ലസ്</translation>
+<translation id="2494497504885199552">നിങ്ങൾ സാധാരണയായി സന്ദർശിക്കുന്നത് &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; ആണ്. നിങ്ങൾ ഇപ്പോൾ സന്ദർശിക്കാൻ ശ്രമിച്ച സൈറ്റ് അതിനോട് സമാനമാണെന്ന് തോന്നുന്നുവെങ്കിലും നിങ്ങളുടെ ചരിത്രത്തിൽ നിന്നുള്ള സൈറ്റുമായി കൃത്യമായ പൊരുത്തമില്ല. നിങ്ങളെ കബളിപ്പിക്കാനോ വഞ്ചിക്കാനോ ആക്രമണകാരികൾ ചിലപ്പോൾ ഇത്തരം തന്ത്രങ്ങൾ പ്രയോഗിക്കാറുണ്ട്.</translation>
 <translation id="2495083838625180221">JSON പാർസർ</translation>
 <translation id="2495093607237746763">പരിശോധിച്ചെങ്കിൽ, വേഗത്തിൽ ഫോം പൂരിപ്പിക്കാൻ Chromium ഈ ഉപകരണത്തിൽ നിങ്ങളുടെ കാർഡിന്റെ ഒരു പകർപ്പ് സൂക്ഷിക്കും.</translation>
 <translation id="2498091847651709837">പുതിയ കാർഡ് സ്‌കാൻ ചെയ്യുക</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982"><ph name="CIPHER" /> ഉപയോഗിച്ച് കണക്ഷൻ എൻക്രിപ്‌റ്റുചെയ്‌ത് പ്രാമാണീകരിക്കുന്നു, ഒപ്പം പ്രധാന എക്‌സേഞ്ച് മെക്കാനിസമായി <ph name="KX" /> ഉപയോഗിക്കുന്നു.</translation>
 <translation id="2835170189407361413">ഫോം മായ്‌ക്കുക</translation>
 <translation id="2847118875340931228">അദൃശ്യ വിൻഡോ തുറക്കുക</translation>
+<translation id="2849445596171421624">തുടരുക ക്ലിക്ക് ചെയ്യുന്നതിലൂടെ കൂടുതലായി ഉപയോഗിക്കുന്ന &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; സൈറ്റിലേക്ക് നിങ്ങൾ പോകും.</translation>
 <translation id="2850739647070081192">ക്ഷണം (എൻവലപ്പ്)</translation>
 <translation id="2851634818064021665">ഈ സൈറ്റ് സന്ദർശിക്കാൻ നിങ്ങൾക്ക് അനുമതി ആവശ്യമാണ്</translation>
 <translation id="2856444702002559011"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> എന്നതിൽ നിന്ന് നിങ്ങളുടെ വിവരം മോഷ്‌ടിക്കാൻ അക്രമികൾ ശ്രമിക്കുന്നുണ്ടാവാം (ഉദാഹരണത്തിന്, പാസ്‌വേഡുകൾ, സന്ദേശങ്ങൾ, അല്ലെങ്കിൽ ക്രെഡിറ്റ് കാർഡുകൾ). <ph name="BEGIN_LEARN_MORE_LINK" />കൂടുതലറിയുക<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -676,6 +678,7 @@
 <translation id="4582204425268416675">കാർഡ് നീക്കം ചെയ്യുക</translation>
 <translation id="4587425331216688090">Chrome-ൽ നിന്ന് വിലാസം നീക്കംചെയ്യണോ?</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> എന്നതിലേക്കുള്ള നിങ്ങളുടെ കണക്ഷനെ ആധുനിക സൈഫർ സ്യൂട്ട് ഉപയോഗിച്ച് എൻക്രിപ്റ്റുചെയ്‌തിരിക്കുന്നു.</translation>
+<translation id="4594047029158047642">നിങ്ങൾ തുറന്ന ലിങ്ക് കൂടുതൽ ഉപയോഗത്തിലില്ലാത്ത ഒരു സൈറ്റിലേക്കാണ് പോകുന്നത്. ഇത് നിങ്ങളെ ആശയക്കുഴപ്പത്തിലാക്കിയേക്കാം.</translation>
 <translation id="4594403342090139922">&amp;ഇല്ലാതാക്കുന്നത് പഴയപടിയാക്കുക</translation>
 <translation id="4597348597567598915">വലുപ്പം 8</translation>
 <translation id="4600854749408232102">C6/C5 (എൻവലപ്പ്)</translation>
@@ -778,6 +781,7 @@
 <translation id="5169827969064885044">നിങ്ങളുടെ സ്ഥാപനത്തിന്റെ അക്കൗണ്ടിലേക്കുള്ള ആക്‌സസ് നഷ്‌ടമാകാനോ ഐഡന്‍റിറ്റി മോഷ്ടിക്കപ്പെടാനോ സാധ്യതയുണ്ട്. ഇപ്പോൾ തന്നെ പാസ്‍വേഡ് മാറ്റാൻ Chrome ശുപാർശ ചെയ്യുന്നു.</translation>
 <translation id="5171045022955879922">തിരയുക അല്ലെങ്കിൽ URL ടൈപ്പ് ചെയ്യുക</translation>
 <translation id="5171689220826475070">ഫാൻഫോൾഡ്-യൂറോപ്യന്‍‌</translation>
+<translation id="5172068981283436906">നിങ്ങൾ സാധാരണയായി സന്ദർശിക്കുന്നത് &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; ആണ്. നിങ്ങൾ ഇപ്പോൾ സന്ദർശിക്കാൻ ശ്രമിച്ച URL അതിനോട് സമാനമാണെന്ന് തോന്നുന്നുവെങ്കിലും നിങ്ങളുടെ ചരിത്രത്തിൽ നിന്നുള്ള സൈറ്റുമായി കൃത്യമായ പൊരുത്തമില്ല. നിങ്ങളെ കബളിപ്പിക്കാനോ വഞ്ചിക്കാനോ ആക്രമണകാരികൾ ചിലപ്പോൾ ഇത്തരം തന്ത്രങ്ങൾ പ്രയോഗിക്കാറുണ്ട്.</translation>
 <translation id="5172758083709347301">മെഷീൻ</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> എന്നതില്‍‌ ഇല്ലേ? ഈ പിശക് റിപ്പോര്‍‌ട്ട് ചെയ്യുക</translation>
 <translation id="5190835502935405962">ബുക്ക്‌മാര്‍‌ക്ക് ബാര്‍‌</translation>
@@ -906,6 +910,7 @@
 <translation id="5860033963881614850">ഓഫാക്കുക</translation>
 <translation id="5863847714970149516">മുമ്പോട്ടുള്ള പേജ് നിങ്ങളിൽ നിന്ന് പണമീടാക്കാൻ ശ്രമിച്ചേക്കാം</translation>
 <translation id="5866257070973731571">ഫോണ്‍ നമ്പര്‍ ചേര്‍ക്കുക</translation>
+<translation id="5866898949289125849">നിങ്ങൾ ഒരു ഡെവലപ്പർ ടൂളുകളുടെ പേജാണ് കാണുന്നത്</translation>
 <translation id="5869405914158311789">ഈ സൈറ്റ് ലഭ്യമാക്കാനാകുന്നില്ല</translation>
 <translation id="5869522115854928033">സംരക്ഷിച്ച പാസ്‌വേഡുകള്‍</translation>
 <translation id="5887400589839399685">കാർഡ് സംരക്ഷിച്ചു</translation>
@@ -1074,7 +1079,6 @@
 <translation id="6891596781022320156">നയ നില പിന്തുണയ്ക്കുന്നില്ല.</translation>
 <translation id="6895330447102777224">നിങ്ങളുടെ കാർഡ് സ്ഥിരീകരിച്ചു</translation>
 <translation id="6897140037006041989">ഉപയോക്തൃ ഏജന്‍റ്</translation>
-<translation id="6903319715792422884">ചില <ph name="BEGIN_WHITEPAPER_LINK" />സിസ്‌റ്റം വിവരങ്ങളും പേജ് ഉള്ളടക്കവും<ph name="END_WHITEPAPER_LINK" /> Google-ലേക്ക് അയച്ച്, സുരക്ഷിത ബ്രൗസിംഗ് മെച്ചപ്പെടുത്താൻ സഹായിക്കുക. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">ഉപയോക്താവ്:</translation>
 <translation id="6934672428414710184">ഈ പേര് നിങ്ങളുടെ Google അക്കൗണ്ടിൽ നിന്നുള്ളതാണ്</translation>
 <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> മാനേജ് ചെയ്യാത്ത ഒരു സൈറ്റിൽ നിങ്ങൾ പാസ്‌വേഡ് നൽകി. നിങ്ങളുടെ അക്കൗണ്ട് പരിരക്ഷിക്കുന്നതിന്, മറ്റ് ആപ്പുകളിലും സൈറ്റുകളിലും നിങ്ങളുടെ പാസ്‌വേഡ് വീണ്ടും ഉപയോഗിക്കരുത്.</translation>
@@ -1141,6 +1145,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ തീയതിയും സമയവും (<ph name="DATE_AND_TIME" />) തെറ്റായതിനാൽ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> എന്നതിലേക്കുള്ള സ്വകാര്യ കണക്ഷൻ സ്ഥാപിക്കാനാവില്ല.</translation>
 <translation id="7260504762447901703">ആക്‌സസ് റദ്ദാക്കുക</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; എന്നതിലേക്ക് പോകണോ?</translation>
 <translation id="7271803869921933038">സ്വീകരിക്കുന്ന പ്രീപെയ്ഡ് കാർഡുകൾ</translation>
 <translation id="7275334191706090484">നിയന്ത്രിത ബുക്ക്‌മാർക്കുകൾ</translation>
 <translation id="7298195798382681320">ശുപാർശചെയ്യുന്നത്</translation>
@@ -1476,6 +1481,7 @@
 <translation id="9078964945751709336">കൂടുതൽ വിവരങ്ങൾ ആവശ്യമാണ്</translation>
 <translation id="9080712759204168376">ഓർഡർ സംഗ്രഹം</translation>
 <translation id="9089260154716455634">ഓഫ് അവേഴ്‌സ് നയം:</translation>
+<translation id="9093075372111400787">വിപുലീകരിച്ചത് അടയ്‌ക്കുക</translation>
 <translation id="9095388113577226029">കൂടുതൽ ഭാഷകൾ...</translation>
 <translation id="9103872766612412690">നിങ്ങളുടെ വിവരങ്ങൾ പരിരക്ഷിക്കാൻ സാധാരണയായി <ph name="SITE" />, എൻക്രിപ്‌ഷൻ ഉപയോഗിക്കുന്നു. ഇപ്പോൾ <ph name="SITE" /> സൈറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്യാൻ Chromium ശ്രമിച്ചപ്പോൾ, അസാധാരണമായതും തെറ്റായതുമായ ക്രെഡൻഷ്യലുകൾ വെബ്‌സൈറ്റ് തിരികെ അയച്ചു. ഒരു ആക്രമണകാരി <ph name="SITE" /> എന്നതായി ഭാവിക്കാൻ ശ്രമിക്കുമ്പോഴോ Wi-Fi സൈൻ ഇൻ സ്‌ക്രീൻ, കണക്ഷനെ തടസ്സപ്പെടുത്തുമ്പോഴോ ആണ് ഇങ്ങനെ സംഭവിക്കാനിടയുള്ളത്. ഏതെങ്കിലും ഡാറ്റ കൈമാറുന്നതിനുമുമ്പ് Chromium കണക്ഷൻ അവസാനിപ്പിച്ചതിനാൽ, നിങ്ങളുടെ വിവരങ്ങൾ തുടർന്നും സുരക്ഷിതമായിരിക്കും.</translation>
 <translation id="9106062320799175032">ബില്ലിംഗ് വിലാസം ചേർക്കുക</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 89ea1b2..69920f3 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">तुमच्या डिव्हाइस आणि ब्राउझरसाठी वापरकर्तानावे</translation>
 <translation id="2491120439723279231">सर्व्हरच्या सर्टिफिकेटमध्ये एरर आहेत.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">तुम्ही साधारणपणे &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; ला भेट देता. तुम्ही नुकतेच ज्या साइटला भेट देण्याचा प्रयत्न केला आहे ती साइट तुमच्या इतिहासामधील साइटसारखीच दिसते पण तंतोतंत जुळत नाही. आक्रमणकर्ते काहीवेळा तुमची फसवणूक करण्यासाठी किंवा घोटाळ्यासाठी हे तंत्र वापरतात.</translation>
 <translation id="2495083838625180221">JSON पार्सर</translation>
 <translation id="2495093607237746763">चेक केल्यास, अधिक जलद फॉर्म भरण्यासाठी या डिव्हाइसवर Chromium तुमच्या कार्डची एक प्रत संचयित करेल.</translation>
 <translation id="2498091847651709837">नवीन कार्ड स्कॅन करा</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">कनेक्शन <ph name="CIPHER" /> वापरून आणि महत्त्वाचे एक्स्चेंज तंत्र म्हणून <ph name="KX" /> वापर एंक्रिप्ट आणि अॉथेंटिकेट केले आहे.</translation>
 <translation id="2835170189407361413">फॉर्म क्लिअर करा</translation>
 <translation id="2847118875340931228">गुप्त विंडो उघडा</translation>
+<translation id="2849445596171421624">पुढे सुरू ठेवा क्लिक करणे तुम्हाला अधिक सामान्य साइट &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; वर घेऊन जाईल.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">या साइटला भेट देण्यासाठी तुम्हाला परवानगीची गरज आहे</translation>
 <translation id="2856444702002559011">हल्लेखोर कदाचित तुमची माहिती (उदाहरणार्थ पासवर्ड, संदेश किंवा क्रेडिट कार्ड) <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> मधून चोरण्याचा प्रयत्न करत असतील. <ph name="BEGIN_LEARN_MORE_LINK" />आणखी जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -684,6 +686,7 @@
 <translation id="4582204425268416675">कार्ड काढून टाका</translation>
 <translation id="4587425331216688090">Chrome मधून पत्ता काढून टाकायचा?</translation>
 <translation id="4592951414987517459">तुमचे <ph name="DOMAIN" /> वरील कनेक्शन आधुनिक सायफर सूट वापरून एंक्रिप्ट केलेले आहे.</translation>
+<translation id="4594047029158047642">तुम्ही उघडलेली लिंक असामान्य साइटवर घेऊन जाते. हे कदाचित तुम्हाला गोंधळात टाकू शकते.</translation>
 <translation id="4594403342090139922">&amp;हटवा पूर्ववत करा</translation>
 <translation id="4597348597567598915">आकार ८</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -786,6 +789,7 @@
 <translation id="5169827969064885044">तुम्ही तुमच्या संस्थेच्या खात्याचा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
 <translation id="5171045022955879922">URL शोधा किंवा टाइप करा</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">तुम्ही साधारणपणे &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; ला भेट देता. तुम्ही आतुम्ही नुकतेच ज्या साइटला भेट देण्याचा प्रयत्न केला आहे ती साइट तुमच्या इतिहासामधील साइटसारखीच दिसते पण तंतोतंत जुळत नाही. आक्रमणकर्ते काहीवेळा तुमची फसवणूक करण्यासाठी किंवा घोटाळ्यासाठी हे तंत्र वापरतात.</translation>
 <translation id="5172758083709347301">मशीन</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> मध्ये नाही? या एररचा अहवाल नोंदवा</translation>
 <translation id="5190835502935405962">बुकमार्क बार</translation>
@@ -914,6 +918,7 @@
 <translation id="5860033963881614850">बंद</translation>
 <translation id="5863847714970149516">पुढील पेजवर तुमच्याकडून शुल्क आकारले जाऊ शकते</translation>
 <translation id="5866257070973731571">फोन नंबर जोडा</translation>
+<translation id="5866898949289125849">तुम्ही डेव्हलपर टूल पेज पाहत आहात</translation>
 <translation id="5869405914158311789">या साइटवर पोहचणे शक्य नाही</translation>
 <translation id="5869522115854928033">सेव्ह केलेले पासवर्ड</translation>
 <translation id="5887400589839399685">कार्ड सेव्ह केले</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">धोरण स्तर समर्थित नाही.</translation>
 <translation id="6895330447102777224">आपल्या कार्डची पुष्टी केली</translation>
 <translation id="6897140037006041989">वापरकर्ता एजंट</translation>
-<translation id="6903319715792422884">सुरक्षित ब्राउझिंगमध्ये सुधारणा करण्यासाठी Google ला काही <ph name="BEGIN_WHITEPAPER_LINK" />सिस्टम माहिती आणि पेज आशय<ph name="END_WHITEPAPER_LINK" /> पाठवून मदत करा. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">वापरकर्ता:</translation>
 <translation id="6934672428414710184">हे नाव तुमच्या Google खात्यावरून आहे</translation>
 <translation id="6944692733090228304">तुम्ही पासवर्ड एंटर केलेली साइट <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> द्वारे व्यवस्थापित केलेली नाही. तुमच्या खात्याच्या संरक्षणासाठी, तुमचा पासवर्ड इतर ॲप्स किंवा साइटवर पुन्हा वापरू नका.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">तुमच्या कॉंप्युटरची तारीख आणि वेळ (<ph name="DATE_AND_TIME" />) चुकीची असल्यामुळे <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> सह खाजगी कनेक्शन इंस्टॉल केले जाऊ शकत नाही.</translation>
 <translation id="7260504762447901703">अॅक्सेस रद्द करा</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; वर पुढे सुरू ठेवायचे का?</translation>
 <translation id="7271803869921933038">स्वीकारली जाणारी प्रीपेड कार्डे</translation>
 <translation id="7275334191706090484">व्यवस्थापित केलेले बुकमार्क</translation>
 <translation id="7298195798382681320">शिफारस केलेले</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">अधिक माहिती आवश्यक आहे</translation>
 <translation id="9080712759204168376">मागणी सारांश</translation>
 <translation id="9089260154716455634">कामाच्या तासानंतरचे धोरण:</translation>
+<translation id="9093075372111400787">प्रगत पर्याय बंद करा</translation>
 <translation id="9095388113577226029">आणखी भाषा...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः एंक्रिप्शन वापरते. Chromium ने यावेळी <ph name="SITE" /> शी कनेक्‍ट करण्‍याचा प्रयत्न केला तेव्‍हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेन्शियल परत पाठविले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्‍हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्‍हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Chromium ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation>
 <translation id="9106062320799175032">बिलिंग पत्ता जोडा</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 25445006..d972249 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -294,6 +294,7 @@
 <translation id="2485387744899240041">Nama pengguna bagi peranti dan penyemak imbas anda</translation>
 <translation id="2491120439723279231">Sijil pelayan mengandungi ralat.</translation>
 <translation id="2493640343870896922">Surat-Plus</translation>
+<translation id="2494497504885199552">Biasanya anda melawati &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Tapak yang baru sahaja anda cuba lawati kelihatan serupa, tetapi tidak benar-benar sepadan dengan tapak daripada sejarah anda. Kadang-kadang penyerang menggunakan teknik ini untuk memperdayakan atau menipu anda.</translation>
 <translation id="2495083838625180221">Penghurai JSON</translation>
 <translation id="2495093607237746763">Jika ditandai, Chromium akan menyimpan salinan kad anda pada peranti ini untuk pengisian borang yang lebih cepat.</translation>
 <translation id="2498091847651709837">Imbas kad baharu</translation>
@@ -359,6 +360,7 @@
 <translation id="2826760142808435982">Sambungan disulitkan dan disahkan menggunakan <ph name="CIPHER" /> dan menggunakan <ph name="KX" /> sebagai mekanisme pertukaran kunci.</translation>
 <translation id="2835170189407361413">Kosongkan borang</translation>
 <translation id="2847118875340931228">Buka Tetingkap Inkognito</translation>
+<translation id="2849445596171421624">Tindakan mengklik Teruskan akan membawa anda ke tapak yang lebih lazim &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Jemputan (Sampul Surat)</translation>
 <translation id="2851634818064021665">Anda memerlukan kebenaran untuk melawat tapak ini</translation>
 <translation id="2856444702002559011">Penyerang mungkin akan cuba mencuri maklumat anda daripada <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (contohnya, kata laluan, mesej atau kad kredit). <ph name="BEGIN_LEARN_MORE_LINK" />Ketahui lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -679,6 +681,7 @@
 <translation id="4582204425268416675">Alih keluar kad</translation>
 <translation id="4587425331216688090">Alih keluar alamat daripada Chrome?</translation>
 <translation id="4592951414987517459">Sambungan anda ke <ph name="DOMAIN" /> disulitkan menggunakan suit sifer moden.</translation>
+<translation id="4594047029158047642">Pautan yang anda buka pergi ke tapak yang tidak lazim. Pautan itu mungkin cuba mengelirukan anda.</translation>
 <translation id="4594403342090139922">&amp;Buat asal Pemadaman</translation>
 <translation id="4597348597567598915">Saiz 8</translation>
 <translation id="4600854749408232102">C6/C5 (Sampul Surat)</translation>
@@ -781,6 +784,7 @@
 <translation id="5169827969064885044">Anda boleh kehilangan akses kepada akaun organisasi anda atau mengalami kecurian identiti. Chrome mengesyorkan supaya kata laluan anda ditukar sekarang.</translation>
 <translation id="5171045022955879922">Buat carian atau taipkan URL</translation>
 <translation id="5171689220826475070">Fanfold-Eropah</translation>
+<translation id="5172068981283436906">Biasanya anda melawati &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL yang baru sahaja anda cuba lawati kelihatan serupa, tetapi tidak benar-benar sepadan dengan tapak daripada sejarah anda. Kadang-kadang penyerang menggunakan teknik ini untuk memperdayakan atau menipu anda.</translation>
 <translation id="5172758083709347301">Mesin</translation>
 <translation id="5179510805599951267">Bukan dalam <ph name="ORIGINAL_LANGUAGE" />? Laporkan ralat ini</translation>
 <translation id="5190835502935405962">Bar Penanda Halaman</translation>
@@ -909,6 +913,7 @@
 <translation id="5860033963881614850">Dimatikan</translation>
 <translation id="5863847714970149516">Halaman yang seterusnya mungkin cuba mengenakan bayaran kepada anda</translation>
 <translation id="5866257070973731571">Tambahkan Nombor Telefon</translation>
+<translation id="5866898949289125849">Anda sedang melihat halaman alatan pembangun</translation>
 <translation id="5869405914158311789">Tapak ini tidak dapat dicapai</translation>
 <translation id="5869522115854928033">Kata laluan disimpan</translation>
 <translation id="5887400589839399685">Kad disimpan</translation>
@@ -1077,7 +1082,6 @@
 <translation id="6891596781022320156">Tahap dasar tidak disokong.</translation>
 <translation id="6895330447102777224">Kad anda telah disahkan</translation>
 <translation id="6897140037006041989">Ejen Pengguna</translation>
-<translation id="6903319715792422884">Bantu dalam meningkatkan Penyemakan Imbas Selamat dengan menghantar beberapa <ph name="BEGIN_WHITEPAPER_LINK" />maklumat sistem dan kandungan halaman<ph name="END_WHITEPAPER_LINK" /> kepada Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Pengguna:</translation>
 <translation id="6934672428414710184">Nama ini daripada Akaun Google anda</translation>
 <translation id="6944692733090228304">Anda memasukkan kata laluan di tapak yang tidak diurus oleh <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Untuk melindungi akaun anda, jangan gunakan semula kata laluan anda pada apl dan tapak lain.</translation>
@@ -1144,6 +1148,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Sambungan peribadi ke <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tidak boleh diwujudkan kerana tarikh dan masa komputer anda (<ph name="DATE_AND_TIME" />) tidak betul.</translation>
 <translation id="7260504762447901703">Batalkan akses</translation>
+<translation id="726226871651201355">Teruskan ke &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Kad Prabayar yang Diterima</translation>
 <translation id="7275334191706090484">Penanda Halaman Terurus</translation>
 <translation id="7298195798382681320">Disyorkan</translation>
@@ -1482,6 +1487,7 @@
 <translation id="9078964945751709336">Maklumat lanjut diperlukan</translation>
 <translation id="9080712759204168376">Ringkasan Pesanan</translation>
 <translation id="9089260154716455634">Dasar Luar Waktu:</translation>
+<translation id="9093075372111400787">Tutup terperinci</translation>
 <translation id="9095388113577226029">Lagi bahasa...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> biasanya menggunakan penyulitan untuk melindungi maklumat anda. Apabila Chromium cuba menyambung ke <ph name="SITE" /> pada kali ini, tapak web tersebut mengembalikan bukti kelayakan yang luar biasa dan salah. Hal ini boleh berlaku apabila penyerang sedang cuba menyamar sebagai <ph name="SITE" /> atau skrin log masuk Wi-Fi telah memutuskan sambungan. Maklumat anda masih selamat kerana Chromium menghentikan sambungan sebelum sebarang pertukaran data berlaku.</translation>
 <translation id="9106062320799175032">Tambahkan Alamat Pengebilan</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index e60acd91..2cc325c 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Gebruikersnamen voor je apparaat en browser</translation>
 <translation id="2491120439723279231">Het servercertificaat bevat fouten.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Normaal gesproken ga je naar &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. De site die je zojuist wilde openen, lijkt op de site uit je geschiedenis, maar komt niet exact overeen. Deze techniek wordt soms gebruikt om je te misleiden.</translation>
 <translation id="2495083838625180221">JSON Parser</translation>
 <translation id="2495093607237746763">Als deze optie is aangevinkt, bewaart Chromium een exemplaar van je pas op dit apparaat om formulieren sneller te kunnen invullen.</translation>
 <translation id="2498091847651709837">Nieuwe pas scannen</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">De verbinding is gecodeerd en geverifieerd met <ph name="CIPHER" /> en gebruikt <ph name="KX" /> als mechanisme voor sleuteluitwisseling.</translation>
 <translation id="2835170189407361413">Formulier leegmaken</translation>
 <translation id="2847118875340931228">Incognitovenster openen</translation>
+<translation id="2849445596171421624">Als je op Doorgaan klikt, ga je naar de algemene site &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (envelop)</translation>
 <translation id="2851634818064021665">Je hebt toestemming nodig om deze site te bezoeken</translation>
 <translation id="2856444702002559011">Cybercriminelen proberen mogelijk je gegevens van <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> te stelen (bijvoorbeeld wachtwoorden, berichten of creditcardgegevens). <ph name="BEGIN_LEARN_MORE_LINK" />Meer informatie<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -672,6 +674,7 @@
 <translation id="4582204425268416675">Pas verwijderen</translation>
 <translation id="4587425331216688090">Adres verwijderen uit Chrome?</translation>
 <translation id="4592951414987517459">Je verbinding met <ph name="DOMAIN" /> is versleuteld via een moderne Cipher Suite.</translation>
+<translation id="4594047029158047642">De link die je hebt geopend, leidt naar een site die je normaal niet bezoekt. De site probeert je mogelijk in verwarring te brengen.</translation>
 <translation id="4594403342090139922">&amp;Verwijderen ongedaan maken</translation>
 <translation id="4597348597567598915">Grootte 8</translation>
 <translation id="4600854749408232102">C6/C5 (envelop)</translation>
@@ -774,6 +777,7 @@
 <translation id="5169827969064885044">Je kunt de toegang tot het account van je organisatie kwijtraken of slachtoffer worden van identiteitsdiefstal. Chrome raadt je aan je wachtwoord nu te wijzigen.</translation>
 <translation id="5171045022955879922">Zoek of typ een URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Normaal gesproken ga je naar &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. De URL die je zojuist wilde openen lijkt op de site uit je geschiedenis, maar komt niet exact overeen. Deze techniek wordt soms gebruikt om je te misleiden.</translation>
 <translation id="5172758083709347301">Computer</translation>
 <translation id="5179510805599951267">Niet in het <ph name="ORIGINAL_LANGUAGE" />? Deze fout melden</translation>
 <translation id="5190835502935405962">Bladwijzerbalk</translation>
@@ -902,6 +906,7 @@
 <translation id="5860033963881614850">Uit</translation>
 <translation id="5863847714970149516">De komende pagina probeert misschien kosten in rekening te brengen</translation>
 <translation id="5866257070973731571">Telefoonnummer toevoegen</translation>
+<translation id="5866898949289125849">Je bekijkt een Developer Tools-pagina</translation>
 <translation id="5869405914158311789">Deze site is niet bereikbaar</translation>
 <translation id="5869522115854928033">Opgeslagen wachtwoorden</translation>
 <translation id="5887400589839399685">Pas opgeslagen</translation>
@@ -1069,7 +1074,6 @@
 <translation id="6891596781022320156">Beleidsniveau wordt niet ondersteund.</translation>
 <translation id="6895330447102777224">Je creditcard is bevestigd</translation>
 <translation id="6897140037006041989">User-agent</translation>
-<translation id="6903319715792422884">Help ons Safe Browsing beter te maken door bepaalde <ph name="BEGIN_WHITEPAPER_LINK" />systeeminformatie en paginacontent<ph name="END_WHITEPAPER_LINK" /> naar Google te verzenden. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Gebruiker:</translation>
 <translation id="6934672428414710184">Dit is de naam die in je Google-account staat</translation>
 <translation id="6944692733090228304">Je hebt je wachtwoord ingevoerd op een site die niet door <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> wordt beheerd. Ter bescherming van je account kun je je wachtwoord beter niet hergebruiken voor andere apps en sites.</translation>
@@ -1136,6 +1140,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Er kan geen privéverbinding met <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tot stand worden gebracht, omdat de datum en tijd van de computer (<ph name="DATE_AND_TIME" />) onjuist zijn.</translation>
 <translation id="7260504762447901703">Toegang intrekken</translation>
+<translation id="726226871651201355">Doorgaan naar &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Geaccepteerde prepaidkaarten</translation>
 <translation id="7275334191706090484">Beheerde bladwijzers</translation>
 <translation id="7298195798382681320">Aanbevolen</translation>
@@ -1473,6 +1478,7 @@
 <translation id="9078964945751709336">Meer informatie vereist</translation>
 <translation id="9080712759204168376">Besteloverzicht</translation>
 <translation id="9089260154716455634">Beleid buiten gebruikstijd:</translation>
+<translation id="9093075372111400787">Geavanceerd sluiten</translation>
 <translation id="9095388113577226029">Meer talen...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> gebruikt gewoonlijk versleuteling om je gegevens te beschermen. Toen Chromium deze keer probeerde verbinding te maken met <ph name="SITE" />, retourneerde de website ongewone en onjuiste inloggegevens. Dit gebeurt wanneer een aanvaller probeert zich als <ph name="SITE" /> voor te doen of wanneer een wifi-inlogscherm de verbinding heeft verbroken. Je gegevens zijn nog steeds beveiligd omdat Chromium de verbinding heeft beëindigd voordat er gegevens konden worden uitgewisseld.</translation>
 <translation id="9106062320799175032">Factuuradres toevoegen</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 28a33f3..9e421895 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Brukernavn for enheten og nettleseren din</translation>
 <translation id="2491120439723279231">Tjenerens sertifikat inneholder feil.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Du pleier å besøke &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Nettstedet du nettopp prøvde å besøke, ligner på nettstedet i loggen din, men er ikke helt likt. Noen ganger bruker angripere denne teknikken for å prøve å lure eller svindle deg.</translation>
 <translation id="2495083838625180221">JSON Parser</translation>
 <translation id="2495093607237746763">Hvis det er merket av for dette alternativet, lagrer Chromium en kopi av kortet ditt på denne enheten, slik at det går raskere å fylle ut skjemaer.</translation>
 <translation id="2498091847651709837">Skann nytt kort</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Tilkoblingen er kryptert ved hjelp av <ph name="CIPHER" />, og bruker <ph name="KX" /> som mekanisme for nøkkelutveksling.</translation>
 <translation id="2835170189407361413">Slett skjemaet</translation>
 <translation id="2847118875340931228">Åpne et inkognitovindu</translation>
+<translation id="2849445596171421624">Klikk på Fortsett for å gå til det vanligere nettstedet &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (konvolutt)</translation>
 <translation id="2851634818064021665">Du trenger tillatelse for å besøke dette nettstedet</translation>
 <translation id="2856444702002559011">Det kan hende at angripere prøver å stjele informasjonen din fra <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (for eksempel passord, meldinger og kredittkortinformasjon). <ph name="BEGIN_LEARN_MORE_LINK" />Finn ut mer<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Fjern kortet</translation>
 <translation id="4587425331216688090">Vil du fjerne adressen fra Chrome?</translation>
 <translation id="4592951414987517459">Tilkoblingen til <ph name="DOMAIN" /> er kryptert med en moderne chifferserie.</translation>
+<translation id="4594047029158047642">Linken du åpnet, fører til et uvanlig nettsted. Det kan hende linken prøver å forvirre deg.</translation>
 <translation id="4594403342090139922">&amp;Angre slettingen</translation>
 <translation id="4597348597567598915">Størrelse 8</translation>
 <translation id="4600854749408232102">C6/C5 (konvolutt)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Du kan miste tilgangen til organisasjonskontoen din eller bli utsatt for identitetstyveri. Chrome anbefaler at du endrer passordet ditt nå.</translation>
 <translation id="5171045022955879922">Søk, eller skriv inn en nettadresse</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Du pleier å besøke &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Nettadressen du nettopp prøvde å besøke, ligner på nettstedet i loggen din, men er ikke helt lik. Noen ganger bruker angripere denne teknikken for å prøve å lure eller svindle deg.</translation>
 <translation id="5172758083709347301">Datamaskin</translation>
 <translation id="5179510805599951267">Er ikke dette <ph name="ORIGINAL_LANGUAGE" />? Rapportér denne feilen</translation>
 <translation id="5190835502935405962">Bokmerkerad</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Av</translation>
 <translation id="5863847714970149516">Den neste siden kan prøve å belaste deg for penger</translation>
 <translation id="5866257070973731571">Legg til telefonnummer</translation>
+<translation id="5866898949289125849">Du ser på en side for utviklerverktøy</translation>
 <translation id="5869405914158311789">Dette nettstedet er ikke tilgjengelig</translation>
 <translation id="5869522115854928033">Lagrede passord</translation>
 <translation id="5887400589839399685">Kortet er lagret</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Innstillingsnivået støttes ikke.</translation>
 <translation id="6895330447102777224">Kortet ditt er bekreftet</translation>
 <translation id="6897140037006041989">Brukeragent</translation>
-<translation id="6903319715792422884">Bidra til å gjøre Safe Browsing bedre ved å sende noe <ph name="BEGIN_WHITEPAPER_LINK" />systeminformasjon og sideinnhold<ph name="END_WHITEPAPER_LINK" /> til Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Bruker:</translation>
 <translation id="6934672428414710184">Dette navnet er fra Google-kontoen din</translation>
 <translation id="6944692733090228304">Du har skrevet inn passordet ditt på et nettsted som ikke administreres av <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. For å beskytte kontoen din må du ikke bruke det samme passordet i andre apper eller på andre nettsteder.</translation>
@@ -1152,6 +1156,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">En privat forbindelse til <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> kan ikke opprettes fordi datoen og klokkeslettet (<ph name="DATE_AND_TIME" />) på datamaskinen er feil.</translation>
 <translation id="7260504762447901703">Opphev tilgangen</translation>
+<translation id="726226871651201355">Vil du gå videre til &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Godkjente forhåndsbetalte kort</translation>
 <translation id="7275334191706090484">Administrerte bokmerker</translation>
 <translation id="7298195798382681320">Anbefalt</translation>
@@ -1489,6 +1494,7 @@
 <translation id="9078964945751709336">Mer informasjon er nødvendig</translation>
 <translation id="9080712759204168376">Bestillingssammendrag</translation>
 <translation id="9089260154716455634">Regler for bruk utenom arbeidstiden:</translation>
+<translation id="9093075372111400787">Lukk avansert</translation>
 <translation id="9095388113577226029">Flere språk</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> bruker vanligvis kryptering for å beskytte informasjonen din. Da Chromium prøvde å koble til <ph name="SITE" /> denne gangen, sendte nettstedet tilbake uvanlig og feil legitimasjon. Dette kan skje hvis en angriper prøver å utgi seg for å være <ph name="SITE" />, eller hvis en Wi-Fi-påloggingsskjerm har avbrutt tilkoblingen. Informasjonen din er likevel sikker fordi Chromium stoppet tilkoblingen før det ble utvekslet noen data.</translation>
 <translation id="9106062320799175032">Legg til faktureringsadresse</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index b435570..1031a38 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Nazwy użytkownika z urządzenia i przeglądarki</translation>
 <translation id="2491120439723279231">Certyfikat serwera zawiera błędy.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Zazwyczaj wchodzisz na &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Strona, którą właśnie próbujesz otworzyć, jest podobna do strony z Twojej historii, ale nie jest dokładnie taka sama. W ten sposób ktoś może próbować Cię oszukać.</translation>
 <translation id="2495083838625180221">Parser JSON</translation>
 <translation id="2495093607237746763">Jeśli zaznaczysz tę opcję, Chromium zapisze kopię Twojej karty na tym urządzeniu, by umożliwić Ci szybsze wypełnianie formularzy.</translation>
 <translation id="2498091847651709837">Zeskanuj nową kartę</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Połączenie jest szyfrowane i uwierzytelniane algorytmem <ph name="CIPHER" />, a mechanizm wymiany kluczy to <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Wyczyść formularz</translation>
 <translation id="2847118875340931228">Otwórz okno incognito</translation>
+<translation id="2849445596171421624">Klikając Dalej, przejdziesz na bardziej popularną stronę &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (koperta)</translation>
 <translation id="2851634818064021665">Musisz mieć pozwolenie, by wejść na tę stronę</translation>
 <translation id="2856444702002559011">Osoby atakujące mogą próbować wykraść Twoje informacje ze strony <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (na przykład hasła, wiadomości lub dane kart kredytowych). <ph name="BEGIN_LEARN_MORE_LINK" />Więcej informacji<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Usuń kartę</translation>
 <translation id="4587425331216688090">Usunąć ten adres z Chrome?</translation>
 <translation id="4592951414987517459">Połączenie z <ph name="DOMAIN" /> jest szyfrowane przy użyciu nowoczesnego zestawu szyfrów.</translation>
+<translation id="4594047029158047642">Link, który otwierasz, prowadzi do mało popularnej strony. Może to być próba wprowadzenia Cię w błąd.</translation>
 <translation id="4594403342090139922">&amp;Cofnij usunięcie</translation>
 <translation id="4597348597567598915">Rozmiar 8</translation>
 <translation id="4600854749408232102">C6/C5 (koperta)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Możesz stracić dostęp do swojego konta organizacji lub paść ofiarą kradzieży tożsamości. Chrome zaleca natychmiastową zmianę hasła.</translation>
 <translation id="5171045022955879922">Wyszukaj lub wpisz URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Zazwyczaj wchodzisz na &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL, który właśnie próbujesz otworzyć, wygląda podobnie, ale nie jest taki sam jak URL z Twojej historii. W ten sposób ktoś może próbować Cię oszukać.</translation>
 <translation id="5172758083709347301">Komputer</translation>
 <translation id="5179510805599951267">Jeśli to nie jest język <ph name="ORIGINAL_LANGUAGE" />, zgłoś błąd</translation>
 <translation id="5190835502935405962">Pasek zakładek</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Wyłączone</translation>
 <translation id="5863847714970149516">Otwierana strona może próbować obciążyć Cię płatnością</translation>
 <translation id="5866257070973731571">Dodaj numer telefonu</translation>
+<translation id="5866898949289125849">To jest strona z narzędziami dla programistów</translation>
 <translation id="5869405914158311789">Ta witryna jest nieosiągalna</translation>
 <translation id="5869522115854928033">Zapisane hasła</translation>
 <translation id="5887400589839399685">Zapisano kartę</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Ten poziom zasad nie jest obsługiwany.</translation>
 <translation id="6895330447102777224">Karta została potwierdzona</translation>
 <translation id="6897140037006041989">Klient</translation>
-<translation id="6903319715792422884">Pomóż w ulepszaniu Bezpiecznego przeglądania, wysyłając do Google pewne <ph name="BEGIN_WHITEPAPER_LINK" />informacje o systemie i część zawartości stron<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Użytkownik:</translation>
 <translation id="6934672428414710184">To imię i nazwisko pochodzi z Twojego konta Google</translation>
 <translation id="6944692733090228304">Wpisałeś swoje hasło na stronie, którą nie zarządza <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Aby chronić konto, nie używaj swojego hasła w innych aplikacjach ani witrynach.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Nie można nawiązać prywatnego połączenia z <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, ponieważ data i godzina (<ph name="DATE_AND_TIME" />) ustawione na komputerze są nieprawidłowe.</translation>
 <translation id="7260504762447901703">Anuluj dostęp</translation>
+<translation id="726226871651201355">Przejść na stronę &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Akceptowane karty przedpłacone</translation>
 <translation id="7275334191706090484">Zakładki zarządzane</translation>
 <translation id="7298195798382681320">Zalecane</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">Potrzebujemy więcej informacji</translation>
 <translation id="9080712759204168376">Podsumowanie zamówienia</translation>
 <translation id="9089260154716455634">Zasada „po godzinach”:</translation>
+<translation id="9093075372111400787">Ukryj szczegóły</translation>
 <translation id="9095388113577226029">Więcej języków…</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> zazwyczaj używa szyfrowania do ochrony Twoich informacji. Gdy tym razem przeglądarka Chromium próbowała połączyć się ze stroną <ph name="SITE" />, odesłała ona nietypowe i nieprawidłowe dane logowania. Może się tak zdarzyć, gdy pod stronę <ph name="SITE" /> podszywa się osoba atakująca albo gdy ekran logowania do sieci Wi-Fi przerwie połączenie. Twoje informacje są nadal bezpieczne, bo połączenie w Chromium zakończyło się przed wymianą jakichkolwiek danych.</translation>
 <translation id="9106062320799175032">Dodaj adres rozliczeniowy</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 3ec1347d..78e8139 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Nomes de usuário para seu dispositivo e navegador</translation>
 <translation id="2491120439723279231">O certificado do servidor contém erros.</translation>
 <translation id="2493640343870896922">Letter Plus</translation>
+<translation id="2494497504885199552">Normalmente, você visita &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. O site que você tentou acessar é semelhante a esse, mas não corresponde exatamente ao site do seu histórico. Às vezes, essa técnica é usada por invasores para enganar ou confundir você.</translation>
 <translation id="2495083838625180221">Analisador JSON</translation>
 <translation id="2495093607237746763">Se esta opção for selecionada, o Chromium armazenará uma cópia do seu cartão neste dispositivo para preencher de formulários mais rapidamente.</translation>
 <translation id="2498091847651709837">Digitalizar novo cartão</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">A conexão foi criptografada e autenticada utilizando <ph name="CIPHER" /> e usa <ph name="KX" /> como o mecanismo de troca de chave.</translation>
 <translation id="2835170189407361413">Limpar formulário</translation>
 <translation id="2847118875340931228">Abrir janela anônima</translation>
+<translation id="2849445596171421624">Clicar em "Continuar" levará você ao site mais comum &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Convite (Envelope)</translation>
 <translation id="2851634818064021665">Você precisa de permissão para visitar este site</translation>
 <translation id="2856444702002559011">Invasores podem estar tentando roubar suas informações de <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (por exemplo, senhas, mensagens ou cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Remover cartão</translation>
 <translation id="4587425331216688090">Remover endereço do Chrome?</translation>
 <translation id="4592951414987517459">Sua conexão com <ph name="DOMAIN" /> foi criptografada usando um pacote de criptografia moderno.</translation>
+<translation id="4594047029158047642">O link aberto leva a um site incomum. Pode ser uma tentativa de confundir você.</translation>
 <translation id="4594403342090139922">&amp;Desfazer exclusão</translation>
 <translation id="4597348597567598915">Tamanho 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Você pode perder o acesso à conta da sua organização ou sofrer roubo de identidade. O Chrome recomenda que você altere sua senha agora.</translation>
 <translation id="5171045022955879922">Pesquisar ou digitar URL</translation>
 <translation id="5171689220826475070">Fanfold European</translation>
+<translation id="5172068981283436906">Normalmente, você visita &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. O URL que você tentou acessar é semelhante a esse, mas não corresponde exatamente ao site do seu histórico. Às vezes, essa técnica é usada por invasores para enganar ou confundir você.</translation>
 <translation id="5172758083709347301">Máquina</translation>
 <translation id="5179510805599951267">Não está em <ph name="ORIGINAL_LANGUAGE" />? Informe este erro</translation>
 <translation id="5190835502935405962">Barra de favoritos</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Desativado</translation>
 <translation id="5863847714970149516">A página que você está prestes a acessar pode tentar cobrar pagamentos</translation>
 <translation id="5866257070973731571">Adicione um Número de Telefone</translation>
+<translation id="5866898949289125849">Você está vendo uma página de ferramentas para desenvolvedores</translation>
 <translation id="5869405914158311789">Não é possível acessar esse site</translation>
 <translation id="5869522115854928033">Senhas salvas</translation>
 <translation id="5887400589839399685">Cartão salvo</translation>
@@ -1025,7 +1030,7 @@
 <translation id="650855688985305916">Sim, armazenar</translation>
 <translation id="6508722015517270189">Reiniciar o Chrome</translation>
 <translation id="6517596291481585650">Aviso: esta política não foi mesclada como uma lista conforme especificado porque ela não é uma lista.</translation>
-<translation id="6521745193039995384">Não ativa</translation>
+<translation id="6521745193039995384">não ativa</translation>
 <translation id="6529602333819889595">&amp;Refazer excluir</translation>
 <translation id="6534179046333460208">Sugestões da Web física</translation>
 <translation id="6545864417968258051">Verificação de Bluetooth</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">O nível da política não é suportado.</translation>
 <translation id="6895330447102777224">Seu cartão foi confirmado</translation>
 <translation id="6897140037006041989">Agente do usuário</translation>
-<translation id="6903319715792422884">Ajudar a melhorar o recurso "Navegação segura" enviando algumas <ph name="BEGIN_WHITEPAPER_LINK" />informações do sistema e conteúdo da página<ph name="END_WHITEPAPER_LINK" /> para o Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Usuário:</translation>
 <translation id="6934672428414710184">Este nome é da sua Conta do Google</translation>
 <translation id="6944692733090228304">Você inseriu sua senha em um site que não é gerenciado por <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Para proteger sua conta, não reutilize sua senha em outros apps e sites.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Não é possível estabelecer uma conexão privada com <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, porque a data e a hora do seu computador (<ph name="DATE_AND_TIME" />) estão incorretas.</translation>
 <translation id="7260504762447901703">Revogar acesso</translation>
+<translation id="726226871651201355">Ir para &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Cartões pré-pagos aceitos</translation>
 <translation id="7275334191706090484">Favoritos gerenciados</translation>
 <translation id="7298195798382681320">Recomendada</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">São necessárias mais informações</translation>
 <translation id="9080712759204168376">Resumo do pedido</translation>
 <translation id="9089260154716455634">Política de horas de inatividade:</translation>
+<translation id="9093075372111400787">Fechar detalhes</translation>
 <translation id="9095388113577226029">Mais idiomas…</translation>
 <translation id="9103872766612412690">O site <ph name="SITE" /> geralmente usa criptografia para proteger suas informações. Quando o Chromium tentou se conectar a <ph name="SITE" /> dessa vez, o website retornou credenciais
 incomuns e incorretas. Isso pode acontecer quando um invasor está fingindo ser <ph name="SITE" /> ou quando uma tela de login por Wi-Fi interrompeu a conexão. Suas informações ainda estão protegidas, porque o Chromium interrompeu a conexão antes que os dados fossem trocados.</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index b841ad8..686574a0 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Os nomes de utilizador para o dispositivo e o navegador.</translation>
 <translation id="2491120439723279231">O certificado do servidor contém erros.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Normalmente, visita &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. O site que acabou de tentar visitar parece semelhante, mas não corresponde exatamente, ao site do histórico. Por vezes, os atacantes utilizam esta técnica para enganar o utilizador.</translation>
 <translation id="2495083838625180221">Analisador JSON</translation>
 <translation id="2495093607237746763">Se marcada, o Chromium armazena uma cópia do seu cartão neste dispositivo para preencher formulários mais rapidamente.</translation>
 <translation id="2498091847651709837">Digitalizar novo cartão</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">A ligação é encriptada e autenticada com <ph name="CIPHER" /> e utiliza <ph name="KX" /> como mecanismo de troca de chaves.</translation>
 <translation id="2835170189407361413">Limpar formulário</translation>
 <translation id="2847118875340931228">Abrir janela de navegação anónima</translation>
+<translation id="2849445596171421624">Se clicar em Continuar, será redirecionado para o site mais comum &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">Necessita de autorização para aceder a este site</translation>
 <translation id="2856444702002559011">Os atacantes poderão estar a tentar roubar as suas informações de <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (por exemplo, palavras-passe, mensagens ou cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Remover cartão</translation>
 <translation id="4587425331216688090">Pretende remover o endereço do Chrome?</translation>
 <translation id="4592951414987517459">A sua ligação a <ph name="DOMAIN" /> está encriptada através de um conjunto de cifras moderno.</translation>
+<translation id="4594047029158047642">O link que abriu aponta para um site invulgar. Poderá estar a tentar confundi-lo.</translation>
 <translation id="4594403342090139922">&amp;Anular eliminação</translation>
 <translation id="4597348597567598915">Tamanho 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Pode perder o acesso à conta da sua entidade ou ser vítima de roubo de identidade. O Chrome recomenda a alteração da palavra-passe agora.</translation>
 <translation id="5171045022955879922">Pesquise ou escreva URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Normalmente, visita &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. O URL que acabou de tentar visitar parece semelhante, mas não corresponde exatamente, ao site do histórico. Por vezes, os atacantes utilizam esta técnica para enganar o utilizador.</translation>
 <translation id="5172758083709347301">Equipamento</translation>
 <translation id="5179510805599951267">Não está em <ph name="ORIGINAL_LANGUAGE" />? Comunicar este erro</translation>
 <translation id="5190835502935405962">Barra de marcadores</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Desativado</translation>
 <translation id="5863847714970149516">A próxima página pode tentar cobrar-lhe dinheiro</translation>
 <translation id="5866257070973731571">Adicionar número de telefone</translation>
+<translation id="5866898949289125849">Está a visualizar uma página de ferramentas para programadores</translation>
 <translation id="5869405914158311789">Não é possível aceder a este site</translation>
 <translation id="5869522115854928033">Palavras-passe guardadas</translation>
 <translation id="5887400589839399685">Cartão guardado</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">O nível da política não é suportado.</translation>
 <translation id="6895330447102777224">O seu cartão foi confirmado</translation>
 <translation id="6897140037006041989">Agente do utilizador</translation>
-<translation id="6903319715792422884">Ajude a melhorar a Navegação segura ao enviar algumas <ph name="BEGIN_WHITEPAPER_LINK" />informações do sistema e conteúdo de páginas<ph name="END_WHITEPAPER_LINK" /> para a Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Utilizador:</translation>
 <translation id="6934672428414710184">Este nome é proveniente da sua Conta Google.</translation>
 <translation id="6944692733090228304">Introduziu a palavra-passe num site que não é gerido pela <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Para proteger a conta, não reutilize a sua palavra-passe noutras aplicações e sites.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Não é possível estabelecer uma ligação privada a <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, porque a data e a hora do computador (<ph name="DATE_AND_TIME" />) estão incorretas.</translation>
 <translation id="7260504762447901703">Revogar acesso</translation>
+<translation id="726226871651201355">Pretende continuar para &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Cartões pré-pagos aceites</translation>
 <translation id="7275334191706090484">Marcadores Geridos</translation>
 <translation id="7298195798382681320">Recomendado</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">São necessárias mais informações</translation>
 <translation id="9080712759204168376">Resumo da encomenda</translation>
 <translation id="9089260154716455634">Política para fora do horário de funcionamento:</translation>
+<translation id="9093075372111400787">Fechar avançadas</translation>
 <translation id="9095388113577226029">Mais idiomas…</translation>
 <translation id="9103872766612412690">Normalmente, o site <ph name="SITE" /> utiliza a encriptação para proteger as suas informações. Quando o Chromium tentou estabelecer ligação a <ph name="SITE" /> desta vez, o Website devolveu credenciais invulgares e incorretas. Isto pode acontecer quando um utilizador mal intencionado tenta simular ser <ph name="SITE" /> ou quando um ecrã de início de sessão Wi-Fi interrompe a ligação. As suas informações continuam seguras porque o Chromium interrompeu a ligação antes de qualquer troca de dados.</translation>
 <translation id="9106062320799175032">Adicionar endereço de faturação</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 9022a7e..3fa4673 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Nume de utilizator pentru dispozitivul și browserul tău</translation>
 <translation id="2491120439723279231">Certificatul serverului conține erori.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">De obicei, accesezi &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Site-ul pe care tocmai ai încercat să-l accesezi este similar, dar nu corespunde exact, cu site-ul din istoric. Uneori, atacatorii folosesc această tehnică pentru păcăleli sau escrocherii.</translation>
 <translation id="2495083838625180221">Analizor JSON</translation>
 <translation id="2495093607237746763">Dacă opțiunea este bifată, Chromium va stoca o copie a cardului pe dispozitiv pentru a completa formularul mai rapid.</translation>
 <translation id="2498091847651709837">Scanează un card nou</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Conexiunea este criptată și autentificată utilizând <ph name="CIPHER" /> și folosește <ph name="KX" /> ca mecanism de schimb al cheii.</translation>
 <translation id="2835170189407361413">Golește formularul</translation>
 <translation id="2847118875340931228">Deschide o fereastră incognito</translation>
+<translation id="2849445596171421624">Dacă dai clic pe Continuă, vei fi direcționat(ă) la site-ul accesat mai frecvent, &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Plic)</translation>
 <translation id="2851634818064021665">Ai nevoie de permisiune ca să accesezi acest site</translation>
 <translation id="2856444702002559011">Atacatorii pot încerca să îți fure informațiile de pe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (de exemplu, parole, mesaje sau date despre cardurile de credit). <ph name="BEGIN_LEARN_MORE_LINK" />Află mai multe<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Elimină cardul</translation>
 <translation id="4587425331216688090">Elimini adresa din Chrome?</translation>
 <translation id="4592951414987517459">Conexiunea la <ph name="DOMAIN" /> este criptată folosind o suită de codificare modernă.</translation>
+<translation id="4594047029158047642">Linkul pe care l-ai deschis trimite către un site pe care nu îl accesezi de obicei. Poate încerca să te inducă în eroare.</translation>
 <translation id="4594403342090139922">&amp;Anulați ștergerea</translation>
 <translation id="4597348597567598915">Mărimea 8</translation>
 <translation id="4600854749408232102">C6/C5 (Plic)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Este posibil să pierzi accesul la contul organizației sau să fii victima unui furt de identitate. Chrome îți recomandă să îți schimbi acum parola.</translation>
 <translation id="5171045022955879922">Caută sau introdu adresa URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">De obicei, accesezi &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Adresa URL pe care tocmai ai încercat să o accesezi este similară, dar nu corespunde exact, cu site-ul din istoric. Uneori, atacatorii folosesc această tehnică pentru păcăleli sau escrocherii.</translation>
 <translation id="5172758083709347301">Computer</translation>
 <translation id="5179510805599951267">Nu este în <ph name="ORIGINAL_LANGUAGE" />? Semnalează această eroare.</translation>
 <translation id="5190835502935405962">Bară de marcaje</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Dezactivat</translation>
 <translation id="5863847714970149516">Următoarea pagină poate să genereze costuri</translation>
 <translation id="5866257070973731571">Adaugă un număr de telefon</translation>
+<translation id="5866898949289125849">Se afișează o pagină cu instrumente pentru dezvoltatori</translation>
 <translation id="5869405914158311789">Acest site nu poate fi accesat</translation>
 <translation id="5869522115854928033">Parole salvate</translation>
 <translation id="5887400589839399685">Cardul a fost salvat</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Nivelul politicii nu este acceptat.</translation>
 <translation id="6895330447102777224">Cardul tău este confirmat</translation>
 <translation id="6897140037006041989">User Agent</translation>
-<translation id="6903319715792422884">Ne poți ajuta să îmbunătățim Navigarea sigură dacă trimiți la Google anumite <ph name="BEGIN_WHITEPAPER_LINK" />informații despre sistem și conținutul paginii<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Utilizator:</translation>
 <translation id="6934672428414710184">Acest nume provine din Contul tău Google</translation>
 <translation id="6944692733090228304">Ai introdus parola pe un site care nu este gestionat de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Pentru a proteja contul, nu folosi aceeași parolă pentru alte aplicații și site-uri.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">O conexiune privată la <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nu poate fi stabilită, deoarece data și ora computerului (<ph name="DATE_AND_TIME" />) sunt incorecte.</translation>
 <translation id="7260504762447901703">Revocă accesul</translation>
+<translation id="726226871651201355">Accesezi &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Carduri preplătite acceptate</translation>
 <translation id="7275334191706090484">Marcaje gestionate</translation>
 <translation id="7298195798382681320">Recomandate</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">Sunt necesare mai multe informații</translation>
 <translation id="9080712759204168376">Rezumatul comenzii</translation>
 <translation id="9089260154716455634">Politica privind intervalele de inactivitate:</translation>
+<translation id="9093075372111400787">Închide opțiunile avansate</translation>
 <translation id="9095388113577226029">Mai multe limbi...</translation>
 <translation id="9103872766612412690">Site-ul <ph name="SITE" /> folosește în mod obișnuit criptarea pentru a-ți proteja informațiile. Când Chromium a încercat să se conecteze la <ph name="SITE" /> de această dată, site-ul a returnat date de conectare neobișnuite și incorecte. Acest lucru s-a întâmplat fie pentru că un atacator încearcă să falsifice site-ul <ph name="SITE" />, fie pentru că un ecran de conectare Wi-Fi a întrerupt conexiunea. Securitatea informațiilor tale nu a fost afectată, deoarece Chromium a oprit conexiunea înainte ca datele să fie transferate.</translation>
 <translation id="9106062320799175032">Adaugă o adresă de facturare</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index b204c3e2..141b029 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Имена пользователей для вашего устройства и браузера</translation>
 <translation id="2491120439723279231">Сертификат сервера содержит ошибки.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Обычно вы посещаете сайт &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Сейчас вы пытаетесь открыть другой сайт с очень похожим адресом. Злоумышленники могут использовать такие адреса, которые незначительно отличаются от настоящих, чтобы вводить пользователей в заблуждение и красть их данные.</translation>
 <translation id="2495083838625180221">Синтаксический анализатор JSON</translation>
 <translation id="2495093607237746763">Если флажок установлен, Chromium будет хранить на этом устройстве данные карты для быстрого заполнения форм.</translation>
 <translation id="2498091847651709837">Сканировать новую карту</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">Соединение зашифровано и проверено с помощью <ph name="CIPHER" />. В качестве механизма обмена ключами используется <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Очистить форму</translation>
 <translation id="2847118875340931228">Открыть окно в режиме инкогнито</translation>
+<translation id="2849445596171421624">Нажав "Продолжить", вы перейдете на тот сайт, который посещаете обычно: &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (конверт)</translation>
 <translation id="2851634818064021665">Для доступа к этой странице требуется разрешение.</translation>
 <translation id="2856444702002559011">Злоумышленники могут пытаться похитить ваши данные с сайта <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (например, пароли, сообщения или номера банковских карт). <ph name="BEGIN_LEARN_MORE_LINK" />Подробнее…<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -676,6 +678,7 @@
 <translation id="4582204425268416675">Удалить карту</translation>
 <translation id="4587425331216688090">Удалить адрес из Chrome?</translation>
 <translation id="4592951414987517459">Соединение с <ph name="DOMAIN" /> зашифровано с помощью современных наборов шифров.</translation>
+<translation id="4594047029158047642">Ссылка ведет не на тот сайт, который вы обычно посещаете. Возможно, вас пытаются ввести в заблуждение.</translation>
 <translation id="4594403342090139922">&amp;Отменить удаление</translation>
 <translation id="4597348597567598915">Размер: 8</translation>
 <translation id="4600854749408232102">C6/C5 (конверт)</translation>
@@ -778,6 +781,7 @@
 <translation id="5169827969064885044">Возможно, кто-то пытается получить доступ к вашим личным данным или корпоративному аккаунту. Рекомендуем немедленно сменить пароль.</translation>
 <translation id="5171045022955879922">Введите запрос или URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Обычно вы посещаете сайт &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Сейчас вы пытаетесь открыть другой сайт с очень похожим URL. Злоумышленники могут использовать такие адреса, которые незначительно отличаются от настоящих, чтобы вводить пользователей в заблуждение и красть их данные.</translation>
 <translation id="5172758083709347301">Локальный компьютер</translation>
 <translation id="5179510805599951267">Это не <ph name="ORIGINAL_LANGUAGE" />? Сообщите об ошибке</translation>
 <translation id="5190835502935405962">Панель закладок</translation>
@@ -906,6 +910,7 @@
 <translation id="5860033963881614850">ВЫКЛ</translation>
 <translation id="5863847714970149516">При открытии этой страницы с вашего счета могут быть списаны средства</translation>
 <translation id="5866257070973731571">Добавьте номер телефона</translation>
+<translation id="5866898949289125849">Вы просматриваете страницу инструментов разработчика</translation>
 <translation id="5869405914158311789">Не удается получить доступ к сайту</translation>
 <translation id="5869522115854928033">Сайты с сохраненными паролями</translation>
 <translation id="5887400589839399685">Карта сохранена</translation>
@@ -1074,7 +1079,6 @@
 <translation id="6891596781022320156">Значение правила не поддерживается.</translation>
 <translation id="6895330447102777224">Ваша карта подтверждена</translation>
 <translation id="6897140037006041989">User Agent</translation>
-<translation id="6903319715792422884">Чтобы улучшить режим Безопасного просмотра, вы можете <ph name="BEGIN_WHITEPAPER_LINK" />отправлять системную информацию и содержимое страниц<ph name="END_WHITEPAPER_LINK" /> в Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Пользователь:</translation>
 <translation id="6934672428414710184">Это имя из вашего аккаунта Google</translation>
 <translation id="6944692733090228304">Вы ввели пароль на сайте, который не находится под управлением организации <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Чтобы защитить свой аккаунт, не используйте этот пароль для других приложений и сайтов.</translation>
@@ -1141,6 +1145,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Не удалось установить защищенное соединение с доменом <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> из-за неверных настроек системных часов и календаря (<ph name="DATE_AND_TIME" />).</translation>
 <translation id="7260504762447901703">Запретить доступ</translation>
+<translation id="726226871651201355">Перейти на сайт &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Карты предоплаты, которые принимаются к оплате</translation>
 <translation id="7275334191706090484">Управляемые закладки</translation>
 <translation id="7298195798382681320">Рекомендованные</translation>
@@ -1478,6 +1483,7 @@
 <translation id="9078964945751709336">Информации недостаточно</translation>
 <translation id="9080712759204168376">Информация о заказе</translation>
 <translation id="9089260154716455634">Время, когда правила не действуют:</translation>
+<translation id="9093075372111400787">Скрыть подробности</translation>
 <translation id="9095388113577226029">Другие языки</translation>
 <translation id="9103872766612412690">На сайте <ph name="SITE" /> для защиты ваших данных обычно используется шифрование. Однако учетные данные, которые мы получили от сайта <ph name="SITE" /> сейчас, отличаются от тех, которые он отправляет обычно. Вероятно, вредоносный сайт пытается выдать себя за <ph name="SITE" />, либо страница подключения к сети Wi-Fi прервала соединение. Ваша информация по-прежнему в безопасности, так как браузер Chromium разорвал соединение до того, как произошел обмен данными.</translation>
 <translation id="9106062320799175032">Добавьте платежный адрес</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 3fe1d86..b1c2544 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">Používateľské mená pre vaše zariadenie a prehliadač</translation>
 <translation id="2491120439723279231">Certifikát servera obsahuje chyby.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Obvykle navštevujete web &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Zdá sa, že web, na ktorý ste sa teraz pokúsili prejsť, vyzerá rovnako ako web z vašej histórie, ale nejde o presnú zhodu. Útočníci sa vás niekedy pomocou tejto techniky pokúšajú oklamať alebo podviesť.</translation>
 <translation id="2495083838625180221">JSON Parser</translation>
 <translation id="2495093607237746763">Ak je toto nastavenie začiarknuté, Chromium uloží na tomto zariadení kópiu karty, aby ste mohli rýchlejšie vypĺňať formuláre.</translation>
 <translation id="2498091847651709837">Naskenovať novú kartu</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">Pripojenie je šifrované pomocou štandardu <ph name="CIPHER" /> a používa mechanizmus výmeny kľúčov <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Vymazať formulár</translation>
 <translation id="2847118875340931228">Otvoriť okno inkognito</translation>
+<translation id="2849445596171421624">Kliknutím na Pokračovať prejdete na bežnejšie navštevovaný web &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (obálka)</translation>
 <translation id="2851634818064021665">Na návštevu tohto webu potrebujete povolenie</translation>
 <translation id="2856444702002559011">Útočníci sa môžu pokúsiť ukradnúť vaše informácie z webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (napríklad heslá, správy alebo kreditné karty). <ph name="BEGIN_LEARN_MORE_LINK" />Ďalšie informácie<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -673,6 +675,7 @@
 <translation id="4582204425268416675">Odstrániť kartu</translation>
 <translation id="4587425331216688090">Chcete adresu odstrániť z prehliadača Chrome?</translation>
 <translation id="4592951414987517459">Vaše pripojenie k doméne <ph name="DOMAIN" /> je šifrované pomocou modernej šifrovacej súpravy.</translation>
+<translation id="4594047029158047642">Odkaz, ktorý ste otvorili, vedie na web, ktorý zvyčajne nenavštevujete. Môže sa vás pokúšať zmiasť.</translation>
 <translation id="4594403342090139922">&amp;Vrátiť späť odstránenie</translation>
 <translation id="4597348597567598915">Veľkosť 8</translation>
 <translation id="4600854749408232102">C6/C5 (obálka)</translation>
@@ -775,6 +778,7 @@
 <translation id="5169827969064885044">Môžete stratiť prístup do účtu svojej organizácie alebo vám niekto môže ukradnúť totožnosť. Chrome odporúča, aby ste si ihneď zmenili heslo.</translation>
 <translation id="5171045022955879922">Vyhľadajte alebo zadajte webovú adresu</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Obvykle navštevujete web &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Zdá sa, že webová adresa, na ktorú ste sa teraz pokúsili prejsť, vyzerá rovnako ako web z vašej histórie, ale nejde o presnú zhodu. Útočníci sa vás niekedy pomocou tejto techniky pokúšajú oklamať alebo podviesť.</translation>
 <translation id="5172758083709347301">Počítač</translation>
 <translation id="5179510805599951267">Text sa nezobrazil v jazyku <ph name="ORIGINAL_LANGUAGE" />? Nahláste túto chybu</translation>
 <translation id="5190835502935405962">Panel so záložkami</translation>
@@ -903,6 +907,7 @@
 <translation id="5860033963881614850">Vypnuté</translation>
 <translation id="5863847714970149516">Stránka, na ktorú sa chystáte prejsť, vám môže účtovať poplatky</translation>
 <translation id="5866257070973731571">Pridanie telefónneho čísla</translation>
+<translation id="5866898949289125849">Prezeráte si stránku s nástrojmi pre vývojárov</translation>
 <translation id="5869405914158311789">Tento web je nedostupný</translation>
 <translation id="5869522115854928033">Uložené heslá</translation>
 <translation id="5887400589839399685">Karta bola uložená</translation>
@@ -1070,7 +1075,6 @@
 <translation id="6891596781022320156">Úroveň pravidla nie je podporovaná.</translation>
 <translation id="6895330447102777224">Vaša karta je overená</translation>
 <translation id="6897140037006041989">Používateľský agent</translation>
-<translation id="6903319715792422884">Pomáhať zlepšovať Bezpečné prehliadanie tak, že sa budú do Googlu odosielať niektoré <ph name="BEGIN_WHITEPAPER_LINK" />informácie o systéme a obsah stránok<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Používateľ:</translation>
 <translation id="6934672428414710184">Meno pochádza z vášho účtu Google</translation>
 <translation id="6944692733090228304">Zadali ste heslo na webe, ktorý nie je spravovaný organizáciou <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Ak chcete, aby bol váš účet chránený, nepoužívajte jeho heslo pre iné aplikácie a weby.</translation>
@@ -1137,6 +1141,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Súkromné pripojenie k doméne <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> sa nedá nadviazať, pretože dátum a čas (<ph name="DATE_AND_TIME" />) vášho počítača sú nesprávne.</translation>
 <translation id="7260504762447901703">Odvolať prístup</translation>
+<translation id="726226871651201355">Chcete pokračovať na web &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Akceptované predplatené karty</translation>
 <translation id="7275334191706090484">Spravované záložky</translation>
 <translation id="7298195798382681320">Odporúčané</translation>
@@ -1475,6 +1480,7 @@
 <translation id="9078964945751709336">Treba zadať ďalšie informácie</translation>
 <translation id="9080712759204168376">Súhrn objednávky</translation>
 <translation id="9089260154716455634">Pravidlo intervalov nečinnosti:</translation>
+<translation id="9093075372111400787">Zavrieť Rozšírené</translation>
 <translation id="9095388113577226029">Ďalšie jazyky…</translation>
 <translation id="9103872766612412690">Web <ph name="SITE" /> zvyčajne chráni vaše informácie pomocou šifrovania. Keď sa prehliadač Chromium tentokrát pokúsil pripojiť k webu <ph name="SITE" />, odoslal späť nezvyčajné a nesprávne poverenia. Môže sa to stať vtedy, keď sa za web <ph name="SITE" /> snaží vydávať útočník alebo keď pripojenie preruší prihlasovacia obrazovka siete Wi‑Fi. Vaše informácie sú stále zabezpečené, pretože prehliadač Chromium zastavil pripojenie ešte pred výmenou dát.</translation>
 <translation id="9106062320799175032">Pridanie fakturačnej adresy</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index d65005500..8675ff1 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Uporabniška imena za napravo in brskalnik</translation>
 <translation id="2491120439723279231">V potrdilu strežnika so napake.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Običajno obiščete &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Spletno mesto, ki ste ga pravkar poskusili obiskati, je videti podobno spletnemu mestu iz zgodovine, vendar se z njim ne ujema popolnoma. Napadalci včasih uporabijo to tehniko, da vas zavedejo ali ogoljufajo.</translation>
 <translation id="2495083838625180221">Razčlenjevalnik za JSON</translation>
 <translation id="2495093607237746763">Če je izbrana ta možnost, bo Chromium shranil kopijo kartice v tej napravi za hitrejše izpolnjevanje obrazcev.</translation>
 <translation id="2498091847651709837">Optično branje nove kartice</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Za šifriranje in preverjanje pristnosti povezave se uporablja <ph name="CIPHER" />, kot mehanizem za izmenjavo ključev pa <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Počisti obrazec</translation>
 <translation id="2847118875340931228">Odpri novo okno brez beleženja zgodovine</translation>
+<translation id="2849445596171421624">Če kliknete »Naprej«, se bo odprlo običajnejše spletno mesto &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">Za obisk tega spletnega mesta potrebujete dovoljenje</translation>
 <translation id="2856444702002559011">Morda poskušajo napadalci ukrasti vaše podatke s spletnega mesta <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (na primer gesla, sporočila ali podatke kreditnih kartic). <ph name="BEGIN_LEARN_MORE_LINK" />Več o tem<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Odstranitev kartice</translation>
 <translation id="4587425331216688090">Želite odstraniti naslov iz Chroma?</translation>
 <translation id="4592951414987517459">Povezava z domeno <ph name="DOMAIN" /> je šifrirana s sodobno šifrirno zbirko.</translation>
+<translation id="4594047029158047642">Povezava, ki ste jo odprli, vodi na neobičajno spletno mesto. Morda vas poskuša zmesti.</translation>
 <translation id="4594403342090139922">&amp;Razveljavi izbris</translation>
 <translation id="4597348597567598915">Velikost 8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Izgubite lahko dostop do računa za organizacijo ali postanete žrtev kraje identitete. Chrome priporoča, da spremenite geslo.</translation>
 <translation id="5171045022955879922">Poiščite ali vnesite URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Običajno obiščete &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL, ki ste ga pravkar poskusili obiskati, je videti podoben URL-ju iz zgodovine, vendar se z njim ne ujema popolnoma. Napadalci včasih uporabijo to tehniko, da vas zavedejo ali ogoljufajo.</translation>
 <translation id="5172758083709347301">Računalnik</translation>
 <translation id="5179510805599951267">Ni v <ph name="ORIGINAL_LANGUAGE" />? Obvestite nas o tej napaki</translation>
 <translation id="5190835502935405962">Vrstica z zaznamki</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Izklopljeno</translation>
 <translation id="5863847714970149516">Stran, ki se bo odprla, vam bo morda poskusila kaj zaračunati</translation>
 <translation id="5866257070973731571">Dodajanje telefonske številke</translation>
+<translation id="5866898949289125849">Ogledujete si stran z orodji za razvijalce</translation>
 <translation id="5869405914158311789">Tega spletnega mesta ni mogoče doseči</translation>
 <translation id="5869522115854928033">Shranjena gesla</translation>
 <translation id="5887400589839399685">Kartica je shranjena</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Raven pravilnika ni podprta.</translation>
 <translation id="6895330447102777224">Kartica je potrjena.</translation>
 <translation id="6897140037006041989">Uporabnikov posrednik</translation>
-<translation id="6903319715792422884">S pošiljanjem nekaterih <ph name="BEGIN_WHITEPAPER_LINK" />informacij o sistemu in vsebine strani<ph name="END_WHITEPAPER_LINK" /> Googlu lahko pomagate izboljšati Varno brskanje. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Uporabnik:</translation>
 <translation id="6934672428414710184">To ime je iz vašega računa za Google</translation>
 <translation id="6944692733090228304">Vnesli ste geslo na spletnem mestu, ki ga ne upravlja: <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Zaradi zaščite računa gesla ne uporabljajte za druge aplikacije in spletna mesta.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Zasebne povezave z domeno <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ni mogoče vzpostaviti, ker sta datum in ura (<ph name="DATE_AND_TIME" />) v računalniku nepravilna.</translation>
 <translation id="7260504762447901703">Ukinitev dostopa</translation>
+<translation id="726226871651201355">Želite nadaljevati na &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Sprejete predplačniške kartice</translation>
 <translation id="7275334191706090484">Upravljani zaznamki</translation>
 <translation id="7298195798382681320">Priporočeni</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">Vnesti morate več podatkov</translation>
 <translation id="9080712759204168376">Povzetek naročila</translation>
 <translation id="9089260154716455634">Pravilnik za nedejavnost:</translation>
+<translation id="9093075372111400787">Zapri dodatne podrobnosti</translation>
 <translation id="9095388113577226029">Več jezikov …</translation>
 <translation id="9103872766612412690">Spletno mesto <ph name="SITE" /> za zaščito vaših podatkov običajno uporablja šifriranje. Ko se je Chromium tokrat poskusil povezati s spletnim mestom <ph name="SITE" />, je to vrnilo nenavadne in nepravilne poverilnice. Do tega lahko pride, če se napadalec lažno predstavlja za spletno mesto <ph name="SITE" /> ali če je povezavo prekinil zaslon za prijavo v omrežje Wi-Fi. Vaši podatki so še vedno varni, saj je Chromium pred izmenjavo podatkov prekinil povezavo.</translation>
 <translation id="9106062320799175032">Dodajanje naslova za izstavitev računa</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index eaee25f..b436193 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Корисничка имена за уређај и прегледач</translation>
 <translation id="2491120439723279231">Сертификат сервера садржи грешке.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Обично посећујете &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Сајт који сте управо пробали да посетите делује слично, али се не подудара у потпуности са сајтом из ваше историје. Нападачи понекад користе ову технику да би вас преварили.</translation>
 <translation id="2495083838625180221">Рашчлањивач JSON датотека</translation>
 <translation id="2495093607237746763">Ако означите ову опцију, Chromium ће складиштити копију картице на овом уређају ради бржег попуњавања образаца.</translation>
 <translation id="2498091847651709837">Скенирајте нову картицу</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Веза је шифрована и њена аутентичност је потврђена помоћу <ph name="CIPHER" /> и користи <ph name="KX" /> као механизам за размену шифара.</translation>
 <translation id="2835170189407361413">Обриши образац</translation>
 <translation id="2847118875340931228">Отвори прозор без архивирања</translation>
+<translation id="2849445596171421624">Ако кликнете на Настави, то ће вас преусмерити на сајт &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; који чешће посећујете.</translation>
 <translation id="2850739647070081192">Invite (коверат)</translation>
 <translation id="2851634818064021665">Треба вам дозвола да бисте посетили овај сајт</translation>
 <translation id="2856444702002559011">Нападачи можда покушавају да украду информације са <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (на пример, лозинке, поруке или кредитне картице). <ph name="BEGIN_LEARN_MORE_LINK" />Сазнајте више<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Уклони картицу</translation>
 <translation id="4587425331216688090">Желите ли да уклоните адресу из Chrome-а?</translation>
 <translation id="4592951414987517459">Веза са доменом <ph name="DOMAIN" /> је шифрована помоћу модерног пакета за шифровање.</translation>
+<translation id="4594047029158047642">Линк који сте отворили води до сајта који обично не посећујете. Можда жели да вас збуни.</translation>
 <translation id="4594403342090139922">&amp;Опозови брисање</translation>
 <translation id="4597348597567598915">Величина 8</translation>
 <translation id="4600854749408232102">C6/C5 (коверат)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Могли бисте да изгубите приступ налогу за организацију или би могло да дође до крађе идентитета. Chrome вам препоручује да одмах промените лозинку.</translation>
 <translation id="5171045022955879922">Претражите или унесите URL адресу</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Обично посећујете &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL који сте управо пробали да посетите делује слично, али се не подудара у потпуности са сајтом из ваше историје. Нападачи понекад користе ову технику да би вас преварили.</translation>
 <translation id="5172758083709347301">Рачунар</translation>
 <translation id="5179510805599951267">Није <ph name="ORIGINAL_LANGUAGE" />? Пријавите ову грешку</translation>
 <translation id="5190835502935405962">Трака са обележивачима</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Искључено</translation>
 <translation id="5863847714970149516">Следећа страница може да покуша да вам нешто наплати</translation>
 <translation id="5866257070973731571">Додајте број телефона</translation>
+<translation id="5866898949289125849">Прегледате страницу са алаткама за прогамере</translation>
 <translation id="5869405914158311789">Овај сајт није доступан</translation>
 <translation id="5869522115854928033">Сачуване лозинке</translation>
 <translation id="5887400589839399685">Картица је сачувана</translation>
@@ -1082,7 +1087,6 @@
 <translation id="6891596781022320156">Ниво смерница није подржан.</translation>
 <translation id="6895330447102777224">Картица је потврђена</translation>
 <translation id="6897140037006041989">Кориснички агент</translation>
-<translation id="6903319715792422884">Побољшајте Безбедно прегледање слањем <ph name="BEGIN_WHITEPAPER_LINK" />системских информација и садржаја страница<ph name="END_WHITEPAPER_LINK" /> Google-у. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Корисник:</translation>
 <translation id="6934672428414710184">То је име са вашег Google налога</translation>
 <translation id="6944692733090228304">Унели сте лозинку на сајту којим не управља <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Да бисте заштитили налог, не користите лозинку поново у другим апликацијама ни на другим сајтовима.</translation>
@@ -1152,6 +1156,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Није могуће успоставити приватну везу са доменом <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> јер време и датум на рачунару (<ph name="DATE_AND_TIME" />) нису тачни.</translation>
 <translation id="7260504762447901703">Опозовите приступ</translation>
+<translation id="726226871651201355">Желите ли да наставите до &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Припејд картице које се прихватају</translation>
 <translation id="7275334191706090484">Обележивачи којим се управља</translation>
 <translation id="7298195798382681320">Препоручено</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">Потребно је више информација</translation>
 <translation id="9080712759204168376">Резиме поруџбине</translation>
 <translation id="9089260154716455634">Смернице са временским распоредом:</translation>
+<translation id="9093075372111400787">Затвори напредне опције</translation>
 <translation id="9095388113577226029">Још језика...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> обично користи шифровање да би заштитио информације. Када је Chromium овог пута покушао да се повеже са <ph name="SITE" />, веб-сајт је вратио необичне и нетачне акредитиве. Или нападач покушава да се представи као <ph name="SITE" /> или је екран за Wi-Fi пријављивање прекинуо везу. Информације су и даље безбедне зато што је Chromium прекинуо везу пре него што су размењени било какви подаци.</translation>
 <translation id="9106062320799175032">Додајте адресу за обрачун</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index 9146c06..cb29a96 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Användarnamn för din enhet och webbläsare</translation>
 <translation id="2491120439723279231">Servercertifikatet innehåller fel.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Du brukar besöka &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Webbplatsen du försökte besöka liknar, men är inte identisk med, webbplatsen i din historik. Den här metoden används ibland av hackare i ett försök att lura eller bedra andra.</translation>
 <translation id="2495083838625180221">JSON-analysator</translation>
 <translation id="2495093607237746763">Om alternativet är markerat sparar Chromium en kopia av kortet på enheten så att det går snabbare att fylla i formulär.</translation>
 <translation id="2498091847651709837">Läs in ett nytt kort</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Anslutningen är krypterad och verifieras med <ph name="CIPHER" /> och använder <ph name="KX" /> som nyckelutbytesmekanism.</translation>
 <translation id="2835170189407361413">Rensa formuläret</translation>
 <translation id="2847118875340931228">Öppna ett inkognitofönster</translation>
+<translation id="2849445596171421624">Om du klickar på fortsätt kommer du till den populärare webbplatsen &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (kuvert)</translation>
 <translation id="2851634818064021665">Du behöver tillstånd att besöka den här webbplatsen</translation>
 <translation id="2856444702002559011">En angripare kan försöka stjäla dina uppgifter från <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (t.ex. lösenord, meddelanden eller kreditkortsuppgifter). <ph name="BEGIN_LEARN_MORE_LINK" />Läs mer<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Ta bort kort</translation>
 <translation id="4587425331216688090">Vill du ta bort adressen från Chrome?</translation>
 <translation id="4592951414987517459">Anslutningen till <ph name="DOMAIN" /> är krypterad med en modern krypteringssvit.</translation>
+<translation id="4594047029158047642">Länken du öppnade leder till en ovanlig webbplats. Det kan vara ett försök att lura dig.</translation>
 <translation id="4594403342090139922">&amp;Ångra Ta bort</translation>
 <translation id="4597348597567598915">Storlek 8</translation>
 <translation id="4600854749408232102">C6/C5 (kuvert)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Du kan förlora åtkomsten till organisationens konto eller bli utsatt för identitetsstöld. Du rekommenderas att ändra lösenordet nu.</translation>
 <translation id="5171045022955879922">Sök eller ange webbadress</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Du brukar besöka &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Webbadressen du försökte besöka liknar, men är inte identisk med, webbadressen i din historik. Den här metoden används ibland av hackare i ett försök att lura eller bedra andra.</translation>
 <translation id="5172758083709347301">Dator</translation>
 <translation id="5179510805599951267">Inte på <ph name="ORIGINAL_LANGUAGE" />? Rapportera felet</translation>
 <translation id="5190835502935405962">Bokmärkesfältet</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Av</translation>
 <translation id="5863847714970149516">Sidan du är på väg till kan försöka debitera dig</translation>
 <translation id="5866257070973731571">Ange telefonnummer</translation>
+<translation id="5866898949289125849">Du visar en sida för utvecklarverktyg</translation>
 <translation id="5869405914158311789">Webbplatsen kan inte nås</translation>
 <translation id="5869522115854928033">Sparade lösenord</translation>
 <translation id="5887400589839399685">Kortet har sparats</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Policynivån stöds inte.</translation>
 <translation id="6895330447102777224">Kortet har bekräftats</translation>
 <translation id="6897140037006041989">Användaragent</translation>
-<translation id="6903319715792422884">Hjälp oss att förbättra Säker webbsökning genom att låta <ph name="BEGIN_WHITEPAPER_LINK" />viss systeminformation och visst sidinnehåll<ph name="END_WHITEPAPER_LINK" /> skickas automatiskt till Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Användare:</translation>
 <translation id="6934672428414710184">Det här namnet har hämtats från Google-kontot</translation>
 <translation id="6944692733090228304">Du har angett ditt lösenord på en webbplats som inte hanteras av <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Skydda kontot genom att inte återanvända lösenordet i andra appar och webbplatser.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Det gick inte att upprätta en privat anslutning till <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> eftersom datorns datum och tid (<ph name="DATE_AND_TIME" />) inte stämmer.</translation>
 <translation id="7260504762447901703">Återkalla åtkomst</translation>
+<translation id="726226871651201355">Vill du fortsätta till &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Godkända förbetalda kort</translation>
 <translation id="7275334191706090484">Hanterade bokmärken</translation>
 <translation id="7298195798382681320">Rekommenderas</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">Mer information krävs</translation>
 <translation id="9080712759204168376">Sammanfattning av beställningen</translation>
 <translation id="9089260154716455634">Princip för användning utanför arbetstid:</translation>
+<translation id="9093075372111400787">Stäng Avancerat</translation>
 <translation id="9095388113577226029">Fler språk …</translation>
 <translation id="9103872766612412690">På <ph name="SITE" /> används normalt kryptering (SSL) för att skydda din information. När Chromium försökte ansluta till <ph name="SITE" /> den här gången skickade webbplatsen tillbaka ovanliga och felaktiga uppgifter. Sådant kan hända när en angripare utger sig för att vara <ph name="SITE" /> eller när anslutningen har avbrutits av en Wi-Fi-inloggningsskärm. Din information är fortfarande säker eftersom Chromium avbröt anslutningen innan någon data utbyttes.</translation>
 <translation id="9106062320799175032">Lägg till faktureringsadress</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index f2417426..481d7baf 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Majina ya watumiaji kwenye kivinjari na kifaa chako</translation>
 <translation id="2491120439723279231">Cheti cha seva kina hitilafu.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Wewe hutembelea &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Tovuti ambayo umejaribu kutembelea hivi sasa inaonekana kufanana lakini hailingani kabisa na tovuti iliyo kwenye historia yako. Wavamizi wakati mwingine hutumia mbinu hii kukuhadaa au kukulaghai.</translation>
 <translation id="2495083838625180221">Kichanganuzi cha JSON</translation>
 <translation id="2495093607237746763">Ikitiwa tiki, Chromium itahifadhi nakala ya kadi yako kwenye kifaa hiki kwa ajili ya kujaza fomu haraka zaidi.</translation>
 <translation id="2498091847651709837">Changanua kadi mpya</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Muunganisho umesimbwa kwa njia fiche na kuthibitishwa kupitia <ph name="CIPHER" /> na unatumia <ph name="KX" /> kama utaratibu msingi wa ubadilishaji.</translation>
 <translation id="2835170189407361413">Futa fomu</translation>
 <translation id="2847118875340931228">Fungua Dirisha Fiche</translation>
+<translation id="2849445596171421624">Hatua ya kubofya 'Endelea' itakuelekeza kwenye tovuti inayotumika zaidi &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Bahasha)</translation>
 <translation id="2851634818064021665">Unahitaji ruhusa ili utembelee tovuti hii</translation>
 <translation id="2856444702002559011">Huenda wavamizi wanajaribu kuiba maelezo yako kutoka <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (kwa mfano, manenosiri, ujumbe au kadi za mikopo).<ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Ondoa kadi</translation>
 <translation id="4587425331216688090">Ungependa kuondoa anwani kutoka kwenye Chrome?</translation>
 <translation id="4592951414987517459">Muunganisho wako kwenye <ph name="DOMAIN" /> umesimbwa kwa njia fiche kwa kutumia mipangilio ya kriptografia ya kisasa.</translation>
+<translation id="4594047029158047642">Kiungo ulichofungua kinaelekeza kwenye tovuti ambayo hutumii zaidi. Huenda kinajaribu kukukanganya.</translation>
 <translation id="4594403342090139922">Tendua Kufuta</translation>
 <translation id="4597348597567598915">Ukubwa wa 8</translation>
 <translation id="4600854749408232102">C6/C5 (Bahasha)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Unaweza kupoteza uwezo wa kufikia akaunti ya shirika lako au kuibiwa utambulisho. Chrome inapendekeza ubadilishe nenosiri lako sasa.</translation>
 <translation id="5171045022955879922">Tafuta au charaza URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Wewe hutembelea &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; Tovuti ambayo umejaribu kutembelea hivi sasa inaonekana kufanana lakini hailingani kabisa na tovuti iliyo kwenye historia yako. Wavamizi wakati mwingine hutumia mbinu hii kukuhadaa au kukulaghai.</translation>
 <translation id="5172758083709347301">Mashine</translation>
 <translation id="5179510805599951267">Haiko katika <ph name="ORIGINAL_LANGUAGE" />? Ripoti hitilafu hii</translation>
 <translation id="5190835502935405962">Sehemu ya Alamisho</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Kimezimwa</translation>
 <translation id="5863847714970149516">Huenda ukurasa unaofuata ukajaribu kukutoza pesa</translation>
 <translation id="5866257070973731571">Ongeza Nambari ya Simu</translation>
+<translation id="5866898949289125849">Unaangalia ukurasa wa zana za msanidi programu</translation>
 <translation id="5869405914158311789">Imeshindwa kufungua tovuti hii</translation>
 <translation id="5869522115854928033">Manenosiri yaliyohifadhiwa</translation>
 <translation id="5887400589839399685">Kadi imehifadhiwa</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Kiwango cha sera hakitumiki.</translation>
 <translation id="6895330447102777224">Kadi yako imethibitishwa</translation>
 <translation id="6897140037006041989">Programu ya Mtumiaji</translation>
-<translation id="6903319715792422884">Tusaidie tuboreshe huduma ya Kuvinjari Salama kwa kutuma baadhi ya <ph name="BEGIN_WHITEPAPER_LINK" />maudhui ya ukurasa na maelezo ya mfumo<ph name="END_WHITEPAPER_LINK" /> kwa Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Mtumiaji:</translation>
 <translation id="6934672428414710184">Jina hili linatoka kwenye Akaunti yako ya Google</translation>
 <translation id="6944692733090228304">Uliweka nenosiri lako kwenye tovuti ambayo haisimamiwi na <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Ili kulinda akaunti yako, usitumie tena nenosiri lako kwenye programu na tovuti zingine.</translation>
@@ -1151,6 +1155,7 @@
 <translation id="7251437084390964440">Mipangilio ya mtandao haitii kiwango cha ONC. Huenda baadhi ya mipangilio haitapakiwa. Maelezo ya ziada: <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Muunganisho wa faragha kwenye <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> hauwezi kutambuliwa kwa sababu tarehe na wakati wa kompyuta yako (<ph name="DATE_AND_TIME" />) si sahihi.</translation>
 <translation id="7260504762447901703">Batilisha ufikiaji</translation>
+<translation id="726226871651201355">Je, ungependa kuenda kwenye &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Kadi za Kulipia Awali Zinazokubaliwa</translation>
 <translation id="7275334191706090484">Alamisho Zinazosimamiwa</translation>
 <translation id="7298195798382681320">Zinazopendekezwa</translation>
@@ -1487,6 +1492,7 @@
 <translation id="9078964945751709336">Maelezo zaidi yanahitajika</translation>
 <translation id="9080712759204168376">Muhtasari wa Agizo</translation>
 <translation id="9089260154716455634">Sera ya Saa Zisizo za Kazi:</translation>
+<translation id="9093075372111400787">Funga maelezo ya kina</translation>
 <translation id="9095388113577226029">Lugha zaidi...</translation>
 <translation id="9103872766612412690">Kwa kawaida <ph name="SITE" /> hutumia usimbaji fiche ili kulinda maelezo yako. Chromium ilipojaribu kuunganisha kwenye <ph name="SITE" /> wakati huu, tovuti ilituma kitambulisho kisicho cha kawaida na kisicho sahihi. Hili linaweza kutokea mvamizi anapojaribu kujifanya kuwa <ph name="SITE" />, au uchanganuzi wa kuingia katika Wi-Fi umeingilia muunganisho. Maelezo yako yangali salama kwa sababu Chromium ilisimamisha muunganisho kabla data yoyote itumwe.</translation>
 <translation id="9106062320799175032">Ongeza Anwani ya Kutuma Bili</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index ea53ab0..625b13b5 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -1079,7 +1079,6 @@
 <translation id="6891596781022320156">கொள்கையின் நிலை ஆதரிக்கப்படவில்லை.</translation>
 <translation id="6895330447102777224">கார்டு உறுதிசெய்யப்பட்டது</translation>
 <translation id="6897140037006041989">பயனர் ஏஜெண்ட்</translation>
-<translation id="6903319715792422884">Googleளுக்குச் சில <ph name="BEGIN_WHITEPAPER_LINK" />சாதனத் தகவல்களையும் பக்க உள்ளடக்கத்தையும்<ph name="END_WHITEPAPER_LINK" /> அனுப்புவதன் மூலம் பாதுகாப்பான உலாவலை மேம்படுத்த உதவுங்கள். <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">பயனர்:</translation>
 <translation id="6934672428414710184">இந்தப் பெயர் உங்கள் ‘Google கணக்கிலிருந்து’ பெறப்பட்டது</translation>
 <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> நிர்வகிக்காத ஒரு தளத்தில் உங்கள் கடவுச்சொல்லை உள்ளிட்டுள்ளீர்கள். உங்கள் கணக்கைப் பாதுகாக்க, பிற ஆப்ஸிலும் தளங்களிலும் உங்கள் கடவுச்சொல்லை மீண்டும் பயன்படுத்த வேண்டாம்.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 5ea92c4..2038e7a 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -295,6 +295,7 @@
 <translation id="2485387744899240041">మీ పరికరం, బ్రౌజర్‌ల వినియోగదారు పేర్లు</translation>
 <translation id="2491120439723279231">సర్వర్ యొక్క ప్రమాణపత్రంలో లోపాలు ఉన్నాయి.</translation>
 <translation id="2493640343870896922">లెటర్-ప్లస్</translation>
+<translation id="2494497504885199552">మీరు సాధారణంగా &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;ను సందర్శిస్తారు. ఇప్పుడు సందర్శించాలని ప్రయత్నించిన సైట్ దానికి ఇంచుమించుగా సరిపోలుతోంది, కానీ మీ బ్రౌజర్ చరిత్రలోని సైట్‌తో ఖచ్చితమైన రీతిలో సరిపోలట్లేదు. హ్యాకర్‌లు మిమ్మల్ని మాయ చేయడానికి లేదా మోసగించడానికి కొన్నిసార్లు ఇలాంటి ఉచ్చు పన్నుతారు.</translation>
 <translation id="2495083838625180221">JSON పార్సర్</translation>
 <translation id="2495093607237746763">ఎంచుకుంటే, Chromium వేగవంతమైన ఫారమ్ పూరింపు కోసం ఈ పరికరంలో మీ కార్డ్ కాపీని నిల్వ చేస్తుంది.</translation>
 <translation id="2498091847651709837">కొత్త కార్డ్‌ను స్కాన్ చేయండి</translation>
@@ -360,6 +361,7 @@
 <translation id="2826760142808435982"><ph name="CIPHER" />ను ఉపయోగించి కనెక్షన్ ఎన్‌క్రిప్ట్ చేయ‌బ‌డింది, ప్రామాణీకరించబడింది మరియు <ph name="KX" />ను కీలకమైన పరివర్తన విధానంగా ఉపయోగిస్తుంది.</translation>
 <translation id="2835170189407361413">ఫారమ్‌ను క్లియర్ చేయి</translation>
 <translation id="2847118875340931228">అజ్ఞాత విండోని తెరువు</translation>
+<translation id="2849445596171421624">కొనసాగించు క్లిక్ చేయడం వలన మీరు మరింత సాధారణమైన సైట్ &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;కు పంపబడతారు.</translation>
 <translation id="2850739647070081192">ఆహ్వానం (ఎన్వలప్)</translation>
 <translation id="2851634818064021665">ఈ సైట్‌ను సందర్శించడానికి మీకు అనుమతి అవసరం</translation>
 <translation id="2856444702002559011">హ్యాకర్‌లు <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> నుండి మీ సమాచారాన్ని దొంగిలించడానికి ప్రయత్నిస్తూ ఉండవచ్చు (ఉదాహరణకు, పాస్‌వర్డ్‌లు, సందేశాలు లేదా క్రెడిట్ కార్డ్‌లు). <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -679,6 +681,7 @@
 <translation id="4582204425268416675">కార్డ్‌ని తీసివేయండి</translation>
 <translation id="4587425331216688090">Chrome నుండి చిరునామాను తీసివేయాలా?</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" />కు గల మీ కనెక్షన్ ఆధునిక సైఫర్ సూట్ ఉపయోగించి ఎన్‌క్రిప్ట్ చేయ‌బ‌డింది.</translation>
+<translation id="4594047029158047642">మీరు తెరిచిన లింక్ ఒక అసాధారణ సైట్‌కు తీసుకెళ్తుంది. ఇది మిమ్మల్ని అయోమయంలో పడేయడానికి చేసిన మోసం కావచ్చు.</translation>
 <translation id="4594403342090139922">&amp;తొలగించడాన్ని రద్దు చేయి</translation>
 <translation id="4597348597567598915">పరిమాణం 8</translation>
 <translation id="4600854749408232102">C6/C5 (ఎన్వలప్)</translation>
@@ -781,6 +784,7 @@
 <translation id="5169827969064885044">మీరు మీ సంస్థ ఖాతాకు యాక్సెస్‌ను కోల్పోవచ్చు. లేదా గుర్తింపు స‌మాచారం చౌర్యానికి గురికావచ్చు. మీరు ఇప్పుడే మీ పాస్‌వర్డ్‌ను మార్చాల్సిందిగా Chrome సిఫార్సు చేస్తోంది.</translation>
 <translation id="5171045022955879922">URLను వెతకండి లేదా టైప్ చేయండి</translation>
 <translation id="5171689220826475070">ఫ్యాన్‌ఫోల్డ్-యూరోపియన్</translation>
+<translation id="5172068981283436906">మీరు సాధారణంగా &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;ను సందర్శిస్తారు. ఇప్పుడు సందర్శించాలని ప్రయత్నించిన URL దానికి ఇంచుమించుగా సరిపోలుతోంది, కానీ మీ బ్రౌజర్ చరిత్రలోని సైట్‌తో ఖచ్చితమైన రీతిలో సరిపోలట్లేదు. హ్యాకర్‌లు మిమ్మల్ని మాయ చేయడానికి లేదా మోసగించడానికి కొన్నిసార్లు ఇలాంటి ఉచ్చు పన్నుతారు.</translation>
 <translation id="5172758083709347301">మెషీన్</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" />లో లేదా? ఈ ఎర్రర్‌ను నివేదించండి</translation>
 <translation id="5190835502935405962">బుక్‌మార్క్‌ల బార్</translation>
@@ -909,6 +913,7 @@
 <translation id="5860033963881614850">ఆఫ్ అయ్యింది</translation>
 <translation id="5863847714970149516">మీరు చూడబోతున్న పేజీ మీకు డబ్బు ఛార్జ్ చేయడానికి ప్రయత్నించవచ్చు</translation>
 <translation id="5866257070973731571">ఫోన్ నంబర్‌ను జోడించండి</translation>
+<translation id="5866898949289125849">మీరు డెవలపర్ సాధనాల పేజీని వీక్షిస్తున్నారు</translation>
 <translation id="5869405914158311789">ఈ సైట్‌ను చేరుకోలేకపోయాము</translation>
 <translation id="5869522115854928033">సేవ్  చేసిన పాస్‌వర్డ్‌లు</translation>
 <translation id="5887400589839399685">కార్డ్ సేవ్ చేయబడింది</translation>
@@ -1077,7 +1082,6 @@
 <translation id="6891596781022320156">విధాన స్థాయికి మద్దతు లేదు.</translation>
 <translation id="6895330447102777224">మీ కార్డ్ నిర్ధారించబడింది</translation>
 <translation id="6897140037006041989">వినియోగదారు ప్రతినిధి</translation>
-<translation id="6903319715792422884"><ph name="BEGIN_WHITEPAPER_LINK" />కొంత సిస్టమ్ సమాచారం మరియు పేజీ కంటెంట్‌<ph name="END_WHITEPAPER_LINK" />ను Googleకి పంపడం ద్వారా సురక్షిత బ్రౌజింగ్‌ని మెరుగుపరచడంలో సహాయపడండి. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">వినియోగదారు:</translation>
 <translation id="6934672428414710184">ఇది మీ Google ఖాతాలో ఉన్న పేరు</translation>
 <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ని నమోదు చేసారు. మీ ఖాతాని రక్షించడం కోసం, మీ పాస్‌వర్డ్‌ని ఇతర యాప్‌లు మరియు సైట్‌లలో తిరిగి ఉపయోగించవద్దు.</translation>
@@ -1144,6 +1148,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">మీ కంప్యూటర్ తేదీ మరియు సమయం (<ph name="DATE_AND_TIME" />) తప్పుగా ఉన్నందున <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />కు ఒక ప్రైవేట్ కనెక్షన్‌ను ఏర్పాటు చేయడం వీలుకాలేదు.</translation>
 <translation id="7260504762447901703">యాక్సెస్‌ను ఉపసంహరించు</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;కు కొనసాగించాలా?</translation>
 <translation id="7271803869921933038">ఆమోదించే ప్రీపెయిడ్ కార్డ్‌లు</translation>
 <translation id="7275334191706090484">నిర్వహించబడిన బుక్‌మార్క్‌లు</translation>
 <translation id="7298195798382681320">సిఫార్సు చేయబడినవి</translation>
@@ -1481,6 +1486,7 @@
 <translation id="9078964945751709336">మరింత సమాచారం ఆవశ్యకం</translation>
 <translation id="9080712759204168376">ఆర్డర్ సారాంశం</translation>
 <translation id="9089260154716455634">తీరిక వేళల విధానం:</translation>
+<translation id="9093075372111400787">"అధునాతనం" మూసివేయి</translation>
 <translation id="9095388113577226029">మరిన్ని భాషలు...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> సాధారణంగా మీ సమాచారాన్ని రక్షించడానికి ఎన్‌క్రిప్ష‌న్‌ను ఉపయోగిస్తుంది. Chromium ఈసారి <ph name="SITE" />కు కనెక్ట్ చేయడానికి ప్రయత్నించినప్పుడు, వెబ్‌సైట్ అసాధారణ మరియు తప్పు ఆధారాలు అని ప్రతిస్పందించింది. దాడి చేసే వ్యక్తి <ph name="SITE" />గా వ్యవహరించి మోసగించడానికి ప్రయత్నిస్తున్నప్పుడు లేదా Wi-Fi సైన్-ఇన్ స్క్రీన్ కనెక్షన్‌కు అంతరాయం కలిగించినప్పుడు ఇలా జరగవచ్చు. Chromium ఎలాంటి డేటా వినిమయం జ‌ర‌గ‌క ముందే కనెక్షన్‌ను ఆపివేసినందున మీ సమాచారం ఇప్పటికీ సురక్షితంగానే ఉంది.</translation>
 <translation id="9106062320799175032">బిల్లింగ్ చిరునామాను జోడించండి</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 443f5b5..82fa0101 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">ชื่อผู้ใช้สำหรับอุปกรณ์และเบราว์เซอร์ของคุณ</translation>
 <translation id="2491120439723279231">ใบรับรองของเซิร์ฟเวอร์มีข้อผิดพลาด</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">โดยปกติคุณจะเข้าชม &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; เว็บไซต์ที่คุณพยายามเข้าชมดูคล้ายกันแต่ไม่ตรงกันทั้งหมดกับเว็บไซต์ที่มีอยู่ในประวัติการเข้าชมของคุณ บางครั้งผู้โจมตีจะใช้เทคนิคนี้เพื่อหลอกลวงหรือตบตาคุณ</translation>
 <translation id="2495083838625180221">โปรแกรมแยกวิเคราะห์ JSON</translation>
 <translation id="2495093607237746763">หากเลือกไว้ Chromium จะจัดเก็บสำเนาบัตรของคุณบนอุปกรณ์นี้เพื่อการกรอกแบบฟอร์มที่รวดเร็วขึ้น</translation>
 <translation id="2498091847651709837">สแกนบัตรใหม่</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">การเชื่อมต่อถูกเข้ารหัสและรับรองความถูกต้องโดยใช้ <ph name="CIPHER" /> และใช้ <ph name="KX" /> เป็นกลไกการแลกเปลี่ยนคีย์</translation>
 <translation id="2835170189407361413">ล้างฟอร์ม</translation>
 <translation id="2847118875340931228">เปิดหน้าต่างที่ไม่ระบุตัวตน</translation>
+<translation id="2849445596171421624">การคลิก "ต่อไป" จะนำคุณไปยังเว็บไซต์ปกติ &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;</translation>
 <translation id="2850739647070081192">Invite (ซองจดหมาย)</translation>
 <translation id="2851634818064021665">คุณต้องได้รับสิทธิ์เพื่อเข้าชมไซต์นี้</translation>
 <translation id="2856444702002559011">ผู้โจมตีอาจพยายามขโมยข้อมูลจาก <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (ตัวอย่างเช่น รหัสผ่าน ข้อความ หรือบัตรเครดิต) <ph name="BEGIN_LEARN_MORE_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -684,6 +686,7 @@
 <translation id="4582204425268416675">นำบัตรออก</translation>
 <translation id="4587425331216688090">นำที่อยู่ออกจาก Chrome ไหม</translation>
 <translation id="4592951414987517459">มีการเข้ารหัสการเชื่อมต่อของคุณกับ <ph name="DOMAIN" /> ด้วยชุดการเข้ารหัสที่ทันสมัย</translation>
+<translation id="4594047029158047642">ลิงก์ที่คุณเปิดนำทางไปยังเว็บไซต์ที่ผิดปกติ และอาจพยายามทำให้คุณสับสน</translation>
 <translation id="4594403342090139922">&amp;เลิกทำการนำออก</translation>
 <translation id="4597348597567598915">ขนาด 8</translation>
 <translation id="4600854749408232102">C6/C5 (ซองจดหมาย)</translation>
@@ -786,6 +789,7 @@
 <translation id="5169827969064885044">คุณอาจเข้าถึงบัญชีขององค์กรไม่ได้หรือถูกโจรกรรมข้อมูลประจำตัว Chrome ขอแนะนำให้เปลี่ยนรหัสผ่านตอนนี้เลย</translation>
 <translation id="5171045022955879922">ค้นหาหรือพิมพ์ URL</translation>
 <translation id="5171689220826475070">กระดาษต่อเนื่องแบบยุโรป</translation>
+<translation id="5172068981283436906">โดยปกติคุณจะเข้าชม &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; URL ที่คุณพยายามเข้าชมดูคล้ายกันแต่ไม่ตรงกันทั้งหมดกับเว็บไซต์ที่มีอยู่ในประวัติการเข้าชมของคุณ บางครั้งผู้โจมตีจะใช้เทคนิคนี้เพื่อหลอกลวงหรือตบตาคุณ</translation>
 <translation id="5172758083709347301">ผู้ใช้คอมพิวเตอร์นี้</translation>
 <translation id="5179510805599951267">หากไม่มีในภาษา <ph name="ORIGINAL_LANGUAGE" /> ให้รายงานข้อผิดพลาดนี้</translation>
 <translation id="5190835502935405962">แถบบุ๊กมาร์ก</translation>
@@ -914,6 +918,7 @@
 <translation id="5860033963881614850">ปิด</translation>
 <translation id="5863847714970149516">ระบบอาจพยายามเรียกเก็บเงินจากคุณในหน้าถัดไป</translation>
 <translation id="5866257070973731571">เพิ่มหมายเลขโทรศัพท์</translation>
+<translation id="5866898949289125849">คุณกำลังดูหน้าเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์</translation>
 <translation id="5869405914158311789">ไม่สามารถเข้าถึงเว็บไซต์นี้</translation>
 <translation id="5869522115854928033">รหัสผ่านที่บันทึกไว้</translation>
 <translation id="5887400589839399685">บันทึกการ์ดแล้ว</translation>
@@ -1082,7 +1087,6 @@
 <translation id="6891596781022320156">ระดับนโยบายไม่ได้รับการสนับสนุน</translation>
 <translation id="6895330447102777224">บัตรของคุณได้รับการยืนยันแล้ว</translation>
 <translation id="6897140037006041989">User agent</translation>
-<translation id="6903319715792422884">ช่วยปรับปรุง Safe Browsing โดยส่ง<ph name="BEGIN_WHITEPAPER_LINK" />ข้อมูลบางอย่างของระบบและเนื้อหาของหน้า<ph name="END_WHITEPAPER_LINK" />ให้ Google <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">ผู้ใช้:</translation>
 <translation id="6934672428414710184">ชื่อนี้มาจากบัญชี Google ของคุณ</translation>
 <translation id="6944692733090228304">คุณป้อนรหัสผ่านในเว็บไซต์ที่ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ไม่ได้จัดการ เพื่อปกป้องบัญชี โปรดอย่าใช้รหัสผ่านซ้ำในแอปและเว็บไซต์อื่นๆ</translation>
@@ -1152,6 +1156,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">ไม่สามารถเริ่มการเชื่อมต่อส่วนตัวกับ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ได้เนื่องจากวันที่และเวลาของคอมพิวเตอร์ (<ph name="DATE_AND_TIME" />) ไม่ถูกต้อง</translation>
 <translation id="7260504762447901703">เพิกถอนสิทธิ์การเข้าถึง</translation>
+<translation id="726226871651201355">ไปที่ &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; ไหม</translation>
 <translation id="7271803869921933038">บัตรเติมเงินที่ยอมรับ</translation>
 <translation id="7275334191706090484">บุ๊กมาร์กที่มีการจัดการ</translation>
 <translation id="7298195798382681320">แนะนำ</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">ต้องระบุข้อมูลเพิ่มเติม</translation>
 <translation id="9080712759204168376">สรุปการสั่งซื้อ</translation>
 <translation id="9089260154716455634">นโยบายสำหรับช่วงที่ไม่ค่อยมีการใช้งาน:</translation>
+<translation id="9093075372111400787">ปิดตัวเลือกขั้นสูง</translation>
 <translation id="9095388113577226029">ภาษาเพิ่มเติม...</translation>
 <translation id="9103872766612412690">โดยทั่วไป <ph name="SITE" /> จะใช้การเข้ารหัสเพื่อปกป้องข้อมูลของคุณ เมื่อ Chromium พยายามเชื่อมต่อกับ <ph name="SITE" /> ในครั้งนี้ เว็บไซต์ดังกล่าวส่งข้อมูลรับรองที่ผิดปกติและไม่ถูกต้องกลับมา เหตุการณ์นี้อาจเกิดขึ้นเมื่อผู้บุกรุกพยายามปลอมเป็น <ph name="SITE" /> หรือหน้าจอการลงชื่อเข้าใช้ Wi-Fi รบกวนการเชื่อมต่อ ข้อมูลของคุณยังปลอดภัยอยู่เนื่องจาก Chromium หยุดการเชื่อมต่อก่อนมีการแลกเปลี่ยนข้อมูล</translation>
 <translation id="9106062320799175032">เพิ่มที่อยู่สำหรับการเรียกเก็บเงิน</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 09682a3..ab194017 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Cihazınız ve tarayıcınız için kullanıcı adları</translation>
 <translation id="2491120439723279231">Sunucu sertifikası hatalar içeriyor.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Genellikle &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; sitesini ziyaret ediyorsunuz. Az önce gitmeye çalıştığınız site benzese de geçmişinizde yer alan siteyle tam olarak eşleşmemektedir. Saldırganlar bazen sizi dolandırmak için bu tekniği kullanırlar.</translation>
 <translation id="2495083838625180221">JSON Ayrıştırıcı</translation>
 <translation id="2495093607237746763">İşaretlenirse Chromium, formları daha hızlı doldurma amacıyla kartınızın bir kopyasını bu cihazda depolar.</translation>
 <translation id="2498091847651709837">Yeni kart tara</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Bağlantı <ph name="CIPHER" /> kullanılarak şifrelenmiş ve kimliği doğrulanmıştır. Anahtar değişim mekanizması olarak <ph name="KX" /> kullanılır.</translation>
 <translation id="2835170189407361413">Formu temizle</translation>
 <translation id="2847118875340931228">Gizli Pencereyi Aç</translation>
+<translation id="2849445596171421624">Devam'ı tıkladığınızda daha genel bir site olan &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt; adresine gideceksiniz.</translation>
 <translation id="2850739647070081192">Invite (Zarf)</translation>
 <translation id="2851634818064021665">Bu siteyi ziyaret etmek için izninizin olması gerekir</translation>
 <translation id="2856444702002559011">Saldırganlar <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> üzerinden bilgilerinizi çalmaya çalışıyor olabilir (örneğin, şifreler, mesajlar veya kredi kartları). <ph name="BEGIN_LEARN_MORE_LINK" />Daha fazla bilgi<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Kartı kaldır</translation>
 <translation id="4587425331216688090">Adres Chrome'dan kaldırılsın mı?</translation>
 <translation id="4592951414987517459"><ph name="DOMAIN" /> ile olan bağlantınız modern bir şifre seti kullanılarak şifrelendi.</translation>
+<translation id="4594047029158047642">Açtığınız bağlantı yaygın olarak kullanılmayan bir siteye gidiyor. Kafanızı karıştırmaya çalışıyor olabilir.</translation>
 <translation id="4594403342090139922">Silmeyi &amp;Geri Al</translation>
 <translation id="4597348597567598915">Boyut 8</translation>
 <translation id="4600854749408232102">C6/C5 (Zarf)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Kuruluşunuzun hesabına erişimi kaybedebilir veya kimlik hırsızlığına maruz kalabilirsiniz. Chrome, şifrenizi hemen değiştirmenizi önerir.</translation>
 <translation id="5171045022955879922">Arayın veya URL'yi yazın</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Genellikle &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt; sitesini ziyaret ediyorsunuz. Az önce gitmeye çalıştığınız URL benzese de geçmişinizde yer alan siteyle tam olarak eşleşmemektedir. Saldırganlar bazen sizi dolandırmak için bu tekniği kullanırlar.</translation>
 <translation id="5172758083709347301">Makine</translation>
 <translation id="5179510805599951267"><ph name="ORIGINAL_LANGUAGE" /> dilinde değil mi? Bu hatayı bildirin</translation>
 <translation id="5190835502935405962">Yer İşareti Çubuğu</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Kapalı</translation>
 <translation id="5863847714970149516">Gireceğiniz sayfa sizden para almaya çalışabilir</translation>
 <translation id="5866257070973731571">Telefon Numarası Ekleyin</translation>
+<translation id="5866898949289125849">Geliştirici araçları sayfasını görüntülüyorsunuz</translation>
 <translation id="5869405914158311789">Bu siteye ulaşılamıyor</translation>
 <translation id="5869522115854928033">Kayıtlı şifreler</translation>
 <translation id="5887400589839399685">Kart kaydedildi</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Politika düzeyi desteklenmiyor.</translation>
 <translation id="6895330447102777224">Kartınız onaylandı</translation>
 <translation id="6897140037006041989">Kullanıcı Aracısı</translation>
-<translation id="6903319715792422884">Google'a bazı <ph name="BEGIN_WHITEPAPER_LINK" />sistem bilgilerini ve sayfa içeriklerini<ph name="END_WHITEPAPER_LINK" /> göndererek Güvenli Tarama'nın iyileştirilmesine yardımcı olabilirsiniz. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Kullanıcı:</translation>
 <translation id="6934672428414710184">Bu ad Google Hesabınızdan gelmektedir</translation>
 <translation id="6944692733090228304">Şifrenizi <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> tarafından yönetilmeyen bir sitede girdiniz. Hesabınızı korumak için şifrenizi başka uygulama ve sitelerde tekrar kullanmayın.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Bilgisayarınızın tarih ve saati (<ph name="DATE_AND_TIME" />) yanlış olduğundan <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> alan adına gizli bir bağlantı kurulamıyor.</translation>
 <translation id="7260504762447901703">Erişimi iptal et</translation>
+<translation id="726226871651201355">&lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; adresine devam edilsin mi?</translation>
 <translation id="7271803869921933038">Kabul Edilen Ön Ödemeli Kartlar</translation>
 <translation id="7275334191706090484">Yönetilen Yer İşaretleri</translation>
 <translation id="7298195798382681320">Önerilenler</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">Daha fazla bilgi gerekli</translation>
 <translation id="9080712759204168376">Sipariş Özeti</translation>
 <translation id="9089260154716455634">Mesai Dışı Saatler Politikası:</translation>
+<translation id="9093075372111400787">Gelişmiş bilgileri kapat</translation>
 <translation id="9095388113577226029">Diğer diller...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> normalde bilgilerinizi korumak için şifreleme kullanmaktadır. Chromium bu sefer <ph name="SITE" /> sitesine bağlanmayı denediğinde, web sitesi sıra dışı ve yanlış kimlik bilgileri döndürdü. Bir saldırgan <ph name="SITE" /> gibi davranmaya çalışıyor olabilir ya da bir Kablosuz oturum açma ekranı bağlantıyı kesmiştir. Chromium herhangi bir veri alışverişinden önce bağlantıyı durdurduğu için bilgileriniz hâlâ güvendedir.</translation>
 <translation id="9106062320799175032">Fatura Adresi Ekleyin</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 7c876a9..b6cc1e06 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Імена користувачів пристрою та веб-переглядача</translation>
 <translation id="2491120439723279231">Сертифікат сервера містить помилки.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Ви зазвичай відвідуєте сайт &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Сайт, на який ви щойно намагалися перейти, здається схожим, але не повністю збігається із сайтом у вашій історії. Зловмисники іноді намагаються таким чином обманути чи ошукати користувачів.</translation>
 <translation id="2495083838625180221">Синтаксичний аналізатор файлів JSON</translation>
 <translation id="2495093607237746763">Якщо вибрати цю опцію, Chromium зберігатиме копію даних вашої картки на цьому пристрої, щоб ви могли швидше заповнювати форми.</translation>
 <translation id="2498091847651709837">Сканувати нову картку</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">З’єднання зашифровано й автентифіковано з використанням шифру <ph name="CIPHER" /> і використовує механізм обміну ключами <ph name="KX" />.</translation>
 <translation id="2835170189407361413">Очистити форму</translation>
 <translation id="2847118875340931228">Відкрити вікно в режимі анонімного перегляду</translation>
+<translation id="2849445596171421624">Натиснувши "Продовжити", ви перейдете на звичний сайт &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (конверт)</translation>
 <translation id="2851634818064021665">Щоб відвідувати цей сайт, потрібен дозвіл</translation>
 <translation id="2856444702002559011">Зловмисники можуть намагатися викрасти вашу інформацію із сайту <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (наприклад, паролі, повідомлення чи дані кредитних карток). <ph name="BEGIN_LEARN_MORE_LINK" />Докладніше<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Видалити картку</translation>
 <translation id="4587425331216688090">Видалити адресу з Chrome?</translation>
 <translation id="4592951414987517459">З’єднання з доменом <ph name="DOMAIN" /> шифрується за допомогою сучасного набору шифрів.</translation>
+<translation id="4594047029158047642">Натиснуте посилання спрямовує на незвичний сайт. Можливо, зловмисники намагаються вас спантеличити.</translation>
 <translation id="4594403342090139922">&amp;Відмінити видалення</translation>
 <translation id="4597348597567598915">Розмір 8</translation>
 <translation id="4600854749408232102">C6/C5 (конверт)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Ви можете втратити доступ до облікового запису організації, або хтось може викрасти вашу особисту інформацію. Chrome радить змінити пароль.</translation>
 <translation id="5171045022955879922">Знайдіть або введіть URL-адресу</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Ви зазвичай відвідуєте сайт &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL-адреса, за якою ви щойно намагалися перейти, здається схожою, але не повністю збігається із сайтом у вашій історії. Зловмисники іноді намагаються таким чином обманути чи ошукати користувачів.</translation>
 <translation id="5172758083709347301">Комп’ютер</translation>
 <translation id="5179510805599951267">Це не <ph name="ORIGINAL_LANGUAGE" />? Повідомте про помилку</translation>
 <translation id="5190835502935405962">Панель закладок</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Вимк.</translation>
 <translation id="5863847714970149516">Наступна сторінка може спробувати стягнути плату</translation>
 <translation id="5866257070973731571">Додайте номер телефону</translation>
+<translation id="5866898949289125849">Ви переглядаєте сторінку Інструментів розробника</translation>
 <translation id="5869405914158311789">Немає зв’язку із сайтом</translation>
 <translation id="5869522115854928033">Збережені паролі</translation>
 <translation id="5887400589839399685">Картку збережено</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Правило не підтримується.</translation>
 <translation id="6895330447102777224">Дані картки підтверджено</translation>
 <translation id="6897140037006041989">Агент користувача</translation>
-<translation id="6903319715792422884">Допоможіть покращити Безпечний перегляд, надсилаючи в Google деяку <ph name="BEGIN_WHITEPAPER_LINK" />інформацію про систему та вміст сторінок<ph name="END_WHITEPAPER_LINK" />. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Користувач:</translation>
 <translation id="6934672428414710184">Це ім’я з вашого облікового запису Google</translation>
 <translation id="6944692733090228304">Ви ввели пароль на сайті, яким не керує <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Щоб захистити свій обліковий запис, не використовуйте цей пароль для інших додатків і сайтів.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Не вдається встановити конфіденційне з’єднання з <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, оскільки на комп’ютері встановлено неправильні дату й час (<ph name="DATE_AND_TIME" />).</translation>
 <translation id="7260504762447901703">Скасувати доступ</translation>
+<translation id="726226871651201355">Перейти на сайт &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Передплачені картки, які приймаються до оплати</translation>
 <translation id="7275334191706090484">Закладки, якими керує адміністратор</translation>
 <translation id="7298195798382681320">Рекомендоване</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">Потрібно більше інформації</translation>
 <translation id="9080712759204168376">Підсумок замовлення</translation>
 <translation id="9089260154716455634">Правило неробочого часу:</translation>
+<translation id="9093075372111400787">Закрити розширений опис</translation>
 <translation id="9095388113577226029">Інші мови…</translation>
 <translation id="9103872766612412690">Веб-сайт <ph name="SITE" /> зазвичай використовує шифрування для захисту вашої інформації. Під час цієї спроби Chromium під’єднатися до сторінки <ph name="SITE" /> з неї отримано незвичні й неправильні облікові дані. Це може статися, коли зловмисник намагається видавати себе за веб-сайт <ph name="SITE" /> або з’єднання перервано екраном входу Wi-Fi. Ваша інформація залишається захищеною, оскільки Chromium припинив з’єднання до того, як почався обмін будь-якими даними.</translation>
 <translation id="9106062320799175032">Додайте платіжну адресу</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index be9b44ca..da8901d 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">Tên người dùng dành cho thiết bị và trình duyệt của bạn</translation>
 <translation id="2491120439723279231">Chứng chỉ của máy chủ có lỗi.</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">Bạn thường truy cập vào &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. Trang web mà bạn vừa cố truy cập có vẻ giống nhưng không khớp chính xác với trang web trong phần lịch sử. Đôi khi, kẻ tấn công sử dụng kỹ thuật này để lừa hoặc có mưu đồ lừa đảo bạn.</translation>
 <translation id="2495083838625180221">Trình phân tích cú pháp JSON</translation>
 <translation id="2495093607237746763">Nếu được chọn, Chromium sẽ lưu trữ bản sao thẻ của bạn trên thiết bị này để điền biểu mẫu nhanh hơn.</translation>
 <translation id="2498091847651709837">Quét thẻ mới</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">Kết nối được mã hóa và xác thực bằng <ph name="CIPHER" /> đồng thời sử dụng <ph name="KX" /> làm cơ chế trao đổi chính.</translation>
 <translation id="2835170189407361413">Xóa biểu mẫu</translation>
 <translation id="2847118875340931228">Mở cửa sổ ẩn danh</translation>
+<translation id="2849445596171421624">Khi nhấp vào nút Tiếp tục, bạn sẽ được chuyển đến trang web phổ biến hơn là &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;.</translation>
 <translation id="2850739647070081192">Invite (Phong bì)</translation>
 <translation id="2851634818064021665">Bạn cần quyền để truy cập trang web này</translation>
 <translation id="2856444702002559011">Những kẻ tấn công có thể đang cố gắng đánh cắp thông tin của bạn từ <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (ví dụ: mật khẩu, thư hoặc thẻ tín dụng). <ph name="BEGIN_LEARN_MORE_LINK" />Tìm hiểu thêm<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">Xóa thẻ</translation>
 <translation id="4587425331216688090">Xóa địa chỉ khỏi Chrome?</translation>
 <translation id="4592951414987517459">Kết nối của bạn tới <ph name="DOMAIN" /> được mã hóa bằng bộ số 0 hiện đại.</translation>
+<translation id="4594047029158047642">Đường dẫn liên kết bạn mở chuyển đến một trang web không phổ biến. Có thể trang web này đang cố gây nhầm lẫn cho bạn.</translation>
 <translation id="4594403342090139922">&amp;Hoàn tác xóa</translation>
 <translation id="4597348597567598915">Kích thước 8</translation>
 <translation id="4600854749408232102">C6/C5 (Phong bì)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">Bạn có thể mất quyền truy cập vào tài khoản của tổ chức mình hoặc bị đánh cắp danh tính. Chrome khuyên bạn nên thay đổi mật khẩu ngay bây giờ.</translation>
 <translation id="5171045022955879922">Tìm kiếm hoặc nhập URL</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">Bạn thường truy cập vào &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;. URL mà bạn vừa cố truy cập có vẻ giống nhưng không khớp chính xác với trang web trong phần lịch sử. Đôi khi, kẻ tấn công sử dụng kỹ thuật này để lừa hoặc có mưu đồ lừa đảo bạn.</translation>
 <translation id="5172758083709347301">Máy</translation>
 <translation id="5179510805599951267">Không ở <ph name="ORIGINAL_LANGUAGE" />? Báo cáo lỗi này</translation>
 <translation id="5190835502935405962">Thanh Dấu trang</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">Tắt</translation>
 <translation id="5863847714970149516">Trang phía trước có thể tìm cách tính phí bạn</translation>
 <translation id="5866257070973731571">Thêm số điện thoại</translation>
+<translation id="5866898949289125849">Bạn đang xem trang công cụ dành cho nhà phát triển</translation>
 <translation id="5869405914158311789">Không thể truy cập trang web này</translation>
 <translation id="5869522115854928033">Mật khẩu đã lưu</translation>
 <translation id="5887400589839399685">Đã lưu thẻ</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">Cấp chính sách không được hỗ trợ.</translation>
 <translation id="6895330447102777224">Thẻ của bạn đã được xác nhận</translation>
 <translation id="6897140037006041989">Tác nhân Người dùng</translation>
-<translation id="6903319715792422884">Giúp cải thiện tính năng Duyệt web an toàn bằng cách gửi một số <ph name="BEGIN_WHITEPAPER_LINK" />thông tin hệ thống và nội dung trang<ph name="END_WHITEPAPER_LINK" /> tới Google. <ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">Người dùng:</translation>
 <translation id="6934672428414710184">Tên này lấy từ Tài khoản Google của bạn</translation>
 <translation id="6944692733090228304">Bạn đã nhập mật khẩu trên trang web không do <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> quản lý. Để bảo vệ tài khoản, không sử dụng lại mật khẩu của bạn trên các ứng dụng và trang web khác.</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">Không thể thiết lập kết nối riêng tư với <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> vì ngày và giờ (<ph name="DATE_AND_TIME" />) trên máy tính của bạn không đúng.</translation>
 <translation id="7260504762447901703">Thu hồi quyền truy cập</translation>
+<translation id="726226871651201355">Tiếp tục truy cập vào &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
 <translation id="7271803869921933038">Thẻ trả trước được chấp nhận</translation>
 <translation id="7275334191706090484">Dấu trang được quản lý</translation>
 <translation id="7298195798382681320">Được đề xuất</translation>
@@ -1491,6 +1496,7 @@
 <translation id="9078964945751709336">Yêu cầu thêm thông tin</translation>
 <translation id="9080712759204168376">Tóm tắt đơn hàng</translation>
 <translation id="9089260154716455634">Chính sách về khoảng thời gian tắt:</translation>
+<translation id="9093075372111400787">Ẩn thông tin bổ sung</translation>
 <translation id="9095388113577226029">Ngôn ngữ khác...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> thường sử dụng mã hóa để bảo vệ thông tin của bạn. Khi Chromium cố gắng kết nối với <ph name="SITE" /> tại thời điểm này, trang web đã gửi lại thông tin đăng nhập không chính xác và bất thường. Điều này có thể xảy ra khi kẻ tấn công đang cố gắng giả mạo là <ph name="SITE" /> hoặc màn hình đăng nhập Wi-Fi đã làm gián đoạn kết nối. Thông tin của bạn vẫn an toàn do Chromium đã ngừng kết nối trước khi bất kỳ dữ liệu nào được trao đổi.</translation>
 <translation id="9106062320799175032">Thêm địa chỉ thanh toán</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index ff093c6..da3ddb7e 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -293,6 +293,7 @@
 <translation id="2485387744899240041">您的设备和浏览器的用户名</translation>
 <translation id="2491120439723279231">服务器证书中包含错误。</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">您通常访问的是 &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;。您刚才试图访问的网站与历史记录中的网站很相似,但不完全匹配。攻击者有时会利用这种方法来诱骗或欺骗您。</translation>
 <translation id="2495083838625180221">JSON 解析器</translation>
 <translation id="2495093607237746763">选中后,Chromium 会将您的信用卡副本存储在此设备上,以加快表单填写速度。</translation>
 <translation id="2498091847651709837">扫描新的信用卡</translation>
@@ -358,6 +359,7 @@
 <translation id="2826760142808435982">该连接使用 <ph name="CIPHER" /> 进行加密和身份验证,并使用 <ph name="KX" /> 作为密钥交换机制。</translation>
 <translation id="2835170189407361413">清除表单</translation>
 <translation id="2847118875340931228">打开无痕式窗口</translation>
+<translation id="2849445596171421624">点击“继续”即可访问正常的网站 &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;。</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
 <translation id="2851634818064021665">您需获得许可,才能访问此网站</translation>
 <translation id="2856444702002559011">攻击者可能会试图从 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 窃取您的信息(例如:密码、通讯内容或信用卡信息)。<ph name="BEGIN_LEARN_MORE_LINK" />了解详情<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -673,6 +675,7 @@
 <translation id="4582204425268416675">移除卡</translation>
 <translation id="4587425331216688090">从 Chrome 中移除地址?</translation>
 <translation id="4592951414987517459">您与 <ph name="DOMAIN" /> 之间的连接采用新型加密套件进行了加密。</translation>
+<translation id="4594047029158047642">您打开的链接指向一个异常网站。该链接可能在试图迷惑您。</translation>
 <translation id="4594403342090139922">撤消删除(&amp;U)</translation>
 <translation id="4597348597567598915">大小:8</translation>
 <translation id="4600854749408232102">C6/C5 (Envelope)</translation>
@@ -775,6 +778,7 @@
 <translation id="5169827969064885044">您可能会无法再访问所属组织的帐号,或被他人盗用身份信息。Chrome 建议您立即更改密码。</translation>
 <translation id="5171045022955879922">搜索或输入网址</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">您通常访问的是 &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;。您刚才试图访问的网址与历史记录中的网站很相似,但不完全匹配。攻击者有时会利用这种方法来诱骗或欺骗您。</translation>
 <translation id="5172758083709347301">本机</translation>
 <translation id="5179510805599951267">不是<ph name="ORIGINAL_LANGUAGE" />?报告此错误</translation>
 <translation id="5190835502935405962">书签栏</translation>
@@ -903,6 +907,7 @@
 <translation id="5860033963881614850">关闭</translation>
 <translation id="5863847714970149516">即将进入的页面可能会向您收取费用</translation>
 <translation id="5866257070973731571">添加电话号码</translation>
+<translation id="5866898949289125849">您当前查看的是一个开发者工具页面</translation>
 <translation id="5869405914158311789">无法访问此网站</translation>
 <translation id="5869522115854928033">已保存的密码</translation>
 <translation id="5887400589839399685">已保存卡片</translation>
@@ -1070,7 +1075,6 @@
 <translation id="6891596781022320156">政策级别不受支持。</translation>
 <translation id="6895330447102777224">已确认您的信用卡</translation>
 <translation id="6897140037006041989">用户代理</translation>
-<translation id="6903319715792422884">您可以选择向 Google 发送一些<ph name="BEGIN_WHITEPAPER_LINK" />系统信息和网页内容<ph name="END_WHITEPAPER_LINK" />,以帮助我们改进安全浏览功能。<ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">用户:</translation>
 <translation id="6934672428414710184">此名称来自您的 Google 帐号</translation>
 <translation id="6944692733090228304">您在一个不受 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 管理的网站上输入了您的密码。为了保护您的帐号,请不要在其他应用和网站上重复使用您的密码。</translation>
@@ -1137,6 +1141,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">您计算机的日期和时间(<ph name="DATE_AND_TIME" />)不正确,因此无法与 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 建立私密连接。</translation>
 <translation id="7260504762447901703">撤消访问权限</translation>
+<translation id="726226871651201355">要继续访问 &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; 吗?</translation>
 <translation id="7271803869921933038">接受的预付卡</translation>
 <translation id="7275334191706090484">受管理的书签</translation>
 <translation id="7298195798382681320">推荐</translation>
@@ -1475,6 +1480,7 @@
 <translation id="9078964945751709336">必须提供更多信息</translation>
 <translation id="9080712759204168376">订单摘要</translation>
 <translation id="9089260154716455634">“非工作时间”政策:</translation>
+<translation id="9093075372111400787">关闭详细信息</translation>
 <translation id="9095388113577226029">更多语言…</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> 通常会使用加密技术来保护您的信息。Chromium 此次尝试连接到 <ph name="SITE" /> 时,此网站发回了异常的错误凭据。这可能是因为有攻击者在试图冒充 <ph name="SITE" />,或 Wi-Fi 登录屏幕中断了此次连接。请放心,您的信息仍然是安全的,因为 Chromium 尚未进行任何数据交换便停止了连接。</translation>
 <translation id="9106062320799175032">添加帐单邮寄地址</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index e49530f..7a4aafaa 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -301,6 +301,7 @@
 <translation id="2485387744899240041">你在裝置和瀏覽器中的使用者名稱</translation>
 <translation id="2491120439723279231">伺服器憑證含有錯誤。</translation>
 <translation id="2493640343870896922">Letter-Plus</translation>
+<translation id="2494497504885199552">你平常造訪的網站是 &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;。你剛才嘗試造訪的網站看起來與你歷史記錄中的網站很像,但不完全相同。攻擊者有時會使用這種技巧來欺騙你或進行詐騙。</translation>
 <translation id="2495083838625180221">JSON 剖析器</translation>
 <translation id="2495093607237746763">勾選後,Chromium 會將您的信用卡資料儲存在這個裝置上,以加快表單填寫速度。</translation>
 <translation id="2498091847651709837">掃描新信用卡</translation>
@@ -366,6 +367,7 @@
 <translation id="2826760142808435982">連線採用 <ph name="CIPHER" /> 加密,並設有 <ph name="KX" /> 金鑰交換機制。</translation>
 <translation id="2835170189407361413">清除表單</translation>
 <translation id="2847118875340931228">開啟無痕式視窗</translation>
+<translation id="2849445596171421624">按一下 [繼續] 即會前往較常見的網站 &lt;a href="#" id="dont-proceed-link3"&gt;<ph name="DOMAIN" />&lt;/a&gt;。</translation>
 <translation id="2850739647070081192">Invite (信封)</translation>
 <translation id="2851634818064021665">你必須獲得授權,才能造訪這個網站</translation>
 <translation id="2856444702002559011">攻擊者可能會試圖從 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 竊取你的資訊 (例如密碼、郵件或信用卡資料)。<ph name="BEGIN_LEARN_MORE_LINK" />瞭解詳情<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -685,6 +687,7 @@
 <translation id="4582204425268416675">移除卡片</translation>
 <translation id="4587425331216688090">要從 Chrome 中移除地址嗎?</translation>
 <translation id="4592951414987517459">您的 <ph name="DOMAIN" /> 連線使用新型加密套件進行加密。</translation>
+<translation id="4594047029158047642">你開啟的連結會將你導向陌生網站。這個連結可能試圖要誤導你。</translation>
 <translation id="4594403342090139922">復原刪除(&amp;U)</translation>
 <translation id="4597348597567598915">粗細:8</translation>
 <translation id="4600854749408232102">C6/C5 (信封)</translation>
@@ -787,6 +790,7 @@
 <translation id="5169827969064885044">你可能會失去貴機構帳戶的存取權,或身分遭到冒用。Chrome 建議你立即變更密碼。</translation>
 <translation id="5171045022955879922">搜尋或輸入網址</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
+<translation id="5172068981283436906">你平常造訪的網址是 &lt;a href="#" id="dont-proceed-link2"&gt;<ph name="DOMAIN" />&lt;/a&gt;。你剛才嘗試造訪的網址看起來與你歷史記錄中的網址很像,但不完全相同。攻擊者有時會使用這種技巧來欺騙你或進行詐騙。</translation>
 <translation id="5172758083709347301">本機</translation>
 <translation id="5179510805599951267">網頁內容不是<ph name="ORIGINAL_LANGUAGE" />嗎?請回報此錯誤</translation>
 <translation id="5190835502935405962">書籤列</translation>
@@ -915,6 +919,7 @@
 <translation id="5860033963881614850">關閉</translation>
 <translation id="5863847714970149516">你要瀏覽的網頁可能會向你收取費用</translation>
 <translation id="5866257070973731571">新增電話號碼</translation>
+<translation id="5866898949289125849">目前查看的是開發人員工具頁面</translation>
 <translation id="5869405914158311789">無法連上這個網站</translation>
 <translation id="5869522115854928033">已儲存的密碼</translation>
 <translation id="5887400589839399685">已儲存卡片</translation>
@@ -1083,7 +1088,6 @@
 <translation id="6891596781022320156">系統不支援這項政策的層級。</translation>
 <translation id="6895330447102777224">您的信用卡已通過驗證</translation>
 <translation id="6897140037006041989">使用者代理程式</translation>
-<translation id="6903319715792422884">將部分<ph name="BEGIN_WHITEPAPER_LINK" />系統資訊和網頁內容<ph name="END_WHITEPAPER_LINK" />傳送給 Google,協助我們改善安全瀏覽功能。<ph name="PRIVACY_PAGE_LINK" /></translation>
 <translation id="6915804003454593391">使用者:</translation>
 <translation id="6934672428414710184">這是你在 Google 帳戶中設定的名稱</translation>
 <translation id="6944692733090228304">你在不是由 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 管理的網站上輸入了你的密碼。為確保帳戶安全,請勿在其他應用程式和網站上重複使用你的密碼。</translation>
@@ -1153,6 +1157,7 @@
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">你電腦的日期和時間 (<ph name="DATE_AND_TIME" />) 不正確,因此無法與 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 建立私人連線。</translation>
 <translation id="7260504762447901703">撤銷存取權</translation>
+<translation id="726226871651201355">要繼續前往 &lt;a href="#" id="dont-proceed-link1"&gt;<ph name="DOMAIN" />&lt;/a&gt; 嗎?</translation>
 <translation id="7271803869921933038">接受的預付卡</translation>
 <translation id="7275334191706090484">受管理書籤</translation>
 <translation id="7298195798382681320">建議採用</translation>
@@ -1490,6 +1495,7 @@
 <translation id="9078964945751709336">請提供詳細資訊</translation>
 <translation id="9080712759204168376">訂單摘要</translation>
 <translation id="9089260154716455634">停機時間政策:</translation>
+<translation id="9093075372111400787">關閉詳細資訊</translation>
 <translation id="9095388113577226029">更多語言...</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> 通常使用加密方式保護您的資訊。但 Chromium 這次嘗試連線到 <ph name="SITE" /> 時,該網站傳回了異常且錯誤的憑證。這可能是因為有攻擊者企圖偽裝成 <ph name="SITE" />,或是受到 Wi-Fi 登入畫面影響而造成連線中斷。不過請放心,Chromium 已及時停止連線,並未傳輸任何資料,因此您的資訊仍然安全無虞。</translation>
 <translation id="9106062320799175032">新增帳單地址</translation>
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc
index 6d071c3..7a25f186b 100644
--- a/components/sync/driver/profile_sync_service.cc
+++ b/components/sync/driver/profile_sync_service.cc
@@ -809,7 +809,6 @@
     const std::string& bag_of_chips,
     bool success) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  DCHECK(!cache_guid.empty());
 
   // TODO(treib): Based on some crash reports, it seems like the user could have
   // signed out already at this point, so many of the steps below, including
@@ -831,6 +830,8 @@
     return;
   }
 
+  DCHECK(!cache_guid.empty());
+
   sync_js_controller_.AttachJsBackend(js_backend);
 
   // Save initialization data to preferences.
diff --git a/components/sync/driver/sync_driver_switches.cc b/components/sync/driver/sync_driver_switches.cc
index b2b65a1d..a536ef5 100644
--- a/components/sync/driver/sync_driver_switches.cc
+++ b/components/sync/driver/sync_driver_switches.cc
@@ -5,6 +5,7 @@
 #include "components/sync/driver/sync_driver_switches.h"
 
 #include "base/command_line.h"
+#include "build/build_config.h"
 
 namespace switches {
 
@@ -57,10 +58,16 @@
                                        base::FEATURE_ENABLED_BY_DEFAULT};
 
 // If enabled, allows the Sync machinery to start with a signed-in account that
-// has *not* been chosen as Chrome's primary account (see IdentityManager). Only
-// has an effect if SyncStandaloneTransport is also enabled.
-const base::Feature kSyncSupportSecondaryAccount{
-    "SyncSupportSecondaryAccount", base::FEATURE_DISABLED_BY_DEFAULT};
+// has *not* been chosen as Chrome's primary account (see IdentityManager).
+const base::Feature kSyncSupportSecondaryAccount {
+  "SyncSupportSecondaryAccount",
+#if defined(OS_WIN) || defined(OS_MACOSX) || \
+    (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+      base::FEATURE_ENABLED_BY_DEFAULT
+#else
+      base::FEATURE_DISABLED_BY_DEFAULT
+#endif
+};
 
 // Enable USS implementation of Bookmarks datatype.
 const base::Feature kSyncUSSBookmarks{"SyncUSSBookmarks",
diff --git a/components/sync/engine_impl/sync_scheduler_impl_unittest.cc b/components/sync/engine_impl/sync_scheduler_impl_unittest.cc
index 6ff79c5..82ca0fa 100644
--- a/components/sync/engine_impl/sync_scheduler_impl_unittest.cc
+++ b/components/sync/engine_impl/sync_scheduler_impl_unittest.cc
@@ -97,7 +97,7 @@
   SyncSchedulerImplTest()
       : task_environment_(
             base::test::ScopedTaskEnvironment::ThreadPoolExecutionMode::ASYNC,
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         syncer_(nullptr),
         delay_(nullptr) {}
 
diff --git a/components/url_formatter/spoof_checks/idn_spoof_checker.cc b/components/url_formatter/spoof_checks/idn_spoof_checker.cc
index 97711146..de326f80 100644
--- a/components/url_formatter/spoof_checks/idn_spoof_checker.cc
+++ b/components/url_formatter/spoof_checks/idn_spoof_checker.cc
@@ -192,7 +192,8 @@
   //   - U+0153 (œ) => "ce"
   //     TODO: see https://crbug.com/843352 for further work on
   //     U+0525 and U+0153.
-  //   - {U+0167 (ŧ), U+0442 (т), U+04AD (ҭ), U+050F (ԏ)} => t
+  //   - {U+0167 (ŧ), U+0442 (т), U+04AD (ҭ), U+050F (ԏ), U+4E03 (七),
+  //     U+4E05 (丅), U+4E06 (丆)} => t
   //   - {U+0185 (ƅ), U+044C (ь), U+048D (ҍ), U+0432 (в)} => b
   //   - {U+03C9 (ω), U+0448 (ш), U+0449 (щ), U+0E1E (พ),
   //      U+0E1F (ฟ), U+0E9E (ພ), U+0E9F (ຟ)} => w
@@ -201,8 +202,8 @@
   //   - U+0491 (ґ) => r
   //   - {U+0493 (ғ), U+04FB (ӻ)} => f
   //   - {U+04AB (ҫ), U+1004 (င)} => c
-  //   - U+04B1 (ұ) => y
-  //   - {U+03C7 (χ), U+04B3 (ҳ), U+04FD (ӽ), U+04FF (ӿ)} => x
+  //   - {U+04B1 (ұ), U+4E2B (丫)} => y
+  //   - {U+03C7 (χ), U+04B3 (ҳ), U+04FD (ӽ), U+04FF (ӿ), U+4E42 (乂)} => x
   //   - {U+0503 (ԃ), U+10EB (ძ)} => d
   //   - {U+050D (ԍ), U+100c (ဌ)} => g
   //   - {U+0D1F (ട), U+0E23 (ร), U+0EA3 (ຣ), U+0EAE (ຮ)} => s
@@ -217,7 +218,7 @@
   //   - {U+0437 (з), U+0499 (ҙ), U+04E1 (ӡ), U+0909 (उ), U+0993 (ও),
   //      U+0A24 (ਤ), U+0A69 (੩), U+0AE9 (૩), U+0C69 (౩),
   //      U+1012 (ဒ), U+10D5 (ვ), U+10DE (პ)} => 3
-  //   - {U+0A6B (੫)} => 4,
+  //   - {U+0A6B (੫), U+4E29 (丩)} => 4,
   //   - {U+09EA (৪), U+0A6A (੪), U+0b6b (୫)} => 8,
   //   - {U+0AED (૭), U+0b68 (୨), U+0C68 (౨)} => 9,
   //   Map a few dashes that ICU doesn't map. These are already blocked by ICU,
@@ -228,9 +229,9 @@
       icu::UnicodeString::fromUTF8(
           "[æӕ] > ae; [þϼҏ] > p; [ħнћңҥӈӊԋԧԩ] > h;"
           "[ĸκкқҝҟҡӄԟ] > k; [ŋпԥก] > n; œ > ce;"
-          "[ŧтҭԏ] > t; [ƅьҍв] > b;  [ωшщพฟພຟ] > w;"
+          "[ŧтҭԏ七丅丆] > t; [ƅьҍв] > b;  [ωшщพฟພຟ] > w;"
           "[мӎ] > m; [єҽҿၔ] > e; ґ > r; [ғӻ] > f;"
-          "[ҫင] > c; ұ > y; [χҳӽӿ] > x;"
+          "[ҫင] > c; [ұ丫] > y; [χҳӽӿ乂] > x;"
           "[ԃძ]  > d; [ԍဌ] > g; [ടรຣຮ] > s; ၂ > j;"
           "[०০੦૦ଠ୦೦] > o;"
           "[৭੧૧] > q;"
@@ -238,7 +239,7 @@
           "[θ] > 0;"
           "[२২੨੨૨೩೭] > 2;"
           "[зҙӡउওਤ੩૩౩ဒვპ] > 3;"
-          "[੫] > 4;"
+          "[੫丩] > 4;"
           "[৪੪୫] > 8;"
           "[૭୨౨] > 9;"
           "[—一―⸺⸻] > \\-;"),
@@ -319,8 +320,8 @@
     dangerous_pattern = new icu::RegexMatcher(
         icu::UnicodeString(
             // Disallow the following as they may be mistaken for slashes when
-            // they're surrounded by non-Japanese scripts (i.e. scripts other
-            // than Katakana, Hiragana or Han):
+            // they're surrounded by non-Japanese scripts (i.e. has non-Katakana
+            // Hiragana or Han scripts on both sides):
             // "ノ" (Katakana no, U+30ce), "ソ" (Katakana so, U+30bd),
             // "ゾ" (Katakana zo, U+30be), "ン" (Katakana n, U+30f3),
             // "丶" (CJK unified ideograph, U+4E36),
diff --git a/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc b/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc
index bce7aa80..48f750a 100644
--- a/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc
+++ b/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc
@@ -1066,7 +1066,15 @@
     {"xn--google-8m4e.com", L"google\x309A.com", false},
 
     // Small letter theta looks like a zero.
-    {"xn--123456789-yzg.com", L"123456789θ.com", false}};
+    {"xn--123456789-yzg.com", L"123456789θ.com", false},
+
+    {"xn--est-118d.net", L"七est.net", false},
+    {"xn--est-918d.net", L"丅est.net", false},
+    {"xn--est-e28d.net", L"丆est.net", false},
+    {"xn--3-cq6a.com", L"丩3.com", false},
+    {"xn--cxe-n68d.com", L"c丫xe.com", false},
+    {"xn--cye-b98d.com", L"cy乂e.com", false},
+};  // namespace
 
 namespace test {
 #include "components/url_formatter/spoof_checks/top_domains/test_domains-trie-inc.cc"
@@ -1186,36 +1194,35 @@
 TEST(IDNSpoofCheckerNoFixtureTest, Skeletons) {
   // All of these should produce the same skeleton. Not all of these are
   // explicitly mapped in idn_spoof_checker.cc, ICU already handles some.
-  const GURL kTestCases[] = {
-      // U+2010 (Hyphen)
-      GURL("http://test‐site"),
-      // U+2011 (Non breaking hyphen)
-      GURL("http://test‑site"),
-      // U+2012 (Figure dash)
-      GURL("http://test‒site"),
-      // U+2013 (En dash)
-      GURL("http://test–site"),
-      // U+2014 (Em dash)
-      GURL("http://test—site"),
-      // U+2015 (Horizontal bar)
-      GURL("http://test―site"),
-      // U+4E00 (一)
-      GURL("http://test一site"),
-      // U+2212 (minus sign)
-      GURL("http://test−site"),
-      // U+2E3A (two-em dash)
-      GURL("http://test⸺site"),
-      // U+2E3B (three-em dash)
-      GURL("http://test⸻site"),
-  };
+  const char kDashSite[] = "test-site";
+  const struct TestCase {
+    const GURL url;
+    const char* const expected_skeleton;
+  } kTestCases[] = {
+      {GURL("http://test‐site"), kDashSite},   // U+2010 (Hyphen)
+      {GURL("http://test‑site"), kDashSite},   // U+2011 (Non breaking hyphen)
+      {GURL("http://test‒site"), kDashSite},   // U+2012 (Figure dash)
+      {GURL("http://test–site"), kDashSite},   // U+2013 (En dash)
+      {GURL("http://test—site"), kDashSite},   // U+2014 (Em dash)
+      {GURL("http://test―site"), kDashSite},   // U+2015 (Horizontal bar)
+      {GURL("http://test一site"), kDashSite},  // U+4E00 (一)
+      {GURL("http://test−site"), kDashSite},   // U+2212 (minus sign)
+      {GURL("http://test⸺site"), kDashSite},   // U+2E3A (two-em dash)
+      {GURL("http://test⸻site"), kDashSite},   // U+2E3B (three-em dash)
+      {GURL("http://七est.net"), "test.net"},
+      {GURL("http://丅est.net"), "test.net"},
+      {GURL("http://丆est.net"), "test.net"},
+      {GURL("http://c丫xe.com"), "cyxe.corn"},
+      {GURL("http://cy乂e.com"), "cyxe.corn"},
+      {GURL("http://丩3.com"), "43.corn"}};
 
   IDNSpoofChecker checker;
-  for (const GURL& url : kTestCases) {
+  for (const TestCase& test_case : kTestCases) {
     const url_formatter::IDNConversionResult result =
-        UnsafeIDNToUnicodeWithDetails(url.host());
+        UnsafeIDNToUnicodeWithDetails(test_case.url.host());
     Skeletons skeletons = checker.GetSkeletons(result.result);
     EXPECT_EQ(1u, skeletons.size());
-    EXPECT_EQ("test-site", *skeletons.begin());
+    EXPECT_EQ(test_case.expected_skeleton, *skeletons.begin());
   }
 }
 
diff --git a/components/viz/demo/service/demo_service.cc b/components/viz/demo/service/demo_service.cc
index 24a6724..a1cc8aaa 100644
--- a/components/viz/demo/service/demo_service.cc
+++ b/components/viz/demo/service/demo_service.cc
@@ -8,7 +8,7 @@
 #include <utility>
 
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
-#include "components/viz/service/main/viz_compositor_thread_runner.h"
+#include "components/viz/service/main/viz_compositor_thread_runner_impl.h"
 
 namespace demo {
 
@@ -20,7 +20,7 @@
   params->activation_deadline_in_frames = 0u;
   params->frame_sink_manager = std::move(request);
   params->frame_sink_manager_client = client.PassInterface();
-  runner_ = std::make_unique<viz::VizCompositorThreadRunner>();
+  runner_ = std::make_unique<viz::VizCompositorThreadRunnerImpl>();
   runner_->CreateFrameSinkManager(std::move(params));
 }
 
diff --git a/components/viz/demo/service/demo_service.h b/components/viz/demo/service/demo_service.h
index c409a81..5bd5b0ca 100644
--- a/components/viz/demo/service/demo_service.h
+++ b/components/viz/demo/service/demo_service.h
@@ -11,7 +11,7 @@
 #include "services/viz/privileged/mojom/compositing/frame_sink_manager.mojom.h"
 
 namespace viz {
-class VizCompositorThreadRunner;
+class VizCompositorThreadRunnerImpl;
 }  // namespace viz
 
 namespace demo {
@@ -27,7 +27,7 @@
   ~DemoService();
 
  private:
-  std::unique_ptr<viz::VizCompositorThreadRunner> runner_;
+  std::unique_ptr<viz::VizCompositorThreadRunnerImpl> runner_;
 
   DISALLOW_COPY_AND_ASSIGN(DemoService);
 };
diff --git a/components/viz/service/display/display_resource_provider.cc b/components/viz/service/display/display_resource_provider.cc
index 6004636c..3036bc7 100644
--- a/components/viz/service/display/display_resource_provider.cc
+++ b/components/viz/service/display/display_resource_provider.cc
@@ -253,8 +253,12 @@
 }
 
 gfx::BufferFormat DisplayResourceProvider::GetBufferFormat(ResourceId id) {
+  return BufferFormat(GetResourceFormat(id));
+}
+
+ResourceFormat DisplayResourceProvider::GetResourceFormat(ResourceId id) {
   ChildResource* resource = GetResource(id);
-  return BufferFormat(resource->transferable.format);
+  return resource->transferable.format;
 }
 
 const gfx::ColorSpace& DisplayResourceProvider::GetColorSpace(ResourceId id) {
diff --git a/components/viz/service/display/display_resource_provider.h b/components/viz/service/display/display_resource_provider.h
index d242f58..7ebd79f 100644
--- a/components/viz/service/display/display_resource_provider.h
+++ b/components/viz/service/display/display_resource_provider.h
@@ -113,6 +113,7 @@
   GLenum GetResourceTextureTarget(ResourceId id);
   // Return the format of the underlying buffer that can be used for scanout.
   gfx::BufferFormat GetBufferFormat(ResourceId id);
+  ResourceFormat GetResourceFormat(ResourceId id);
   const gfx::ColorSpace& GetColorSpace(ResourceId id);
   // Indicates if this resource may be used for a hardware overlay plane.
   bool IsOverlayCandidate(ResourceId id);
@@ -182,6 +183,7 @@
     ~ScopedReadLockSkImage();
 
     const SkImage* sk_image() const { return sk_image_.get(); }
+    sk_sp<SkImage> TakeSkImage() { return std::move(sk_image_); }
 
     bool valid() const { return !!sk_image_; }
 
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
index bf5ecc5b..bc58f3e 100644
--- a/components/viz/service/display/gl_renderer.cc
+++ b/components/viz/service/display/gl_renderer.cc
@@ -594,28 +594,32 @@
   }
 }
 
+static GrGLenum SkFormatToGlFormat(SkColorType format) {
+  switch (format) {
+    case kRGB_888x_SkColorType:
+      return GL_RGB8_OES;
+      break;
+    case kRGBA_8888_SkColorType:
+      return GL_RGBA8_OES;
+      break;
+    case kBGRA_8888_SkColorType:
+      return GL_BGRA8_EXT;
+      break;
+    default:
+      NOTREACHED();
+      return GL_RGBA8_OES;
+  }
+}
+
 // Wrap a given texture in a Ganesh backend texture.
 static sk_sp<SkImage> WrapTexture(uint32_t texture_id,
                                   uint32_t target,
                                   const gfx::Size& size,
                                   GrContext* context,
                                   bool flip_texture,
-                                  SkColorType format) {
-  GrGLenum texture_format(GL_RGBA8_OES);
-  switch (format) {
-    case kRGB_888x_SkColorType:
-      texture_format = GL_RGB8_OES;
-      break;
-    case kRGBA_8888_SkColorType:
-      texture_format = GL_RGBA8_OES;
-      break;
-    case kBGRA_8888_SkColorType:
-      texture_format = GL_BGRA8_EXT;
-      break;
-    default:
-      NOTREACHED();
-  }
-
+                                  SkColorType format,
+                                  bool adopt_texture) {
+  GrGLenum texture_format = SkFormatToGlFormat(format);
   GrGLTextureInfo texture_info;
   texture_info.fTarget = target;
   texture_info.fID = texture_id;
@@ -624,8 +628,13 @@
                                    GrMipMapped::kNo, texture_info);
   GrSurfaceOrigin origin =
       flip_texture ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOrigin;
-  return SkImage::MakeFromTexture(context, backend_texture, origin, format,
-                                  kPremul_SkAlphaType, nullptr);
+  if (adopt_texture) {
+    return SkImage::MakeFromAdoptedTexture(
+        context, backend_texture, origin, format, kPremul_SkAlphaType, nullptr);
+  } else {
+    return SkImage::MakeFromTexture(context, backend_texture, origin, format,
+                                    kPremul_SkAlphaType, nullptr);
+  }
 }
 
 static gfx::RectF CenteredRect(const gfx::Rect& tile_rect) {
@@ -887,12 +896,11 @@
     return nullptr;
 
   auto filter = paint_filter->cached_sk_filter_;
-  bool flip_texture = true;
-
   sk_sp<SkImage> src_image = WrapTexture(
       params->background_texture, GL_TEXTURE_2D, params->background_rect.size(),
-      use_gr_context->context(), flip_texture,
-      GlFormatToSkFormat(params->background_texture_format));
+      use_gr_context->context(), /*flip_texture=*/true,
+      GlFormatToSkFormat(params->background_texture_format),
+      /*adopt_texture=*/false);
   if (!src_image) {
     TRACE_EVENT_INSTANT0("cc",
                          "ApplyBackdropFilters wrap background texture failed",
@@ -976,13 +984,48 @@
   //   2. Render the parent render pass (containing the "backdrop image" to be
   //      filtered).
   //   3. Run this code, to filter, and possibly mask, the backdrop image.
-  const SkImage* mask_image = nullptr;
+  sk_sp<const SkImage> mask_image = nullptr;
   base::Optional<DisplayResourceProvider::ScopedReadLockSkImage>
-      backdrop_image_lock;
+      backdrop_image_lock_sk;
+  base::Optional<DisplayResourceProvider::ScopedSamplerGL>
+      backdrop_image_lock_gl;
   if (quad->mask_applies_to_backdrop && quad->mask_resource_id()) {
-    backdrop_image_lock.emplace(resource_provider_, quad->mask_resource_id());
-    // TODO(984766): This will be null on Mac, so masks will not be applied.
-    mask_image = backdrop_image_lock->sk_image();
+    if (resource_provider_->GetResourceTextureTarget(
+            quad->mask_resource_id()) == GL_TEXTURE_RECTANGLE_ARB) {
+      // On some platforms, Skia doesn't know that the hardware supports
+      // GL_TEXTURE_RECTANGLE. So for texture rectangles, fall back to using
+      // CopyTextureCHROMIUM to copy from the mask resource to a newly-created
+      // texture, and then wrap that texture with an SkImage.
+      backdrop_image_lock_gl.emplace(resource_provider_,
+                                     quad->mask_resource_id(), GL_LINEAR);
+      GLenum source_id = backdrop_image_lock_gl->texture_id();
+      GLint internalformat = GLInternalFormat(
+          resource_provider_->GetResourceFormat(quad->mask_resource_id()));
+      GLuint dest_id;
+      gl_->GenTextures(1, &dest_id);
+      gl_->BindTexture(GL_TEXTURE_2D, dest_id);
+      // Format is the same as internalformat for the formats being considered.
+      GLint format = internalformat;
+      gl_->TexImage2D(GL_TEXTURE_2D, 0, internalformat,
+                      quad->mask_texture_size.width(),
+                      quad->mask_texture_size.height(), 0, format,
+                      GL_UNSIGNED_BYTE, nullptr);
+      gl_->CopyTextureCHROMIUM(source_id, 0, GL_TEXTURE_2D, dest_id, 0,
+                               internalformat, GL_UNSIGNED_BYTE,
+                               /*unpack_flip_y=*/false,
+                               /*unpack_premultiply_alpha=*/false,
+                               /*unpack_unmultiply_alpha=*/false);
+      mask_image = WrapTexture(dest_id, GL_TEXTURE_2D, quad->mask_texture_size,
+                               use_gr_context->context(), false,
+                               GlFormatToSkFormat(internalformat),
+                               /*adopt_texture=*/true);
+    } else {
+      backdrop_image_lock_sk.emplace(
+          resource_provider_, quad->mask_resource_id(), kPremul_SkAlphaType,
+          kTopLeft_GrSurfaceOrigin);
+      mask_image = backdrop_image_lock_sk->TakeSkImage();
+    }
+    DCHECK(mask_image);
   }
   if (mask_image) {
     // Scale normalized uv rect into absolute texel coordinates.
@@ -1288,7 +1331,7 @@
           sk_sp<SkImage> src_image = WrapTexture(
               params->contents_texture->id(), GL_TEXTURE_2D,
               params->contents_texture->size(), use_gr_context->context(),
-              params->flip_texture, kN32_SkColorType);
+              params->flip_texture, kN32_SkColorType, /*adopt_texture=*/false);
           params->filter_image = SkiaHelper::ApplyImageFilter(
               use_gr_context->context(), src_image, src_rect, params->dst_rect,
               quad->filters_scale, std::move(filter), &offset, &subset,
@@ -1304,7 +1347,7 @@
                           prefilter_bypass_quad_texture_lock.target(),
                           prefilter_bypass_quad_texture_lock.size(),
                           use_gr_context->context(), params->flip_texture,
-                          kN32_SkColorType);
+                          kN32_SkColorType, /*adopt_texture=*/false);
           params->filter_image = SkiaHelper::ApplyImageFilter(
               use_gr_context->context(), src_image, src_rect, params->dst_rect,
               quad->filters_scale, std::move(filter), &offset, &subset,
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc
index 995666d..b6223fe 100644
--- a/components/viz/service/display/renderer_pixeltest.cc
+++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -2984,13 +2984,6 @@
   const bool is_gl_renderer =
       std::is_same<TypeParam, GLRenderer>() ||
       std::is_same<TypeParam, cc::GLRendererWithExpandedViewport>();
-  // TODO(984766): If the texture_rectangle feature is not available, then
-  // (currently) mask image readback will break for gl_renderer.
-  if (is_gl_renderer && !this->output_surface_->context_provider()
-                             ->ContextCapabilities()
-                             .texture_rectangle) {
-    return;
-  }
   // TODO(989312): The mask on gl_renderer and software_renderer appears to be
   // offset from the correct location.
   const bool is_software_renderer = std::is_same<TypeParam, SoftwareRenderer>();
diff --git a/components/viz/service/main/BUILD.gn b/components/viz/service/main/BUILD.gn
index b7521df..91aca4f 100644
--- a/components/viz/service/main/BUILD.gn
+++ b/components/viz/service/main/BUILD.gn
@@ -12,8 +12,9 @@
   defines = []
 
   sources = [
-    "viz_compositor_thread_runner.cc",
     "viz_compositor_thread_runner.h",
+    "viz_compositor_thread_runner_impl.cc",
+    "viz_compositor_thread_runner_impl.h",
     "viz_main_impl.cc",
     "viz_main_impl.h",
   ]
diff --git a/components/viz/service/main/viz_compositor_thread_runner.h b/components/viz/service/main/viz_compositor_thread_runner.h
index 7e5bb10..7909be3 100644
--- a/components/viz/service/main/viz_compositor_thread_runner.h
+++ b/components/viz/service/main/viz_compositor_thread_runner.h
@@ -1,46 +1,24 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #ifndef COMPONENTS_VIZ_SERVICE_MAIN_VIZ_COMPOSITOR_THREAD_RUNNER_H_
 #define COMPONENTS_VIZ_SERVICE_MAIN_VIZ_COMPOSITOR_THREAD_RUNNER_H_
 
-#include <memory>
-
-#include "base/macros.h"
-#include "base/memory/scoped_refptr.h"
-#include "build/build_config.h"
-#include "services/network/public/mojom/tcp_socket.mojom.h"
+#include "base/callback.h"
 #include "services/viz/privileged/mojom/viz_main.mojom.h"
 
-#if defined(OS_ANDROID)
-#include "base/android/java_handler_thread.h"
-#endif
-
 namespace base {
 class SingleThreadTaskRunner;
-class Thread;
-}  // namespace base
+}
 
 namespace gpu {
 class CommandBufferTaskExecutor;
 }  // namespace gpu
 
-namespace ui_devtools {
-class UiDevToolsServer;
-}  // namespace ui_devtools
-
 namespace viz {
-class OutputSurfaceProvider;
-class FrameSinkManagerImpl;
-class GpuServiceImpl;
-class ServerSharedBitmapManager;
 
-#if defined(OS_ANDROID)
-using VizCompositorThreadType = base::android::JavaHandlerThread;
-#else
-using VizCompositorThreadType = base::Thread;
-#endif
+class GpuServiceImpl;
 
 // Starts and runs the VizCompositorThread. The thread will be started when this
 // object is constructed. Objects on the thread will be initialized after
@@ -48,24 +26,24 @@
 // and then stop the thread.
 class VizCompositorThreadRunner {
  public:
-  VizCompositorThreadRunner();
-  // Performs teardown on thread and then stops thread.
-  ~VizCompositorThreadRunner();
+  virtual ~VizCompositorThreadRunner() = default;
 
   // Returns the TaskRunner for VizCompositorThread.
-  base::SingleThreadTaskRunner* task_runner() { return task_runner_.get(); }
+  virtual base::SingleThreadTaskRunner* task_runner() = 0;
 
   // Creates FrameSinkManager from |params|. The version with |gpu_service| and
   // |task_executor| supports both GPU and software compositing, while the
   // version without supports only software compositing. Should be called from
   // the thread that owns |this| to initialize state on VizCompositorThread.
-  void CreateFrameSinkManager(mojom::FrameSinkManagerParamsPtr params);
-  void CreateFrameSinkManager(mojom::FrameSinkManagerParamsPtr params,
-                              gpu::CommandBufferTaskExecutor* task_executor,
-                              GpuServiceImpl* gpu_service);
+  virtual void CreateFrameSinkManager(
+      mojom::FrameSinkManagerParamsPtr params) = 0;
+  virtual void CreateFrameSinkManager(
+      mojom::FrameSinkManagerParamsPtr params,
+      gpu::CommandBufferTaskExecutor* task_executor,
+      GpuServiceImpl* gpu_service) = 0;
 
 #if defined(USE_VIZ_DEVTOOLS)
-  void CreateVizDevTools(mojom::VizDevToolsParamsPtr params);
+  virtual void CreateVizDevTools(mojom::VizDevToolsParamsPtr params) = 0;
 #endif
 
   // Performs cleanup on VizCompositorThread needed before forcing thread to
@@ -77,37 +55,8 @@
   // This is intended to be used when the GPU thread wants to force restart. The
   // cleanup is normally handled by the browser process before GPU process
   // shutdown, except if the GPU thread is forcing restart.
-  void CleanupForShutdown(base::OnceClosure cleanup_finished_callback);
-
- private:
-  void CreateFrameSinkManagerOnCompositorThread(
-      mojom::FrameSinkManagerParamsPtr params,
-      gpu::CommandBufferTaskExecutor* task_executor,
-      GpuServiceImpl* gpu_service);
-#if defined(USE_VIZ_DEVTOOLS)
-  void CreateVizDevToolsOnCompositorThread(mojom::VizDevToolsParamsPtr params);
-  void InitVizDevToolsOnCompositorThread(mojom::VizDevToolsParamsPtr params);
-#endif
-  void CleanupForShutdownOnCompositorThread();
-  void TearDownOnCompositorThread();
-
-  // Start variables to be accessed only on |task_runner_|.
-  std::unique_ptr<ServerSharedBitmapManager> server_shared_bitmap_manager_;
-  std::unique_ptr<OutputSurfaceProvider> output_surface_provider_;
-  std::unique_ptr<FrameSinkManagerImpl> frame_sink_manager_;
-#if defined(USE_VIZ_DEVTOOLS)
-  std::unique_ptr<ui_devtools::UiDevToolsServer> devtools_server_;
-
-  // If the FrameSinkManager is not ready yet, then we stash the pending
-  // VizDevToolsParams.
-  mojom::VizDevToolsParamsPtr pending_viz_dev_tools_params_;
-#endif
-  // End variables to be accessed only on |task_runner_|.
-
-  std::unique_ptr<VizCompositorThreadType> thread_;
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-
-  DISALLOW_COPY_AND_ASSIGN(VizCompositorThreadRunner);
+  virtual void CleanupForShutdown(
+      base::OnceClosure cleanup_finished_callback) = 0;
 };
 
 }  // namespace viz
diff --git a/components/viz/service/main/viz_compositor_thread_runner.cc b/components/viz/service/main/viz_compositor_thread_runner_impl.cc
similarity index 82%
rename from components/viz/service/main/viz_compositor_thread_runner.cc
rename to components/viz/service/main/viz_compositor_thread_runner_impl.cc
index 0c0776dd..316b503 100644
--- a/components/viz/service/main/viz_compositor_thread_runner.cc
+++ b/components/viz/service/main/viz_compositor_thread_runner_impl.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 "components/viz/service/main/viz_compositor_thread_runner.h"
+#include "components/viz/service/main/viz_compositor_thread_runner_impl.h"
 
 #include <utility>
 
@@ -80,65 +80,69 @@
 
 }  // namespace
 
-VizCompositorThreadRunner::VizCompositorThreadRunner()
+VizCompositorThreadRunnerImpl::VizCompositorThreadRunnerImpl()
     : thread_(CreateAndStartCompositorThread()),
       task_runner_(thread_->task_runner()) {}
 
-VizCompositorThreadRunner::~VizCompositorThreadRunner() {
+VizCompositorThreadRunnerImpl::~VizCompositorThreadRunnerImpl() {
   task_runner_->PostTask(
       FROM_HERE,
-      base::BindOnce(&VizCompositorThreadRunner::TearDownOnCompositorThread,
+      base::BindOnce(&VizCompositorThreadRunnerImpl::TearDownOnCompositorThread,
                      base::Unretained(this)));
   thread_->Stop();
 }
 
-void VizCompositorThreadRunner::CreateFrameSinkManager(
-    mojom::FrameSinkManagerParamsPtr params) {
-  task_runner_->PostTask(
-      FROM_HERE,
-      base::BindOnce(
-          &VizCompositorThreadRunner::CreateFrameSinkManagerOnCompositorThread,
-          base::Unretained(this), std::move(params), nullptr, nullptr));
+base::SingleThreadTaskRunner* VizCompositorThreadRunnerImpl::task_runner() {
+  return task_runner_.get();
 }
 
-void VizCompositorThreadRunner::CreateFrameSinkManager(
+void VizCompositorThreadRunnerImpl::CreateFrameSinkManager(
+    mojom::FrameSinkManagerParamsPtr params) {
+  task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(&VizCompositorThreadRunnerImpl::
+                                    CreateFrameSinkManagerOnCompositorThread,
+                                base::Unretained(this), std::move(params),
+                                nullptr, nullptr));
+}
+
+void VizCompositorThreadRunnerImpl::CreateFrameSinkManager(
     mojom::FrameSinkManagerParamsPtr params,
     gpu::CommandBufferTaskExecutor* task_executor,
     GpuServiceImpl* gpu_service) {
   // All of the unretained objects are owned on the GPU thread and destroyed
   // after VizCompositorThread has been shutdown.
   task_runner_->PostTask(
-      FROM_HERE,
-      base::BindOnce(
-          &VizCompositorThreadRunner::CreateFrameSinkManagerOnCompositorThread,
-          base::Unretained(this), std::move(params),
-          base::Unretained(task_executor), base::Unretained(gpu_service)));
+      FROM_HERE, base::BindOnce(&VizCompositorThreadRunnerImpl::
+                                    CreateFrameSinkManagerOnCompositorThread,
+                                base::Unretained(this), std::move(params),
+                                base::Unretained(task_executor),
+                                base::Unretained(gpu_service)));
 }
 
 #if defined(USE_VIZ_DEVTOOLS)
-void VizCompositorThreadRunner::CreateVizDevTools(
+void VizCompositorThreadRunnerImpl::CreateVizDevTools(
     mojom::VizDevToolsParamsPtr params) {
   // It is safe to use Unretained(this) because |this| owns the |task_runner_|,
   // and will outlive it.
   task_runner_->PostTask(
       FROM_HERE,
       base::BindOnce(
-          &VizCompositorThreadRunner::CreateVizDevToolsOnCompositorThread,
+          &VizCompositorThreadRunnerImpl::CreateVizDevToolsOnCompositorThread,
           base::Unretained(this), std::move(params)));
 }
 #endif
 
-void VizCompositorThreadRunner::CleanupForShutdown(
+void VizCompositorThreadRunnerImpl::CleanupForShutdown(
     base::OnceClosure cleanup_finished_callback) {
   task_runner_->PostTaskAndReply(
       FROM_HERE,
       base::BindOnce(
-          &VizCompositorThreadRunner::CleanupForShutdownOnCompositorThread,
+          &VizCompositorThreadRunnerImpl::CleanupForShutdownOnCompositorThread,
           base::Unretained(this)),
       std::move(cleanup_finished_callback));
 }
 
-void VizCompositorThreadRunner::CreateFrameSinkManagerOnCompositorThread(
+void VizCompositorThreadRunnerImpl::CreateFrameSinkManagerOnCompositorThread(
     mojom::FrameSinkManagerParamsPtr params,
     gpu::CommandBufferTaskExecutor* task_executor,
     GpuServiceImpl* gpu_service) {
@@ -201,7 +205,7 @@
 }
 
 #if defined(USE_VIZ_DEVTOOLS)
-void VizCompositorThreadRunner::CreateVizDevToolsOnCompositorThread(
+void VizCompositorThreadRunnerImpl::CreateVizDevToolsOnCompositorThread(
     mojom::VizDevToolsParamsPtr params) {
   if (!frame_sink_manager_) {
     DCHECK(!pending_viz_dev_tools_params_);
@@ -211,7 +215,7 @@
   InitVizDevToolsOnCompositorThread(std::move(params));
 }
 
-void VizCompositorThreadRunner::InitVizDevToolsOnCompositorThread(
+void VizCompositorThreadRunnerImpl::InitVizDevToolsOnCompositorThread(
     mojom::VizDevToolsParamsPtr params) {
   DCHECK(frame_sink_manager_);
   devtools_server_ = ui_devtools::UiDevToolsServer::CreateForViz(
@@ -231,14 +235,14 @@
 }
 #endif
 
-void VizCompositorThreadRunner::CleanupForShutdownOnCompositorThread() {
+void VizCompositorThreadRunnerImpl::CleanupForShutdownOnCompositorThread() {
   DCHECK(task_runner_->BelongsToCurrentThread());
 
   if (frame_sink_manager_)
     frame_sink_manager_->ForceShutdown();
 }
 
-void VizCompositorThreadRunner::TearDownOnCompositorThread() {
+void VizCompositorThreadRunnerImpl::TearDownOnCompositorThread() {
   DCHECK(task_runner_->BelongsToCurrentThread());
 
   if (server_shared_bitmap_manager_) {
diff --git a/components/viz/service/main/viz_compositor_thread_runner_impl.h b/components/viz/service/main/viz_compositor_thread_runner_impl.h
new file mode 100644
index 0000000..3a822d8
--- /dev/null
+++ b/components/viz/service/main/viz_compositor_thread_runner_impl.h
@@ -0,0 +1,90 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_VIZ_SERVICE_MAIN_VIZ_COMPOSITOR_THREAD_RUNNER_IMPL_H_
+#define COMPONENTS_VIZ_SERVICE_MAIN_VIZ_COMPOSITOR_THREAD_RUNNER_IMPL_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/message_loop/message_loop.h"
+#include "build/build_config.h"
+#include "components/viz/service/main/viz_compositor_thread_runner.h"
+#include "services/network/public/mojom/tcp_socket.mojom.h"
+
+#if defined(OS_ANDROID)
+#include "base/android/java_handler_thread.h"
+#endif
+
+namespace base {
+class Thread;
+}  // namespace base
+
+namespace ui_devtools {
+class UiDevToolsServer;
+}  // namespace ui_devtools
+
+namespace viz {
+class OutputSurfaceProvider;
+class FrameSinkManagerImpl;
+class ServerSharedBitmapManager;
+
+#if defined(OS_ANDROID)
+using VizCompositorThreadType = base::android::JavaHandlerThread;
+#else
+using VizCompositorThreadType = base::Thread;
+#endif
+
+class VizCompositorThreadRunnerImpl : public VizCompositorThreadRunner {
+ public:
+  VizCompositorThreadRunnerImpl();
+  // Performs teardown on thread and then stops thread.
+  ~VizCompositorThreadRunnerImpl() override;
+
+  // VizCompositorThreadRunner overrides.
+  base::SingleThreadTaskRunner* task_runner() override;
+  void CreateFrameSinkManager(mojom::FrameSinkManagerParamsPtr params) override;
+  void CreateFrameSinkManager(mojom::FrameSinkManagerParamsPtr params,
+                              gpu::CommandBufferTaskExecutor* task_executor,
+                              GpuServiceImpl* gpu_service) override;
+#if defined(USE_VIZ_DEVTOOLS)
+  void CreateVizDevTools(mojom::VizDevToolsParamsPtr params) override;
+#endif
+  void CleanupForShutdown(base::OnceClosure cleanup_finished_callback) override;
+
+ private:
+  void CreateFrameSinkManagerOnCompositorThread(
+      mojom::FrameSinkManagerParamsPtr params,
+      gpu::CommandBufferTaskExecutor* task_executor,
+      GpuServiceImpl* gpu_service);
+#if defined(USE_VIZ_DEVTOOLS)
+  void CreateVizDevToolsOnCompositorThread(mojom::VizDevToolsParamsPtr params);
+  void InitVizDevToolsOnCompositorThread(mojom::VizDevToolsParamsPtr params);
+#endif
+  void CleanupForShutdownOnCompositorThread();
+  void TearDownOnCompositorThread();
+
+  // Start variables to be accessed only on |task_runner_|.
+  std::unique_ptr<ServerSharedBitmapManager> server_shared_bitmap_manager_;
+  std::unique_ptr<OutputSurfaceProvider> output_surface_provider_;
+  std::unique_ptr<FrameSinkManagerImpl> frame_sink_manager_;
+#if defined(USE_VIZ_DEVTOOLS)
+  std::unique_ptr<ui_devtools::UiDevToolsServer> devtools_server_;
+
+  // If the FrameSinkManager is not ready yet, then we stash the pending
+  // VizDevToolsParams.
+  mojom::VizDevToolsParamsPtr pending_viz_dev_tools_params_;
+#endif
+  // End variables to be accessed only on |task_runner_|.
+
+  std::unique_ptr<VizCompositorThreadType> thread_;
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+
+  DISALLOW_COPY_AND_ASSIGN(VizCompositorThreadRunnerImpl);
+};
+
+}  // namespace viz
+
+#endif  // COMPONENTS_VIZ_SERVICE_MAIN_VIZ_COMPOSITOR_THREAD_RUNNER_IMPL_H_
diff --git a/components/viz/service/main/viz_main_impl.cc b/components/viz/service/main/viz_main_impl.cc
index d718d2c..8bd77bc4 100644
--- a/components/viz/service/main/viz_main_impl.cc
+++ b/components/viz/service/main/viz_main_impl.cc
@@ -81,8 +81,13 @@
   if (!dependencies_.io_thread_task_runner)
     io_thread_ = CreateAndStartIOThread();
   if (dependencies_.create_display_compositor) {
-    viz_compositor_thread_runner_ =
-        std::make_unique<VizCompositorThreadRunner>();
+    if (dependencies.viz_compositor_thread_runner) {
+      viz_compositor_thread_runner_ = dependencies.viz_compositor_thread_runner;
+    } else {
+      viz_compositor_thread_runner_impl_ =
+          std::make_unique<VizCompositorThreadRunnerImpl>();
+      viz_compositor_thread_runner_ = viz_compositor_thread_runner_impl_.get();
+    }
     if (delegate_) {
       delegate_->PostCompositorThreadCreated(
           viz_compositor_thread_runner_->task_runner());
@@ -115,11 +120,14 @@
   // need to process commands from the host as it is shutting down.
   receiver_.reset();
 
-  // If the VizCompositorThread was started then this will block until the
-  // thread has been shutdown. All RootCompositorFrameSinks must be destroyed
-  // before now, otherwise the compositor thread will deadlock waiting for a
-  // response from the blocked GPU thread.
-  viz_compositor_thread_runner_.reset();
+  // If the VizCompositorThread was started and owned by VizMainImpl, then this
+  // will block until the thread has been shutdown. All RootCompositorFrameSinks
+  // must be destroyed before now, otherwise the compositor thread will deadlock
+  // waiting for a response from the blocked GPU thread.
+  // For the non-owned case for Android WebView, Viz does not communicate with
+  // this thread so there is no need to shutdown viz first.
+  viz_compositor_thread_runner_ = nullptr;
+  viz_compositor_thread_runner_impl_.reset();
 
   if (ukm_recorder_)
     ukm::DelegatingUkmRecorder::Get()->RemoveDelegate(ukm_recorder_.get());
diff --git a/components/viz/service/main/viz_main_impl.h b/components/viz/service/main/viz_main_impl.h
index 7fa803c..66f57ea 100644
--- a/components/viz/service/main/viz_main_impl.h
+++ b/components/viz/service/main/viz_main_impl.h
@@ -11,7 +11,7 @@
 #include "base/threading/thread.h"
 #include "build/build_config.h"
 #include "components/discardable_memory/client/client_discardable_shared_memory_manager.h"
-#include "components/viz/service/main/viz_compositor_thread_runner.h"
+#include "components/viz/service/main/viz_compositor_thread_runner_impl.h"
 #include "gpu/ipc/in_process_command_buffer.h"
 #include "mojo/public/cpp/bindings/associated_receiver_set.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
@@ -84,6 +84,7 @@
     base::WaitableEvent* shutdown_event = nullptr;
     scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner;
     service_manager::Connector* connector = nullptr;
+    VizCompositorThreadRunner* viz_compositor_thread_runner = nullptr;
 
    private:
     DISALLOW_COPY_AND_ASSIGN(ExternalDependencies);
@@ -165,7 +166,13 @@
   mojom::FrameSinkManagerParamsPtr pending_frame_sink_manager_params_;
 
   // Runs the VizCompositorThread for the display compositor with OOP-D.
-  std::unique_ptr<VizCompositorThreadRunner> viz_compositor_thread_runner_;
+  std::unique_ptr<VizCompositorThreadRunnerImpl>
+      viz_compositor_thread_runner_impl_;
+  // Note under Android WebView where VizCompositorThreadRunner is not created
+  // and owned by this, Viz does not interact with other objects in this class,
+  // such as GpuServiceImpl or CommandBufferTaskExecutor. Code should take care
+  // to avoid introducing such assumptions.
+  VizCompositorThreadRunner* viz_compositor_thread_runner_ = nullptr;
 
   const scoped_refptr<base::SingleThreadTaskRunner> gpu_thread_task_runner_;
 
diff --git a/content/app/strings/translations/content_strings_am.xtb b/content/app/strings/translations/content_strings_am.xtb
index 5b06860..f8b19e8 100644
--- a/content/app/strings/translations/content_strings_am.xtb
+++ b/content/app/strings/translations/content_strings_am.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">አጥፋ</translation>
 <translation id="588258955323874662">ሙሉ ገጽ ዕይታ</translation>
 <translation id="5888666972993069672">አሁን ወደ <ph name="DEVICE_FRIENDLY_NAME" /> cast በማድረግ ላይ</translation>
+<translation id="591047860372322273">የፍለጋ ሳጥን</translation>
 <translation id="5939518447894949180">ዳግም አስጀምር</translation>
 <translation id="5966707198760109579">ሳምንት</translation>
 <translation id="5987525920412732405">ማሾሪያ አዝራር</translation>
diff --git a/content/app/strings/translations/content_strings_ar.xtb b/content/app/strings/translations/content_strings_ar.xtb
index e1a6732..662f279 100644
--- a/content/app/strings/translations/content_strings_ar.xtb
+++ b/content/app/strings/translations/content_strings_ar.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">غير مفعّل</translation>
 <translation id="588258955323874662">ملء الشاشة</translation>
 <translation id="5888666972993069672">يتم الإرسال الآن إلى <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">مربع البحث</translation>
 <translation id="5939518447894949180">إعادة الضبط</translation>
 <translation id="5966707198760109579">الأسبوع</translation>
 <translation id="5987525920412732405">زر الدوران</translation>
diff --git a/content/app/strings/translations/content_strings_bg.xtb b/content/app/strings/translations/content_strings_bg.xtb
index 98f8ec5..533951de 100644
--- a/content/app/strings/translations/content_strings_bg.xtb
+++ b/content/app/strings/translations/content_strings_bg.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Изключено</translation>
 <translation id="588258955323874662">Цял екран</translation>
 <translation id="5888666972993069672">В момента се предава към „<ph name="DEVICE_FRIENDLY_NAME" />“</translation>
+<translation id="591047860372322273">поле за търсене</translation>
 <translation id="5939518447894949180">Нулиране</translation>
 <translation id="5966707198760109579">Седмица</translation>
 <translation id="5987525920412732405">брояч</translation>
diff --git a/content/app/strings/translations/content_strings_bn.xtb b/content/app/strings/translations/content_strings_bn.xtb
index 35e5a2a..75cc7848 100644
--- a/content/app/strings/translations/content_strings_bn.xtb
+++ b/content/app/strings/translations/content_strings_bn.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">বন্ধ করুন</translation>
 <translation id="588258955323874662">সম্পূর্নস্ক্রীণ</translation>
 <translation id="5888666972993069672"><ph name="DEVICE_FRIENDLY_NAME" /> এ কাস্ট করা হচ্ছে</translation>
+<translation id="591047860372322273">সার্চ বক্স</translation>
 <translation id="5939518447894949180">রিসেট করুন</translation>
 <translation id="5966707198760109579">সপ্তাহ</translation>
 <translation id="5987525920412732405">ঘোড়ানোর বোতাম</translation>
diff --git a/content/app/strings/translations/content_strings_ca.xtb b/content/app/strings/translations/content_strings_ca.xtb
index e5be4a7..aaeca91b 100644
--- a/content/app/strings/translations/content_strings_ca.xtb
+++ b/content/app/strings/translations/content_strings_ca.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Desactivat</translation>
 <translation id="588258955323874662">Pantalla completa</translation>
 <translation id="5888666972993069672">S'està emetent a <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">quadre de cerca</translation>
 <translation id="5939518447894949180">Restableix</translation>
 <translation id="5966707198760109579">Setmana</translation>
 <translation id="5987525920412732405">botó de selecció de valors</translation>
diff --git a/content/app/strings/translations/content_strings_cs.xtb b/content/app/strings/translations/content_strings_cs.xtb
index acda350e..dd11f5a 100644
--- a/content/app/strings/translations/content_strings_cs.xtb
+++ b/content/app/strings/translations/content_strings_cs.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Vypnuto</translation>
 <translation id="588258955323874662">Celá obrazovka</translation>
 <translation id="5888666972993069672">Odesílání do zařízení <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">vyhledávací pole</translation>
 <translation id="5939518447894949180">Resetovat</translation>
 <translation id="5966707198760109579">Týden</translation>
 <translation id="5987525920412732405">číselník</translation>
diff --git a/content/app/strings/translations/content_strings_da.xtb b/content/app/strings/translations/content_strings_da.xtb
index 00f2ff9..a1366f2 100644
--- a/content/app/strings/translations/content_strings_da.xtb
+++ b/content/app/strings/translations/content_strings_da.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Fra</translation>
 <translation id="588258955323874662">Fuld skærm</translation>
 <translation id="5888666972993069672">Caster nu til <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">søgefelt</translation>
 <translation id="5939518447894949180">Nulstil</translation>
 <translation id="5966707198760109579">Uge</translation>
 <translation id="5987525920412732405">skalafelt</translation>
diff --git a/content/app/strings/translations/content_strings_de.xtb b/content/app/strings/translations/content_strings_de.xtb
index f7e864b0..2a0b1fa 100644
--- a/content/app/strings/translations/content_strings_de.xtb
+++ b/content/app/strings/translations/content_strings_de.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Aus</translation>
 <translation id="588258955323874662">Vollbild</translation>
 <translation id="5888666972993069672">Wird gerade auf <ph name="DEVICE_FRIENDLY_NAME" /> gestreamt</translation>
+<translation id="591047860372322273">Suchfeld</translation>
 <translation id="5939518447894949180">Zurücksetzen</translation>
 <translation id="5966707198760109579">Woche</translation>
 <translation id="5987525920412732405">Drehfeld</translation>
diff --git a/content/app/strings/translations/content_strings_el.xtb b/content/app/strings/translations/content_strings_el.xtb
index 7137c1b1..b9154b0 100644
--- a/content/app/strings/translations/content_strings_el.xtb
+++ b/content/app/strings/translations/content_strings_el.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Απενεργοποιημένη</translation>
 <translation id="588258955323874662">Πλήρης οθόνη</translation>
 <translation id="5888666972993069672">Μετάδοση τώρα στη συσκευή <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">πλαίσιο αναζήτησης</translation>
 <translation id="5939518447894949180">Επαναφορά</translation>
 <translation id="5966707198760109579">Εβδομάδα</translation>
 <translation id="5987525920412732405">κουμπί αυξομείωσης</translation>
diff --git a/content/app/strings/translations/content_strings_en-GB.xtb b/content/app/strings/translations/content_strings_en-GB.xtb
index 37be71d..8472445 100644
--- a/content/app/strings/translations/content_strings_en-GB.xtb
+++ b/content/app/strings/translations/content_strings_en-GB.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Off</translation>
 <translation id="588258955323874662">Full screen</translation>
 <translation id="5888666972993069672">Now casting to <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">search box</translation>
 <translation id="5939518447894949180">Reset</translation>
 <translation id="5966707198760109579">Week</translation>
 <translation id="5987525920412732405">spin button</translation>
diff --git a/content/app/strings/translations/content_strings_es-419.xtb b/content/app/strings/translations/content_strings_es-419.xtb
index 9dfb6b36..51a3737c 100644
--- a/content/app/strings/translations/content_strings_es-419.xtb
+++ b/content/app/strings/translations/content_strings_es-419.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">No</translation>
 <translation id="588258955323874662">Pantalla completa</translation>
 <translation id="5888666972993069672">Transmitiendo ahora a <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">cuadro de búsqueda</translation>
 <translation id="5939518447894949180">Restablecer</translation>
 <translation id="5966707198760109579">Semana</translation>
 <translation id="5987525920412732405">botón de control numérico</translation>
diff --git a/content/app/strings/translations/content_strings_es.xtb b/content/app/strings/translations/content_strings_es.xtb
index 48ce99f..4736327 100644
--- a/content/app/strings/translations/content_strings_es.xtb
+++ b/content/app/strings/translations/content_strings_es.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">No</translation>
 <translation id="588258955323874662">Pantalla completa</translation>
 <translation id="5888666972993069672">Enviando a <ph name="DEVICE_FRIENDLY_NAME" /> en este momento</translation>
+<translation id="591047860372322273">cuadro de búsqueda</translation>
 <translation id="5939518447894949180">Restablecer</translation>
 <translation id="5966707198760109579">Semana</translation>
 <translation id="5987525920412732405">botón de control numérico</translation>
diff --git a/content/app/strings/translations/content_strings_et.xtb b/content/app/strings/translations/content_strings_et.xtb
index 595f0cea..dada9cd 100644
--- a/content/app/strings/translations/content_strings_et.xtb
+++ b/content/app/strings/translations/content_strings_et.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Väljas</translation>
 <translation id="588258955323874662">Täisekraan</translation>
 <translation id="5888666972993069672">Nüüd kantakse üle seadmesse <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">otsingukast</translation>
 <translation id="5939518447894949180">Lähtesta</translation>
 <translation id="5966707198760109579">Nädal</translation>
 <translation id="5987525920412732405">pöördnupp</translation>
diff --git a/content/app/strings/translations/content_strings_fa.xtb b/content/app/strings/translations/content_strings_fa.xtb
index 4297ffdc..f5a35977 100644
--- a/content/app/strings/translations/content_strings_fa.xtb
+++ b/content/app/strings/translations/content_strings_fa.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">خاموش</translation>
 <translation id="588258955323874662">تمام صفحه</translation>
 <translation id="5888666972993069672">درحال ارسال محتوا به <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">جعبه جستجو</translation>
 <translation id="5939518447894949180">بازنشانی</translation>
 <translation id="5966707198760109579">هفته</translation>
 <translation id="5987525920412732405">دکمه چرخش</translation>
diff --git a/content/app/strings/translations/content_strings_fi.xtb b/content/app/strings/translations/content_strings_fi.xtb
index 34447491..2ed1d49 100644
--- a/content/app/strings/translations/content_strings_fi.xtb
+++ b/content/app/strings/translations/content_strings_fi.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Pois käytöstä</translation>
 <translation id="588258955323874662">Koko ruutu</translation>
 <translation id="5888666972993069672">Katsotaan TV:stä <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">hakukenttä</translation>
 <translation id="5939518447894949180">Tyhjennä</translation>
 <translation id="5966707198760109579">Viikko</translation>
 <translation id="5987525920412732405">pyöräytyspainike</translation>
diff --git a/content/app/strings/translations/content_strings_fr.xtb b/content/app/strings/translations/content_strings_fr.xtb
index f6c00f2..dd7670b 100644
--- a/content/app/strings/translations/content_strings_fr.xtb
+++ b/content/app/strings/translations/content_strings_fr.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Désactivé</translation>
 <translation id="588258955323874662">Plein écran</translation>
 <translation id="5888666972993069672">Diffusion en cours sur l'appareil "<ph name="DEVICE_FRIENDLY_NAME" />"</translation>
+<translation id="591047860372322273">champ de recherche</translation>
 <translation id="5939518447894949180">Réinitialiser</translation>
 <translation id="5966707198760109579">Semaine</translation>
 <translation id="5987525920412732405">bouton toupie</translation>
diff --git a/content/app/strings/translations/content_strings_gu.xtb b/content/app/strings/translations/content_strings_gu.xtb
index 0ad185a..908d7c1d 100644
--- a/content/app/strings/translations/content_strings_gu.xtb
+++ b/content/app/strings/translations/content_strings_gu.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">બંધ</translation>
 <translation id="588258955323874662">પૂર્ણસ્ક્રીન</translation>
 <translation id="5888666972993069672">હવે <ph name="DEVICE_FRIENDLY_NAME" /> પર કાસ્ટ કરી રહ્યાં છીએ</translation>
+<translation id="591047860372322273">શોધ બૉક્સ</translation>
 <translation id="5939518447894949180">રીસેટ કરો</translation>
 <translation id="5966707198760109579">અઠવાડિયું</translation>
 <translation id="5987525920412732405">સ્પિન બટન</translation>
diff --git a/content/app/strings/translations/content_strings_hi.xtb b/content/app/strings/translations/content_strings_hi.xtb
index 0b7c68ce..8480b26 100644
--- a/content/app/strings/translations/content_strings_hi.xtb
+++ b/content/app/strings/translations/content_strings_hi.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">बंद</translation>
 <translation id="588258955323874662">पूर्णस्‍क्रीन</translation>
 <translation id="5888666972993069672">अब <ph name="DEVICE_FRIENDLY_NAME" /> पर कास्ट किया जा रहा है</translation>
+<translation id="591047860372322273">खोज बॉक्स</translation>
 <translation id="5939518447894949180">रीसेट करें</translation>
 <translation id="5966707198760109579">हफ़्ता</translation>
 <translation id="5987525920412732405">स्पिन बटन</translation>
diff --git a/content/app/strings/translations/content_strings_hr.xtb b/content/app/strings/translations/content_strings_hr.xtb
index 87c3503..618b2fcf 100644
--- a/content/app/strings/translations/content_strings_hr.xtb
+++ b/content/app/strings/translations/content_strings_hr.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Isključeno</translation>
 <translation id="588258955323874662">Puni zaslon</translation>
 <translation id="5888666972993069672">Trenutačno se emitira na uređaju <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">okvir za pretraživanje</translation>
 <translation id="5939518447894949180">Ponovno postavi</translation>
 <translation id="5966707198760109579">Tjedan</translation>
 <translation id="5987525920412732405">okretni gumb</translation>
diff --git a/content/app/strings/translations/content_strings_hu.xtb b/content/app/strings/translations/content_strings_hu.xtb
index 0c8b5e1c..0721c90 100644
--- a/content/app/strings/translations/content_strings_hu.xtb
+++ b/content/app/strings/translations/content_strings_hu.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Kikapcsolva</translation>
 <translation id="588258955323874662">Teljes képernyő</translation>
 <translation id="5888666972993069672">Átküldés ide: <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">keresőmező</translation>
 <translation id="5939518447894949180">Visszaállítás</translation>
 <translation id="5966707198760109579">Hét</translation>
 <translation id="5987525920412732405">léptetőnyíl</translation>
diff --git a/content/app/strings/translations/content_strings_id.xtb b/content/app/strings/translations/content_strings_id.xtb
index ef537ac..f8a6540 100644
--- a/content/app/strings/translations/content_strings_id.xtb
+++ b/content/app/strings/translations/content_strings_id.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Nonaktif</translation>
 <translation id="588258955323874662">Layar Penuh</translation>
 <translation id="5888666972993069672">Sedang melakukan cast ke <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">kotak penelusuran</translation>
 <translation id="5939518447894949180">Setel ulang</translation>
 <translation id="5966707198760109579">Minggu</translation>
 <translation id="5987525920412732405">tombol putar</translation>
diff --git a/content/app/strings/translations/content_strings_it.xtb b/content/app/strings/translations/content_strings_it.xtb
index fb64276..ab45dd7 100644
--- a/content/app/strings/translations/content_strings_it.xtb
+++ b/content/app/strings/translations/content_strings_it.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Off</translation>
 <translation id="588258955323874662">Schermo intero</translation>
 <translation id="5888666972993069672">Trasmissione in corso a <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">casella di ricerca</translation>
 <translation id="5939518447894949180">Reimposta</translation>
 <translation id="5966707198760109579">Settimana</translation>
 <translation id="5987525920412732405">pulsante di selezione</translation>
diff --git a/content/app/strings/translations/content_strings_ja.xtb b/content/app/strings/translations/content_strings_ja.xtb
index db189007..adc6a5a 100644
--- a/content/app/strings/translations/content_strings_ja.xtb
+++ b/content/app/strings/translations/content_strings_ja.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">オフ</translation>
 <translation id="588258955323874662">全画面表示</translation>
 <translation id="5888666972993069672">現在 <ph name="DEVICE_FRIENDLY_NAME" /> にキャストしています</translation>
+<translation id="591047860372322273">検索ボックス</translation>
 <translation id="5939518447894949180">リセット</translation>
 <translation id="5966707198760109579">週</translation>
 <translation id="5987525920412732405">スピンボタン</translation>
diff --git a/content/app/strings/translations/content_strings_kn.xtb b/content/app/strings/translations/content_strings_kn.xtb
index 5c02ca3..b9e79a7 100644
--- a/content/app/strings/translations/content_strings_kn.xtb
+++ b/content/app/strings/translations/content_strings_kn.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">ಆಫ್</translation>
 <translation id="588258955323874662">ಪೂರ್ಣಪರದೆ</translation>
 <translation id="5888666972993069672">ಈಗ <ph name="DEVICE_FRIENDLY_NAME" /> ಗೆ ಬಿತ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation>
+<translation id="591047860372322273">ಹುಡುಕಾಟ ಬಾಕ್ಸ್</translation>
 <translation id="5939518447894949180">ಮರುಹೊಂದಿಸು</translation>
 <translation id="5966707198760109579">ವಾರ</translation>
 <translation id="5987525920412732405">ಸ್ಪಿನ್ ಬಟನ್</translation>
diff --git a/content/app/strings/translations/content_strings_ko.xtb b/content/app/strings/translations/content_strings_ko.xtb
index 75879be..87324c3 100644
--- a/content/app/strings/translations/content_strings_ko.xtb
+++ b/content/app/strings/translations/content_strings_ko.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">사용 안함</translation>
 <translation id="588258955323874662">전체화면</translation>
 <translation id="5888666972993069672">현재 <ph name="DEVICE_FRIENDLY_NAME" />(으)로 전송 중</translation>
+<translation id="591047860372322273">검색창</translation>
 <translation id="5939518447894949180">초기화</translation>
 <translation id="5966707198760109579">주</translation>
 <translation id="5987525920412732405">스핀 버튼</translation>
diff --git a/content/app/strings/translations/content_strings_lt.xtb b/content/app/strings/translations/content_strings_lt.xtb
index c92814c..fa127e8a 100644
--- a/content/app/strings/translations/content_strings_lt.xtb
+++ b/content/app/strings/translations/content_strings_lt.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Išjungta</translation>
 <translation id="588258955323874662">Visas ekranas</translation>
 <translation id="5888666972993069672">Dabar perduodama į „<ph name="DEVICE_FRIENDLY_NAME" />“</translation>
+<translation id="591047860372322273">paieškos laukelis</translation>
 <translation id="5939518447894949180">Nustatyti iš naujo</translation>
 <translation id="5966707198760109579">Savaitė</translation>
 <translation id="5987525920412732405">sukimo mygtukas</translation>
diff --git a/content/app/strings/translations/content_strings_lv.xtb b/content/app/strings/translations/content_strings_lv.xtb
index 94ca8ea..d6163f9 100644
--- a/content/app/strings/translations/content_strings_lv.xtb
+++ b/content/app/strings/translations/content_strings_lv.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Izsl.</translation>
 <translation id="588258955323874662">Pilnekrāna</translation>
 <translation id="5888666972993069672">Notiek apraide šajā ierīcē: <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">meklēšanas lodziņš</translation>
 <translation id="5939518447894949180">Atiestatīt</translation>
 <translation id="5966707198760109579">Nedēļa</translation>
 <translation id="5987525920412732405">skaitītājpoga</translation>
diff --git a/content/app/strings/translations/content_strings_ml.xtb b/content/app/strings/translations/content_strings_ml.xtb
index e79e502b..5a71b007 100644
--- a/content/app/strings/translations/content_strings_ml.xtb
+++ b/content/app/strings/translations/content_strings_ml.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">ഓഫാക്കുക</translation>
 <translation id="588258955323874662">പൂര്‍‌ണ്ണസ്‌ക്രീന്‍</translation>
 <translation id="5888666972993069672"><ph name="DEVICE_FRIENDLY_NAME" /> എന്ന ഉപകരണത്തിലേക്ക് കാസ്‌റ്റുചെയ്യുന്നു</translation>
+<translation id="591047860372322273">സെർച്ച് ബോക്‌സ്</translation>
 <translation id="5939518447894949180">വീണ്ടും സജ്ജീകരിക്കുക</translation>
 <translation id="5966707198760109579">ആഴ്‌ച</translation>
 <translation id="5987525920412732405">സ്‌പിൻ ബട്ടൺ</translation>
diff --git a/content/app/strings/translations/content_strings_mr.xtb b/content/app/strings/translations/content_strings_mr.xtb
index bd079ad..9a3e80a 100644
--- a/content/app/strings/translations/content_strings_mr.xtb
+++ b/content/app/strings/translations/content_strings_mr.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">बंद</translation>
 <translation id="588258955323874662">क्षेत्रे</translation>
 <translation id="5888666972993069672">आता <ph name="DEVICE_FRIENDLY_NAME" /> वर कास्ट करत आहे</translation>
+<translation id="591047860372322273">सर्च बॉक्स</translation>
 <translation id="5939518447894949180">रीसेट करा</translation>
 <translation id="5966707198760109579">आठवडा</translation>
 <translation id="5987525920412732405">स्पिन बटण</translation>
diff --git a/content/app/strings/translations/content_strings_ms.xtb b/content/app/strings/translations/content_strings_ms.xtb
index 8e3003c..d999b579 100644
--- a/content/app/strings/translations/content_strings_ms.xtb
+++ b/content/app/strings/translations/content_strings_ms.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Dimatikan</translation>
 <translation id="588258955323874662">Skrin penuh</translation>
 <translation id="5888666972993069672">Sekarang menghantar ke <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">kotak carian</translation>
 <translation id="5939518447894949180">Tetapkan semula</translation>
 <translation id="5966707198760109579">Minggu</translation>
 <translation id="5987525920412732405">butang putar</translation>
diff --git a/content/app/strings/translations/content_strings_nl.xtb b/content/app/strings/translations/content_strings_nl.xtb
index 63ac3ca..2e80787 100644
--- a/content/app/strings/translations/content_strings_nl.xtb
+++ b/content/app/strings/translations/content_strings_nl.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Uit</translation>
 <translation id="588258955323874662">Volledig scherm</translation>
 <translation id="5888666972993069672">Wordt nu gecast naar <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">zoekvak</translation>
 <translation id="5939518447894949180">Resetten</translation>
 <translation id="5966707198760109579">Week</translation>
 <translation id="5987525920412732405">draaiknop</translation>
diff --git a/content/app/strings/translations/content_strings_no.xtb b/content/app/strings/translations/content_strings_no.xtb
index 5e15d10..ef0f0af 100644
--- a/content/app/strings/translations/content_strings_no.xtb
+++ b/content/app/strings/translations/content_strings_no.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Av</translation>
 <translation id="588258955323874662">Fullskjerm</translation>
 <translation id="5888666972993069672">Caster nå til <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">søkefelt</translation>
 <translation id="5939518447894949180">Tilbakestill</translation>
 <translation id="5966707198760109579">Uke</translation>
 <translation id="5987525920412732405">verdisettingsknapp</translation>
diff --git a/content/app/strings/translations/content_strings_pl.xtb b/content/app/strings/translations/content_strings_pl.xtb
index cb08f3d7..e11a6d7 100644
--- a/content/app/strings/translations/content_strings_pl.xtb
+++ b/content/app/strings/translations/content_strings_pl.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Wyłączone</translation>
 <translation id="588258955323874662">Pełny ekran</translation>
 <translation id="5888666972993069672">Przesyłam na urządzenie <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">pole wyszukiwania</translation>
 <translation id="5939518447894949180">Resetuj</translation>
 <translation id="5966707198760109579">Tydzień</translation>
 <translation id="5987525920412732405">przycisk przewijany</translation>
diff --git a/content/app/strings/translations/content_strings_pt-BR.xtb b/content/app/strings/translations/content_strings_pt-BR.xtb
index 9e9b334..971b967 100644
--- a/content/app/strings/translations/content_strings_pt-BR.xtb
+++ b/content/app/strings/translations/content_strings_pt-BR.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Desativado</translation>
 <translation id="588258955323874662">Tela inteira</translation>
 <translation id="5888666972993069672">Transmitindo agora para <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">caixa de pesquisa</translation>
 <translation id="5939518447894949180">Redefinir</translation>
 <translation id="5966707198760109579">Semana</translation>
 <translation id="5987525920412732405">botão de rotação</translation>
diff --git a/content/app/strings/translations/content_strings_pt-PT.xtb b/content/app/strings/translations/content_strings_pt-PT.xtb
index 675ef8c71..d2a8cb1 100644
--- a/content/app/strings/translations/content_strings_pt-PT.xtb
+++ b/content/app/strings/translations/content_strings_pt-PT.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Desativado</translation>
 <translation id="588258955323874662">Ecrã inteiro</translation>
 <translation id="5888666972993069672">A transmitir agora para <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">caixa de pesquisa</translation>
 <translation id="5939518447894949180">Repor</translation>
 <translation id="5966707198760109579">Semana</translation>
 <translation id="5987525920412732405">botão giratório</translation>
diff --git a/content/app/strings/translations/content_strings_ro.xtb b/content/app/strings/translations/content_strings_ro.xtb
index 83cd216..89fdfb31 100644
--- a/content/app/strings/translations/content_strings_ro.xtb
+++ b/content/app/strings/translations/content_strings_ro.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Dezactivat</translation>
 <translation id="588258955323874662">Ecran complet</translation>
 <translation id="5888666972993069672">Se proiectează acum pe <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">casetă de căutare</translation>
 <translation id="5939518447894949180">Resetează</translation>
 <translation id="5966707198760109579">Săptămână</translation>
 <translation id="5987525920412732405">buton incrementare/decrementare</translation>
diff --git a/content/app/strings/translations/content_strings_ru.xtb b/content/app/strings/translations/content_strings_ru.xtb
index 489d6538..c369781 100644
--- a/content/app/strings/translations/content_strings_ru.xtb
+++ b/content/app/strings/translations/content_strings_ru.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">ВЫКЛ</translation>
 <translation id="588258955323874662">Полноэкранный режим</translation>
 <translation id="5888666972993069672">Транслируется на устройство "<ph name="DEVICE_FRIENDLY_NAME" />"</translation>
+<translation id="591047860372322273">Окно поиска</translation>
 <translation id="5939518447894949180">Сбросить</translation>
 <translation id="5966707198760109579">Неделя</translation>
 <translation id="5987525920412732405">кнопка счетчика</translation>
diff --git a/content/app/strings/translations/content_strings_sk.xtb b/content/app/strings/translations/content_strings_sk.xtb
index 233c060..19cf989 100644
--- a/content/app/strings/translations/content_strings_sk.xtb
+++ b/content/app/strings/translations/content_strings_sk.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Vypnuté</translation>
 <translation id="588258955323874662">Celá obrazovka</translation>
 <translation id="5888666972993069672">Prenáša sa do zariadenia <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">vyhľadávacie pole</translation>
 <translation id="5939518447894949180">Resetovať</translation>
 <translation id="5966707198760109579">Týždeň</translation>
 <translation id="5987525920412732405">tlačidlo otáčania</translation>
diff --git a/content/app/strings/translations/content_strings_sl.xtb b/content/app/strings/translations/content_strings_sl.xtb
index 36c9d49..d687e4c 100644
--- a/content/app/strings/translations/content_strings_sl.xtb
+++ b/content/app/strings/translations/content_strings_sl.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Izklopljeno</translation>
 <translation id="588258955323874662">Celozaslonsko</translation>
 <translation id="5888666972993069672">Predvajanje v napravi <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">iskalno polje</translation>
 <translation id="5939518447894949180">Ponastavi</translation>
 <translation id="5966707198760109579">Teden</translation>
 <translation id="5987525920412732405">pomikalnik</translation>
diff --git a/content/app/strings/translations/content_strings_sr.xtb b/content/app/strings/translations/content_strings_sr.xtb
index a493315..3cf9adc 100644
--- a/content/app/strings/translations/content_strings_sr.xtb
+++ b/content/app/strings/translations/content_strings_sr.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Искључено</translation>
 <translation id="588258955323874662">Цеo екран</translation>
 <translation id="5888666972993069672">Тренутно се пребацује на <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">оквир за претрагу</translation>
 <translation id="5939518447894949180">Ресетуј</translation>
 <translation id="5966707198760109579">Недеља</translation>
 <translation id="5987525920412732405">дугме за промену вредности</translation>
diff --git a/content/app/strings/translations/content_strings_sv.xtb b/content/app/strings/translations/content_strings_sv.xtb
index 61c3a83..28ac94e 100644
--- a/content/app/strings/translations/content_strings_sv.xtb
+++ b/content/app/strings/translations/content_strings_sv.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Av</translation>
 <translation id="588258955323874662">Helskärm</translation>
 <translation id="5888666972993069672">Castar till <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">sökruta</translation>
 <translation id="5939518447894949180">Återställ</translation>
 <translation id="5966707198760109579">Vecka</translation>
 <translation id="5987525920412732405">snurrknapp</translation>
diff --git a/content/app/strings/translations/content_strings_sw.xtb b/content/app/strings/translations/content_strings_sw.xtb
index 8ebb1d0..f20e5af 100644
--- a/content/app/strings/translations/content_strings_sw.xtb
+++ b/content/app/strings/translations/content_strings_sw.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Kimezimwa</translation>
 <translation id="588258955323874662">Skrini nzima</translation>
 <translation id="5888666972993069672">Sasa inatuma kwenye <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">kisanduku cha kutafutia</translation>
 <translation id="5939518447894949180">Weka upya</translation>
 <translation id="5966707198760109579">Juma</translation>
 <translation id="5987525920412732405">kitufe cha kubadilishia</translation>
diff --git a/content/app/strings/translations/content_strings_te.xtb b/content/app/strings/translations/content_strings_te.xtb
index a92fdeb..a66a472 100644
--- a/content/app/strings/translations/content_strings_te.xtb
+++ b/content/app/strings/translations/content_strings_te.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">ఆఫ్ అయ్యింది</translation>
 <translation id="588258955323874662">పూర్తితెర</translation>
 <translation id="5888666972993069672">ఇప్పుడు <ph name="DEVICE_FRIENDLY_NAME" />కి ప్రసారం చేస్తోంది</translation>
+<translation id="591047860372322273">శోధన పెట్టె</translation>
 <translation id="5939518447894949180">రీసెట్ చేయి</translation>
 <translation id="5966707198760109579">వారం</translation>
 <translation id="5987525920412732405">స్పిన్ బటన్</translation>
diff --git a/content/app/strings/translations/content_strings_th.xtb b/content/app/strings/translations/content_strings_th.xtb
index 9cc79a88..97470837 100644
--- a/content/app/strings/translations/content_strings_th.xtb
+++ b/content/app/strings/translations/content_strings_th.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">ปิด</translation>
 <translation id="588258955323874662">เต็มหน้าจอ</translation>
 <translation id="5888666972993069672">ขณะนี้กำลังแคสต์ไปที่ <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">ช่องค้นหา</translation>
 <translation id="5939518447894949180">รีเซ็ต</translation>
 <translation id="5966707198760109579">สัปดาห์</translation>
 <translation id="5987525920412732405">ปุ่มหมุน</translation>
diff --git a/content/app/strings/translations/content_strings_tr.xtb b/content/app/strings/translations/content_strings_tr.xtb
index a311e735c..17b27b7 100644
--- a/content/app/strings/translations/content_strings_tr.xtb
+++ b/content/app/strings/translations/content_strings_tr.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Kapalı</translation>
 <translation id="588258955323874662">Tam ekran</translation>
 <translation id="5888666972993069672">Şimdi <ph name="DEVICE_FRIENDLY_NAME" /> adlı cihaza yayınlanıyor</translation>
+<translation id="591047860372322273">arama kutusu</translation>
 <translation id="5939518447894949180">Sıfırla</translation>
 <translation id="5966707198760109579">Hafta</translation>
 <translation id="5987525920412732405">dönme düğmesi</translation>
diff --git a/content/app/strings/translations/content_strings_uk.xtb b/content/app/strings/translations/content_strings_uk.xtb
index 32283da6..e5bb44f 100644
--- a/content/app/strings/translations/content_strings_uk.xtb
+++ b/content/app/strings/translations/content_strings_uk.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Вимк.</translation>
 <translation id="588258955323874662">Повноекранний режим</translation>
 <translation id="5888666972993069672">Транслюється на пристрій <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">вікно пошуку</translation>
 <translation id="5939518447894949180">Скинути</translation>
 <translation id="5966707198760109579">Тиждень</translation>
 <translation id="5987525920412732405">лічильник</translation>
diff --git a/content/app/strings/translations/content_strings_vi.xtb b/content/app/strings/translations/content_strings_vi.xtb
index d4462004..50e0b9d 100644
--- a/content/app/strings/translations/content_strings_vi.xtb
+++ b/content/app/strings/translations/content_strings_vi.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">Tắt</translation>
 <translation id="588258955323874662">Toàn màn hình</translation>
 <translation id="5888666972993069672">Hiện đang truyền tới <ph name="DEVICE_FRIENDLY_NAME" /></translation>
+<translation id="591047860372322273">hộp tìm kiếm</translation>
 <translation id="5939518447894949180">Đặt lại</translation>
 <translation id="5966707198760109579">Tuần</translation>
 <translation id="5987525920412732405">nút quay tròn</translation>
diff --git a/content/app/strings/translations/content_strings_zh-CN.xtb b/content/app/strings/translations/content_strings_zh-CN.xtb
index d344c75..c99b702 100644
--- a/content/app/strings/translations/content_strings_zh-CN.xtb
+++ b/content/app/strings/translations/content_strings_zh-CN.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">关闭</translation>
 <translation id="588258955323874662">全屏</translation>
 <translation id="5888666972993069672">现正投射至“<ph name="DEVICE_FRIENDLY_NAME" />”</translation>
+<translation id="591047860372322273">搜索框</translation>
 <translation id="5939518447894949180">重置</translation>
 <translation id="5966707198760109579">周</translation>
 <translation id="5987525920412732405">微调按钮</translation>
diff --git a/content/app/strings/translations/content_strings_zh-TW.xtb b/content/app/strings/translations/content_strings_zh-TW.xtb
index 6ac21a4c..f7dcc25 100644
--- a/content/app/strings/translations/content_strings_zh-TW.xtb
+++ b/content/app/strings/translations/content_strings_zh-TW.xtb
@@ -141,6 +141,7 @@
 <translation id="5860033963881614850">關閉</translation>
 <translation id="588258955323874662">全螢幕</translation>
 <translation id="5888666972993069672">正在投放到「<ph name="DEVICE_FRIENDLY_NAME" />」</translation>
+<translation id="591047860372322273">搜尋框</translation>
 <translation id="5939518447894949180">重設</translation>
 <translation id="5966707198760109579">週</translation>
 <translation id="5987525920412732405">微調按鈕</translation>
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 93d2088c..7528377 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -65,7 +65,6 @@
     "//components/payments/content/icon",
     "//components/rappor",
     "//components/services/filesystem:lib",
-    "//components/services/heap_profiling/public/cpp:manifest",
     "//components/services/leveldb:lib",
     "//components/tracing",
     "//components/tracing:startup_tracing",
@@ -121,8 +120,8 @@
     "//media/midi",
     "//media/midi:mojo",
     "//media/mojo:buildflags",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:constants",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:constants",
     "//media/mojo/services",
     "//media/mojo/services:cdm_manifest",
     "//media/mojo/services:media_manifest",
@@ -245,7 +244,7 @@
     ":accessibility_buildflags",
     "//base/util/type_safety",
     "//ipc",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom:remoting",
     "//third_party/blink/public/mojom:embedded_frame_sink_mojo_bindings",
     "//third_party/leveldatabase",
   ]
@@ -1097,6 +1096,8 @@
     "keyboard_lock/keyboard_lock_service_impl.h",
     "loader/browser_initiated_resource_request.cc",
     "loader/browser_initiated_resource_request.h",
+    "loader/cached_navigation_url_loader.cc",
+    "loader/cached_navigation_url_loader.h",
     "loader/cross_origin_read_blocking_checker.cc",
     "loader/cross_origin_read_blocking_checker.h",
     "loader/data_pipe_to_source_stream.cc",
diff --git a/content/browser/accessibility/accessibility_event_recorder_auralinux.cc b/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
index fc92f25..807203b9 100644
--- a/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
+++ b/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
@@ -238,7 +238,11 @@
     int index = static_cast<int>(g_value_get_uint(&params[1]));
     log += base::StringPrintf(" index:%d", index);
     AtkObject* child = static_cast<AtkObject*>(g_value_get_pointer(&params[2]));
-    if (child)
+
+    // Removed children may become stale references by this point.
+    if (event_name.find("::remove") != std::string::npos)
+      log += " CHILD:(REMOVED)";
+    else if (child)
       log += " CHILD:(" + AtkObjectToString(child, log_name) + ")";
     else
       log += " CHILD:(NULL)";
diff --git a/content/browser/accessibility/dump_accessibility_events_browsertest.cc b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
index 6839d8ac..9bf21e6 100644
--- a/content/browser/accessibility/dump_accessibility_events_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
@@ -554,6 +554,7 @@
   RunEventTest(FILE_PATH_LITERAL("live-region-elem-reparent.html"));
 }
 
+// TODO(aboxhall): Fix flakiness.
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest,
                        AccessibilityEventsLiveRegionIgnoresClick) {
   RunEventTest(FILE_PATH_LITERAL("live-region-ignores-click.html"));
@@ -796,4 +797,14 @@
   RunEventTest(FILE_PATH_LITERAL("select-selected-add-remove.html"));
 }
 
+// Test is flaky on Linux. See crbug.com/990847 for more details.
+#if defined(OS_LINUX)
+#define MAYBE_DeleteSubtree DISABLED_DeleteSubtree
+#else
+#define MAYBE_DeleteSubtree DeleteSubtree
+#endif
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest, MAYBE_DeleteSubtree) {
+  RunEventTest(FILE_PATH_LITERAL("delete-subtree.html"));
+}
+
 }  // namespace content
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index 8591e44..a97d2c4 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -340,10 +340,12 @@
 
   // 3) Go back to A.
   web_contents()->GetController().GoBack();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
   EXPECT_EQ(url_a, web_contents()->GetVisibleURL());
 
   // 4) Go forward to B.
   web_contents()->GetController().GoForward();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
   EXPECT_EQ(url_b, web_contents()->GetVisibleURL());
 }
 
@@ -700,7 +702,6 @@
   EXPECT_FALSE(delete_rfh_a.deleted());
   EXPECT_FALSE(delete_rfh_b.deleted());
   EXPECT_EQ(rfh_a, current_frame_host());
-  EXPECT_FALSE(rfh_a->is_in_back_forward_cache());
   EXPECT_TRUE(rfh_b->is_in_back_forward_cache());
   {
     base::string16 title_when_loaded = base::UTF8ToUTF16("loaded!");
@@ -831,4 +832,75 @@
   delete_rfh_a.WaitUntilDeleted();
 }
 
+// Navigate from A to B, then cause JavaScript execution on A, then go back.
+// Test the RenderFrameHost in the cache is evicted by JavaScript.
+IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest,
+                       EvictionOnJavaScriptExecution) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+  GURL url_b(embedded_test_server()->GetURL("b.com", "/title1.html"));
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = current_frame_host();
+  RenderFrameDeletedObserver delete_rfh_a(rfh_a);
+
+  // 2) Navigate to B.
+  EXPECT_TRUE(NavigateToURL(shell(), url_b));
+  RenderFrameHostImpl* rfh_b = current_frame_host();
+  RenderFrameDeletedObserver delete_rfh_b(rfh_b);
+
+  EXPECT_FALSE(delete_rfh_a.deleted());
+  EXPECT_FALSE(delete_rfh_b.deleted());
+  EXPECT_TRUE(rfh_a->is_in_back_forward_cache());
+  EXPECT_FALSE(rfh_b->is_in_back_forward_cache());
+
+  // 3) Execute JavaScript on A.
+  //
+  // Run JavaScript on a page in the back-forward cache. The page should be
+  // evicted. As the frame is deleted, ExecJs returns false without executing.
+  EXPECT_FALSE(ExecJs(rfh_a, "console.log('hi');"));
+
+  // RenderFrameHost A is evicted from the BackForwardCache:
+  delete_rfh_a.WaitUntilDeleted();
+}
+
+// Similar to BackForwardCacheBrowserTest.EvictionOnJavaScriptExecution.
+// Test case: A(B) -> C -> JS on B -> A(B)
+IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest,
+                       EvictionOnJavaScriptExecutionIframe) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+  GURL url_a(embedded_test_server()->GetURL(
+      "a.com", "/cross_site_iframe_factory.html?a(b)"));
+  GURL url_c(embedded_test_server()->GetURL("c.com", "/title1.html"));
+
+  // 1) Navigate to A(B).
+  EXPECT_TRUE(NavigateToURL(shell(), url_a));
+  RenderFrameHostImpl* rfh_a = current_frame_host();
+  RenderFrameHostImpl* rfh_b = rfh_a->child_at(0)->current_frame_host();
+  RenderFrameDeletedObserver delete_rfh_a(rfh_a);
+  RenderFrameDeletedObserver delete_rfh_b(rfh_b);
+
+  // 2) Navigate to C.
+  EXPECT_TRUE(NavigateToURL(shell(), url_c));
+  RenderFrameHostImpl* rfh_c = current_frame_host();
+  RenderFrameDeletedObserver delete_rfh_c(rfh_c);
+
+  EXPECT_FALSE(delete_rfh_a.deleted());
+  EXPECT_FALSE(delete_rfh_b.deleted());
+  EXPECT_FALSE(delete_rfh_c.deleted());
+  EXPECT_TRUE(rfh_a->is_in_back_forward_cache());
+  EXPECT_TRUE(rfh_b->is_in_back_forward_cache());
+  EXPECT_FALSE(rfh_c->is_in_back_forward_cache());
+
+  // 3) Execute JavaScript on B.
+  //
+  // As the frame is deleted, ExecJs returns false without executing.
+  EXPECT_FALSE(ExecJs(rfh_b, "console.log('hi');"));
+
+  // The A(B) page is evicted. So A and B are removed:
+  delete_rfh_a.WaitUntilDeleted();
+  delete_rfh_b.WaitUntilDeleted();
+}
+
 }  // namespace content
diff --git a/content/browser/background_sync/background_sync_manager.cc b/content/browser/background_sync/background_sync_manager.cc
index c0099de..6abf32e 100644
--- a/content/browser/background_sync/background_sync_manager.cc
+++ b/content/browser/background_sync/background_sync_manager.cc
@@ -401,24 +401,28 @@
          options.min_interval == kMinIntervalForOneShotSync);
 
   if (GetBackgroundSyncType(options) == BackgroundSyncType::ONE_SHOT) {
+    auto id = op_scheduler_.CreateId();
     op_scheduler_.ScheduleOperation(
+        id, CacheStorageSchedulerMode::kExclusive,
         CacheStorageSchedulerOp::kBackgroundSync,
         base::BindOnce(
             &BackgroundSyncManager::RegisterCheckIfHasMainFrame,
             weak_ptr_factory_.GetWeakPtr(), sw_registration_id,
             std::move(options),
-            op_scheduler_.WrapCallbackToRunNext(std::move(callback))));
+            op_scheduler_.WrapCallbackToRunNext(id, std::move(callback))));
   } else {
     // Periodic Background Sync events already have a pre-defined cadence which
     // the user agent decides. Don't block registration if there's no top level
     // frame at the time of registration.
+    auto id = op_scheduler_.CreateId();
     op_scheduler_.ScheduleOperation(
+        id, CacheStorageSchedulerMode::kExclusive,
         CacheStorageSchedulerOp::kBackgroundSync,
         base::BindOnce(
             &BackgroundSyncManager::RegisterImpl,
             weak_ptr_factory_.GetWeakPtr(), sw_registration_id,
             std::move(options),
-            op_scheduler_.WrapCallbackToRunNext(std::move(callback))));
+            op_scheduler_.WrapCallbackToRunNext(id, std::move(callback))));
   }
 }
 
@@ -435,11 +439,14 @@
     return;
   }
 
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
-      base::BindOnce(&BackgroundSyncManager::UnregisterPeriodicSyncImpl,
-                     weak_ptr_factory_.GetWeakPtr(), sw_registration_id, tag,
-                     op_scheduler_.WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &BackgroundSyncManager::UnregisterPeriodicSyncImpl,
+          weak_ptr_factory_.GetWeakPtr(), sw_registration_id, tag,
+          op_scheduler_.WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void BackgroundSyncManager::DidResolveRegistration(
@@ -448,11 +455,13 @@
 
   if (disabled_)
     return;
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
       base::BindOnce(&BackgroundSyncManager::DidResolveRegistrationImpl,
                      weak_ptr_factory_.GetWeakPtr(),
-                     std::move(registration_info)));
+                     std::move(registration_info), id));
 }
 
 void BackgroundSyncManager::GetOneShotSyncRegistrations(
@@ -484,12 +493,14 @@
     return;
   }
 
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
-      base::BindOnce(&BackgroundSyncManager::GetRegistrationsImpl,
-                     weak_ptr_factory_.GetWeakPtr(), sync_type,
-                     sw_registration_id,
-                     op_scheduler_.WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &BackgroundSyncManager::GetRegistrationsImpl,
+          weak_ptr_factory_.GetWeakPtr(), sync_type, sw_registration_id,
+          op_scheduler_.WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void BackgroundSyncManager::OnRegistrationDeleted(int64_t sw_registration_id,
@@ -499,11 +510,13 @@
   // Operations already in the queue will either fail when they write to storage
   // or return stale results based on registrations loaded in memory. This is
   // inconsequential since the service worker is gone.
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
       base::BindOnce(&BackgroundSyncManager::OnRegistrationDeletedImpl,
                      weak_ptr_factory_.GetWeakPtr(), sw_registration_id,
-                     MakeEmptyCompletion()));
+                     MakeEmptyCompletion(id)));
 }
 
 void BackgroundSyncManager::OnStorageWiped() {
@@ -512,19 +525,23 @@
   // Operations already in the queue will either fail when they write to storage
   // or return stale results based on registrations loaded in memory. This is
   // inconsequential since the service workers are gone.
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
       base::BindOnce(&BackgroundSyncManager::OnStorageWipedImpl,
-                     weak_ptr_factory_.GetWeakPtr(), MakeEmptyCompletion()));
+                     weak_ptr_factory_.GetWeakPtr(), MakeEmptyCompletion(id)));
 }
 
 void BackgroundSyncManager::SetMaxSyncAttemptsForTesting(int max_attempts) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
       base::BindOnce(&BackgroundSyncManager::SetMaxSyncAttemptsImpl,
                      weak_ptr_factory_.GetWeakPtr(), max_attempts,
-                     MakeEmptyCompletion()));
+                     MakeEmptyCompletion(id)));
 }
 
 void BackgroundSyncManager::EmulateDispatchSyncEvent(
@@ -592,10 +609,12 @@
   DCHECK(!op_scheduler_.ScheduledOperations());
   DCHECK(!disabled_);
 
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
       base::BindOnce(&BackgroundSyncManager::InitImpl,
-                     weak_ptr_factory_.GetWeakPtr(), MakeEmptyCompletion()));
+                     weak_ptr_factory_.GetWeakPtr(), MakeEmptyCompletion(id)));
 }
 
 void BackgroundSyncManager::InitImpl(base::OnceClosure callback) {
@@ -1131,7 +1150,8 @@
 }
 
 void BackgroundSyncManager::DidResolveRegistrationImpl(
-    blink::mojom::BackgroundSyncRegistrationInfoPtr registration_info) {
+    blink::mojom::BackgroundSyncRegistrationInfoPtr registration_info,
+    CacheStorageSchedulerId id) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   BackgroundSyncRegistration* registration =
@@ -1140,7 +1160,7 @@
     // There might not be a registration if the client ack's a registration that
     // was a duplicate in the first place and was already firing and finished by
     // the time the client acknowledged the second registration.
-    op_scheduler_.CompleteOperationAndRunNext();
+    op_scheduler_.CompleteOperationAndRunNext(id);
     return;
   }
 
@@ -1151,16 +1171,17 @@
                      service_worker_context_, std::move(*registration_info)),
       base::BindOnce(
           &BackgroundSyncManager::ResolveRegistrationDidCreateKeepAlive,
-          weak_ptr_factory_.GetWeakPtr()));
+          weak_ptr_factory_.GetWeakPtr(), id));
 }
 
 void BackgroundSyncManager::ResolveRegistrationDidCreateKeepAlive(
+    CacheStorageSchedulerId id,
     std::unique_ptr<BackgroundSyncEventKeepAlive> keepalive) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   FireReadyEvents(BackgroundSyncType::ONE_SHOT, base::DoNothing::Once(),
                   std::move(keepalive));
-  op_scheduler_.CompleteOperationAndRunNext();
+  op_scheduler_.CompleteOperationAndRunNext(id);
 }
 
 void BackgroundSyncManager::RemoveActiveRegistration(
@@ -1546,11 +1567,13 @@
   if (disabled_)
     return;
 
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
       base::BindOnce(&BackgroundSyncManager::ReviveOriginImpl,
                      weak_ptr_factory_.GetWeakPtr(), std::move(origin),
-                     MakeEmptyCompletion()));
+                     MakeEmptyCompletion(id)));
 }
 
 void BackgroundSyncManager::ReviveOriginImpl(url::Origin origin,
@@ -1685,12 +1708,15 @@
     std::unique_ptr<BackgroundSyncEventKeepAlive> keepalive) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
-      base::BindOnce(&BackgroundSyncManager::FireReadyEventsImpl,
-                     weak_ptr_factory_.GetWeakPtr(), sync_type,
-                     op_scheduler_.WrapCallbackToRunNext(std::move(callback)),
-                     std::move(keepalive)));
+      base::BindOnce(
+          &BackgroundSyncManager::FireReadyEventsImpl,
+          weak_ptr_factory_.GetWeakPtr(), sync_type,
+          op_scheduler_.WrapCallbackToRunNext(id, std::move(callback)),
+          std::move(keepalive)));
 }
 
 void BackgroundSyncManager::FireReadyEventsImpl(
@@ -1878,13 +1904,15 @@
                      registration_info->sync_type,
                      status_code == blink::ServiceWorkerStatusCode::kOk));
 
+  auto id = op_scheduler_.CreateId();
   op_scheduler_.ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kBackgroundSync,
-      base::BindOnce(&BackgroundSyncManager::EventCompleteImpl,
-                     weak_ptr_factory_.GetWeakPtr(),
-                     std::move(registration_info), std::move(keepalive),
-                     status_code, origin,
-                     op_scheduler_.WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &BackgroundSyncManager::EventCompleteImpl,
+          weak_ptr_factory_.GetWeakPtr(), std::move(registration_info),
+          std::move(keepalive), status_code, origin,
+          op_scheduler_.WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void BackgroundSyncManager::EventCompleteImpl(
@@ -2112,9 +2140,10 @@
   base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(callback));
 }
 
-base::OnceClosure BackgroundSyncManager::MakeEmptyCompletion() {
+base::OnceClosure BackgroundSyncManager::MakeEmptyCompletion(
+    CacheStorageSchedulerId id) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  return op_scheduler_.WrapCallbackToRunNext(base::DoNothing::Once());
+  return op_scheduler_.WrapCallbackToRunNext(id, base::DoNothing::Once());
 }
 
 blink::ServiceWorkerStatusCode BackgroundSyncManager::CanEmulateSyncEvent(
diff --git a/content/browser/background_sync/background_sync_manager.h b/content/browser/background_sync/background_sync_manager.h
index 84cd1e4..13272fd 100644
--- a/content/browser/background_sync/background_sync_manager.h
+++ b/content/browser/background_sync/background_sync_manager.h
@@ -312,8 +312,10 @@
 
   // DidResolveRegistration callbacks
   void DidResolveRegistrationImpl(
-      blink::mojom::BackgroundSyncRegistrationInfoPtr registration_info);
+      blink::mojom::BackgroundSyncRegistrationInfoPtr registration_info,
+      CacheStorageSchedulerId id);
   void ResolveRegistrationDidCreateKeepAlive(
+      CacheStorageSchedulerId id,
       std::unique_ptr<BackgroundSyncEventKeepAlive> keepalive);
 
   // GetRegistrations callbacks
@@ -413,7 +415,7 @@
                                   blink::ServiceWorkerStatusCode status);
   void DidReceiveDelaysForSuspendedRegistrations(base::OnceClosure callback);
 
-  base::OnceClosure MakeEmptyCompletion();
+  base::OnceClosure MakeEmptyCompletion(CacheStorageSchedulerId id);
 
   blink::ServiceWorkerStatusCode CanEmulateSyncEvent(
       scoped_refptr<ServiceWorkerVersion> active_version);
diff --git a/content/browser/builtin_service_manifests.cc b/content/browser/builtin_service_manifests.cc
index 5fb43e9..8980d76 100644
--- a/content/browser/builtin_service_manifests.cc
+++ b/content/browser/builtin_service_manifests.cc
@@ -7,7 +7,6 @@
 #include "base/feature_list.h"
 #include "base/no_destructor.h"
 #include "build/build_config.h"
-#include "components/services/heap_profiling/public/cpp/manifest.h"
 #include "content/public/app/content_browser_manifest.h"
 #include "content/public/app/content_gpu_manifest.h"
 #include "content/public/app/content_plugin_manifest.h"
@@ -67,7 +66,6 @@
           GetContentRendererManifest(),
           GetContentUtilityManifest(),
 
-          heap_profiling::GetManifest(),
           audio::GetManifest(IsAudioServiceOutOfProcess()
                                  ? service_manager::Manifest::ExecutionMode::
                                        kOutOfProcessBuiltin
diff --git a/content/browser/cache_storage/cache_storage_manager_unittest.cc b/content/browser/cache_storage/cache_storage_manager_unittest.cc
index 2e2d4aa..59db93d 100644
--- a/content/browser/cache_storage/cache_storage_manager_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_manager_unittest.cc
@@ -1594,7 +1594,7 @@
   EXPECT_FALSE(Delete(origin1_, "tmp"));  // Init storage.
   CacheStorageHandle cache_storage = CacheStorageForOrigin(origin1_);
   auto* impl = LegacyCacheStorage::From(cache_storage);
-  impl->StartAsyncOperationForTesting();
+  auto id = impl->StartAsyncOperationForTesting();
 
   base::RunLoop open_loop;
   cache_storage.value()->OpenCache(
@@ -1605,7 +1605,7 @@
   base::RunLoop().RunUntilIdle();
   EXPECT_FALSE(callback_cache_handle_.value());
 
-  impl->CompleteAsyncOperationForTesting();
+  impl->CompleteAsyncOperationForTesting(id);
   open_loop.Run();
   EXPECT_TRUE(callback_cache_handle_.value());
 }
diff --git a/content/browser/cache_storage/cache_storage_operation.cc b/content/browser/cache_storage/cache_storage_operation.cc
index d9084936..99cd3b5 100644
--- a/content/browser/cache_storage/cache_storage_operation.cc
+++ b/content/browser/cache_storage/cache_storage_operation.cc
@@ -14,12 +14,16 @@
 
 CacheStorageOperation::CacheStorageOperation(
     base::OnceClosure closure,
+    CacheStorageSchedulerId id,
     CacheStorageSchedulerClient client_type,
+    CacheStorageSchedulerMode mode,
     CacheStorageSchedulerOp op_type,
     scoped_refptr<base::SequencedTaskRunner> task_runner)
     : closure_(std::move(closure)),
       creation_ticks_(base::TimeTicks::Now()),
+      id_(id),
       client_type_(client_type),
+      mode_(mode),
       op_type_(op_type),
       task_runner_(std::move(task_runner)) {}
 
diff --git a/content/browser/cache_storage/cache_storage_operation.h b/content/browser/cache_storage/cache_storage_operation.h
index 84a6663..91e07fe6 100644
--- a/content/browser/cache_storage/cache_storage_operation.h
+++ b/content/browser/cache_storage/cache_storage_operation.h
@@ -21,7 +21,9 @@
 class CONTENT_EXPORT CacheStorageOperation {
  public:
   CacheStorageOperation(base::OnceClosure closure,
+                        CacheStorageSchedulerId id,
                         CacheStorageSchedulerClient client_type,
+                        CacheStorageSchedulerMode mode,
                         CacheStorageSchedulerOp op_type,
                         scoped_refptr<base::SequencedTaskRunner> task_runner);
 
@@ -31,6 +33,8 @@
   void Run();
 
   base::TimeTicks creation_ticks() const { return creation_ticks_; }
+  CacheStorageSchedulerId id() const { return id_; }
+  CacheStorageSchedulerMode mode() const { return mode_; }
   CacheStorageSchedulerOp op_type() const { return op_type_; }
   base::WeakPtr<CacheStorageOperation> AsWeakPtr() {
     return weak_ptr_factory_.GetWeakPtr();
@@ -51,7 +55,9 @@
   // If the operation took a long time to run.
   bool was_slow_ = false;
 
+  const CacheStorageSchedulerId id_;
   const CacheStorageSchedulerClient client_type_;
+  const CacheStorageSchedulerMode mode_;
   const CacheStorageSchedulerOp op_type_;
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
   base::WeakPtrFactory<CacheStorageOperation> weak_ptr_factory_{this};
diff --git a/content/browser/cache_storage/cache_storage_operation_unittest.cc b/content/browser/cache_storage/cache_storage_operation_unittest.cc
index b82da9b..b02f6cff 100644
--- a/content/browser/cache_storage/cache_storage_operation_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_operation_unittest.cc
@@ -39,7 +39,8 @@
       : mock_task_runner_(new base::TestMockTimeTaskRunner()) {
     operation_ = std::make_unique<CacheStorageOperation>(
         base::BindOnce(&TestTask::Run, base::Unretained(&task_)),
-        CacheStorageSchedulerClient::kStorage, CacheStorageSchedulerOp::kTest,
+        /* id = */ 0, CacheStorageSchedulerClient::kStorage,
+        CacheStorageSchedulerMode::kExclusive, CacheStorageSchedulerOp::kTest,
         mock_task_runner_);
   }
 
diff --git a/content/browser/cache_storage/cache_storage_scheduler.cc b/content/browser/cache_storage/cache_storage_scheduler.cc
index 9ea8838d..e7fc43d 100644
--- a/content/browser/cache_storage/cache_storage_scheduler.cc
+++ b/content/browser/cache_storage/cache_storage_scheduler.cc
@@ -7,62 +7,151 @@
 #include <string>
 
 #include "base/bind.h"
+#include "base/feature_list.h"
 #include "base/location.h"
 #include "base/logging.h"
+#include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/sequenced_task_runner.h"
 #include "content/browser/cache_storage/cache_storage_histogram_utils.h"
 #include "content/browser/cache_storage/cache_storage_operation.h"
+#include "content/public/common/content_features.h"
 
 namespace content {
 
+namespace {
+
+const base::FeatureParam<int> kCacheStorageMaxSharedOps{
+    &features::kCacheStorageParallelOps, "max_shared_ops", 1};
+
+}  // namespace
+
 CacheStorageScheduler::CacheStorageScheduler(
     CacheStorageSchedulerClient client_type,
     scoped_refptr<base::SequencedTaskRunner> task_runner)
     : task_runner_(std::move(task_runner)), client_type_(client_type) {}
 
-CacheStorageScheduler::~CacheStorageScheduler() {}
+CacheStorageScheduler::~CacheStorageScheduler() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+}
 
-void CacheStorageScheduler::ScheduleOperation(CacheStorageSchedulerOp op_type,
+CacheStorageSchedulerId CacheStorageScheduler::CreateId() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return next_id_++;
+}
+
+void CacheStorageScheduler::ScheduleOperation(CacheStorageSchedulerId id,
+                                              CacheStorageSchedulerMode mode,
+                                              CacheStorageSchedulerOp op_type,
                                               base::OnceClosure closure) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   RecordCacheStorageSchedulerUMA(CacheStorageSchedulerUMA::kQueueLength,
                                  client_type_, op_type,
                                  pending_operations_.size());
 
   pending_operations_.push_back(std::make_unique<CacheStorageOperation>(
-      std::move(closure), client_type_, op_type, task_runner_));
-  RunOperationIfIdle();
+      std::move(closure), id, client_type_, mode, op_type, task_runner_));
+  MaybeRunOperation();
 }
 
-void CacheStorageScheduler::CompleteOperationAndRunNext() {
-  DCHECK(running_operation_);
-  running_operation_.reset();
+void CacheStorageScheduler::CompleteOperationAndRunNext(
+    CacheStorageSchedulerId id) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  auto it = running_operations_.find(id);
+  DCHECK(it != running_operations_.end());
+  DCHECK_EQ(it->second->id(), id);
 
-  RunOperationIfIdle();
+  if (it->second->mode() == CacheStorageSchedulerMode::kShared) {
+    DCHECK_EQ(num_running_exclusive_, 0);
+    DCHECK_GT(num_running_shared_, 0);
+    num_running_shared_ -= 1;
+    if (num_running_shared_ == 0) {
+      UMA_HISTOGRAM_COUNTS_1000("ServiceWorkerCache.PeakParallelSharedOps",
+                                peak_parallel_shared_);
+      peak_parallel_shared_ = 0;
+    }
+  } else {
+    DCHECK_EQ(num_running_shared_, 0);
+    DCHECK_EQ(num_running_exclusive_, 1);
+    num_running_exclusive_ -= 1;
+  }
+
+  running_operations_.erase(it);
+
+  MaybeRunOperation();
 }
 
 bool CacheStorageScheduler::ScheduledOperations() const {
-  return running_operation_ || !pending_operations_.empty();
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return !running_operations_.empty() || !pending_operations_.empty();
+}
+
+bool CacheStorageScheduler::IsRunningExclusiveOperation() const {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  return num_running_exclusive_ > 0;
 }
 
 void CacheStorageScheduler::DispatchOperationTask(base::OnceClosure task) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   task_runner_->PostTask(FROM_HERE, std::move(task));
 }
 
-void CacheStorageScheduler::RunOperationIfIdle() {
-  if (!running_operation_ && !pending_operations_.empty()) {
-    // TODO(jkarlin): Run multiple operations in parallel where allowed.
-    running_operation_ = std::move(pending_operations_.front());
-    pending_operations_.pop_front();
-
-    RecordCacheStorageSchedulerUMA(
-        CacheStorageSchedulerUMA::kQueueDuration, client_type_,
-        running_operation_->op_type(),
-        base::TimeTicks::Now() - running_operation_->creation_ticks());
-
-    DispatchOperationTask(base::BindOnce(&CacheStorageOperation::Run,
-                                         running_operation_->AsWeakPtr()));
+void CacheStorageScheduler::MaybeRunOperation() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  // If there are no operations, then we can't run anything.
+  if (pending_operations_.empty()) {
+    DoneStartingAvailableOperations();
+    return;
   }
+
+  auto* next_operation = pending_operations_.front().get();
+
+  // Determine if we can run the next operation based on its mode
+  // and the current state of executing operations.  We allow multiple
+  // kShared operations to run in parallel, but a kExclusive operation
+  // must not overlap with any other operation.
+  if (next_operation->mode() == CacheStorageSchedulerMode::kShared) {
+    if (num_running_exclusive_ > 0 ||
+        num_running_shared_ >= kCacheStorageMaxSharedOps.Get()) {
+      DoneStartingAvailableOperations();
+      return;
+    }
+  } else if (num_running_shared_ > 0 || num_running_exclusive_ > 0) {
+    DCHECK_EQ(next_operation->mode(), CacheStorageSchedulerMode::kExclusive);
+    DoneStartingAvailableOperations();
+    return;
+  }
+
+  running_operations_.emplace(next_operation->id(),
+                              std::move(pending_operations_.front()));
+  pending_operations_.pop_front();
+
+  RecordCacheStorageSchedulerUMA(
+      CacheStorageSchedulerUMA::kQueueDuration, client_type_,
+      next_operation->op_type(),
+      base::TimeTicks::Now() - next_operation->creation_ticks());
+
+  if (next_operation->mode() == CacheStorageSchedulerMode::kShared) {
+    DCHECK_EQ(num_running_exclusive_, 0);
+    num_running_shared_ += 1;
+    peak_parallel_shared_ =
+        std::max(num_running_shared_, peak_parallel_shared_);
+  } else {
+    DCHECK_EQ(num_running_exclusive_, 0);
+    DCHECK_EQ(num_running_shared_, 0);
+    num_running_exclusive_ += 1;
+  }
+
+  DispatchOperationTask(
+      base::BindOnce(&CacheStorageOperation::Run, next_operation->AsWeakPtr()));
+
+  // If we just executed a kShared operation, then we may be able to schedule
+  // additional kShared parallel operations.  Recurse to process the next
+  // pending operation.
+  if (next_operation->mode() == CacheStorageSchedulerMode::kShared)
+    MaybeRunOperation();
+  else
+    DoneStartingAvailableOperations();
 }
 
 }  // namespace content
diff --git a/content/browser/cache_storage/cache_storage_scheduler.h b/content/browser/cache_storage/cache_storage_scheduler.h
index 09bbb71f..6bd9a57 100644
--- a/content/browser/cache_storage/cache_storage_scheduler.h
+++ b/content/browser/cache_storage/cache_storage_scheduler.h
@@ -6,6 +6,7 @@
 #define CONTENT_BROWSER_CACHE_STORAGE_CACHE_STORAGE_SCHEDULER_H_
 
 #include <list>
+#include <map>
 
 #include "base/bind.h"
 #include "base/callback.h"
@@ -19,7 +20,6 @@
 
 class CacheStorageOperation;
 
-// TODO(jkarlin): Support readers and writers so operations can run in parallel.
 // TODO(jkarlin): Support operation identification so that ops can be checked in
 // DCHECKs.
 
@@ -33,35 +33,56 @@
                         scoped_refptr<base::SequencedTaskRunner> task_runner);
   virtual ~CacheStorageScheduler();
 
-  // Adds the operation to the tail of the queue and starts it if the scheduler
-  // is idle.
-  void ScheduleOperation(CacheStorageSchedulerOp op_type,
+  // Create a scheduler-unique identifier for an operation to be scheduled.
+  // This value must be passed to the ScheduleOperation(),
+  // CompleteOperationAndRunNext(), and WrapCallbackToRunNext() methods.
+  CacheStorageSchedulerId CreateId();
+
+  // Adds the operation to the tail of the queue and starts it if possible.
+  // A unique identifier must be provided via the CreateId() method.  The
+  // mode determines whether the operation should run exclusively by itself
+  // or can safely run in parallel with other shared operations.
+  void ScheduleOperation(CacheStorageSchedulerId id,
+                         CacheStorageSchedulerMode mode,
+                         CacheStorageSchedulerOp op_type,
                          base::OnceClosure closure);
 
-  // Call this after each operation completes. It cleans up the current
-  // operation and starts the next.
-  void CompleteOperationAndRunNext();
+  // Call this after each operation completes. It cleans up the operation
+  // associated with the given id.  If may also start the next set of
+  // operations.
+  void CompleteOperationAndRunNext(CacheStorageSchedulerId id);
 
   // Returns true if there are any running or pending operations.
   bool ScheduledOperations() const;
 
+  // Returns true if the scheduler is currently running an exclusive operation.
+  bool IsRunningExclusiveOperation() const;
+
   // Wraps |callback| to also call CompleteOperationAndRunNext.
   template <typename... Args>
   base::OnceCallback<void(Args...)> WrapCallbackToRunNext(
+      CacheStorageSchedulerId id,
       base::OnceCallback<void(Args...)> callback) {
     return base::BindOnce(&CacheStorageScheduler::RunNextContinuation<Args...>,
-                          weak_ptr_factory_.GetWeakPtr(), std::move(callback));
+                          weak_ptr_factory_.GetWeakPtr(), id,
+                          std::move(callback));
   }
 
  protected:
   // virtual for testing
   virtual void DispatchOperationTask(base::OnceClosure task);
 
+  // virtual for testing
+  virtual void DoneStartingAvailableOperations() {}
+
  private:
-  void RunOperationIfIdle();
+  // Maybe start running the next operation depending on the current
+  // set of running operations and the mode of the next operation.
+  void MaybeRunOperation();
 
   template <typename... Args>
-  void RunNextContinuation(base::OnceCallback<void(Args...)> callback,
+  void RunNextContinuation(CacheStorageSchedulerId id,
+                           base::OnceCallback<void(Args...)> callback,
                            Args... args) {
     // Grab a weak ptr to guard against the scheduler being deleted during the
     // callback.
@@ -70,14 +91,26 @@
 
     std::move(callback).Run(std::forward<Args>(args)...);
     if (scheduler)
-      CompleteOperationAndRunNext();
+      CompleteOperationAndRunNext(id);
   }
 
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
   std::list<std::unique_ptr<CacheStorageOperation>> pending_operations_;
-  std::unique_ptr<CacheStorageOperation> running_operation_;
+  std::map<CacheStorageSchedulerId, std::unique_ptr<CacheStorageOperation>>
+      running_operations_;
   const CacheStorageSchedulerClient client_type_;
+  CacheStorageSchedulerId next_id_ = 0;
 
+  // Number of shared/exclusive operations currently running.
+  int num_running_shared_ = 0;
+  int num_running_exclusive_ = 0;
+
+  // The peak number of parallel shared operations that ran at once.  Measured
+  // between the last time the sheduler started running shared operations and
+  // when the number of running shared operations drops to zero.
+  int peak_parallel_shared_ = 0;
+
+  SEQUENCE_CHECKER(sequence_checker_);
   base::WeakPtrFactory<CacheStorageScheduler> weak_ptr_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(CacheStorageScheduler);
diff --git a/content/browser/cache_storage/cache_storage_scheduler_types.h b/content/browser/cache_storage/cache_storage_scheduler_types.h
index 6d562f2d..45f9245 100644
--- a/content/browser/cache_storage/cache_storage_scheduler_types.h
+++ b/content/browser/cache_storage/cache_storage_scheduler_types.h
@@ -5,8 +5,12 @@
 #ifndef CONTENT_BROWSER_CACHE_STORAGE_CACHE_STORAGE_SCHEDULER_TYPES_H_
 #define CONTENT_BROWSER_CACHE_STORAGE_CACHE_STORAGE_SCHEDULER_TYPES_H_
 
+#include <stdint.h>
+
 namespace content {
 
+using CacheStorageSchedulerId = int64_t;
+
 // Define the types of clients that might own a scheduler.  This enum is used
 // to populate histogram names and must be kept in sync with the function
 // in cache_storage_histogram_utils.cc.  Please keep this list sorted.  It is
@@ -18,6 +22,11 @@
   kStorage = 2,
 };
 
+enum class CacheStorageSchedulerMode {
+  kExclusive,
+  kShared,
+};
+
 // Define the different types of operations that can be scheduled.  This enum
 // is used to populate histogram names and must be kept in sync with the
 // function in cache_storage_histogram_utils.cc.  Please keep this list sorted.
diff --git a/content/browser/cache_storage/cache_storage_scheduler_unittest.cc b/content/browser/cache_storage/cache_storage_scheduler_unittest.cc
index 3afaf4c9..042f61f8 100644
--- a/content/browser/cache_storage/cache_storage_scheduler_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_scheduler_unittest.cc
@@ -7,7 +7,9 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/run_loop.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "content/public/common/content_features.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -17,70 +19,470 @@
 class TestTask {
  public:
   TestTask(CacheStorageScheduler* scheduler)
-      : scheduler_(scheduler), callback_count_(0) {}
+      : scheduler_(scheduler),
+        id_(scheduler_->CreateId()),
+        callback_count_(0) {}
 
-  virtual void Run() { callback_count_++; }
-  void Done() { scheduler_->CompleteOperationAndRunNext(); }
+  virtual void Run() {
+    callback_count_++;
+    run_loop_.Quit();
+  }
+  void Done() { scheduler_->CompleteOperationAndRunNext(id_); }
 
   int callback_count() const { return callback_count_; }
+  CacheStorageSchedulerId id() const { return id_; }
+  base::RunLoop& run_loop() { return run_loop_; }
 
  protected:
   CacheStorageScheduler* scheduler_;
+  const CacheStorageSchedulerId id_;
+  base::RunLoop run_loop_;
   int callback_count_;
 };
 
+class TestScheduler : public CacheStorageScheduler {
+ public:
+  TestScheduler()
+      : CacheStorageScheduler(CacheStorageSchedulerClient::kStorage,
+                              base::ThreadTaskRunnerHandle::Get()) {}
+
+  void SetDoneStartingClosure(base::OnceClosure done_closure) {
+    CHECK(!done_closure_);
+    done_closure_ = std::move(done_closure);
+  }
+
+ protected:
+  void DoneStartingAvailableOperations() override {
+    if (done_closure_) {
+      base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
+                                                    std::move(done_closure_));
+    }
+    CacheStorageScheduler::DoneStartingAvailableOperations();
+  }
+
+  base::OnceClosure done_closure_;
+};
+
 class CacheStorageSchedulerTest : public testing::Test {
  protected:
   CacheStorageSchedulerTest()
       : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
-        scheduler_(CacheStorageSchedulerClient::kStorage,
-                   base::ThreadTaskRunnerHandle::Get()),
-        task1_(TestTask(&scheduler_)),
-        task2_(TestTask(&scheduler_)) {}
+        task1_(&scheduler_),
+        task2_(&scheduler_),
+        task3_(&scheduler_) {}
 
   TestBrowserThreadBundle browser_thread_bundle_;
-  CacheStorageScheduler scheduler_;
+  TestScheduler scheduler_;
   TestTask task1_;
   TestTask task2_;
+  TestTask task3_;
 };
 
 TEST_F(CacheStorageSchedulerTest, ScheduleOne) {
+  base::RunLoop done_loop;
+  scheduler_.SetDoneStartingClosure(done_loop.QuitClosure());
   scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kTest,
       base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
-  base::RunLoop().RunUntilIdle();
+  task1_.run_loop().Run();
+  done_loop.Run();
   EXPECT_EQ(1, task1_.callback_count());
 }
 
-TEST_F(CacheStorageSchedulerTest, ScheduleTwo) {
+TEST_F(CacheStorageSchedulerTest, ScheduledOperations) {
+  base::RunLoop done_loop;
+  scheduler_.SetDoneStartingClosure(done_loop.QuitClosure());
   scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kTest,
       base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task1_.run_loop().Run();
+  done_loop.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
+  task1_.Done();
+  EXPECT_FALSE(scheduler_.ScheduledOperations());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+}
+
+TEST_F(CacheStorageSchedulerTest, ScheduleTwoExclusive) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "3"}});
+
   scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kExclusive,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kTest,
       base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
-  base::RunLoop().RunUntilIdle();
+
+  // Should only run the first exclusive op.
+  task1_.run_loop().Run();
+  done_loop1.Run();
   EXPECT_EQ(1, task1_.callback_count());
   EXPECT_EQ(0, task2_.callback_count());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
 
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Should run the second exclusive op after the first completes.
   task1_.Done();
   EXPECT_TRUE(scheduler_.ScheduledOperations());
-  base::RunLoop().RunUntilIdle();
+  task2_.run_loop().Run();
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
+}
+
+TEST_F(CacheStorageSchedulerTest, ScheduleTwoShared) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "3"}});
+
+  scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
+
+  // Should run both shared ops in paralle.
+  task1_.run_loop().Run();
+  task2_.run_loop().Run();
+  done_loop1.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Completing the first op should trigger a check for new ops
+  // which will not be present here.
+  task1_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop3;
+  scheduler_.SetDoneStartingClosure(done_loop3.QuitClosure());
+
+  // Completing the second op should result in the scheduler
+  // becoming idle.
+  task2_.Done();
+  EXPECT_FALSE(scheduler_.ScheduledOperations());
+  done_loop3.Run();
   EXPECT_EQ(1, task1_.callback_count());
   EXPECT_EQ(1, task2_.callback_count());
 }
 
-TEST_F(CacheStorageSchedulerTest, ScheduledOperations) {
+TEST_F(CacheStorageSchedulerTest, ScheduleOneExclusiveOneShared) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "3"}});
+
   scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kTest,
       base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
-  EXPECT_TRUE(scheduler_.ScheduledOperations());
-  base::RunLoop().RunUntilIdle();
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
+
+  // Should only run the first exclusive op.
+  task1_.run_loop().Run();
+  done_loop1.Run();
   EXPECT_EQ(1, task1_.callback_count());
-  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  EXPECT_EQ(0, task2_.callback_count());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Should run the second shared op after the first is completed.
   task1_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task2_.run_loop().Run();
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  task2_.Done();
   EXPECT_FALSE(scheduler_.ScheduledOperations());
 }
 
+TEST_F(CacheStorageSchedulerTest, ScheduleOneSharedOneExclusive) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "3"}});
+
+  scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kExclusive,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
+
+  // Should only run the first shared op.
+  task1_.run_loop().Run();
+  done_loop1.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(0, task2_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Should run the second exclusive op after the first completes.
+  task1_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task2_.run_loop().Run();
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
+
+  task2_.Done();
+  EXPECT_FALSE(scheduler_.ScheduledOperations());
+}
+
+TEST_F(CacheStorageSchedulerTest, ScheduleTwoSharedOneExclusive) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "3"}});
+
+  scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task3_.id(), CacheStorageSchedulerMode::kExclusive,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task3_)));
+
+  // Should run the two shared ops in parallel.
+  task1_.run_loop().Run();
+  task2_.run_loop().Run();
+  done_loop1.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_EQ(0, task3_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Completing the first shared op should not allow the exclusive op
+  // to run yet.
+  task1_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_EQ(0, task3_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop3;
+  scheduler_.SetDoneStartingClosure(done_loop3.QuitClosure());
+
+  // The third exclusive op should run after both the preceding shared ops
+  // complete.
+  task2_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task3_.run_loop().Run();
+  done_loop3.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_EQ(1, task3_.callback_count());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
+
+  task3_.Done();
+  EXPECT_FALSE(scheduler_.ScheduledOperations());
+}
+
+TEST_F(CacheStorageSchedulerTest, ScheduleOneExclusiveTwoShared) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "3"}});
+
+  scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kExclusive,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task3_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task3_)));
+
+  // Should only run the first exclusive op.
+  task1_.run_loop().Run();
+  done_loop1.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(0, task2_.callback_count());
+  EXPECT_EQ(0, task3_.callback_count());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Should run both the shared ops in parallel after the first exclusive
+  // op is completed.
+  task1_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task2_.run_loop().Run();
+  task3_.run_loop().Run();
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_EQ(1, task3_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop3;
+  scheduler_.SetDoneStartingClosure(done_loop3.QuitClosure());
+
+  task2_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  done_loop3.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_EQ(1, task3_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  task3_.Done();
+  EXPECT_FALSE(scheduler_.ScheduledOperations());
+}
+
+TEST_F(CacheStorageSchedulerTest, ScheduleOneSharedOneExclusiveOneShared) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "3"}});
+
+  scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kExclusive,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task3_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task3_)));
+
+  // Should only run the first shared op.
+  task1_.run_loop().Run();
+  done_loop1.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(0, task2_.callback_count());
+  EXPECT_EQ(0, task3_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Should run the exclusive op after the first op is completed.
+  task1_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task2_.run_loop().Run();
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_EQ(0, task3_.callback_count());
+  EXPECT_TRUE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop3;
+  scheduler_.SetDoneStartingClosure(done_loop3.QuitClosure());
+
+  // Should run the last shared op after the preceding exclusive op
+  // is completed.
+  task2_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task3_.run_loop().Run();
+  done_loop3.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_EQ(1, task3_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  task3_.Done();
+  EXPECT_FALSE(scheduler_.ScheduledOperations());
+}
+
+TEST_F(CacheStorageSchedulerTest, ScheduleTwoSharedNotParallel) {
+  // Disable parallelism
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      features::kCacheStorageParallelOps, {{"max_shared_ops", "1"}});
+
+  scheduler_.ScheduleOperation(
+      task1_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task1_)));
+  base::RunLoop done_loop1;
+  scheduler_.SetDoneStartingClosure(done_loop1.QuitClosure());
+  scheduler_.ScheduleOperation(
+      task2_.id(), CacheStorageSchedulerMode::kShared,
+      CacheStorageSchedulerOp::kTest,
+      base::BindOnce(&TestTask::Run, base::Unretained(&task2_)));
+
+  // Should only run one shared op since the max shared is set to 1.
+  task1_.run_loop().Run();
+  done_loop1.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(0, task2_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+
+  base::RunLoop done_loop2;
+  scheduler_.SetDoneStartingClosure(done_loop2.QuitClosure());
+
+  // Should run the next shared op after the first completes.
+  task1_.Done();
+  EXPECT_TRUE(scheduler_.ScheduledOperations());
+  task2_.run_loop().Run();
+  done_loop2.Run();
+  EXPECT_EQ(1, task1_.callback_count());
+  EXPECT_EQ(1, task2_.callback_count());
+  EXPECT_FALSE(scheduler_.IsRunningExclusiveOperation());
+}
+
 }  // namespace cache_storage_scheduler_unittest
 }  // namespace content
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage.cc b/content/browser/cache_storage/legacy/legacy_cache_storage.cc
index b30684d..a064cef4 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage.cc
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage.cc
@@ -619,11 +619,13 @@
   //       operations to better support use by internal code that may
   //       start a single operation without explicitly maintaining a
   //       handle.
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kOpen,
-      base::BindOnce(&LegacyCacheStorage::OpenCacheImpl,
-                     weak_factory_.GetWeakPtr(), cache_name, trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kExclusive, CacheStorageSchedulerOp::kOpen,
+      base::BindOnce(
+          &LegacyCacheStorage::OpenCacheImpl, weak_factory_.GetWeakPtr(),
+          cache_name, trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::HasCache(const std::string& cache_name,
@@ -638,11 +640,13 @@
       CacheStorageQuotaClient::GetIDFromOwner(owner_), origin_,
       StorageType::kTemporary);
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kHas,
-      base::BindOnce(&LegacyCacheStorage::HasCacheImpl,
-                     weak_factory_.GetWeakPtr(), cache_name, trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kHas,
+      base::BindOnce(
+          &LegacyCacheStorage::HasCacheImpl, weak_factory_.GetWeakPtr(),
+          cache_name, trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::DoomCache(const std::string& cache_name,
@@ -657,11 +661,14 @@
       CacheStorageQuotaClient::GetIDFromOwner(owner_), origin_,
       StorageType::kTemporary);
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kDelete,
-      base::BindOnce(&LegacyCacheStorage::DoomCacheImpl,
-                     weak_factory_.GetWeakPtr(), cache_name, trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorage::DoomCacheImpl, weak_factory_.GetWeakPtr(),
+          cache_name, trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::EnumerateCaches(int64_t trace_id,
@@ -675,11 +682,13 @@
       CacheStorageQuotaClient::GetIDFromOwner(owner_), origin_,
       StorageType::kTemporary);
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kKeys,
-      base::BindOnce(&LegacyCacheStorage::EnumerateCachesImpl,
-                     weak_factory_.GetWeakPtr(), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kKeys,
+      base::BindOnce(
+          &LegacyCacheStorage::EnumerateCachesImpl, weak_factory_.GetWeakPtr(),
+          trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::MatchCache(
@@ -697,12 +706,13 @@
       CacheStorageQuotaClient::GetIDFromOwner(owner_), origin_,
       StorageType::kTemporary);
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kMatch,
-      base::BindOnce(&LegacyCacheStorage::MatchCacheImpl,
-                     weak_factory_.GetWeakPtr(), cache_name, std::move(request),
-                     std::move(match_options), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kMatch,
+      base::BindOnce(
+          &LegacyCacheStorage::MatchCacheImpl, weak_factory_.GetWeakPtr(),
+          cache_name, std::move(request), std::move(match_options), trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::MatchAllCaches(
@@ -719,12 +729,14 @@
       CacheStorageQuotaClient::GetIDFromOwner(owner_), origin_,
       StorageType::kTemporary);
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kShared,
       CacheStorageSchedulerOp::kMatchAll,
-      base::BindOnce(&LegacyCacheStorage::MatchAllCachesImpl,
-                     weak_factory_.GetWeakPtr(), std::move(request),
-                     std::move(match_options), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorage::MatchAllCachesImpl, weak_factory_.GetWeakPtr(),
+          std::move(request), std::move(match_options), trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::WriteToCache(
@@ -742,12 +754,16 @@
       CacheStorageQuotaClient::GetIDFromOwner(owner_), origin_,
       StorageType::kTemporary);
 
+  // Note, this is a shared operation since it only reads CacheStorage data.
+  // The CacheStorageCache is responsible for making its put operation
+  // exclusive.
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kPut,
-      base::BindOnce(&LegacyCacheStorage::WriteToCacheImpl,
-                     weak_factory_.GetWeakPtr(), cache_name, std::move(request),
-                     std::move(response), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kPut,
+      base::BindOnce(
+          &LegacyCacheStorage::WriteToCacheImpl, weak_factory_.GetWeakPtr(),
+          cache_name, std::move(request), std::move(response), trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::GetSizeThenCloseAllCaches(SizeCallback callback) {
@@ -756,11 +772,17 @@
   if (!initialized_)
     LazyInit();
 
+  // Note, this is a shared operation since it only reads CacheStorage data.
+  // The CacheStorageCache is responsible for making its close operation
+  // exclusive.
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kShared,
       CacheStorageSchedulerOp::kSizeThenClose,
-      base::BindOnce(&LegacyCacheStorage::GetSizeThenCloseAllCachesImpl,
-                     weak_factory_.GetWeakPtr(),
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorage::GetSizeThenCloseAllCachesImpl,
+          weak_factory_.GetWeakPtr(),
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::Size(LegacyCacheStorage::SizeCallback callback) {
@@ -769,10 +791,12 @@
   if (!initialized_)
     LazyInit();
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kSize,
-      base::BindOnce(&LegacyCacheStorage::SizeImpl, weak_factory_.GetWeakPtr(),
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kSize,
+      base::BindOnce(
+          &LegacyCacheStorage::SizeImpl, weak_factory_.GetWeakPtr(),
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::ResetManager() {
@@ -798,16 +822,19 @@
 
 void LegacyCacheStorage::WriteIndex(base::OnceCallback<void(bool)> callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kWriteIndex,
-      base::BindOnce(&LegacyCacheStorage::WriteIndexImpl,
-                     weak_factory_.GetWeakPtr(),
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorage::WriteIndexImpl, weak_factory_.GetWeakPtr(),
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorage::WriteIndexImpl(
     base::OnceCallback<void(bool)> callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   cache_loader_->WriteIndex(*cache_index_, std::move(callback));
 }
 
@@ -871,13 +898,17 @@
   cache_map_it->second.reset();
 }
 
-void LegacyCacheStorage::StartAsyncOperationForTesting() {
-  scheduler_->ScheduleOperation(CacheStorageSchedulerOp::kTest,
+CacheStorageSchedulerId LegacyCacheStorage::StartAsyncOperationForTesting() {
+  auto id = scheduler_->CreateId();
+  scheduler_->ScheduleOperation(id, CacheStorageSchedulerMode::kExclusive,
+                                CacheStorageSchedulerOp::kTest,
                                 base::DoNothing());
+  return id;
 }
 
-void LegacyCacheStorage::CompleteAsyncOperationForTesting() {
-  scheduler_->CompleteOperationAndRunNext();
+void LegacyCacheStorage::CompleteAsyncOperationForTesting(
+    CacheStorageSchedulerId id) {
+  scheduler_->CompleteOperationAndRunNext(id);
 }
 
 // Init is run lazily so that it is called on the proper MessageLoop.
@@ -891,7 +922,9 @@
   DCHECK(!scheduler_->ScheduledOperations());
 
   initializing_ = true;
+  init_id_ = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      init_id_, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kInit,
       base::BindOnce(&LegacyCacheStorage::LazyInitImpl,
                      weak_factory_.GetWeakPtr()));
@@ -907,6 +940,7 @@
   // 3. Once each load is complete, update the map variables.
   // 4. Call the list of waiting callbacks.
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   cache_loader_->LoadIndex(base::BindOnce(
       &LegacyCacheStorage::LazyInitDidLoadIndex, weak_factory_.GetWeakPtr()));
 }
@@ -926,7 +960,7 @@
   initializing_ = false;
   initialized_ = true;
 
-  scheduler_->CompleteOperationAndRunNext();
+  scheduler_->CompleteOperationAndRunNext(init_id_);
 }
 
 void LegacyCacheStorage::OpenCacheImpl(const std::string& cache_name,
@@ -943,6 +977,7 @@
     return;
   }
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   cache_loader_->PrepareNewCacheDestination(
       cache_name, base::BindOnce(&LegacyCacheStorage::CreateCacheDidCreateCache,
                                  weak_factory_.GetWeakPtr(), cache_name,
@@ -1034,6 +1069,7 @@
     return;
   }
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   LegacyCacheStorageCache::From(cache_handle)->SetObserver(nullptr);
   cache_index_->DoomCache(cache_name);
   cache_loader_->WriteIndex(
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage.h b/content/browser/cache_storage/legacy/legacy_cache_storage.h
index f0985a7..14ae5b6 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage.h
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage.h
@@ -17,6 +17,7 @@
 #include "base/memory/weak_ptr.h"
 #include "content/browser/cache_storage/cache_storage.h"
 #include "content/browser/cache_storage/cache_storage_cache_observer.h"
+#include "content/browser/cache_storage/cache_storage_scheduler_types.h"
 #include "content/browser/cache_storage/legacy/legacy_cache_storage_cache.h"
 
 namespace base {
@@ -119,8 +120,8 @@
 
   // The functions below are for tests to verify that the operations run
   // serially.
-  void StartAsyncOperationForTesting();
-  void CompleteAsyncOperationForTesting();
+  CacheStorageSchedulerId StartAsyncOperationForTesting();
+  void CompleteAsyncOperationForTesting(CacheStorageSchedulerId id);
 
   // Removes the manager reference. Called before this storage is deleted by the
   // manager, since it is removed from manager's storage map before deleting.
@@ -295,6 +296,8 @@
   // The owner that this CacheStorage is associated with.
   CacheStorageOwner owner_;
 
+  CacheStorageSchedulerId init_id_ = -1;
+
   // The manager that owns this cache storage. Only set to null by
   // RemoveManager() when this cache storage is being deleted.
   LegacyCacheStorageManager* cache_storage_manager_;
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 5eb3460a1..7e2a5d6 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
@@ -540,12 +540,13 @@
     return;
   }
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kMatch,
-      base::BindOnce(&LegacyCacheStorageCache::MatchImpl,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(request),
-                     std::move(match_options), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kMatch,
+      base::BindOnce(
+          &LegacyCacheStorageCache::MatchImpl, weak_ptr_factory_.GetWeakPtr(),
+          std::move(request), std::move(match_options), trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorageCache::MatchAll(
@@ -560,12 +561,15 @@
     return;
   }
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kShared,
       CacheStorageSchedulerOp::kMatchAll,
-      base::BindOnce(&LegacyCacheStorageCache::MatchAllImpl,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(request),
-                     std::move(match_options), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorageCache::MatchAllImpl,
+          weak_ptr_factory_.GetWeakPtr(), std::move(request),
+          std::move(match_options), trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorageCache::WriteSideData(ErrorCallback callback,
@@ -825,23 +829,26 @@
     return;
   }
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kKeys,
-      base::BindOnce(&LegacyCacheStorageCache::KeysImpl,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(request),
-                     std::move(options), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kKeys,
+      base::BindOnce(
+          &LegacyCacheStorageCache::KeysImpl, weak_ptr_factory_.GetWeakPtr(),
+          std::move(request), std::move(options), trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorageCache::Close(base::OnceClosure callback) {
   DCHECK_NE(BACKEND_CLOSED, backend_state_)
       << "Was LegacyCacheStorageCache::Close() called twice?";
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kClose,
-      base::BindOnce(&LegacyCacheStorageCache::CloseImpl,
-                     weak_ptr_factory_.GetWeakPtr(),
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorageCache::CloseImpl, weak_ptr_factory_.GetWeakPtr(),
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorageCache::Size(SizeCallback callback) {
@@ -852,11 +859,12 @@
     return;
   }
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kSize,
-      base::BindOnce(&LegacyCacheStorageCache::SizeImpl,
-                     weak_ptr_factory_.GetWeakPtr(),
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      id, CacheStorageSchedulerMode::kShared, CacheStorageSchedulerOp::kSize,
+      base::BindOnce(
+          &LegacyCacheStorageCache::SizeImpl, weak_ptr_factory_.GetWeakPtr(),
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorageCache::GetSizeThenClose(SizeCallback callback) {
@@ -866,14 +874,16 @@
     return;
   }
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kSizeThenClose,
       base::BindOnce(
           &LegacyCacheStorageCache::SizeImpl, weak_ptr_factory_.GetWeakPtr(),
           base::BindOnce(
               &LegacyCacheStorageCache::GetSizeThenCloseDidGetSize,
               weak_ptr_factory_.GetWeakPtr(),
-              scheduler_->WrapCallbackToRunNext(std::move(callback)))));
+              scheduler_->WrapCallbackToRunNext(id, std::move(callback)))));
 }
 
 void LegacyCacheStorageCache::SetObserver(CacheStorageCacheObserver* observer) {
@@ -1358,11 +1368,13 @@
     return;
   }
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kWriteSideData,
       base::BindOnce(&LegacyCacheStorageCache::WriteSideDataImpl,
                      weak_ptr_factory_.GetWeakPtr(),
-                     scheduler_->WrapCallbackToRunNext(std::move(callback)),
+                     scheduler_->WrapCallbackToRunNext(id, std::move(callback)),
                      url, expected_response_time, trace_id, buffer, buf_len));
 }
 
@@ -1477,6 +1489,7 @@
           weak_ptr_factory_.GetWeakPtr(), std::move(callback), std::move(entry),
           buf_len, std::move(response), side_data_size_before_write, trace_id));
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   int rv = temp_entry_ptr->WriteData(
       INDEX_SIDE_DATA, 0 /* offset */, buffer.get(), buf_len,
       write_side_data_callback, true /* truncate */);
@@ -1560,11 +1573,12 @@
 
   auto put_context = cache_entry_handler_->CreatePutContext(
       std::move(request), std::move(response), trace_id);
+  auto id = scheduler_->CreateId();
   put_context->callback =
-      scheduler_->WrapCallbackToRunNext(std::move(callback));
+      scheduler_->WrapCallbackToRunNext(id, std::move(callback));
 
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kPut,
+      id, CacheStorageSchedulerMode::kExclusive, CacheStorageSchedulerOp::kPut,
       base::BindOnce(&LegacyCacheStorageCache::PutImpl,
                      weak_ptr_factory_.GetWeakPtr(), std::move(put_context)));
 }
@@ -1645,6 +1659,7 @@
                          weak_ptr_factory_.GetWeakPtr(),
                          std::move(scoped_entry_ptr), std::move(put_context)));
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   int rv = backend_ptr->CreateEntry(request_.url.spec(), net::HIGHEST,
                                     entry_ptr, create_entry_callback);
 
@@ -1729,6 +1744,7 @@
                          weak_ptr_factory_.GetWeakPtr(), std::move(put_context),
                          buffer->size()));
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   rv = temp_entry_ptr->WriteData(INDEX_HEADERS, 0 /* offset */, buffer.get(),
                                  buffer->size(), write_headers_callback,
                                  true /* truncate */);
@@ -1977,12 +1993,15 @@
     return;
   }
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kShared,
       CacheStorageSchedulerOp::kGetAllMatched,
-      base::BindOnce(&LegacyCacheStorageCache::GetAllMatchedEntriesImpl,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(request),
-                     std::move(options), trace_id,
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorageCache::GetAllMatchedEntriesImpl,
+          weak_ptr_factory_.GetWeakPtr(), std::move(request),
+          std::move(options), trace_id,
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorageCache::GetAllMatchedEntriesImpl(
@@ -2060,12 +2079,14 @@
   request->referrer = operation->request->referrer.Clone();
   request->headers = operation->request->headers;
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
+      id, CacheStorageSchedulerMode::kExclusive,
       CacheStorageSchedulerOp::kDelete,
-      base::BindOnce(&LegacyCacheStorageCache::DeleteImpl,
-                     weak_ptr_factory_.GetWeakPtr(), std::move(request),
-                     std::move(operation->match_options),
-                     scheduler_->WrapCallbackToRunNext(std::move(callback))));
+      base::BindOnce(
+          &LegacyCacheStorageCache::DeleteImpl, weak_ptr_factory_.GetWeakPtr(),
+          std::move(request), std::move(operation->match_options),
+          scheduler_->WrapCallbackToRunNext(id, std::move(callback))));
 }
 
 void LegacyCacheStorageCache::DeleteImpl(
@@ -2104,6 +2125,8 @@
     return;
   }
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
+
   for (auto& result : *query_cache_results) {
     disk_cache::ScopedEntryPtr entry = std::move(result.entry);
     if (ShouldPadResourceSize(*result.response)) {
@@ -2171,6 +2194,7 @@
 void LegacyCacheStorageCache::CloseImpl(base::OnceClosure callback) {
   DCHECK_EQ(BACKEND_OPEN, backend_state_);
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   backend_.reset();
   post_backend_closed_callback_ = std::move(callback);
 }
@@ -2229,6 +2253,7 @@
                          weak_ptr_factory_.GetWeakPtr(), std::move(callback),
                          std::move(backend_ptr)));
 
+  DCHECK(scheduler_->IsRunningExclusiveOperation());
   int rv = disk_cache::CreateCacheBackend(
       cache_type, net::CACHE_BACKEND_SIMPLE, path_, max_bytes,
       false, /* force */
@@ -2261,15 +2286,16 @@
   DCHECK(!scheduler_->ScheduledOperations());
   initializing_ = true;
 
+  auto id = scheduler_->CreateId();
   scheduler_->ScheduleOperation(
-      CacheStorageSchedulerOp::kInit,
+      id, CacheStorageSchedulerMode::kExclusive, CacheStorageSchedulerOp::kInit,
       base::BindOnce(
           &LegacyCacheStorageCache::CreateBackend,
           weak_ptr_factory_.GetWeakPtr(),
           base::BindOnce(
               &LegacyCacheStorageCache::InitDidCreateBackend,
               weak_ptr_factory_.GetWeakPtr(),
-              scheduler_->WrapCallbackToRunNext(base::DoNothing::Once()))));
+              scheduler_->WrapCallbackToRunNext(id, base::DoNothing::Once()))));
 }
 
 void LegacyCacheStorageCache::InitDidCreateBackend(
diff --git a/content/browser/compositor/viz_process_transport_factory.cc b/content/browser/compositor/viz_process_transport_factory.cc
index 10021391..4df09fec 100644
--- a/content/browser/compositor/viz_process_transport_factory.cc
+++ b/content/browser/compositor/viz_process_transport_factory.cc
@@ -188,7 +188,8 @@
 
     // GPU process access is disabled. Start a new thread to run the display
     // compositor in-process and connect HostFrameSinkManager to it.
-    viz_compositor_thread_ = std::make_unique<viz::VizCompositorThreadRunner>();
+    viz_compositor_thread_ =
+        std::make_unique<viz::VizCompositorThreadRunnerImpl>();
 
     viz::mojom::FrameSinkManagerParamsPtr params =
         viz::mojom::FrameSinkManagerParams::New();
diff --git a/content/browser/compositor/viz_process_transport_factory.h b/content/browser/compositor/viz_process_transport_factory.h
index fd8a3a42..0e2a688 100644
--- a/content/browser/compositor/viz_process_transport_factory.h
+++ b/content/browser/compositor/viz_process_transport_factory.h
@@ -10,7 +10,7 @@
 #include "base/macros.h"
 #include "build/build_config.h"
 #include "components/viz/common/gpu/context_lost_observer.h"
-#include "components/viz/service/main/viz_compositor_thread_runner.h"
+#include "components/viz/service/main/viz_compositor_thread_runner_impl.h"
 #include "content/browser/compositor/image_transport_factory.h"
 #include "gpu/command_buffer/common/context_result.h"
 #include "mojo/public/cpp/bindings/binding.h"
@@ -131,7 +131,7 @@
 
   // Will start and run the VizCompositorThread for using an in-process display
   // compositor.
-  std::unique_ptr<viz::VizCompositorThreadRunner> viz_compositor_thread_;
+  std::unique_ptr<viz::VizCompositorThreadRunnerImpl> viz_compositor_thread_;
   ui::HostContextFactoryPrivate context_factory_private_;
 
   base::WeakPtrFactory<VizProcessTransportFactory> weak_ptr_factory_{this};
diff --git a/content/browser/content_index/content_index.proto b/content/browser/content_index/content_index.proto
index c5ed988f..ad95fb6 100644
--- a/content/browser/content_index/content_index.proto
+++ b/content/browser/content_index/content_index.proto
@@ -31,3 +31,12 @@
   // can be an absolute or relative path without the host.
   optional string launch_url = 3;
 }
+
+// Wrapper to store all the serialized icons.
+message SerializedIcons {
+  // Create a sub-message in case we want to store metadata with the
+  // serialized icon.
+  message SerializedIcon { optional string icon = 1; }
+
+  repeated SerializedIcon icons = 1;
+}
diff --git a/content/browser/content_index/content_index_context_impl.cc b/content/browser/content_index/content_index_context_impl.cc
index d6df2d2..e43ea3ed 100644
--- a/content/browser/content_index/content_index_context_impl.cc
+++ b/content/browser/content_index/content_index_context_impl.cc
@@ -22,17 +22,17 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 }
 
-void ContentIndexContextImpl::GetIcon(
-    int64_t service_worker_registration_id,
-    const std::string& description_id,
-    base::OnceCallback<void(SkBitmap)> icon_callback) {
+void ContentIndexContextImpl::GetIcons(int64_t service_worker_registration_id,
+                                       const std::string& description_id,
+                                       GetIconsCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-  base::PostTask(FROM_HERE, {BrowserThread::IO},
-                 base::BindOnce(&ContentIndexDatabase::GetIcon,
-                                content_index_database_.GetWeakPtrForIO(),
-                                service_worker_registration_id, description_id,
-                                std::move(icon_callback)));
+  base::PostTaskWithTraits(
+      FROM_HERE, {BrowserThread::IO},
+      base::BindOnce(&ContentIndexDatabase::GetIcons,
+                     content_index_database_.GetWeakPtrForIO(),
+                     service_worker_registration_id, description_id,
+                     std::move(callback)));
 }
 
 void ContentIndexContextImpl::GetAllEntries(GetAllEntriesCallback callback) {
diff --git a/content/browser/content_index/content_index_context_impl.h b/content/browser/content_index/content_index_context_impl.h
index 33fb5f9..65a59ea 100644
--- a/content/browser/content_index/content_index_context_impl.h
+++ b/content/browser/content_index/content_index_context_impl.h
@@ -33,9 +33,9 @@
   ContentIndexDatabase& database();
 
   // ContentIndexContent implementation.
-  void GetIcon(int64_t service_worker_registration_id,
-               const std::string& description_id,
-               base::OnceCallback<void(SkBitmap)> icon_callback) override;
+  void GetIcons(int64_t service_worker_registration_id,
+                const std::string& description_id,
+                GetIconsCallback callback) override;
   void GetAllEntries(GetAllEntriesCallback callback) override;
   void GetEntry(int64_t service_worker_registration_id,
                 const std::string& description_id,
diff --git a/content/browser/content_index/content_index_database.cc b/content/browser/content_index/content_index_database.cc
index 8071bc91..f59adac 100644
--- a/content/browser/content_index/content_index_database.cc
+++ b/content/browser/content_index/content_index_database.cc
@@ -6,6 +6,7 @@
 
 #include <string>
 
+#include "base/barrier_closure.h"
 #include "base/optional.h"
 #include "base/task/post_task.h"
 #include "base/time/time.h"
@@ -33,7 +34,7 @@
   return kEntryPrefix + id;
 }
 
-std::string IconKey(const std::string& id) {
+std::string IconsKey(const std::string& id) {
   return kIconPrefix + id;
 }
 
@@ -117,7 +118,7 @@
     int64_t service_worker_registration_id,
     const url::Origin& origin,
     blink::mojom::ContentDescriptionPtr description,
-    const SkBitmap& icon,
+    const std::vector<SkBitmap>& icons,
     const GURL& launch_url,
     blink::mojom::ContentIndexService::AddCallback callback) {
   if (blocked_origins_.count(origin)) {
@@ -127,25 +128,42 @@
     return;
   }
 
-  SerializeIcon(icon, base::BindOnce(&ContentIndexDatabase::DidSerializeIcon,
-                                     weak_ptr_factory_io_.GetWeakPtr(),
-                                     service_worker_registration_id, origin,
-                                     std::move(description), launch_url,
-                                     std::move(callback)));
+  auto serialized_icons = std::make_unique<proto::SerializedIcons>();
+  proto::SerializedIcons* serialized_icons_ptr = serialized_icons.get();
+
+  auto barrier_closure = base::BarrierClosure(
+      icons.size(),
+      base::BindOnce(&ContentIndexDatabase::DidSerializeIcons,
+                     weak_ptr_factory_io_.GetWeakPtr(),
+                     service_worker_registration_id, origin,
+                     std::move(description), launch_url,
+                     std::move(serialized_icons), std::move(callback)));
+
+  for (const auto& icon : icons) {
+    SerializeIcon(icon,
+                  base::BindOnce(
+                      [](base::OnceClosure done_closure,
+                         proto::SerializedIcons* icons, std::string icon) {
+                        icons->add_icons()->set_icon(std::move(icon));
+                        std::move(done_closure).Run();
+                      },
+                      barrier_closure, serialized_icons_ptr));
+  }
 }
 
-void ContentIndexDatabase::DidSerializeIcon(
+void ContentIndexDatabase::DidSerializeIcons(
     int64_t service_worker_registration_id,
     const url::Origin& origin,
     blink::mojom::ContentDescriptionPtr description,
     const GURL& launch_url,
-    blink::mojom::ContentIndexService::AddCallback callback,
-    std::string serialized_icon) {
+    std::unique_ptr<proto::SerializedIcons> serialized_icons,
+    blink::mojom::ContentIndexService::AddCallback callback) {
   base::Time entry_time = base::Time::Now();
   std::string entry_key = EntryKey(description->id);
-  std::string icon_key = IconKey(description->id);
+  std::string icon_key = IconsKey(description->id);
   std::string entry_value =
       CreateSerializedContentEntry(*description, launch_url, entry_time);
+  std::string icons_value = serialized_icons->SerializeAsString();
 
   // Entry to pass over to the provider.
   ContentIndexEntry entry(service_worker_registration_id,
@@ -154,7 +172,7 @@
   service_worker_context_->StoreRegistrationUserData(
       service_worker_registration_id, origin.GetURL(),
       {{std::move(entry_key), std::move(entry_value)},
-       {std::move(icon_key), std::move(serialized_icon)}},
+       {std::move(icon_key), std::move(icons_value)}},
       base::BindOnce(&ContentIndexDatabase::DidAddEntry,
                      weak_ptr_factory_io_.GetWeakPtr(), std::move(callback),
                      std::move(entry)));
@@ -187,7 +205,7 @@
     const std::string& entry_id,
     blink::mojom::ContentIndexService::DeleteCallback callback) {
   service_worker_context_->ClearRegistrationUserData(
-      service_worker_registration_id, {EntryKey(entry_id), IconKey(entry_id)},
+      service_worker_registration_id, {EntryKey(entry_id), IconsKey(entry_id)},
       base::BindOnce(&ContentIndexDatabase::DidDeleteEntry,
                      weak_ptr_factory_io_.GetWeakPtr(),
                      service_worker_registration_id, origin, entry_id,
@@ -267,36 +285,73 @@
                           std::move(descriptions));
 }
 
-void ContentIndexDatabase::GetIcon(
+void ContentIndexDatabase::GetIcons(
     int64_t service_worker_registration_id,
     const std::string& description_id,
-    base::OnceCallback<void(SkBitmap)> icon_callback) {
+    ContentIndexContext::GetIconsCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   service_worker_context_->GetRegistrationUserData(
-      service_worker_registration_id, {IconKey(description_id)},
-      base::BindOnce(&ContentIndexDatabase::DidGetSerializedIcon,
-                     weak_ptr_factory_io_.GetWeakPtr(),
-                     std::move(icon_callback)));
+      service_worker_registration_id, {IconsKey(description_id)},
+      base::BindOnce(&ContentIndexDatabase::DidGetSerializedIcons,
+                     weak_ptr_factory_io_.GetWeakPtr(), std::move(callback)));
 }
 
-void ContentIndexDatabase::DidGetSerializedIcon(
-    base::OnceCallback<void(SkBitmap)> icon_callback,
+void ContentIndexDatabase::DidGetSerializedIcons(
+    ContentIndexContext::GetIconsCallback callback,
     const std::vector<std::string>& data,
     blink::ServiceWorkerStatusCode status) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
   content_index::RecordDatabaseOperationStatus("GetIcon", status);
 
   if (status != blink::ServiceWorkerStatusCode::kOk || data.empty()) {
-    std::move(icon_callback).Run(SkBitmap());
+    std::move(callback).Run({});
     return;
   }
 
   DCHECK_EQ(data.size(), 1u);
+  proto::SerializedIcons serialized_icons;
+  if (!serialized_icons.ParseFromString(data.front())) {
+    // TODO(crbug.com/973844): Clear the storage if there is data corruption.
+    std::move(callback).Run({});
+    return;
+  }
 
-  base::PostTask(
-      FROM_HERE, {BrowserThread::UI},
-      base::BindOnce(&DeserializeIcon, std::make_unique<std::string>(data[0]),
-                     std::move(icon_callback)));
+  if (serialized_icons.icons_size() == 0u) {
+    // There are no icons.
+    std::move(callback).Run({});
+    return;
+  }
+
+  auto icons = std::make_unique<std::vector<SkBitmap>>();
+  std::vector<SkBitmap>* icons_ptr = icons.get();
+
+  auto barrier_closure = base::BarrierClosure(
+      serialized_icons.icons_size(),
+      base::BindOnce(&ContentIndexDatabase::DidDeserializeIcons,
+                     weak_ptr_factory_io_.GetWeakPtr(), std::move(callback),
+                     std::move(icons)));
+
+  for (auto& serialized_icon : *serialized_icons.mutable_icons()) {
+    DeserializeIcon(base::WrapUnique(serialized_icon.release_icon()),
+                    base::BindOnce(
+                        [](base::OnceClosure done_closure,
+                           std::vector<SkBitmap>* icons, SkBitmap icon) {
+                          icons->push_back(std::move(icon));
+                          std::move(done_closure).Run();
+                        },
+                        barrier_closure, icons_ptr));
+  }
+}
+
+void ContentIndexDatabase::DidDeserializeIcons(
+    ContentIndexContext::GetIconsCallback callback,
+    std::unique_ptr<std::vector<SkBitmap>> icons) {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+  base::PostTask(FROM_HERE, {BrowserThread::UI},
+                 base::BindOnce(std::move(callback), std::move(*icons)));
 }
 
 void ContentIndexDatabase::GetAllEntries(
diff --git a/content/browser/content_index/content_index_database.h b/content/browser/content_index/content_index_database.h
index 2cfb68d..68ba2ae1 100644
--- a/content/browser/content_index/content_index_database.h
+++ b/content/browser/content_index/content_index_database.h
@@ -22,6 +22,10 @@
 
 namespace content {
 
+namespace proto {
+class SerializedIcons;
+}  // namespace proto
+
 class BrowserContext;
 
 // Handles interacting with the Service Worker Database for Content Index
@@ -36,7 +40,7 @@
   void AddEntry(int64_t service_worker_registration_id,
                 const url::Origin& origin,
                 blink::mojom::ContentDescriptionPtr description,
-                const SkBitmap& icon,
+                const std::vector<SkBitmap>& icons,
                 const GURL& launch_url,
                 blink::mojom::ContentIndexService::AddCallback callback);
 
@@ -49,11 +53,11 @@
       int64_t service_worker_registration_id,
       blink::mojom::ContentIndexService::GetDescriptionsCallback callback);
 
-  // Gets the icon for |description_id| and invokes |icon_callback| on the UI
+  // Gets the icon for |description_id| and invokes |callback| on the UI
   // thread.
-  void GetIcon(int64_t service_worker_registration_id,
-               const std::string& description_id,
-               base::OnceCallback<void(SkBitmap)> icon_callback);
+  void GetIcons(int64_t service_worker_registration_id,
+                const std::string& description_id,
+                ContentIndexContext::GetIconsCallback callback);
 
   // Returns all registered entries.
   void GetAllEntries(ContentIndexContext::GetAllEntriesCallback callback);
@@ -75,12 +79,13 @@
   }
 
  private:
-  void DidSerializeIcon(int64_t service_worker_registration_id,
-                        const url::Origin& origin,
-                        blink::mojom::ContentDescriptionPtr description,
-                        const GURL& launch_url,
-                        blink::mojom::ContentIndexService::AddCallback callback,
-                        std::string serialized_icon);
+  void DidSerializeIcons(
+      int64_t service_worker_registration_id,
+      const url::Origin& origin,
+      blink::mojom::ContentDescriptionPtr description,
+      const GURL& launch_url,
+      std::unique_ptr<proto::SerializedIcons> serialized_icons,
+      blink::mojom::ContentIndexService::AddCallback callback);
   void DidAddEntry(blink::mojom::ContentIndexService::AddCallback callback,
                    ContentIndexEntry entry,
                    blink::ServiceWorkerStatusCode status);
@@ -94,9 +99,11 @@
       blink::mojom::ContentIndexService::GetDescriptionsCallback callback,
       const std::vector<std::string>& data,
       blink::ServiceWorkerStatusCode status);
-  void DidGetSerializedIcon(base::OnceCallback<void(SkBitmap)> icon_callback,
-                            const std::vector<std::string>& data,
-                            blink::ServiceWorkerStatusCode status);
+  void DidGetSerializedIcons(ContentIndexContext::GetIconsCallback callback,
+                             const std::vector<std::string>& data,
+                             blink::ServiceWorkerStatusCode status);
+  void DidDeserializeIcons(ContentIndexContext::GetIconsCallback callback,
+                           std::unique_ptr<std::vector<SkBitmap>> icons);
   void DidGetEntries(
       ContentIndexContext::GetAllEntriesCallback callback,
       const std::vector<std::pair<int64_t, std::string>>& user_data,
diff --git a/content/browser/content_index/content_index_database_unittest.cc b/content/browser/content_index/content_index_database_unittest.cc
index 43bdad4d..0f0e6e16 100644
--- a/content/browser/content_index/content_index_database_unittest.cc
+++ b/content/browser/content_index/content_index_database_unittest.cc
@@ -93,10 +93,11 @@
   std::move(quit_closure).Run();
 }
 
-SkBitmap CreateTestIcon() {
-  SkBitmap icon;
-  icon.allocN32Pixels(42, 42);
-  return icon;
+std::vector<SkBitmap> CreateTestIcons() {
+  std::vector<SkBitmap> icons(2);
+  icons[0].allocN32Pixels(42, 42);
+  icons[1].allocN32Pixels(24, 24);
+  return icons;
 }
 
 }  // namespace
@@ -125,12 +126,13 @@
   }
 
   blink::mojom::ContentIndexError AddEntry(
-      blink::mojom::ContentDescriptionPtr description) {
+      blink::mojom::ContentDescriptionPtr description,
+      std::vector<SkBitmap> icons = CreateTestIcons()) {
     base::RunLoop run_loop;
     blink::mojom::ContentIndexError error;
     database_->AddEntry(
         service_worker_registration_id_, origin_, std::move(description),
-        CreateTestIcon(), launch_url(),
+        std::move(icons), launch_url(),
         base::BindOnce(&DatabaseErrorCallback, run_loop.QuitClosure(), &error));
     run_loop.Run();
 
@@ -160,16 +162,17 @@
     return descriptions;
   }
 
-  SkBitmap GetIcon(const std::string& id) {
+  std::vector<SkBitmap> GetIcons(const std::string& id) {
     base::RunLoop run_loop;
-    SkBitmap out_icon;
-    database_->GetIcon(service_worker_registration_id_, id,
-                       base::BindLambdaForTesting([&](SkBitmap icon) {
-                         out_icon = std::move(icon);
-                         run_loop.Quit();
-                       }));
+    std::vector<SkBitmap> out_icons;
+    database_->GetIcons(
+        service_worker_registration_id_, id,
+        base::BindLambdaForTesting([&](std::vector<SkBitmap> icons) {
+          out_icons = std::move(icons);
+          run_loop.Quit();
+        }));
     run_loop.Run();
-    return out_icon;
+    return out_icons;
   }
 
   std::vector<ContentIndexEntry> GetAllEntries() {
@@ -358,18 +361,38 @@
 
 TEST_F(ContentIndexDatabaseTest, IconLifetimeTiedToEntry) {
   // Initially we don't have an icon.
-  EXPECT_TRUE(GetIcon("id").isNull());
+  EXPECT_TRUE(GetIcons("id").empty());
 
   EXPECT_EQ(AddEntry(CreateDescription("id")),
             blink::mojom::ContentIndexError::NONE);
-  SkBitmap icon = GetIcon("id");
-  EXPECT_FALSE(icon.isNull());
-  EXPECT_FALSE(icon.drawsNothing());
-  EXPECT_EQ(icon.width(), 42);
-  EXPECT_EQ(icon.height(), 42);
+  auto icons = GetIcons("id");
+  ASSERT_EQ(icons.size(), 2u);
+  if (icons[0].width() > icons[1].width())
+    std::swap(icons[0], icons[1]);
+
+  EXPECT_FALSE(icons[0].isNull());
+  EXPECT_FALSE(icons[0].drawsNothing());
+  EXPECT_EQ(icons[0].width(), 24);
+  EXPECT_EQ(icons[0].height(), 24);
+  EXPECT_FALSE(icons[1].isNull());
+  EXPECT_FALSE(icons[1].drawsNothing());
+  EXPECT_EQ(icons[1].width(), 42);
+  EXPECT_EQ(icons[1].height(), 42);
 
   EXPECT_EQ(DeleteEntry("id"), blink::mojom::ContentIndexError::NONE);
-  EXPECT_TRUE(GetIcon("id").isNull());
+  EXPECT_TRUE(GetIcons("id").empty());
+}
+
+TEST_F(ContentIndexDatabaseTest, NoIconsAreSupported) {
+  // Initially we don't have an icon.
+  EXPECT_TRUE(GetIcons("id").empty());
+
+  // Create an entry with no icons.
+  EXPECT_EQ(AddEntry(CreateDescription("id"), /* icons= */ {}),
+            blink::mojom::ContentIndexError::NONE);
+
+  // No icons should be found.
+  EXPECT_TRUE(GetIcons("id").empty());
 }
 
 TEST_F(ContentIndexDatabaseTest, GetEntries) {
@@ -446,7 +469,7 @@
   histogram_tester.ExpectBucketCount("ContentIndex.Database.Add",
                                      blink::ServiceWorkerStatusCode::kOk, 1);
 
-  EXPECT_FALSE(GetIcon("id").isNull());
+  EXPECT_FALSE(GetIcons("id").empty());
   histogram_tester.ExpectBucketCount("ContentIndex.Database.GetIcon",
                                      blink::ServiceWorkerStatusCode::kOk, 1);
 
diff --git a/content/browser/content_index/content_index_service_impl.cc b/content/browser/content_index/content_index_service_impl.cc
index 10edeba..405fac3 100644
--- a/content/browser/content_index/content_index_service_impl.cc
+++ b/content/browser/content_index/content_index_service_impl.cc
@@ -60,16 +60,18 @@
 void ContentIndexServiceImpl::Add(
     int64_t service_worker_registration_id,
     blink::mojom::ContentDescriptionPtr description,
-    const SkBitmap& icon,
+    const std::vector<SkBitmap>& icons,
     const GURL& launch_url,
     AddCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
-  if (icon.isNull() || icon.width() > kMaxIconDimension ||
-      icon.height() > kMaxIconDimension) {
-    mojo::ReportBadMessage("Invalid icon");
-    std::move(callback).Run(blink::mojom::ContentIndexError::INVALID_PARAMETER);
-    return;
+  for (const auto& icon : icons) {
+    if (icon.isNull() || icon.width() * icon.height() > kMaxIconResolution) {
+      mojo::ReportBadMessage("Invalid icon");
+      std::move(callback).Run(
+          blink::mojom::ContentIndexError::INVALID_PARAMETER);
+      return;
+    }
   }
 
   if (!launch_url.is_valid() ||
@@ -80,7 +82,7 @@
   }
 
   content_index_context_->database().AddEntry(
-      service_worker_registration_id, origin_, std::move(description), icon,
+      service_worker_registration_id, origin_, std::move(description), icons,
       launch_url, std::move(callback));
 }
 
diff --git a/content/browser/content_index/content_index_service_impl.h b/content/browser/content_index/content_index_service_impl.h
index 0fd22c5..f423c7c 100644
--- a/content/browser/content_index/content_index_service_impl.h
+++ b/content/browser/content_index/content_index_service_impl.h
@@ -34,7 +34,7 @@
   // blink::mojom::ContentIndexService implementation.
   void Add(int64_t service_worker_registration_id,
            blink::mojom::ContentDescriptionPtr description,
-           const SkBitmap& icon,
+           const std::vector<SkBitmap>& icons,
            const GURL& launch_url,
            AddCallback callback) override;
   void Delete(int64_t service_worker_registration_id,
diff --git a/content/browser/content_index/content_index_service_impl_unittest.cc b/content/browser/content_index/content_index_service_impl_unittest.cc
index f388d2b1..6e782d6 100644
--- a/content/browser/content_index/content_index_service_impl_unittest.cc
+++ b/content/browser/content_index/content_index_service_impl_unittest.cc
@@ -20,9 +20,9 @@
 
 const url::Origin origin = url::Origin::Create(GURL("https://example.com"));
 
-SkBitmap CreateIcon(int dimension) {
+SkBitmap CreateIcon(int resolution) {
   SkBitmap icon;
-  icon.allocN32Pixels(dimension, dimension);
+  icon.allocN32Pixels(1, resolution);
   return icon;
 }
 
@@ -39,7 +39,7 @@
     base::RunLoop run_loop;
     service_->Add(
         /* service_worker_registration_id= */ 42, /* description= */ nullptr,
-        icon, launch_url,
+        {icon}, launch_url,
         base::BindLambdaForTesting([&](blink::mojom::ContentIndexError error) {
           EXPECT_EQ(error, blink::mojom::ContentIndexError::INVALID_PARAMETER);
           run_loop.Quit();
@@ -66,22 +66,22 @@
 }
 
 TEST_F(ContentIndexServiceImplTest, LargeIcon) {
-  Add(CreateIcon(/* dimension= */ 2 *
-                 blink::mojom::ContentIndexService::kMaxIconDimension),
+  Add(CreateIcon(/* resolution= */ 2 *
+                 blink::mojom::ContentIndexService::kMaxIconResolution),
       origin.GetURL());
   EXPECT_EQ("Invalid icon", bad_message_observer().WaitForBadMessage());
 }
 
 TEST_F(ContentIndexServiceImplTest, InvalidLaunchUrl) {
-  Add(CreateIcon(/* dimension= */ 0.5 *
-                 blink::mojom::ContentIndexService::kMaxIconDimension),
+  Add(CreateIcon(/* resolution= */ 0.5 *
+                 blink::mojom::ContentIndexService::kMaxIconResolution),
       GURL());
   EXPECT_EQ("Invalid launch URL", bad_message_observer().WaitForBadMessage());
 }
 
 TEST_F(ContentIndexServiceImplTest, CrossOriginLaunchUrl) {
-  Add(CreateIcon(/* dimension= */ 0.5 *
-                 blink::mojom::ContentIndexService::kMaxIconDimension),
+  Add(CreateIcon(/* resolution= */ 0.5 *
+                 blink::mojom::ContentIndexService::kMaxIconResolution),
       GURL("https://evil.com"));
   EXPECT_EQ("Invalid launch URL", bad_message_observer().WaitForBadMessage());
 }
diff --git a/content/browser/file_url_loader_factory.cc b/content/browser/file_url_loader_factory.cc
index 6ebe53f..150b96a 100644
--- a/content/browser/file_url_loader_factory.cc
+++ b/content/browser/file_url_loader_factory.cc
@@ -226,7 +226,9 @@
   }
 
   void OnConnectionError() {
+    data_producer_.reset();
     binding_.Close();
+    client_.reset();
     MaybeDeleteSelf();
   }
 
@@ -671,7 +673,9 @@
   }
 
   void OnConnectionError() {
+    data_producer_.reset();
     binding_.Close();
+    client_.reset();
     MaybeDeleteSelf();
   }
 
diff --git a/content/browser/frame_host/back_forward_cache.cc b/content/browser/frame_host/back_forward_cache.cc
index e69e57e..31f74daf 100644
--- a/content/browser/frame_host/back_forward_cache.cc
+++ b/content/browser/frame_host/back_forward_cache.cc
@@ -155,6 +155,17 @@
   SetPageFrozenImpl(main_rfh, /*freeze = */ false, &unfrozen_render_view_hosts);
 }
 
+void BackForwardCache::EvictDocument(RenderFrameHostImpl* render_frame_host) {
+  auto matching_rfh = std::find_if(
+      render_frame_hosts_.begin(), render_frame_hosts_.end(),
+      [render_frame_host](std::unique_ptr<RenderFrameHostImpl>& rfh) {
+        return rfh.get() == render_frame_host;
+      });
+
+  DCHECK(matching_rfh != render_frame_hosts_.end());
+  render_frame_hosts_.erase(matching_rfh);
+}
+
 std::unique_ptr<RenderFrameHostImpl> BackForwardCache::RestoreDocument(
     int navigation_entry_id) {
   // Select the RenderFrameHostImpl matching the navigation entry.
@@ -187,4 +198,14 @@
   DCHECK(render_frame_hosts_.empty());
 }
 
+bool BackForwardCache::ContainsDocument(int navigation_entry_id) {
+  auto matching_rfh = std::find_if(
+      render_frame_hosts_.begin(), render_frame_hosts_.end(),
+      [navigation_entry_id](std::unique_ptr<RenderFrameHostImpl>& rfh) {
+        return rfh->nav_entry_id() == navigation_entry_id;
+      });
+
+  return matching_rfh != render_frame_hosts_.end();
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/back_forward_cache.h b/content/browser/frame_host/back_forward_cache.h
index e1d0c3a..d85ed600 100644
--- a/content/browser/frame_host/back_forward_cache.h
+++ b/content/browser/frame_host/back_forward_cache.h
@@ -42,8 +42,15 @@
   static void Freeze(RenderFrameHostImpl* main_rfh);
   static void Resume(RenderFrameHostImpl* main_rfh);
 
+  // Returns true if the BackForwardCache contains a document with the supplied
+  // |navigation_entry_id|.
+  bool ContainsDocument(int navigation_entry_id);
+
+  // Remove a document from the BackForwardCache.
+  void EvictDocument(RenderFrameHostImpl* render_frame_host);
+
   // During a history navigation, move a document out of the BackForwardCache
-  // knowing its navigation entry ID. Returns nullptr when none is found.
+  // knowing its |navigation_entry_id|. Returns nullptr when none is found.
   std::unique_ptr<RenderFrameHostImpl> RestoreDocument(int navigation_entry_id);
 
   // Remove all entries from the BackForwardCache.
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index 1c67319..23798cdb 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -2510,10 +2510,16 @@
   int nav_entry_id = pending_entry_->GetUniqueID();
 
   // BackForwardCache:
-  // Try to restore a document from the BackForwardCache.
-  if (auto rfh = back_forward_cache_.RestoreDocument(nav_entry_id)) {
-    root->render_manager()->RestoreFromBackForwardCache(std::move(rfh));
-    CommitRestoreFromBackForwardCache();
+  // Navigate immediately if the document is in the BackForwardCache.
+  if (back_forward_cache_.ContainsDocument(nav_entry_id)) {
+    DCHECK_EQ(reload_type, ReloadType::NONE);
+    auto navigation_request = CreateNavigationRequestFromEntry(
+        root, pending_entry_, pending_entry_->GetFrameEntry(root),
+        ReloadType::NONE, false /* is_same_document_history_load */,
+        false /* is_history_navigation_in_new_child */);
+    root->navigator()->Navigate(std::move(navigation_request), ReloadType::NONE,
+                                RestoreType::NONE);
+
     return;
   }
 
@@ -3380,27 +3386,6 @@
   get_timestamp_callback_ = get_timestamp_callback;
 }
 
-// BackForwardCache:
-void NavigationControllerImpl::CommitRestoreFromBackForwardCache() {
-  // TODO(arthursonzogni): Extract the missing parts from RendererDidNavigate()
-  // and reuse them.
-  LoadCommittedDetails details;
-  details.previous_entry_index = GetCurrentEntryIndex();
-  details.entry = pending_entry_;
-  details.type = NAVIGATION_TYPE_EXISTING_PAGE;
-  details.is_main_frame = true;
-  details.http_status_code = net::HTTP_OK;
-  details.did_replace_entry = false;
-  details.is_same_document = false;
-
-  last_committed_entry_index_ = pending_entry_index_;
-  DiscardPendingEntry(false);
-
-  // Notify content/ embedder of the history update.
-  delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_ALL);
-  delegate_->NotifyNavigationEntryCommitted(details);
-}
-
 // History manipulation intervention:
 void NavigationControllerImpl::SetShouldSkipOnBackForwardUIIfNeeded(
     RenderFrameHostImpl* rfh,
diff --git a/content/browser/frame_host/navigation_controller_impl.h b/content/browser/frame_host/navigation_controller_impl.h
index 03bee52..d4aa3cb 100644
--- a/content/browser/frame_host/navigation_controller_impl.h
+++ b/content/browser/frame_host/navigation_controller_impl.h
@@ -465,11 +465,6 @@
   // specified |offset|.  The index returned is not guaranteed to be valid.
   int GetIndexForOffset(int offset);
 
-  // BackForwardCache:
-  // Notify observers a document was restored from the bfcache.
-  // This updates the URL bar and the history buttons.
-  void CommitRestoreFromBackForwardCache();
-
   // History Manipulation intervention:
   // The previous document that started this navigation needs to be skipped in
   // subsequent back/forward UI navigations if it never received any user
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index 625ea70..708579e 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -38,6 +38,7 @@
 #include "content/browser/frame_host/origin_policy_throttle.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
 #include "content/browser/loader/browser_initiated_resource_request.h"
+#include "content/browser/loader/cached_navigation_url_loader.h"
 #include "content/browser/loader/navigation_url_loader.h"
 #include "content/browser/network_service_instance_impl.h"
 #include "content/browser/renderer_host/render_process_host_impl.h"
@@ -80,6 +81,7 @@
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "net/base/url_util.h"
 #include "net/http/http_request_headers.h"
+#include "net/http/http_status_code.h"
 #include "net/url_request/redirect_info.h"
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/resource_request_body.h"
@@ -540,11 +542,23 @@
     navigation_params->skip_service_worker = true;
   }
 
+  std::unique_ptr<RenderFrameHostImpl> rfh_restored_from_back_forward_cache;
+  if (entry) {
+    NavigationControllerImpl* controller =
+        static_cast<NavigationControllerImpl*>(
+            frame_tree_node->navigator()->GetController());
+    // This will be nullptr if there is no matching document in the
+    // BackForwardCache.
+    rfh_restored_from_back_forward_cache =
+        controller->back_forward_cache().RestoreDocument(entry->GetUniqueID());
+  }
+
   std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest(
       frame_tree_node, std::move(common_params), std::move(navigation_params),
       std::move(commit_params), browser_initiated,
       false /* from_begin_navigation */, false /* is_for_commit */,
-      &frame_entry, entry, std::move(navigation_ui_data), nullptr, nullptr));
+      &frame_entry, entry, std::move(navigation_ui_data), nullptr, nullptr,
+      std::move(rfh_restored_from_back_forward_cache)));
   navigation_request->blob_url_loader_factory_ =
       frame_entry.blob_url_loader_factory();
 
@@ -628,7 +642,9 @@
       false,  // is_for_commit
       nullptr, entry,
       nullptr,  // navigation_ui_data
-      std::move(navigation_client), std::move(navigation_initiator)));
+      std::move(navigation_client), std::move(navigation_initiator),
+      nullptr  // rfh_restored_from_back_forward_cache
+      ));
   navigation_request->blob_url_loader_factory_ =
       std::move(blob_url_loader_factory);
   navigation_request->prefetched_signed_exchange_cache_ =
@@ -698,7 +714,8 @@
       entry ? entry->GetFrameEntry(frame_tree_node) : nullptr, entry,
       nullptr /* navigation_ui_data */,
       mojom::NavigationClientAssociatedPtrInfo(),
-      blink::mojom::NavigationInitiatorPtr()));
+      blink::mojom::NavigationInitiatorPtr(),
+      nullptr /* rfh_restores_from_bfcache */));
 
   // Update the state of the NavigationRequest to match the fact that the
   // navigation just committed.
@@ -721,7 +738,8 @@
     NavigationEntryImpl* entry,
     std::unique_ptr<NavigationUIData> navigation_ui_data,
     mojom::NavigationClientAssociatedPtrInfo navigation_client,
-    blink::mojom::NavigationInitiatorPtr navigation_initiator)
+    blink::mojom::NavigationInitiatorPtr navigation_initiator,
+    std::unique_ptr<RenderFrameHostImpl> rfh_restored_from_back_forward_cache)
     : frame_tree_node_(frame_tree_node),
       common_params_(std::move(common_params)),
       begin_params_(std::move(begin_params)),
@@ -740,7 +758,11 @@
       expected_render_process_host_id_(ChildProcessHost::kInvalidUniqueID),
       devtools_navigation_token_(base::UnguessableToken::Create()),
       request_navigation_client_(nullptr),
-      commit_navigation_client_(nullptr) {
+      commit_navigation_client_(nullptr),
+      rfh_restored_from_back_forward_cache_(
+          std::move(rfh_restored_from_back_forward_cache)),
+      is_served_from_back_forward_cache_(
+          rfh_restored_from_back_forward_cache_ != nullptr) {
   DCHECK(browser_initiated || common_params_->initiator_origin.has_value());
   DCHECK(!browser_initiated || (entry != nullptr && frame_entry != nullptr));
   DCHECK(!IsRendererDebugURL(common_params_->url));
@@ -767,6 +789,12 @@
     }
   }
 
+  if (frame_entry) {
+    frame_entry_item_sequence_number_ = frame_entry->item_sequence_number();
+    frame_entry_document_sequence_number_ =
+        frame_entry->document_sequence_number();
+  }
+
   // Sanitize the referrer.
   common_params_->referrer = Referrer::SanitizeForRequest(
       common_params_->url, *common_params_->referrer);
@@ -997,8 +1025,7 @@
     state_ = RESPONSE_STARTED;
 
     // Select an appropriate RenderFrameHost.
-    render_frame_host_ =
-        frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this);
+    render_frame_host_ = GetFrameHostForNavigation();
     NavigatorImpl::CheckWebUIRendererDoesNotDisplayNormalURL(
         render_frame_host_, common_params_->url);
 
@@ -1458,8 +1485,7 @@
 
   // Select an appropriate renderer to commit the navigation.
   if (response_should_be_rendered_) {
-    render_frame_host_ =
-        frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this);
+    render_frame_host_ = GetFrameHostForNavigation();
     NavigatorImpl::CheckWebUIRendererDoesNotDisplayNormalURL(
         render_frame_host_, common_params_->url);
   } else {
@@ -1672,14 +1698,12 @@
     // account for clearing the expected process if it clears the speculative
     // RenderFrameHost. See https://crbug.com/793127.
     ResetExpectedProcess();
-    render_frame_host =
-        frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this);
+    render_frame_host = GetFrameHostForNavigation();
   } else {
     if (ShouldKeepErrorPageInCurrentProcess(status.error_code)) {
       render_frame_host = frame_tree_node_->current_frame_host();
     } else {
-      render_frame_host =
-          frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this);
+      render_frame_host = GetFrameHostForNavigation();
     }
   }
 
@@ -1891,7 +1915,8 @@
           frame_tree_node_->devtools_frame_token()),
       std::move(navigation_ui_data), service_worker_handle_.get(),
       appcache_handle_.get(), std::move(prefetched_signed_exchange_cache_),
-      this, std::move(interceptor));
+      this, is_served_from_back_forward_cache(), std::move(interceptor));
+
   DCHECK(!render_frame_host_);
 }
 
@@ -2116,13 +2141,25 @@
          (was_redirected_ && common_params_->url.IsAboutBlank()));
   DCHECK(!common_params_->url.SchemeIs(url::kJavaScriptScheme));
   DCHECK(!IsRendererDebugURL(common_params_->url));
+
+  frame_tree_node_->TransferNavigationRequestOwnership(render_frame_host_);
+
+  if (is_served_from_back_forward_cache()) {
+    frame_tree_node()->render_manager()->RestoreFromBackForwardCache(
+        std::move(rfh_restored_from_back_forward_cache_));
+
+    // Note that this will delete the NavigationRequest.
+    render_frame_host()->DidCommitBackForwardCacheNavigation(
+        this, MakeDidCommitProvisionalLoadParamsForBFCache());
+
+    return;
+  }
+
   DCHECK(render_frame_host_ ==
              frame_tree_node_->render_manager()->current_frame_host() ||
          render_frame_host_ ==
              frame_tree_node_->render_manager()->speculative_frame_host());
 
-
-  frame_tree_node_->TransferNavigationRequestOwnership(render_frame_host_);
   if (IsPerNavigationMojoInterfaceEnabled() && request_navigation_client_ &&
       request_navigation_client_.is_bound()) {
     if (associated_site_instance_id_ ==
@@ -2151,6 +2188,7 @@
     commit_params_->prefetched_signed_exchanges =
         std::move(subresource_loader_params_->prefetched_signed_exchanges);
   }
+
   render_frame_host_->CommitNavigation(
       this, *common_params_, *commit_params_, response_head_.get(),
       std::move(response_body_), std::move(url_loader_client_endpoints_),
@@ -3095,4 +3133,53 @@
   return response_head_.get() ? response_head_->head.headers.get() : nullptr;
 }
 
+std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params>
+NavigationRequest::MakeDidCommitProvisionalLoadParamsForBFCache() {
+  // TODO(lowell): Review all of these parameters for completeness.
+  std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params> params =
+      std::make_unique<FrameHostMsg_DidCommitProvisionalLoad_Params>();
+  params->http_status_code = net::HTTP_OK;
+  params->method = common_params().method;
+  params->intended_as_new_entry = commit_params().intended_as_new_entry;
+  params->should_replace_current_entry =
+      common_params().should_replace_current_entry;
+  params->post_id = -1;
+  params->nav_entry_id = commit_params().nav_entry_id;
+  params->navigation_token = commit_params().navigation_token;
+  params->transition = common_params().transition;
+
+  // TODO(lowell): Is there a way to get access to the the values needed to set
+  // the insecure_request_policy, etc?
+
+  params->url = common_params().url;
+  params->gesture = common_params().has_user_gesture ? NavigationGestureUser
+                                                     : NavigationGestureAuto;
+  params->page_state = commit_params().page_state;
+
+  params->should_update_history = true;
+
+  if (commit_params().origin_to_commit.has_value()) {
+    params->origin = commit_params().origin_to_commit.value();
+  }
+
+  params->item_sequence_number = frame_entry_item_sequence_number_;
+  params->document_sequence_number = frame_entry_document_sequence_number_;
+
+  // TODO(lowell): Set the actual response mime type from FrameNavigationEntry.
+  params->contents_mime_type = "text/html";
+
+  params->request_id = request_id().request_id;
+
+  return params;
+}
+
+RenderFrameHostImpl* NavigationRequest::GetFrameHostForNavigation() {
+  if (is_served_from_back_forward_cache()) {
+    DCHECK(rfh_restored_from_back_forward_cache_);
+    return rfh_restored_from_back_forward_cache_.get();
+  }
+
+  return frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this);
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index ec904e29..1d5c0ea 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -494,6 +494,11 @@
 
   const net::HttpResponseHeaders* GetResponseHeaders();
 
+  // Whether this navigation was served from the back-forward cache.
+  bool is_served_from_back_forward_cache() {
+    return is_served_from_back_forward_cache_;
+  }
+
  private:
   friend class NavigationRequestTest;
 
@@ -508,7 +513,9 @@
                     NavigationEntryImpl* navitation_entry,
                     std::unique_ptr<NavigationUIData> navigation_ui_data,
                     mojom::NavigationClientAssociatedPtrInfo navigation_client,
-                    blink::mojom::NavigationInitiatorPtr navigation_initiator);
+                    blink::mojom::NavigationInitiatorPtr navigation_initiator,
+                    std::unique_ptr<RenderFrameHostImpl>
+                        rfh_restored_from_back_forward_cache);
 
   // NavigationURLLoaderDelegate implementation.
   void OnRequestRedirected(
@@ -590,6 +597,13 @@
                                         bool url_upgraded_after_redirect,
                                         bool is_response_check);
 
+  RenderFrameHostImpl* GetFrameHostForNavigation();
+
+  // Builds the parameters used to commit a navigation to a page that was
+  // restored from the back-forward cache.
+  std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params>
+  MakeDidCommitProvisionalLoadParamsForBFCache();
+
   // This enum describes the result of the credentialed subresource check for
   // the request.
   enum class CredentialedSubresourceCheckResult {
@@ -1034,6 +1048,21 @@
   // TODO(clamy): Clean this up once the architecture of unit tests is better.
   scoped_refptr<net::HttpResponseHeaders> response_headers_for_testing_;
 
+  // The RenderFrameHost that was restored from the back-forward cache. This
+  // will be null except for navigations that are restoring a page from the
+  // back-forward cache. In this case, it represents the main RenderFrameHost to
+  // be restored. It will be moved to become the current document in
+  // CommitNavigation(), after which this variable becomes null.
+  std::unique_ptr<RenderFrameHostImpl> rfh_restored_from_back_forward_cache_;
+
+  // Whether this navigation is being served from the back-forward cache.
+  bool is_served_from_back_forward_cache_;
+
+  // These are set to the values from the FrameNavigationEntry this
+  // NavigationRequest is associated with (if any).
+  int64_t frame_entry_item_sequence_number_ = -1;
+  int64_t frame_entry_document_sequence_number_ = -1;
+
   base::WeakPtrFactory<NavigationRequest> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(NavigationRequest);
diff --git a/content/browser/frame_host/navigator_impl_unittest.cc b/content/browser/frame_host/navigator_impl_unittest.cc
index 94dfcdd..2f5f7a26 100644
--- a/content/browser/frame_host/navigator_impl_unittest.cc
+++ b/content/browser/frame_host/navigator_impl_unittest.cc
@@ -179,8 +179,6 @@
   const GURL kUrl2("http://www.google.com");
 
   contents()->NavigateAndCommit(kUrl1);
-  main_test_rfh()->OnMessageReceived(
-      FrameHostMsg_DidStopLoading(main_test_rfh()->GetRoutingID()));
   EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive());
   int32_t site_instance_id_1 = main_test_rfh()->GetSiteInstance()->GetId();
 
@@ -198,7 +196,6 @@
   EXPECT_EQ(NavigationRequest::STARTED, request->state());
   EXPECT_EQ(kUrl2, request->common_params().url);
   EXPECT_FALSE(request->browser_initiated());
-  EXPECT_FALSE(main_test_rfh()->is_loading());
   if (AreAllSitesIsolatedForTesting() ||
       IsProactivelySwapBrowsingInstanceEnabled()) {
     EXPECT_TRUE(GetSpeculativeRenderFrameHost(node));
@@ -217,7 +214,6 @@
 
   // Commit the navigation.
   navigation->Commit();
-  EXPECT_TRUE(main_test_rfh()->is_loading());
   EXPECT_TRUE(main_test_rfh()->is_active());
   EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL());
   EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
@@ -1006,7 +1002,7 @@
   auto navigation_to_data_url =
       NavigationSimulator::CreateRendererInitiated(kUrl2, main_test_rfh());
   navigation_to_data_url->Start();
-  EXPECT_TRUE(main_test_rfh()->is_loading());
+  EXPECT_FALSE(main_test_rfh()->is_loading());
   EXPECT_TRUE(node->navigation_request());
   EXPECT_FALSE(GetSpeculativeRenderFrameHost(node));
 }
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 53d6c37..4426758 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -167,7 +167,7 @@
 #include "media/base/user_input_monitor.h"
 #include "media/learning/common/value.h"
 #include "media/media_buildflags.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "media/mojo/services/media_interface_provider.h"
 #include "media/mojo/services/media_metrics_provider.h"
 #include "media/mojo/services/video_decode_perf_history.h"
@@ -2353,6 +2353,34 @@
   }
 }
 
+void RenderFrameHostImpl::DidCommitBackForwardCacheNavigation(
+    NavigationRequest* committing_navigation_request,
+    std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params>
+        validated_params) {
+  auto request = navigation_requests_.find(committing_navigation_request);
+  CHECK(request != navigation_requests_.end());
+
+  std::unique_ptr<NavigationRequest> owned_request = std::move(request->second);
+  navigation_requests_.erase(committing_navigation_request);
+
+  // During a normal (uncached) navigation, is_loading_ is set to true in
+  // CommitNavigation(). When navigating to a document in the BackForwardCache,
+  // CommitNavigation() is never called, so we have to set is_loading_ to true
+  // ourselves.
+  //
+  // If is_start_loading_ is set to false, DidCommitNavigationInternal will
+  // re-fire the DidStartLoading event, which we don't want since it has already
+  // been fired.
+  is_loading_ = true;
+
+  DidCommitNavigationInternal(std::move(owned_request), validated_params.get(),
+                              /*is_same_document_navigation=*/false);
+
+  // The page is already loaded since it came from the cache, so fire the stop
+  // loading event.
+  OnDidStopLoading();
+}
+
 void RenderFrameHostImpl::DidCommitPerNavigationMojoInterfaceNavigation(
     NavigationRequest* committing_navigation_request,
     std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params>
@@ -3355,6 +3383,28 @@
   }
 }
 
+void RenderFrameHostImpl::EvictFromBackForwardCache() {
+  DCHECK(IsBackForwardCacheEnabled());
+
+  bool in_back_forward_cache = is_in_back_forward_cache();
+
+  RenderFrameHostImpl* top_document = this;
+  while (top_document->parent_) {
+    top_document = top_document->parent_;
+    DCHECK_EQ(top_document->is_in_back_forward_cache(), in_back_forward_cache);
+  }
+
+  if (!in_back_forward_cache) {
+    // TODO(hajimehoshi): A document is evicted from the BackForwardCache, but
+    // it has already been restored. This race condition can be resolved by
+    // reloading the current document to avoid stale state. (crbug.com/989392)
+    return;
+  }
+
+  frame_tree_node_->render_manager()->EvictFromBackForwardCache(top_document);
+  // DO NOT ADD CODE after this. The previous call destroyed |this|.
+}
+
 void RenderFrameHostImpl::OnAccessibilityLocationChanges(
     const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) {
   if (accessibility_reset_token_)
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 04c8af57..a1d0a099 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -55,7 +55,7 @@
 #include "content/public/common/javascript_dialog_type.h"
 #include "content/public/common/previews_state.h"
 #include "content/public/common/transferrable_url_loader.mojom.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/public/cpp/bindings/remote.h"
@@ -295,6 +295,7 @@
 
   void SendAccessibilityEventsToManager(
       const AXEventNotificationDetails& details);
+  void EvictFromBackForwardCache() override;
 
   // IPC::Sender
   bool Send(IPC::Message* msg) override;
@@ -1007,6 +1008,13 @@
     cross_origin_embedder_policy_ = policy;
   }
 
+  // This function mimics DidCommitProvisionalLoad for navigations served from
+  // the back-forward cache.
+  void DidCommitBackForwardCacheNavigation(
+      NavigationRequest* committing_navigation_request,
+      std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params>
+          validated_params);
+
  protected:
   friend class RenderFrameHostFactory;
 
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 6238ee9..b795fea 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -583,6 +583,8 @@
   rfh->GetProcess()->AddPendingView();  // Matched in CommitPending().
   // Save as a temp variable to check later to match |current_frame_host()|.
   RenderFrameHostImpl* tmp_rfh = rfh.get();
+
+  // Make the frame restored from the back-forward cache the current frame.
   CommitPending(std::move(rfh));
   DCHECK_EQ(tmp_rfh, current_frame_host());
 
@@ -591,6 +593,15 @@
       current_frame_host());
 }
 
+void RenderFrameHostManager::EvictFromBackForwardCache(
+    RenderFrameHostImpl* rfh) {
+  // TODO(hajimehoshi): Add a direct getter of BackForwardCache to
+  // RenderFrameHostDelegate.
+  BackForwardCache& back_forward_cache =
+      delegate_->GetControllerForRenderManager().back_forward_cache();
+  back_forward_cache.EvictDocument(rfh);
+}
+
 void RenderFrameHostManager::ResetProxyHosts() {
   for (const auto& pair : proxy_hosts_) {
     static_cast<SiteInstanceImpl*>(pair.second->GetSiteInstance())
@@ -611,12 +622,19 @@
 
 void RenderFrameHostManager::DidCreateNavigationRequest(
     NavigationRequest* request) {
-  RenderFrameHostImpl* dest_rfh = GetFrameHostForNavigation(*request);
-  DCHECK(dest_rfh);
-  request->set_associated_site_instance_type(
-      dest_rfh == render_frame_host_.get()
-          ? NavigationRequest::AssociatedSiteInstanceType::CURRENT
-          : NavigationRequest::AssociatedSiteInstanceType::SPECULATIVE);
+  if (request->is_served_from_back_forward_cache()) {
+    // Since the frame from the back-forward cache is being committed to the
+    // SiteInstance we already have, it is treated as current.
+    request->set_associated_site_instance_type(
+        NavigationRequest::AssociatedSiteInstanceType::CURRENT);
+  } else {
+    RenderFrameHostImpl* dest_rfh = GetFrameHostForNavigation(*request);
+    DCHECK(dest_rfh);
+    request->set_associated_site_instance_type(
+        dest_rfh == render_frame_host_.get()
+            ? NavigationRequest::AssociatedSiteInstanceType::CURRENT
+            : NavigationRequest::AssociatedSiteInstanceType::SPECULATIVE);
+  }
 }
 
 RenderFrameHostImpl* RenderFrameHostManager::GetFrameHostForNavigation(
diff --git a/content/browser/frame_host/render_frame_host_manager.h b/content/browser/frame_host/render_frame_host_manager.h
index 65b6e5a..dac4f71e 100644
--- a/content/browser/frame_host/render_frame_host_manager.h
+++ b/content/browser/frame_host/render_frame_host_manager.h
@@ -314,10 +314,10 @@
   bool DeleteFromPendingList(RenderFrameHostImpl* render_frame_host);
 
   // BackForwardCache:
-  // During an history navigation, try to swap back a document from the
-  // BackForwardCache. The document is referenced from its navigation entry ID.
-  // Returns true when it succeed.
+  // During a history navigation, unfreezes and swaps in a document from the
+  // BackForwardCache, making it active.
   void RestoreFromBackForwardCache(std::unique_ptr<RenderFrameHostImpl>);
+  void EvictFromBackForwardCache(RenderFrameHostImpl*);
 
   // Deletes any proxy hosts associated with this node. Used during destruction
   // of WebContentsImpl.
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc
index 36a481e..83bc8f01 100644
--- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -3130,7 +3130,10 @@
   // Navigate main frame to |kUrl1| and commit, but don't simulate
   // DidStopLoading.  The main frame should still be considered loading at this
   // point.
-  contents()->NavigateAndCommit(kUrl1);
+  auto navigation =
+      NavigationSimulatorImpl::CreateBrowserInitiated(kUrl1, contents());
+  navigation->SetKeepLoading(true);
+  navigation->Commit();
   FrameTreeNode* root = contents()->GetFrameTree()->root();
   EXPECT_TRUE(root->IsLoading());
 
@@ -3162,7 +3165,7 @@
                                       proxy_to_child->GetRoutingID()));
 
   // Simulate load stop in the main frame.
-  main_test_rfh()->ResetLoadingState();
+  navigation->StopLoading();
 
   // Navigate the child to a third site.
   child_host = static_cast<TestRenderFrameHost*>(
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index 28b60bd4..78ff6c5 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -86,7 +86,7 @@
 
 #if defined(OS_ANDROID)
 #include "content/public/browser/android/java_interfaces.h"
-#include "media/mojo/interfaces/android_overlay.mojom.h"
+#include "media/mojo/mojom/android_overlay.mojom.h"
 #endif
 
 #if defined(OS_WIN)
diff --git a/content/browser/loader/cached_navigation_url_loader.cc b/content/browser/loader/cached_navigation_url_loader.cc
new file mode 100644
index 0000000..6ba6c131
--- /dev/null
+++ b/content/browser/loader/cached_navigation_url_loader.cc
@@ -0,0 +1,65 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/loader/cached_navigation_url_loader.h"
+
+#include "base/task/post_task.h"
+#include "content/browser/frame_host/navigation_request_info.h"
+#include "content/browser/loader/navigation_url_loader_delegate.h"
+#include "content/browser/loader/navigation_url_loader_impl.h"
+#include "content/browser/navigation_subresource_loader_params.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/global_request_id.h"
+#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/web_contents.h"
+
+namespace content {
+
+CachedNavigationURLLoader::CachedNavigationURLLoader(
+    std::unique_ptr<NavigationRequestInfo> request_info,
+    NavigationURLLoaderDelegate* delegate)
+    : request_info_(std::move(request_info)),
+      delegate_(delegate),
+      weak_factory_(this) {
+  // Respond with a fake response. We use PostTask here to mimic the flow of
+  // a normal navigation.
+  //
+  // Normal navigations never call OnResponseStarted on the same message loop
+  // iteration that the NavigationURLLoader is created, because they have to
+  // make a network request.
+  base::PostTaskWithTraits(
+      FROM_HERE, {BrowserThread::UI},
+      base::BindOnce(&CachedNavigationURLLoader::OnResponseStarted,
+                     weak_factory_.GetWeakPtr()));
+}
+
+void CachedNavigationURLLoader::OnResponseStarted() {
+  auto dummy_response =
+      scoped_refptr<network::ResourceResponse>(new network::ResourceResponse);
+
+  GlobalRequestID global_id = NavigationURLLoaderImpl::MakeGlobalRequestID();
+
+  delegate_->OnResponseStarted(
+      /*url_loader_client_endpoints=*/nullptr, dummy_response,
+      /*response_body=*/mojo::ScopedDataPipeConsumerHandle(), global_id,
+      /*is_download=*/false, NavigationDownloadPolicy(), base::nullopt);
+}
+CachedNavigationURLLoader::~CachedNavigationURLLoader() {}
+
+// static
+std::unique_ptr<NavigationURLLoader> CachedNavigationURLLoader::Create(
+    std::unique_ptr<NavigationRequestInfo> request_info,
+    NavigationURLLoaderDelegate* delegate) {
+  return std::make_unique<CachedNavigationURLLoader>(std::move(request_info),
+                                                     delegate);
+}
+
+void CachedNavigationURLLoader::FollowRedirect(
+    const std::vector<std::string>& removed_headers,
+    const net::HttpRequestHeaders& modified_headers,
+    PreviewsState new_previews_state) {
+  NOTREACHED();
+}
+}  // namespace content
diff --git a/content/browser/loader/cached_navigation_url_loader.h b/content/browser/loader/cached_navigation_url_loader.h
new file mode 100644
index 0000000..138e679
--- /dev/null
+++ b/content/browser/loader/cached_navigation_url_loader.h
@@ -0,0 +1,40 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_LOADER_CACHED_NAVIGATION_URL_LOADER_H_
+#define CONTENT_BROWSER_LOADER_CACHED_NAVIGATION_URL_LOADER_H_
+
+#include "content/browser/loader/navigation_url_loader.h"
+
+namespace content {
+
+// NavigationURLLoader for navigations served by the back-forward cache. Unlike
+// a normal navigation, no actual URL loading occurs. This is because loading
+// already happened the first time this URL was navigated to (before it was
+// added to the back-forward cache).
+class CachedNavigationURLLoader : public NavigationURLLoader {
+ public:
+  CachedNavigationURLLoader(std::unique_ptr<NavigationRequestInfo> request_info,
+                            NavigationURLLoaderDelegate* delegate);
+  ~CachedNavigationURLLoader() override;
+
+  static std::unique_ptr<NavigationURLLoader> Create(
+      std::unique_ptr<NavigationRequestInfo> request_info,
+      NavigationURLLoaderDelegate* delegate);
+
+  // NavigationURLLoader implementation.
+  void FollowRedirect(const std::vector<std::string>& removed_headers,
+                      const net::HttpRequestHeaders& modified_headers,
+                      PreviewsState new_previews_state) override;
+
+ private:
+  void OnResponseStarted();
+  std::unique_ptr<NavigationRequestInfo> request_info_;
+  NavigationURLLoaderDelegate* delegate_;
+  base::WeakPtrFactory<CachedNavigationURLLoader> weak_factory_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_LOADER_CACHED_NAVIGATION_URL_LOADER_H_
diff --git a/content/browser/loader/loader_browsertest.cc b/content/browser/loader/loader_browsertest.cc
index bcad745..5f29ff1c 100644
--- a/content/browser/loader/loader_browsertest.cc
+++ b/content/browser/loader/loader_browsertest.cc
@@ -1144,9 +1144,9 @@
 
   // ContentBrowserClient overrides:
   std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
-  CreateURLLoaderThrottlesOnIO(
+  CreateURLLoaderThrottles(
       const network::ResourceRequest& request,
-      ResourceContext* resource_context,
+      BrowserContext* browser_context,
       const base::RepeatingCallback<WebContents*()>& wc_getter,
       NavigationUIData* navigation_ui_data,
       int frame_tree_node_id) override {
@@ -1156,16 +1156,6 @@
     throttles.push_back(std::move(throttle));
     return throttles;
   }
-  std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
-  CreateURLLoaderThrottles(
-      const network::ResourceRequest& request,
-      BrowserContext* browser_context,
-      const base::RepeatingCallback<WebContents*()>& wc_getter,
-      NavigationUIData* navigation_ui_data,
-      int frame_tree_node_id) override {
-    return CreateURLLoaderThrottlesOnIO(request, nullptr, wc_getter,
-                                        navigation_ui_data, frame_tree_node_id);
-  }
 
  private:
   bool modify_start_;
diff --git a/content/browser/loader/navigation_url_loader.cc b/content/browser/loader/navigation_url_loader.cc
index a800bed..e184726b 100644
--- a/content/browser/loader/navigation_url_loader.cc
+++ b/content/browser/loader/navigation_url_loader.cc
@@ -8,6 +8,8 @@
 
 #include "base/command_line.h"
 #include "content/browser/frame_host/navigation_request_info.h"
+#include "content/browser/loader/cached_navigation_url_loader.h"
+#include "content/browser/loader/navigation_loader_interceptor.h"
 #include "content/browser/loader/navigation_url_loader_factory.h"
 #include "content/browser/loader/navigation_url_loader_impl.h"
 #include "content/browser/web_package/prefetched_signed_exchange_cache.h"
@@ -29,8 +31,12 @@
     scoped_refptr<PrefetchedSignedExchangeCache>
         prefetched_signed_exchange_cache,
     NavigationURLLoaderDelegate* delegate,
+    bool is_served_from_back_forward_cache,
     std::vector<std::unique_ptr<NavigationLoaderInterceptor>>
         initial_interceptors) {
+  if (is_served_from_back_forward_cache) {
+    return CachedNavigationURLLoader::Create(std::move(request_info), delegate);
+  }
   if (g_loader_factory) {
     return g_loader_factory->CreateLoader(
         resource_context, storage_partition, std::move(request_info),
diff --git a/content/browser/loader/navigation_url_loader.h b/content/browser/loader/navigation_url_loader.h
index 5dd634f..3ed40cc8 100644
--- a/content/browser/loader/navigation_url_loader.h
+++ b/content/browser/loader/navigation_url_loader.h
@@ -42,6 +42,9 @@
   // |delegate| outlives the loader. |request_body| must not be accessed on the
   // UI thread after this point.
   //
+  // If |is_served_from_back_forward_cache| is true, a dummy
+  // CachedNavigationURLLoader will be returned.
+  //
   // TODO(davidben): When navigation is disentangled from the loader, the
   // request parameters should not come in as a navigation-specific
   // structure. Information like has_user_gesture and
@@ -57,6 +60,7 @@
       scoped_refptr<PrefetchedSignedExchangeCache>
           prefetched_signed_exchange_cache,
       NavigationURLLoaderDelegate* delegate,
+      bool is_served_from_back_forward_cache,
       std::vector<std::unique_ptr<NavigationLoaderInterceptor>>
           initial_interceptors = {});
 
diff --git a/content/browser/loader/navigation_url_loader_unittest.cc b/content/browser/loader/navigation_url_loader_unittest.cc
index 9089896..b3d6c443 100644
--- a/content/browser/loader/navigation_url_loader_unittest.cc
+++ b/content/browser/loader/navigation_url_loader_unittest.cc
@@ -84,7 +84,8 @@
     return NavigationURLLoader::Create(
         browser_context_.get(), browser_context_->GetResourceContext(),
         BrowserContext::GetDefaultStoragePartition(browser_context_.get()),
-        std::move(request_info), nullptr, nullptr, nullptr, nullptr, delegate);
+        std::move(request_info), nullptr, nullptr, nullptr, nullptr, delegate,
+        false);
   }
 
  protected:
diff --git a/content/browser/loader/prefetch_browsertest.cc b/content/browser/loader/prefetch_browsertest.cc
index 0498b50e..b43b55c 100644
--- a/content/browser/loader/prefetch_browsertest.cc
+++ b/content/browser/loader/prefetch_browsertest.cc
@@ -19,6 +19,7 @@
 #include "content/shell/browser/shell.h"
 #include "net/base/features.h"
 #include "services/network/public/cpp/features.h"
+#include "third_party/blink/public/common/features.h"
 
 namespace content {
 
@@ -59,6 +60,78 @@
   DISALLOW_COPY_AND_ASSIGN(PrefetchBrowserTest);
 };
 
+class PrefetchBrowserTestRedirectMode
+    : public PrefetchBrowserTestBase,
+      public testing::WithParamInterface<bool> {
+ public:
+  PrefetchBrowserTestRedirectMode()
+      : redirect_mode_is_error_(GetParam()),
+        cross_origin_server_(std::make_unique<net::EmbeddedTestServer>(
+            net::EmbeddedTestServer::TYPE_HTTPS)) {}
+  ~PrefetchBrowserTestRedirectMode() override = default;
+
+  void SetUp() override {
+    std::vector<base::Feature> enable_features;
+    std::vector<base::Feature> disabled_features;
+    if (redirect_mode_is_error_) {
+      enable_features.push_back(blink::features::kPrefetchRedirectError);
+    } else {
+      disabled_features.push_back(blink::features::kPrefetchRedirectError);
+    }
+    feature_list_.InitWithFeatures(enable_features, disabled_features);
+    PrefetchBrowserTestBase::SetUp();
+  }
+
+ protected:
+  const bool redirect_mode_is_error_;
+  std::unique_ptr<net::EmbeddedTestServer> cross_origin_server_;
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+
+  DISALLOW_COPY_AND_ASSIGN(PrefetchBrowserTestRedirectMode);
+};
+
+IN_PROC_BROWSER_TEST_P(PrefetchBrowserTestRedirectMode, RedirectNotFollowed) {
+  const char* prefetch_path = "/prefetch.html";
+  const char* redirect_path = "/redirect.html";
+  const char* destination_path = "/destination.html";
+  RegisterResponse(
+      prefetch_path,
+      ResponseEntry(base::StringPrintf(
+          "<body><link rel='prefetch' href='%s'></body>", redirect_path)));
+  RegisterResponse(
+      redirect_path,
+      ResponseEntry("", "", {{"location", std::string(destination_path)}},
+                    net::HTTP_MOVED_PERMANENTLY));
+  RegisterResponse(destination_path,
+                   ResponseEntry("<head><title>Prefetch Target</title></head>",
+                                 "text/html", {{"cache-control", "no-store"}}));
+
+  base::RunLoop prefetch_waiter;
+  auto main_page_counter = RequestCounter::CreateAndMonitor(
+      embedded_test_server(), prefetch_path, &prefetch_waiter);
+  auto destination_counter = RequestCounter::CreateAndMonitor(
+      embedded_test_server(), destination_path);
+  RegisterRequestHandler(embedded_test_server());
+  ASSERT_TRUE(embedded_test_server()->Start());
+  EXPECT_EQ(0, main_page_counter->GetRequestCount());
+  EXPECT_EQ(0, destination_counter->GetRequestCount());
+  EXPECT_EQ(0, GetPrefetchURLLoaderCallCount());
+
+  const GURL destination_url = embedded_test_server()->GetURL(destination_path);
+  // Loading a page that prefetches the redirect resource only follows the
+  // redirect when the mode is follow.
+  NavigateToURL(shell(), embedded_test_server()->GetURL(prefetch_path));
+  prefetch_waiter.Run();
+  EXPECT_EQ(1, main_page_counter->GetRequestCount());
+
+  NavigateToURLAndWaitTitle(destination_url, "Prefetch Target");
+  EXPECT_EQ(redirect_mode_is_error_ ? 1 : 2,
+            destination_counter->GetRequestCount());
+  EXPECT_TRUE(embedded_test_server()->ShutdownAndWaitUntilComplete());
+}
+
 IN_PROC_BROWSER_TEST_P(PrefetchBrowserTest, Simple) {
   const char* prefetch_path = "/prefetch.html";
   const char* target_path = "/target.html";
@@ -467,4 +540,8 @@
                          testing::Values(PrefetchBrowserTestParam(false),
                                          PrefetchBrowserTestParam(true)));
 
+INSTANTIATE_TEST_SUITE_P(PrefetchBrowserTestRedirectMode,
+                         PrefetchBrowserTestRedirectMode,
+                         testing::Values(false, true));
+
 }  // namespace content
diff --git a/content/browser/loader/prefetch_browsertest_base.cc b/content/browser/loader/prefetch_browsertest_base.cc
index d79108a..fa511496 100644
--- a/content/browser/loader/prefetch_browsertest_base.cc
+++ b/content/browser/loader/prefetch_browsertest_base.cc
@@ -27,8 +27,12 @@
 PrefetchBrowserTestBase::ResponseEntry::ResponseEntry(
     const std::string& content,
     const std::string& content_type,
-    const std::vector<std::pair<std::string, std::string>>& headers)
-    : content(content), content_type(content_type), headers(headers) {}
+    const std::vector<std::pair<std::string, std::string>>& headers,
+    net::HttpStatusCode code)
+    : content(content),
+      content_type(content_type),
+      headers(headers),
+      code(code) {}
 
 PrefetchBrowserTestBase::ResponseEntry::ResponseEntry(ResponseEntry&& other) =
     default;
@@ -73,7 +77,7 @@
   auto found = response_map_.find(request.relative_url);
   if (found != response_map_.end()) {
     auto response = std::make_unique<net::test_server::BasicHttpResponse>();
-    response->set_code(net::HTTP_OK);
+    response->set_code(found->second.code);
     response->set_content(found->second.content);
     response->set_content_type(found->second.content_type);
     for (const auto& header : found->second.headers) {
diff --git a/content/browser/loader/prefetch_browsertest_base.h b/content/browser/loader/prefetch_browsertest_base.h
index 40500765..7d81544c 100644
--- a/content/browser/loader/prefetch_browsertest_base.h
+++ b/content/browser/loader/prefetch_browsertest_base.h
@@ -35,7 +35,8 @@
     ResponseEntry(
         const std::string& content,
         const std::string& content_types = "text/html",
-        const std::vector<std::pair<std::string, std::string>>& headers = {});
+        const std::vector<std::pair<std::string, std::string>>& headers = {},
+        net::HttpStatusCode code = net::HTTP_OK);
     ResponseEntry(const ResponseEntry&) = delete;
     ResponseEntry(ResponseEntry&& other);
     ResponseEntry& operator=(const ResponseEntry&) = delete;
@@ -45,6 +46,7 @@
     std::string content;
     std::string content_type;
     std::vector<std::pair<std::string, std::string>> headers;
+    net::HttpStatusCode code;
   };
 
   struct ScopedSignedExchangeHandlerFactory {
diff --git a/content/browser/media/android/media_player_renderer.h b/content/browser/media/android/media_player_renderer.h
index 75de71df..0f9c7499 100644
--- a/content/browser/media/android/media_player_renderer.h
+++ b/content/browser/media/android/media_player_renderer.h
@@ -16,7 +16,7 @@
 #include "media/base/media_resource.h"
 #include "media/base/renderer.h"
 #include "media/base/renderer_client.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "url/gurl.h"
 
diff --git a/content/browser/media/audio_input_stream_broker.h b/content/browser/media/audio_input_stream_broker.h
index cc63cac0..7ff1631d 100644
--- a/content/browser/media/audio_input_stream_broker.h
+++ b/content/browser/media/audio_input_stream_broker.h
@@ -13,8 +13,8 @@
 #include "content/common/content_export.h"
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/content/browser/media/audio_input_stream_broker_unittest.cc b/content/browser/media/audio_input_stream_broker_unittest.cc
index 958997f..ca361406 100644
--- a/content/browser/media/audio_input_stream_broker_unittest.cc
+++ b/content/browser/media/audio_input_stream_broker_unittest.cc
@@ -10,7 +10,7 @@
 #include "base/sync_socket.h"
 #include "base/test/mock_callback.h"
 #include "content/public/test/test_browser_thread_bundle.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
diff --git a/content/browser/media/audio_log_factory.h b/content/browser/media/audio_log_factory.h
index 513d5a48..6fa1873 100644
--- a/content/browser/media/audio_log_factory.h
+++ b/content/browser/media/audio_log_factory.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_BROWSER_MEDIA_AUDIO_LOG_FACTORY_H_
 #define CONTENT_BROWSER_MEDIA_AUDIO_LOG_FACTORY_H_
 
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 
 namespace content {
 
diff --git a/content/browser/media/audio_loopback_stream_broker.h b/content/browser/media/audio_loopback_stream_broker.h
index 65d8f051..88b8885 100644
--- a/content/browser/media/audio_loopback_stream_broker.h
+++ b/content/browser/media/audio_loopback_stream_broker.h
@@ -15,8 +15,8 @@
 #include "content/browser/media/audio_stream_broker.h"
 #include "content/common/content_export.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace audio {
diff --git a/content/browser/media/audio_loopback_stream_broker_unittest.cc b/content/browser/media/audio_loopback_stream_broker_unittest.cc
index 4e361a2..cd5e73a 100644
--- a/content/browser/media/audio_loopback_stream_broker_unittest.cc
+++ b/content/browser/media/audio_loopback_stream_broker_unittest.cc
@@ -10,7 +10,7 @@
 #include "base/sync_socket.h"
 #include "base/test/mock_callback.h"
 #include "content/public/test/test_browser_thread_bundle.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/content/browser/media/audio_output_stream_broker.cc b/content/browser/media/audio_output_stream_broker.cc
index 0ce7411..434b363ff 100644
--- a/content/browser/media/audio_output_stream_broker.cc
+++ b/content/browser/media/audio_output_stream_broker.cc
@@ -14,7 +14,7 @@
 #include "content/public/browser/media_observer.h"
 #include "content/public/common/content_client.h"
 #include "media/audio/audio_logging.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 
 namespace content {
 
diff --git a/content/browser/media/audio_output_stream_broker.h b/content/browser/media/audio_output_stream_broker.h
index af4f5d9..e4c9633 100644
--- a/content/browser/media/audio_output_stream_broker.h
+++ b/content/browser/media/audio_output_stream_broker.h
@@ -16,7 +16,7 @@
 #include "content/browser/renderer_host/media/audio_output_stream_observer_impl.h"
 #include "content/common/content_export.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/audio/public/mojom/stream_factory.mojom.h"
diff --git a/content/browser/media/audio_output_stream_broker_unittest.cc b/content/browser/media/audio_output_stream_broker_unittest.cc
index 4a532d56..3fde99b 100644
--- a/content/browser/media/audio_output_stream_broker_unittest.cc
+++ b/content/browser/media/audio_output_stream_broker_unittest.cc
@@ -15,8 +15,8 @@
 #include "base/test/scoped_task_environment.h"
 #include "base/unguessable_token.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/system/buffer.h"
diff --git a/content/browser/media/audio_stream_broker.h b/content/browser/media/audio_stream_broker.h
index 24d8928f..90fdfdc 100644
--- a/content/browser/media/audio_stream_broker.h
+++ b/content/browser/media/audio_stream_broker.h
@@ -14,8 +14,8 @@
 #include "base/optional.h"
 #include "content/common/content_export.h"
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 
 namespace audio {
diff --git a/content/browser/media/capture/audio_mirroring_manager_unittest.cc b/content/browser/media/capture/audio_mirroring_manager_unittest.cc
index a2e4137..ecb90b9 100644
--- a/content/browser/media/capture/audio_mirroring_manager_unittest.cc
+++ b/content/browser/media/capture/audio_mirroring_manager_unittest.cc
@@ -80,10 +80,9 @@
             render_process_id_, render_frame_id_)) != candidates.end()) {
       result.insert(GlobalFrameRoutingId(render_process_id_, render_frame_id_));
     }
-    base::PostTaskWithTraits(
-        FROM_HERE, {BrowserThread::IO},
-        base::BindOnce(std::move(*results_callback), std::move(result),
-                       is_duplication_));
+    base::PostTask(FROM_HERE, {BrowserThread::IO},
+                   base::BindOnce(std::move(*results_callback),
+                                  std::move(result), is_duplication_));
   }
 
   media::AudioOutputStream* SimulateAddInput(
diff --git a/content/browser/media/capture/aura_window_video_capture_device.cc b/content/browser/media/capture/aura_window_video_capture_device.cc
index 3013322..07c6e93 100644
--- a/content/browser/media/capture/aura_window_video_capture_device.cc
+++ b/content/browser/media/capture/aura_window_video_capture_device.cc
@@ -47,7 +47,7 @@
     DCHECK(device_task_runner_);
     DCHECK(cursor_controller_);
 
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::UI},
         base::BindOnce(&WindowTracker::ResolveTarget, AsWeakPtr(), source_id));
   }
@@ -158,7 +158,7 @@
 #if defined(OS_CHROMEOS)
 void AuraWindowVideoCaptureDevice::CreateCapturer(
     viz::mojom::FrameSinkVideoCapturerRequest request) {
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(
           [](base::WeakPtr<WindowTracker> tracker_ptr,
diff --git a/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc b/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc
index ceedcf7..d02baa5 100644
--- a/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc
+++ b/content/browser/media/capture/aura_window_video_capture_device_browsertest.cc
@@ -161,9 +161,8 @@
       // Wait for at least the minimum capture period before checking for more
       // captured frames.
       base::RunLoop run_loop;
-      base::PostDelayedTaskWithTraits(FROM_HERE, {BrowserThread::UI},
-                                      run_loop.QuitClosure(),
-                                      GetMinCapturePeriod());
+      base::PostDelayedTask(FROM_HERE, {BrowserThread::UI},
+                            run_loop.QuitClosure(), GetMinCapturePeriod());
       run_loop.Run();
     }
   }
@@ -265,9 +264,8 @@
   // frames were queued because the device should be suspended.
   ChangePageContentColor(SK_ColorGREEN);
   base::RunLoop run_loop;
-  base::PostDelayedTaskWithTraits(FROM_HERE, {BrowserThread::UI},
-                                  run_loop.QuitClosure(),
-                                  base::TimeDelta::FromSeconds(5));
+  base::PostDelayedTask(FROM_HERE, {BrowserThread::UI}, run_loop.QuitClosure(),
+                        base::TimeDelta::FromSeconds(5));
   run_loop.Run();
   EXPECT_FALSE(HasCapturedFramesInQueue());
 
diff --git a/content/browser/media/capture/desktop_capture_device.cc b/content/browser/media/capture/desktop_capture_device.cc
index a555344..3f0c552 100644
--- a/content/browser/media/capture/desktop_capture_device.cc
+++ b/content/browser/media/capture/desktop_capture_device.cc
@@ -253,7 +253,7 @@
   // TODO(https://crbug.com/823869): Fix DesktopCaptureDeviceTest and remove
   // this conditional.
   if (BrowserThread::IsThreadInitialized(BrowserThread::UI)) {
-    base::PostTaskWithTraitsAndReplyWithResult(
+    base::PostTaskAndReplyWithResult(
         FROM_HERE, {BrowserThread::UI}, base::BindOnce(&GetServiceConnector),
         base::BindOnce(&DesktopCaptureDevice::Core::RequestWakeLock,
                        weak_factory_.GetWeakPtr()));
diff --git a/content/browser/media/capture/desktop_streams_registry_impl.cc b/content/browser/media/capture/desktop_streams_registry_impl.cc
index 4bec95a..88ba5d4b 100644
--- a/content/browser/media/capture/desktop_streams_registry_impl.cc
+++ b/content/browser/media/capture/desktop_streams_registry_impl.cc
@@ -67,7 +67,7 @@
   stream.extension_name = extension_name;
   stream.type = type;
 
-  base::PostDelayedTaskWithTraits(
+  base::PostDelayedTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&DesktopStreamsRegistryImpl::CleanupStream,
                      base::Unretained(this), id),
diff --git a/content/browser/media/capture/frame_sink_video_capture_device.cc b/content/browser/media/capture/frame_sink_video_capture_device.cc
index ccda5c5..127fec67 100644
--- a/content/browser/media/capture/frame_sink_video_capture_device.cc
+++ b/content/browser/media/capture/frame_sink_video_capture_device.cc
@@ -118,7 +118,7 @@
     capturer_->ChangeTarget(target_);
   }
 
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&MouseCursorOverlayController::Start,
                      cursor_controller_->GetWeakPtr(),
@@ -133,7 +133,7 @@
 
   DCHECK(!wake_lock_);
   // Gets a service_manager::Connector first, then request a wake lock.
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI}, base::BindOnce(&MaybeGetServiceConnector),
       base::BindOnce(&FrameSinkVideoCaptureDevice::RequestWakeLock,
                      weak_factory_.GetWeakPtr()));
@@ -178,9 +178,9 @@
     wake_lock_.reset();
   }
 
-  base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI},
-                           base::BindOnce(&MouseCursorOverlayController::Stop,
-                                          cursor_controller_->GetWeakPtr()));
+  base::PostTask(FROM_HERE, {BrowserThread::UI},
+                 base::BindOnce(&MouseCursorOverlayController::Stop,
+                                cursor_controller_->GetWeakPtr()));
 
   MaybeStopConsuming();
   capturer_.reset();
@@ -302,16 +302,15 @@
     viz::mojom::FrameSinkVideoCapturerRequest request) {
   // Send the request to UI thread because that's where HostFrameSinkManager
   // lives.
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::UI},
-      base::BindOnce(
-          [](viz::mojom::FrameSinkVideoCapturerRequest request) {
-            viz::HostFrameSinkManager* const manager =
-                GetHostFrameSinkManager();
-            DCHECK(manager);
-            manager->CreateVideoCapturer(std::move(request));
-          },
-          std::move(request)));
+  base::PostTask(FROM_HERE, {BrowserThread::UI},
+                 base::BindOnce(
+                     [](viz::mojom::FrameSinkVideoCapturerRequest request) {
+                       viz::HostFrameSinkManager* const manager =
+                           GetHostFrameSinkManager();
+                       DCHECK(manager);
+                       manager->CreateVideoCapturer(std::move(request));
+                     },
+                     std::move(request)));
 }
 
 void FrameSinkVideoCaptureDevice::MaybeStartConsuming() {
diff --git a/content/browser/media/capture/frame_sink_video_capture_device_unittest.cc b/content/browser/media/capture/frame_sink_video_capture_device_unittest.cc
index 496065e3..97a2f51 100644
--- a/content/browser/media/capture/frame_sink_video_capture_device_unittest.cc
+++ b/content/browser/media/capture/frame_sink_video_capture_device_unittest.cc
@@ -53,7 +53,7 @@
 
 // Convenience macro to post a task to run on the device thread.
 #define POST_DEVICE_TASK(closure) \
-  base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO}, closure)
+  base::PostTask(FROM_HERE, {BrowserThread::IO}, closure)
 
 // Convenience macro to block the test procedure until all pending tasks have
 // run on the device thread.
@@ -263,14 +263,13 @@
 
  protected:
   void CreateCapturer(viz::mojom::FrameSinkVideoCapturerRequest request) final {
-    base::PostTaskWithTraits(
-        FROM_HERE, {BrowserThread::UI},
-        base::BindOnce(
-            [](MockFrameSinkVideoCapturer* capturer,
-               viz::mojom::FrameSinkVideoCapturerRequest request) {
-              capturer->Bind(std::move(request));
-            },
-            capturer_, std::move(request)));
+    base::PostTask(FROM_HERE, {BrowserThread::UI},
+                   base::BindOnce(
+                       [](MockFrameSinkVideoCapturer* capturer,
+                          viz::mojom::FrameSinkVideoCapturerRequest request) {
+                         capturer->Bind(std::move(request));
+                       },
+                       capturer_, std::move(request)));
   }
 
   MockFrameSinkVideoCapturer* const capturer_;
diff --git a/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc b/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc
index 324b1c04..ed89507 100644
--- a/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc
+++ b/content/browser/media/capture/mouse_cursor_overlay_controller_browsertest.cc
@@ -63,9 +63,8 @@
     auto overlay_ptr = std::make_unique<FakeOverlay>();
     FakeOverlay* const overlay = overlay_ptr.get();
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
-    controller_.Start(
-        std::move(overlay_ptr),
-        base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::UI}));
+    controller_.Start(std::move(overlay_ptr),
+                      base::CreateSingleThreadTaskRunner({BrowserThread::UI}));
     return overlay;
   }
 
diff --git a/content/browser/media/capture/web_contents_audio_input_stream.cc b/content/browser/media/capture/web_contents_audio_input_stream.cc
index 0329e1b..9acca58 100644
--- a/content/browser/media/capture/web_contents_audio_input_stream.cc
+++ b/content/browser/media/capture/web_contents_audio_input_stream.cc
@@ -186,9 +186,8 @@
 
 void WebContentsAudioInputStream::Impl::IncrementCapturerCount() {
   if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
-    base::PostTaskWithTraits(
-        FROM_HERE, {BrowserThread::UI},
-        base::BindOnce(&Impl::IncrementCapturerCount, this));
+    base::PostTask(FROM_HERE, {BrowserThread::UI},
+                   base::BindOnce(&Impl::IncrementCapturerCount, this));
     return;
   }
 
@@ -219,8 +218,8 @@
   // WebContents audio muting is implemented as audio capture to nowhere.
   // Unmuting will stop that audio capture, allowing AudioMirroringManager to
   // divert audio capture to here.
-  base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI},
-                           base::BindOnce(&Impl::UnmuteWebContentsAudio, this));
+  base::PostTask(FROM_HERE, {BrowserThread::UI},
+                 base::BindOnce(&Impl::UnmuteWebContentsAudio, this));
 }
 
 void WebContentsAudioInputStream::Impl::Stop() {
@@ -255,9 +254,8 @@
 
 void WebContentsAudioInputStream::Impl::DecrementCapturerCount() {
   if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
-    base::PostTaskWithTraits(
-        FROM_HERE, {BrowserThread::UI},
-        base::BindOnce(&Impl::DecrementCapturerCount, this));
+    base::PostTask(FROM_HERE, {BrowserThread::UI},
+                   base::BindOnce(&Impl::DecrementCapturerCount, this));
     return;
   }
 
@@ -275,20 +273,19 @@
 void WebContentsAudioInputStream::Impl::StartMirroring() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::IO},
-      base::BindOnce(&AudioMirroringManager::StartMirroring,
-                     base::Unretained(mirroring_manager_),
-                     base::RetainedRef(this)));
+  base::PostTask(FROM_HERE, {BrowserThread::IO},
+                 base::BindOnce(&AudioMirroringManager::StartMirroring,
+                                base::Unretained(mirroring_manager_),
+                                base::RetainedRef(this)));
 }
 
 void WebContentsAudioInputStream::Impl::StopMirroring() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO},
-                           base::BindOnce(&AudioMirroringManager::StopMirroring,
-                                          base::Unretained(mirroring_manager_),
-                                          base::RetainedRef(this)));
+  base::PostTask(FROM_HERE, {BrowserThread::IO},
+                 base::BindOnce(&AudioMirroringManager::StopMirroring,
+                                base::Unretained(mirroring_manager_),
+                                base::RetainedRef(this)));
 }
 
 void WebContentsAudioInputStream::Impl::UnmuteWebContentsAudio() {
@@ -302,7 +299,7 @@
 void WebContentsAudioInputStream::Impl::QueryForMatches(
     const std::set<GlobalFrameRoutingId>& candidates,
     MatchesCallback results_callback) {
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&Impl::QueryForMatchesOnUIThread, this, candidates,
                      media::BindToCurrentLoop(std::move(results_callback))));
diff --git a/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc b/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc
index 9ff6d67..8ae26732 100644
--- a/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc
+++ b/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc
@@ -283,7 +283,7 @@
     // causes our mock to set |destination_|.  Block until that has happened.
     base::WaitableEvent done(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                              base::WaitableEvent::InitialState::NOT_SIGNALED);
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::IO},
         base::BindOnce(&base::WaitableEvent::Signal, base::Unretained(&done)));
     done.Wait();
diff --git a/content/browser/media/capture/web_contents_audio_muter.cc b/content/browser/media/capture/web_contents_audio_muter.cc
index 386ebee..9b6c5b7 100644
--- a/content/browser/media/capture/web_contents_audio_muter.cc
+++ b/content/browser/media/capture/web_contents_audio_muter.cc
@@ -93,7 +93,7 @@
 
   void QueryForMatches(const std::set<GlobalFrameRoutingId>& candidates,
                        MatchesCallback results_callback) override {
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::UI},
         base::BindOnce(&MuteDestination::QueryForMatchesOnUIThread, this,
                        candidates,
@@ -148,7 +148,7 @@
   if (is_muting_)
     return;
   is_muting_ = true;
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&AudioMirroringManager::StartMirroring,
                      base::Unretained(AudioMirroringManager::GetInstance()),
@@ -160,7 +160,7 @@
   if (!is_muting_)
     return;
   is_muting_ = false;
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&AudioMirroringManager::StopMirroring,
                      base::Unretained(AudioMirroringManager::GetInstance()),
diff --git a/content/browser/media/capture/web_contents_tracker.cc b/content/browser/media/capture/web_contents_tracker.cc
index 0a5d7c3..9a62779d 100644
--- a/content/browser/media/capture/web_contents_tracker.cc
+++ b/content/browser/media/capture/web_contents_tracker.cc
@@ -35,7 +35,7 @@
   if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
     StartObservingWebContents(render_process_id, main_render_frame_id);
   } else {
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::UI},
         base::BindOnce(&WebContentsTracker::StartObservingWebContents, this,
                        render_process_id, main_render_frame_id));
@@ -51,10 +51,9 @@
   if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
     WebContentsObserver::Observe(nullptr);
   } else {
-    base::PostTaskWithTraits(
-        FROM_HERE, {BrowserThread::UI},
-        base::BindOnce(&WebContentsTracker::Observe, this,
-                       static_cast<WebContents*>(nullptr)));
+    base::PostTask(FROM_HERE, {BrowserThread::UI},
+                   base::BindOnce(&WebContentsTracker::Observe, this,
+                                  static_cast<WebContents*>(nullptr)));
   }
 }
 
diff --git a/content/browser/media/capture/web_contents_video_capture_device.cc b/content/browser/media/capture/web_contents_video_capture_device.cc
index e0ebc1d..13c91f02 100644
--- a/content/browser/media/capture/web_contents_video_capture_device.cc
+++ b/content/browser/media/capture/web_contents_video_capture_device.cc
@@ -45,7 +45,7 @@
     DCHECK(device_task_runner_);
     DCHECK(cursor_controller_);
 
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::UI},
         base::BindOnce(
             [](base::WeakPtr<FrameTracker> self, int process_id, int frame_id) {
@@ -236,7 +236,7 @@
 }
 
 void WebContentsVideoCaptureDevice::WillStart() {
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&FrameTracker::WillStartCapturingWebContents,
                      tracker_->AsWeakPtr(),
@@ -244,10 +244,9 @@
 }
 
 void WebContentsVideoCaptureDevice::DidStop() {
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::UI},
-      base::BindOnce(&FrameTracker::DidStopCapturingWebContents,
-                     tracker_->AsWeakPtr()));
+  base::PostTask(FROM_HERE, {BrowserThread::UI},
+                 base::BindOnce(&FrameTracker::DidStopCapturingWebContents,
+                                tracker_->AsWeakPtr()));
 }
 
 }  // namespace content
diff --git a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
index 1d1e1d36..3f5c96f4 100644
--- a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
+++ b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
@@ -144,9 +144,8 @@
       // Wait for at least the minimum capture period before checking for more
       // captured frames.
       base::RunLoop run_loop;
-      base::PostDelayedTaskWithTraits(FROM_HERE, {BrowserThread::UI},
-                                      run_loop.QuitClosure(),
-                                      GetMinCapturePeriod());
+      base::PostDelayedTask(FROM_HERE, {BrowserThread::UI},
+                            run_loop.QuitClosure(), GetMinCapturePeriod());
       run_loop.Run();
     }
   }
@@ -320,9 +319,8 @@
   // frames were queued because the device should be suspended.
   ChangePageContentColor(SK_ColorGREEN);
   base::RunLoop run_loop;
-  base::PostDelayedTaskWithTraits(FROM_HERE, {BrowserThread::UI},
-                                  run_loop.QuitClosure(),
-                                  base::TimeDelta::FromSeconds(5));
+  base::PostDelayedTask(FROM_HERE, {BrowserThread::UI}, run_loop.QuitClosure(),
+                        base::TimeDelta::FromSeconds(5));
   run_loop.Run();
   EXPECT_FALSE(HasCapturedFramesInQueue());
 
diff --git a/content/browser/media/cdm_file_impl.h b/content/browser/media/cdm_file_impl.h
index 3bb43a7..b8bfc99f 100644
--- a/content/browser/media/cdm_file_impl.h
+++ b/content/browser/media/cdm_file_impl.h
@@ -15,7 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/threading/sequence_bound.h"
 #include "base/threading/thread_checker.h"
-#include "media/mojo/interfaces/cdm_storage.mojom.h"
+#include "media/mojo/mojom/cdm_storage.mojom.h"
 #include "storage/browser/fileapi/async_file_util.h"
 #include "url/origin.h"
 
diff --git a/content/browser/media/cdm_storage_impl.h b/content/browser/media/cdm_storage_impl.h
index 72a289a6..6a701872 100644
--- a/content/browser/media/cdm_storage_impl.h
+++ b/content/browser/media/cdm_storage_impl.h
@@ -15,7 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/frame_service_base.h"
-#include "media/mojo/interfaces/cdm_storage.mojom.h"
+#include "media/mojo/mojom/cdm_storage.mojom.h"
 #include "mojo/public/cpp/bindings/strong_associated_binding_set.h"
 
 namespace storage {
diff --git a/content/browser/media/cdm_storage_impl_unittest.cc b/content/browser/media/cdm_storage_impl_unittest.cc
index b6a8f9a..154ad79e 100644
--- a/content/browser/media/cdm_storage_impl_unittest.cc
+++ b/content/browser/media/cdm_storage_impl_unittest.cc
@@ -13,7 +13,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/navigation_simulator.h"
 #include "content/public/test/test_renderer_host.h"
-#include "media/mojo/interfaces/cdm_storage.mojom.h"
+#include "media/mojo/mojom/cdm_storage.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
diff --git a/content/browser/media/flinging_renderer.h b/content/browser/media/flinging_renderer.h
index f4debfb..6196e14 100644
--- a/content/browser/media/flinging_renderer.h
+++ b/content/browser/media/flinging_renderer.h
@@ -12,7 +12,7 @@
 #include "media/base/media_status_observer.h"
 #include "media/base/renderer.h"
 #include "media/base/renderer_client.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "url/gurl.h"
 
 namespace content {
diff --git a/content/browser/media/forwarding_audio_stream_factory.h b/content/browser/media/forwarding_audio_stream_factory.h
index 6048ba8..295af3e 100644
--- a/content/browser/media/forwarding_audio_stream_factory.h
+++ b/content/browser/media/forwarding_audio_stream_factory.h
@@ -20,7 +20,7 @@
 #include "content/common/content_export.h"
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
 #include "content/public/browser/web_contents_observer.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 #include "services/audio/public/mojom/stream_factory.mojom.h"
 
diff --git a/content/browser/media/forwarding_audio_stream_factory_unittest.cc b/content/browser/media/forwarding_audio_stream_factory_unittest.cc
index 3b1c735..0e1e6546 100644
--- a/content/browser/media/forwarding_audio_stream_factory_unittest.cc
+++ b/content/browser/media/forwarding_audio_stream_factory_unittest.cc
@@ -18,7 +18,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/test_renderer_host.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/associated_receiver.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
 #include "services/audio/public/mojom/constants.mojom.h"
diff --git a/content/browser/media/key_system_support_impl.h b/content/browser/media/key_system_support_impl.h
index ad32f7a..acfa28e 100644
--- a/content/browser/media/key_system_support_impl.h
+++ b/content/browser/media/key_system_support_impl.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "content/common/content_export.h"
 #include "content/public/common/cdm_info.h"
-#include "media/mojo/interfaces/key_system_support.mojom.h"
+#include "media/mojo/mojom/key_system_support.mojom.h"
 
 namespace content {
 
diff --git a/content/browser/media/media_interface_proxy.cc b/content/browser/media/media_interface_proxy.cc
index 2e8b743..c5fdc4d 100644
--- a/content/browser/media/media_interface_proxy.cc
+++ b/content/browser/media/media_interface_proxy.cc
@@ -18,9 +18,9 @@
 #include "content/public/browser/system_connector.h"
 #include "content/public/common/content_client.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
-#include "media/mojo/interfaces/constants.mojom.h"
-#include "media/mojo/interfaces/media_service.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
+#include "media/mojo/mojom/media_service.mojom.h"
 #include "media/mojo/services/media_interface_provider.h"
 #include "services/service_manager/public/cpp/connector.h"
 
@@ -37,7 +37,7 @@
 #include "content/browser/media/key_system_support_impl.h"
 #include "content/public/common/cdm_info.h"
 #include "media/base/key_system_names.h"
-#include "media/mojo/interfaces/cdm_service.mojom.h"
+#include "media/mojo/mojom/cdm_service.mojom.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #if defined(OS_MACOSX)
diff --git a/content/browser/media/media_interface_proxy.h b/content/browser/media/media_interface_proxy.h
index ae405bd..770f4de 100644
--- a/content/browser/media/media_interface_proxy.h
+++ b/content/browser/media/media_interface_proxy.h
@@ -16,8 +16,8 @@
 #include "build/build_config.h"
 #include "media/media_buildflags.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/service_manager/public/mojom/interface_provider.mojom.h"
 
diff --git a/content/browser/media/media_internals.h b/content/browser/media/media_internals.h
index 3acdbfd..ba80fe7 100644
--- a/content/browser/media/media_internals.h
+++ b/content/browser/media/media_internals.h
@@ -26,7 +26,7 @@
 #include "media/base/media_log.h"
 #include "media/capture/video/video_capture_device_descriptor.h"
 #include "media/capture/video_capture_types.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 
 namespace media {
 struct MediaLogEvent;
diff --git a/content/browser/media/video_decoder_proxy.cc b/content/browser/media/video_decoder_proxy.cc
index 6c25154..f01a6444 100644
--- a/content/browser/media/video_decoder_proxy.cc
+++ b/content/browser/media/video_decoder_proxy.cc
@@ -7,9 +7,9 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "content/public/browser/system_connector.h"
-#include "media/mojo/interfaces/constants.mojom.h"
-#include "media/mojo/interfaces/media_service.mojom.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
+#include "media/mojo/mojom/media_service.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
 
 namespace content {
diff --git a/content/browser/media/video_decoder_proxy.h b/content/browser/media/video_decoder_proxy.h
index aaf0330..287da369 100644
--- a/content/browser/media/video_decoder_proxy.h
+++ b/content/browser/media/video_decoder_proxy.h
@@ -12,7 +12,7 @@
 #include "base/unguessable_token.h"
 #include "build/build_config.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 
 namespace content {
diff --git a/content/browser/notifications/platform_notification_context_trigger_unittest.cc b/content/browser/notifications/platform_notification_context_trigger_unittest.cc
index 932b815..6c684a2 100644
--- a/content/browser/notifications/platform_notification_context_trigger_unittest.cc
+++ b/content/browser/notifications/platform_notification_context_trigger_unittest.cc
@@ -54,7 +54,7 @@
   PlatformNotificationContextTriggerTest()
       : thread_bundle_(
             base::test::ScopedTaskEnvironment::MainThreadType::UI,
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         notification_browser_client_(&browser_context_),
         success_(false) {
     SetBrowserClientForTesting(&notification_browser_client_);
diff --git a/content/browser/portal/portal_browsertest.cc b/content/browser/portal/portal_browsertest.cc
index 68803d1..cc158f1 100644
--- a/content/browser/portal/portal_browsertest.cc
+++ b/content/browser/portal/portal_browsertest.cc
@@ -743,9 +743,16 @@
   input_event_ack_waiter.Wait();
 }
 
+#if defined(OS_MACOSX)
+//  TODO(crbug.com/941824): Test flaky on MAC
+#define MAYBE_TouchAckAfterActivateAndAdopt \
+  DISABLED_TouchAckAfterActivateAndAdopt
+#else
+#define MAYBE_TouchAckAfterActivateAndAdopt TouchAckAfterActivateAndAdopt
+#endif
 // Regression test for crbug.com/973647. Tests that receiving a touch ack
 // after activation and predecessor adoption doesn't cause a crash.
-IN_PROC_BROWSER_TEST_F(PortalBrowserTest, TouchAckAfterActivateAndAdopt) {
+IN_PROC_BROWSER_TEST_F(PortalBrowserTest, MAYBE_TouchAckAfterActivateAndAdopt) {
   EXPECT_TRUE(NavigateToURL(
       shell(), embedded_test_server()->GetURL("portal.test", "/title1.html")));
   WebContentsImpl* web_contents_impl =
diff --git a/content/browser/renderer_host/compositor_dependencies_android.cc b/content/browser/renderer_host/compositor_dependencies_android.cc
index 47123b1..f741e0c 100644
--- a/content/browser/renderer_host/compositor_dependencies_android.cc
+++ b/content/browser/renderer_host/compositor_dependencies_android.cc
@@ -134,8 +134,8 @@
 void CompositorDependenciesAndroid::TryEstablishVizConnectionIfNeeded() {
   if (!pending_connect_viz_on_io_thread_)
     return;
-  base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO},
-                           std::move(pending_connect_viz_on_io_thread_));
+  base::PostTask(FROM_HERE, {BrowserThread::IO},
+                 std::move(pending_connect_viz_on_io_thread_));
 }
 
 // Called on IO thread, after a GPU connection has already been established.
diff --git a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
index 7248dce..29eee1df 100644
--- a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
+++ b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
@@ -322,8 +322,9 @@
   start_time_table_ready_ = base::TimeTicks::Now();
 
   scoped_refptr<base::SequencedTaskRunner> results_collection_task_runner =
-      base::CreateSequencedTaskRunnerWithTraits(
-          {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+      base::CreateSequencedTaskRunner(
+          {base::ThreadPool(), base::MayBlock(),
+           base::TaskPriority::BEST_EFFORT,
            base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN});
 
   results_collection_task_runner->PostTask(
@@ -381,9 +382,9 @@
     // Specify base::ThreadPolicy::MUST_USE_FOREGROUND because in
     // https://crbug.com/960263 we observed a priority inversion when running
     // DWrite worker tasks in the background.
-    base::PostTaskWithTraitsAndReplyWithResult(
+    base::PostTaskAndReplyWithResult(
         FROM_HERE,
-        {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+        {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
          base::ThreadPolicy::MUST_USE_FOREGROUND,
          base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
         base::BindOnce(
diff --git a/content/browser/renderer_host/media/audio_input_delegate_impl.h b/content/browser/renderer_host/media/audio_input_delegate_impl.h
index a59d2fa..9e77324 100644
--- a/content/browser/renderer_host/media/audio_input_delegate_impl.h
+++ b/content/browser/renderer_host/media/audio_input_delegate_impl.h
@@ -13,7 +13,7 @@
 #include "content/browser/renderer_host/media/audio_input_device_manager.h"
 #include "content/common/content_export.h"
 #include "media/audio/audio_input_delegate.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 
 namespace media {
 class AudioManager;
diff --git a/content/browser/renderer_host/media/audio_input_stream_handle.h b/content/browser/renderer_host/media/audio_input_stream_handle.h
index c36e892..1147dd3 100644
--- a/content/browser/renderer_host/media/audio_input_stream_handle.h
+++ b/content/browser/renderer_host/media/audio_input_stream_handle.h
@@ -10,8 +10,8 @@
 #include "base/sequence_checker.h"
 #include "content/common/content_export.h"
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "media/mojo/services/mojo_audio_input_stream.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "mojo/public/cpp/system/handle.h"
diff --git a/content/browser/renderer_host/media/audio_output_delegate_impl.h b/content/browser/renderer_host/media/audio_output_delegate_impl.h
index ebbc052a7..0629eb2 100644
--- a/content/browser/renderer_host/media/audio_output_delegate_impl.h
+++ b/content/browser/renderer_host/media/audio_output_delegate_impl.h
@@ -13,8 +13,8 @@
 #include "base/timer/timer.h"
 #include "content/common/content_export.h"
 #include "media/audio/audio_output_delegate.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 
 namespace content {
 class MediaObserver;
diff --git a/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc b/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc
index 3834336..c4b5024 100644
--- a/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc
+++ b/content/browser/renderer_host/media/audio_output_delegate_impl_unittest.cc
@@ -27,7 +27,7 @@
 #include "media/audio/fake_audio_manager.h"
 #include "media/base/bind_to_current_loop.h"
 #include "media/base/media_switches.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/content/browser/renderer_host/media/audio_output_stream_observer_impl.h b/content/browser/renderer_host/media/audio_output_stream_observer_impl.h
index edbb892..0f5e587 100644
--- a/content/browser/renderer_host/media/audio_output_stream_observer_impl.h
+++ b/content/browser/renderer_host/media/audio_output_stream_observer_impl.h
@@ -7,7 +7,7 @@
 
 #include "base/macros.h"
 #include "content/common/content_export.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 
 namespace content {
 
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index 964cedd3..dbe97ac6 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -67,7 +67,7 @@
 #include "media/capture/video/fake_video_capture_device.h"
 #include "media/capture/video/fake_video_capture_device_factory.h"
 #include "media/capture/video/video_capture_system_impl.h"
-#include "media/mojo/interfaces/display_media_information.mojom.h"
+#include "media/mojo/mojom/display_media_information.mojom.h"
 #include "services/video_capture/public/uma/video_capture_service_event.h"
 #include "url/gurl.h"
 #include "url/origin.h"
diff --git a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h
index 8ff4d1e..63d17a5 100644
--- a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h
+++ b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory.h
@@ -23,7 +23,7 @@
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
 #include "content/public/browser/browser_thread.h"
 #include "media/audio/audio_input_delegate.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 
diff --git a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
index be178e6..c172c21c 100644
--- a/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/old_render_frame_audio_input_stream_factory_unittest.cc
@@ -22,7 +22,7 @@
 #include "media/audio/mock_audio_manager.h"
 #include "media/audio/test_audio_thread.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
diff --git a/content/browser/renderer_host/media/old_render_frame_audio_output_stream_factory_unittest.cc b/content/browser/renderer_host/media/old_render_frame_audio_output_stream_factory_unittest.cc
index 7daadd0..c7e7379 100644
--- a/content/browser/renderer_host/media/old_render_frame_audio_output_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/old_render_frame_audio_output_stream_factory_unittest.cc
@@ -18,7 +18,7 @@
 #include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
index acb8b2e..a76e48d 100644
--- a/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_input_stream_factory_unittest.cc
@@ -32,7 +32,7 @@
 #include "media/audio/fake_audio_manager.h"
 #include "media/audio/test_audio_thread.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
diff --git a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
index 333b6733..d44dedc 100644
--- a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory.cc
@@ -27,7 +27,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
 #include "media/base/output_device_info.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace content {
diff --git a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc
index 53c1031..580d6e0 100644
--- a/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc
+++ b/content/browser/renderer_host/media/render_frame_audio_output_stream_factory_unittest.cc
@@ -29,7 +29,7 @@
 #include "media/audio/fake_audio_manager.h"
 #include "media/audio/test_audio_thread.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
diff --git a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context.h b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context.h
index 51b05c95..be85d7e 100644
--- a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context.h
+++ b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context.h
@@ -11,7 +11,7 @@
 #include "content/browser/renderer_host/media/audio_output_authorization_handler.h"
 #include "content/common/content_export.h"
 #include "media/audio/audio_output_delegate.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 
 namespace media {
 class AudioParameters;
diff --git a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc
index 623d692..8120a00 100644
--- a/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc
+++ b/content/browser/renderer_host/media/renderer_audio_output_stream_factory_context_impl.cc
@@ -12,7 +12,7 @@
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/common/content_features.h"
 #include "media/audio/audio_system.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 
 namespace content {
 
diff --git a/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc b/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc
index cc8f129..df3b97b 100644
--- a/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc
+++ b/content/browser/renderer_host/pepper/pepper_external_file_ref_backend.cc
@@ -65,8 +65,9 @@
     : host_(host),
       path_(path),
       render_process_id_(render_process_id),
-      task_runner_(base::CreateSequencedTaskRunnerWithTraits(
-          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+      task_runner_(base::CreateSequencedTaskRunner(
+          {base::ThreadPool(), base::MayBlock(),
+           base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {}
 
 PepperExternalFileRefBackend::~PepperExternalFileRefBackend() {}
diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.cc b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
index 46a4e7be..4b5e7a1e 100644
--- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc
@@ -109,8 +109,9 @@
                                    PP_Resource resource)
     : ResourceHost(host->GetPpapiHost(), instance, resource),
       browser_ppapi_host_(host),
-      task_runner_(base::CreateSequencedTaskRunnerWithTraits(
-          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+      task_runner_(base::CreateSequencedTaskRunner(
+          {base::ThreadPool(), base::MayBlock(),
+           base::TaskPriority::USER_VISIBLE,
            base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
       file_(task_runner_.get()),
       open_flags_(0),
@@ -204,7 +205,7 @@
     if (!CanOpenFileSystemURLWithPepperFlags(
             open_flags, render_process_id_, file_system_url_))
       return PP_ERROR_NOACCESS;
-    base::PostTaskWithTraitsAndReplyWithResult(
+    base::PostTaskAndReplyWithResult(
         FROM_HERE, {BrowserThread::UI},
         base::Bind(&GetUIThreadStuffForInternalFileSystems, render_process_id_),
         base::Bind(&PepperFileIOHost::GotUIThreadStuffForInternalFileSystems,
@@ -214,7 +215,7 @@
     base::FilePath path = file_ref_host->GetExternalFilePath();
     if (!CanOpenWithPepperFlags(open_flags, render_process_id_, path))
       return PP_ERROR_NOACCESS;
-    base::PostTaskWithTraitsAndReplyWithResult(
+    base::PostTaskAndReplyWithResult(
         FROM_HERE, {BrowserThread::UI},
         base::Bind(&GetResolvedRenderProcessId, render_process_id_),
         base::Bind(&PepperFileIOHost::GotResolvedRenderProcessId, AsWeakPtr(),
@@ -395,7 +396,7 @@
 
   GURL document_url =
       browser_ppapi_host_->GetDocumentURLForInstance(pp_instance());
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI},
       base::Bind(&GetPluginAllowedToCallRequestOSFileHandle, render_process_id_,
                  document_url),
diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
index 24d0a2a..974f9d8 100644
--- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
@@ -90,7 +90,7 @@
   called_open_ = true;
   // Get the file system context asynchronously, and then complete the Open
   // operation by calling |callback|.
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI},
       base::Bind(&GetFileSystemContextFromRenderId, render_process_id),
       base::Bind(&PepperFileSystemBrowserHost::OpenExistingFileSystem,
@@ -172,7 +172,7 @@
     return PP_ERROR_FAILED;
   }
 
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI},
       base::Bind(&GetFileSystemContextFromRenderId, render_process_id),
       base::Bind(&PepperFileSystemBrowserHost::OpenFileSystem,
@@ -338,7 +338,7 @@
       fsid,
       ppapi::IsolatedFileSystemTypeToRootName(type)));
 
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI},
       base::Bind(&GetFileSystemContextFromRenderId, render_process_id),
       base::Bind(&PepperFileSystemBrowserHost::OpenIsolatedFileSystem,
diff --git a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
index 3619dfa..6c40589c 100644
--- a/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
@@ -81,10 +81,9 @@
   // the plugin has multiple threads, it cannot make assumptions about
   // ordering of IPC message sends, so it cannot make assumptions
   // about ordering of operations caused by those IPC messages.
-  return scoped_refptr<base::TaskRunner>(
-      base::CreateSequencedTaskRunnerWithTraits(
-          {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
-           base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
+  return scoped_refptr<base::TaskRunner>(base::CreateSequencedTaskRunner(
+      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+       base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
 }
 
 int32_t PepperFlashFileMessageFilter::OnResourceMessageReceived(
diff --git a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
index 8267120..34ad472 100644
--- a/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_host_resolver_message_filter.cc
@@ -102,7 +102,7 @@
 PepperHostResolverMessageFilter::OverrideTaskRunnerForMessage(
     const IPC::Message& message) {
   if (message.type() == PpapiHostMsg_HostResolver_Resolve::ID)
-    return base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::UI});
+    return base::CreateSingleThreadTaskRunner({BrowserThread::UI});
   return nullptr;
 }
 
@@ -169,7 +169,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   binding_.Close();
 
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&PepperHostResolverMessageFilter::OnLookupFinished, this,
                      result, std::move(resolved_addresses),
diff --git a/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc b/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc
index 6e55aaa3..74500064 100644
--- a/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc
@@ -43,7 +43,7 @@
     base::OnceCallback<void(const net::NetworkInterfaceList&)> callback,
     const base::Optional<net::NetworkInterfaceList>& networks) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(std::move(callback), networks.has_value()
                                               ? *networks
@@ -70,7 +70,7 @@
   host->GetRenderFrameIDsForInstance(
       instance, &render_process_id, &render_frame_id);
 
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI},
       base::Bind(&CanUseNetworkMonitor, host->external_plugin(),
                  render_process_id, render_frame_id),
@@ -100,7 +100,7 @@
     return;
   }
 
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&content::GetNetworkConnectionTracker),
       base::BindOnce(&PepperNetworkMonitorHost::SetNetworkConnectionTracker,
@@ -117,7 +117,7 @@
 
 void PepperNetworkMonitorHost::GetAndSendNetworkList() {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&GetNetworkList,
                      base::BindOnce(&PepperNetworkMonitorHost::SendNetworkList,
diff --git a/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc b/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc
index 49aa731..06a80147 100644
--- a/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_network_proxy_host.cc
@@ -60,7 +60,7 @@
       waiting_for_ui_thread_data_(true) {
   host->GetRenderFrameIDsForInstance(instance, &render_process_id_,
                                      &render_frame_id_);
-  base::PostTaskWithTraitsAndReplyWithResult(
+  base::PostTaskAndReplyWithResult(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&GetUIThreadDataOnUIThread, render_process_id_,
                      render_frame_id_, host->external_plugin()),
diff --git a/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc b/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc
index 54c4e339..035dcf5 100644
--- a/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc
+++ b/content/browser/renderer_host/pepper/pepper_print_settings_manager.cc
@@ -113,9 +113,9 @@
 
 void PepperPrintSettingsManagerImpl::GetDefaultPrintSettings(
     PepperPrintSettingsManager::Callback callback) {
-  base::PostTaskWithTraitsAndReplyWithResult(
-      FROM_HERE, {BrowserThread::UI}, base::Bind(ComputeDefaultPrintSettings),
-      std::move(callback));
+  base::PostTaskAndReplyWithResult(FROM_HERE, {BrowserThread::UI},
+                                   base::Bind(ComputeDefaultPrintSettings),
+                                   std::move(callback));
 }
 
 }  // namespace content
diff --git a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc
index c405432..465aacd 100644
--- a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc
+++ b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper.cc
@@ -32,7 +32,7 @@
       : binding_(this),
         look_up_complete_callback_(std::move(look_up_complete_callback)),
         callback_task_runner_(base::SequencedTaskRunnerHandle::Get()) {
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::UI},
         base::BindOnce(&UIThreadHelper::StartLookup, base::Unretained(this),
                        url, std::move(look_up_proxy_for_url_callback)));
diff --git a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper_unittest.cc b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper_unittest.cc
index 7cb810b..3cb4f20 100644
--- a/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper_unittest.cc
+++ b/content/browser/renderer_host/pepper/pepper_proxy_lookup_helper_unittest.cc
@@ -40,7 +40,7 @@
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
     base::RunLoop run_loop;
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::IO},
         base::BindOnce(&PepperProxyLookupHelperTest::StartLookupOnIOThread,
                        base::Unretained(this), run_loop.QuitClosure()));
@@ -63,7 +63,7 @@
     DCHECK_CURRENTLY_ON(BrowserThread::UI);
     base::RunLoop run_loop;
 
-    base::PostTaskWithTraitsAndReply(
+    base::PostTaskAndReply(
         FROM_HERE, {BrowserThread::IO},
         base::BindOnce(
             &PepperProxyLookupHelperTest::DestroyLookupHelperOnIOThread,
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
index 1b1e593..d1886bd7 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.cc
@@ -99,7 +99,7 @@
   // also ensures that future messages will be ignored, so the mojo pipes won't
   // be re-created, so after Close() runs, |this| can be safely deleted on the
   // IO thread.
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&PepperTCPServerSocketMessageFilter::Close, this));
 }
@@ -111,7 +111,7 @@
     case PpapiHostMsg_TCPServerSocket_Listen::ID:
     case PpapiHostMsg_TCPServerSocket_Accept::ID:
     case PpapiHostMsg_TCPServerSocket_StopListening::ID:
-      return base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::UI});
+      return base::CreateSingleThreadTaskRunner({BrowserThread::UI});
   }
   return nullptr;
 }
@@ -327,7 +327,7 @@
     return;
   }
 
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(
           &PepperTCPServerSocketMessageFilter::OnAcceptCompletedOnIOThread,
diff --git a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
index 4ba4b8e..c8892ff 100644
--- a/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.cc
@@ -112,7 +112,7 @@
   // thread to prevent the object from being deleted before this method returns.
   DCHECK(HasOneRef());
 
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(
           &PepperTCPSocketMessageFilter::SetConnectedSocketOnUIThread, this,
@@ -169,9 +169,8 @@
   // also ensures that future messages will be ignored, so the mojo pipes won't
   // be re-created, so after Close() runs, |this| can be safely deleted on the
   // IO thread.
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::UI},
-      base::BindOnce(&PepperTCPSocketMessageFilter::Close, this));
+  base::PostTask(FROM_HERE, {BrowserThread::UI},
+                 base::BindOnce(&PepperTCPSocketMessageFilter::Close, this));
 }
 
 scoped_refptr<base::TaskRunner>
@@ -188,7 +187,7 @@
     case PpapiHostMsg_TCPSocket_Accept::ID:
     case PpapiHostMsg_TCPSocket_Close::ID:
     case PpapiHostMsg_TCPSocket_SetOption::ID:
-      return base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::UI});
+      return base::CreateSingleThreadTaskRunner({BrowserThread::UI});
   }
   return nullptr;
 }
@@ -220,7 +219,7 @@
 }
 
 void PepperTCPSocketMessageFilter::OnThrottleStateChanged(bool is_throttled) {
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(
           &PepperTCPSocketMessageFilter::ThrottleStateChangedOnUIThread, this,
@@ -1118,7 +1117,7 @@
   // already.
   DCHECK(success);
 
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&PepperTCPSocketMessageFilter::OnAcceptCompletedOnIOThread,
                      this, context, connected_socket.PassInterface(),
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc b/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc
index 4d5cabb..5267cdd 100644
--- a/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_host.cc
@@ -30,8 +30,8 @@
   font_ = PepperTrueTypeFont::Create();
   // Initialize the font on a ThreadPool thread. This must complete before
   // using |font_|.
-  task_runner_ = base::CreateSequencedTaskRunnerWithTraits(
-      {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
+  task_runner_ = base::CreateSequencedTaskRunner(
+      {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT});
   SerializedTrueTypeFontDesc* actual_desc =
       new SerializedTrueTypeFontDesc(desc);
   base::PostTaskAndReplyWithResult(
diff --git a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
index 22330fbcd..c177f98f 100644
--- a/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
+++ b/content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.cc
@@ -133,9 +133,8 @@
   // that future messages will be ignored, so the mojo pipes won't be
   // re-created, so after Close() runs, |this| can be safely deleted on the IO
   // thread.
-  base::PostTaskWithTraits(
-      FROM_HERE, {BrowserThread::UI},
-      base::BindOnce(&PepperUDPSocketMessageFilter::Close, this));
+  base::PostTask(FROM_HERE, {BrowserThread::UI},
+                 base::BindOnce(&PepperUDPSocketMessageFilter::Close, this));
 }
 
 scoped_refptr<base::TaskRunner>
@@ -149,7 +148,7 @@
     case PpapiHostMsg_UDPSocket_SendTo::ID:
     case PpapiHostMsg_UDPSocket_JoinGroup::ID:
     case PpapiHostMsg_UDPSocket_LeaveGroup::ID:
-      return base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::UI});
+      return base::CreateSingleThreadTaskRunner({BrowserThread::UI});
   }
   return nullptr;
 }
@@ -720,7 +719,7 @@
     const PP_NetAddress_Private& addr) {
   // Unlike SendReply, which is safe to call on any thread, SendUnsolicitedReply
   // calls are only safe to make on the IO thread.
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(
           &PepperUDPSocketMessageFilter::SendRecvFromResultOnIOThread, this,
diff --git a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc b/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc
index 6537ea3..c779db8 100644
--- a/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc
+++ b/content/browser/renderer_host/pepper/pepper_vpn_provider_message_filter_chromeos.cc
@@ -96,7 +96,7 @@
     case PpapiHostMsg_VpnProvider_Bind::ID:
     case PpapiHostMsg_VpnProvider_SendPacket::ID:
     case PpapiHostMsg_VpnProvider_OnPacketReceivedReply::ID:
-      return base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::UI});
+      return base::CreateSingleThreadTaskRunner({BrowserThread::UI});
   }
   return nullptr;
 }
diff --git a/content/browser/renderer_host/pepper/quota_reservation.cc b/content/browser/renderer_host/pepper/quota_reservation.cc
index 72f6123..fda5455 100644
--- a/content/browser/renderer_host/pepper/quota_reservation.cc
+++ b/content/browser/renderer_host/pepper/quota_reservation.cc
@@ -121,7 +121,7 @@
     file_sizes[it->first] = it->second->GetMaxWrittenOffset();
 
   if (file_system_context_.get()) {
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::IO},
         base::BindOnce(callback, quota_reservation_->remaining_quota(),
                        file_sizes));
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 3e7aada4..bd8c5ee 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1498,8 +1498,9 @@
     const SkBitmap& bitmap) {
   JNIEnv* env = base::android::AttachCurrentThread();
   if (!bitmap.drawsNothing()) {
-    auto task_runner = base::CreateSequencedTaskRunnerWithTraits(
-        {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
+    auto task_runner = base::CreateSequencedTaskRunner(
+        {base::ThreadPool(), base::MayBlock(),
+         base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
     base::PostTaskAndReplyWithResult(
         task_runner.get(), FROM_HERE,
         base::BindOnce(&CompressAndSaveBitmap, path, bitmap),
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index 8eda400..ad912e4 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -1233,8 +1233,8 @@
 
   // Let |guest_rwhv_weak| have a chance to delete itself.
   base::RunLoop run_loop;
-  base::PostTaskWithTraits(FROM_HERE, {content::BrowserThread::UI},
-                           run_loop.QuitClosure());
+  base::PostTask(FROM_HERE, {content::BrowserThread::UI},
+                 run_loop.QuitClosure());
   run_loop.Run();
 
   ASSERT_FALSE(guest_rwhv_weak.get());
diff --git a/content/browser/renderer_host/web_database_host_impl.cc b/content/browser/renderer_host/web_database_host_impl.cc
index b9ecdcfc..6bdea460 100644
--- a/content/browser/renderer_host/web_database_host_impl.cc
+++ b/content/browser/renderer_host/web_database_host_impl.cc
@@ -446,7 +446,7 @@
   if (!database_provider_) {
     // The interface binding needs to occur on the UI thread, as we can
     // only call RenderProcessHost::FromID() on the UI thread.
-    base::PostTaskWithTraits(
+    base::PostTask(
         FROM_HERE, {BrowserThread::UI},
         base::BindOnce(
             [](int process_id,
@@ -469,7 +469,7 @@
     return;
   }
 
-  base::PostTaskWithTraits(
+  base::PostTask(
       FROM_HERE, {BrowserThread::UI},
       base::BindOnce(&ValidateOriginOnUIThread, process_id_, origin,
                      base::RetainedRef(db_tracker_->task_runner()),
diff --git a/content/browser/renderer_interface_binders.cc b/content/browser/renderer_interface_binders.cc
index 8671f63..798e4f17 100644
--- a/content/browser/renderer_interface_binders.cc
+++ b/content/browser/renderer_interface_binders.cc
@@ -30,7 +30,7 @@
 #include "content/public/browser/render_process_host.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
-#include "media/mojo/interfaces/video_decode_perf_history.mojom.h"
+#include "media/mojo/mojom/video_decode_perf_history.mojom.h"
 #include "media/mojo/services/video_decode_perf_history.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "services/device/public/mojom/constants.mojom.h"
diff --git a/content/browser/scheduler/responsiveness/jank_monitor_unittest.cc b/content/browser/scheduler/responsiveness/jank_monitor_unittest.cc
index b8d57cb..a9d80f5 100644
--- a/content/browser/scheduler/responsiveness/jank_monitor_unittest.cc
+++ b/content/browser/scheduler/responsiveness/jank_monitor_unittest.cc
@@ -91,7 +91,7 @@
  public:
   JankMonitorTest()
       : test_browser_thread_bundle_(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {}
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
   ~JankMonitorTest() override {}
 
   void SetUp() override {
diff --git a/content/browser/service_manager/service_manager_context.cc b/content/browser/service_manager/service_manager_context.cc
index c12f40db..e0ef0f8b 100644
--- a/content/browser/service_manager/service_manager_context.cc
+++ b/content/browser/service_manager/service_manager_context.cc
@@ -53,7 +53,7 @@
 #include "media/audio/audio_manager.h"
 #include "media/media_buildflags.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/constants.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
 #include "mojo/public/cpp/system/invitation.h"
@@ -364,9 +364,6 @@
                                 std::move(*receiver));
     return;
   }
-
-  GetContentClient()->browser()->RunServiceInstanceOnIOThread(identity,
-                                                              receiver);
 }
 
 // A ServiceProcessHost implementation which uses the Service Manager's builtin
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index a92bb267..e66e469 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -3680,18 +3680,6 @@
 
   // ContentBrowserClient overrides:
   std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
-  CreateURLLoaderThrottlesOnIO(
-      const network::ResourceRequest& request,
-      ResourceContext* resource_context,
-      const base::RepeatingCallback<WebContents*()>& wc_getter,
-      NavigationUIData* navigation_ui_data,
-      int frame_tree_node_id) override {
-    return CreateURLLoaderThrottles(request, /*browser_context=*/nullptr,
-                                    wc_getter, navigation_ui_data,
-                                    frame_tree_node_id);
-  }
-
-  std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
   CreateURLLoaderThrottles(
       const network::ResourceRequest& request,
       BrowserContext* browser_context,
diff --git a/content/browser/service_worker/service_worker_job_unittest.cc b/content/browser/service_worker/service_worker_job_unittest.cc
index 8a0009c..24d9e98 100644
--- a/content/browser/service_worker/service_worker_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_job_unittest.cc
@@ -1074,11 +1074,11 @@
   client->UpdateUrls(in_scope, in_scope);
 
   // Make an in-scope reserved client.
-  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  std::unique_ptr<ServiceWorkerProviderHostAndInfo> host_and_info =
+      CreateProviderHostAndInfoForWindow(helper_->context()->AsWeakPtr(),
+                                         /*are_ancestors_secure=*/true);
   base::WeakPtr<ServiceWorkerProviderHost> reserved_client =
-      ServiceWorkerProviderHost::PreCreateNavigationHost(
-          helper_->context()->AsWeakPtr(), true /* are_ancestors_secure */,
-          FrameTreeNode::kFrameTreeNodeInvalidId, &provider_info);
+      std::move(host_and_info->host);
   reserved_client->UpdateUrls(in_scope, in_scope);
 
   // Make an out-scope client.
diff --git a/content/browser/service_worker/service_worker_navigation_handle.h b/content/browser/service_worker/service_worker_navigation_handle.h
index 20588a4..3f4cf29e 100644
--- a/content/browser/service_worker/service_worker_navigation_handle.h
+++ b/content/browser/service_worker/service_worker_navigation_handle.h
@@ -77,6 +77,8 @@
     return std::move(provider_info_);
   }
 
+  bool has_provider_info() const { return !!provider_info_; }
+
   ServiceWorkerNavigationHandleCore* core() const { return core_; }
 
   const ServiceWorkerContextWrapper* context_wrapper() const {
diff --git a/content/browser/service_worker/service_worker_navigation_loader_interceptor.cc b/content/browser/service_worker/service_worker_navigation_loader_interceptor.cc
index 9edcb07..0aa99fd 100644
--- a/content/browser/service_worker/service_worker_navigation_loader_interceptor.cc
+++ b/content/browser/service_worker/service_worker_navigation_loader_interceptor.cc
@@ -29,7 +29,6 @@
 void LoaderCallbackWrapperOnIO(
     ServiceWorkerNavigationHandleCore* handle_core,
     base::WeakPtr<ServiceWorkerNavigationLoaderInterceptor> interceptor_on_ui,
-    blink::mojom::ServiceWorkerProviderInfoForClientPtr provider_info,
     NavigationLoaderInterceptor::LoaderCallback loader_callback,
     SingleRequestURLLoaderFactory::RequestHandler handler) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -40,12 +39,12 @@
         handle_core->interceptor()->MaybeCreateSubresourceLoaderParams();
   }
 
-  PostTask(FROM_HERE, {BrowserThread::UI},
-           base::BindOnce(
-               &ServiceWorkerNavigationLoaderInterceptor::LoaderCallbackWrapper,
-               interceptor_on_ui, std::move(provider_info),
-               std::move(subresource_loader_params), std::move(loader_callback),
-               std::move(handler)));
+  base::PostTask(
+      FROM_HERE, {BrowserThread::UI},
+      base::BindOnce(
+          &ServiceWorkerNavigationLoaderInterceptor::LoaderCallbackWrapper,
+          interceptor_on_ui, std::move(subresource_loader_params),
+          std::move(loader_callback), std::move(handler)));
 }
 
 void FallbackCallbackWrapperOnIO(
@@ -77,6 +76,8 @@
     base::WeakPtr<ServiceWorkerNavigationLoaderInterceptor> interceptor_on_ui,
     ServiceWorkerNavigationHandleCore* handle_core,
     const ServiceWorkerNavigationLoaderInterceptorParams& params,
+    blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request,
+    blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info,
     const network::ResourceRequest& tentative_resource_request,
     BrowserContext* browser_context,
     NavigationLoaderInterceptor::LoaderCallback loader_callback,
@@ -90,26 +91,26 @@
       handle_core->context_wrapper()->resource_context();
   if (!context_core || !resource_context) {
     LoaderCallbackWrapperOnIO(handle_core, std::move(interceptor_on_ui),
-                              /*provider_info=*/nullptr,
                               std::move(loader_callback),
                               /*handler=*/{});
     return;
   }
 
-  blink::mojom::ServiceWorkerProviderInfoForClientPtr provider_info;
-  base::WeakPtr<ServiceWorkerProviderHost> provider_host;
-
   if (!handle_core->provider_host()) {
     // This is the initial request before redirects, so make the provider host.
-    // Its lifetime is tied to |provider_info| which will be passed to the
-    // ServiceWorkerNavigationHandle on the UI thread, and finally passed to the
-    // renderer when the navigation commits.
-    provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+    // Its lifetime is tied to the |provider_info| in the
+    // ServiceWorkerNavigationHandle on the UI thread and which will be passed
+    // to the renderer when the navigation commits.
+    DCHECK(host_request);
+    DCHECK(client_ptr_info);
+    base::WeakPtr<ServiceWorkerProviderHost> provider_host;
+
     if (params.resource_type == ResourceType::kMainFrame ||
         params.resource_type == ResourceType::kSubFrame) {
       provider_host = ServiceWorkerProviderHost::PreCreateNavigationHost(
           context_core->AsWeakPtr(), params.are_ancestors_secure,
-          params.frame_tree_node_id, &provider_info);
+          params.frame_tree_node_id, std::move(host_request),
+          std::move(client_ptr_info));
     } else {
       DCHECK(params.resource_type == ResourceType::kWorker ||
              params.resource_type == ResourceType::kSharedWorker);
@@ -119,8 +120,9 @@
               : blink::mojom::ServiceWorkerProviderType::kForSharedWorker;
       provider_host = ServiceWorkerProviderHost::PreCreateForWebWorker(
           context_core->AsWeakPtr(), params.process_id, provider_type,
-          &provider_info);
+          std::move(host_request), std::move(client_ptr_info));
     }
+    DCHECK(provider_host);
     handle_core->set_provider_host(provider_host);
 
     // Also make the inner interceptor.
@@ -137,7 +139,6 @@
   if (initialize_provider_only) {
     handle_core->interceptor()->InitializeProvider(tentative_resource_request);
     LoaderCallbackWrapperOnIO(handle_core, interceptor_on_ui,
-                              std::move(provider_info),
                               std::move(loader_callback),
                               /*handler=*/{});
     return;
@@ -150,7 +151,7 @@
   handle_core->interceptor()->MaybeCreateLoader(
       tentative_resource_request, browser_context, resource_context,
       base::BindOnce(&LoaderCallbackWrapperOnIO, handle_core, interceptor_on_ui,
-                     std::move(provider_info), std::move(loader_callback)),
+                     std::move(loader_callback)),
       base::BindOnce(&FallbackCallbackWrapperOnIO, interceptor_on_ui,
                      std::move(fallback_callback)));
 }
@@ -182,12 +183,28 @@
   DCHECK(!resource_context);
   DCHECK(handle_);
 
+  blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request;
+  blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
+
+  // If this is the first request before redirects, a provider info has not yet
+  // been created.
+  if (!handle_->has_provider_info()) {
+    auto provider_info =
+        blink::mojom::ServiceWorkerProviderInfoForClient::New();
+    host_request = mojo::MakeRequest(&provider_info->host_ptr_info);
+    provider_info->client_request = mojo::MakeRequest(&client_ptr_info);
+    handle_->OnCreatedProviderHost(std::move(provider_info));
+  }
+
   bool initialize_provider_only = false;
+  LoaderCallback original_callback;
   if (!handle_->context_wrapper()->HasRegistrationForOrigin(
           tentative_resource_request.url.GetOrigin())) {
     // We have no registrations, so it's safe to continue the request now
-    // without hopping to IO.
-    std::move(loader_callback).Run({});
+    // without blocking on the IO thread. Give a dummy callback to the
+    // IO thread interceptor, and we'll run the original callback immediately
+    // after starting it.
+    original_callback = std::move(loader_callback);
     loader_callback =
         base::BindOnce([](SingleRequestURLLoaderFactory::RequestHandler) {});
     initialize_provider_only = true;
@@ -198,9 +215,13 @@
   base::PostTask(
       FROM_HERE, {BrowserThread::IO},
       base::BindOnce(&MaybeCreateLoaderOnIO, GetWeakPtr(), handle_->core(),
-                     params_, tentative_resource_request, browser_context,
-                     std::move(loader_callback), std::move(fallback_callback),
-                     initialize_provider_only));
+                     params_, std::move(host_request),
+                     std::move(client_ptr_info), tentative_resource_request,
+                     browser_context, std::move(loader_callback),
+                     std::move(fallback_callback), initialize_provider_only));
+
+  if (original_callback)
+    std::move(original_callback).Run({});
 }
 
 base::Optional<SubresourceLoaderParams>
@@ -210,7 +231,6 @@
 }
 
 void ServiceWorkerNavigationLoaderInterceptor::LoaderCallbackWrapper(
-    blink::mojom::ServiceWorkerProviderInfoForClientPtr provider_info,
     base::Optional<SubresourceLoaderParams> subresource_loader_params,
     LoaderCallback loader_callback,
     SingleRequestURLLoaderFactory::RequestHandler handler_on_io) {
@@ -226,11 +246,6 @@
     return;
   }
 
-  // |provider_info| is non-null if this is the first request before redirects,
-  // which makes the provider host for this navigation.
-  if (provider_info)
-    handle_->OnCreatedProviderHost(std::move(provider_info));
-
   subresource_loader_params_ = std::move(subresource_loader_params);
 
   if (!handler_on_io) {
diff --git a/content/browser/service_worker/service_worker_navigation_loader_interceptor.h b/content/browser/service_worker/service_worker_navigation_loader_interceptor.h
index a01865d..461ce03 100644
--- a/content/browser/service_worker/service_worker_navigation_loader_interceptor.h
+++ b/content/browser/service_worker/service_worker_navigation_loader_interceptor.h
@@ -71,7 +71,6 @@
 
   // These are called back from the IO thread helper functions:
   void LoaderCallbackWrapper(
-      blink::mojom::ServiceWorkerProviderInfoForClientPtr provider_info,
       base::Optional<SubresourceLoaderParams> subresource_loader_params,
       LoaderCallback loader_callback,
       SingleRequestURLLoaderFactory::RequestHandler handler_on_io);
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc
index 1193f830..20da7c8 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -146,15 +146,13 @@
     base::WeakPtr<ServiceWorkerContextCore> context,
     bool are_ancestors_secure,
     int frame_tree_node_id,
-    blink::mojom::ServiceWorkerProviderInfoForClientPtr* out_provider_info) {
+    blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request,
+    blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info) {
   DCHECK(context);
-  blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
-  (*out_provider_info)->client_request = mojo::MakeRequest(&client_ptr_info);
   auto host = base::WrapUnique(new ServiceWorkerProviderHost(
       blink::mojom::ServiceWorkerProviderType::kForWindow, are_ancestors_secure,
-      frame_tree_node_id,
-      mojo::MakeRequest(&((*out_provider_info)->host_ptr_info)),
-      std::move(client_ptr_info), context));
+      frame_tree_node_id, std::move(host_request), std::move(client_ptr_info),
+      context));
   auto weak_ptr = host->AsWeakPtr();
   RegisterToContextCore(context, std::move(host));
   return weak_ptr;
@@ -185,17 +183,15 @@
     base::WeakPtr<ServiceWorkerContextCore> context,
     int process_id,
     blink::mojom::ServiceWorkerProviderType provider_type,
-    blink::mojom::ServiceWorkerProviderInfoForClientPtr* out_provider_info) {
+    blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request,
+    blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info) {
   using ServiceWorkerProviderType = blink::mojom::ServiceWorkerProviderType;
   DCHECK((blink::features::IsPlzDedicatedWorkerEnabled() &&
           provider_type == ServiceWorkerProviderType::kForDedicatedWorker) ||
          provider_type == ServiceWorkerProviderType::kForSharedWorker);
-  blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
-  (*out_provider_info)->client_request = mojo::MakeRequest(&client_ptr_info);
   auto host = base::WrapUnique(new ServiceWorkerProviderHost(
       provider_type, true /* is_parent_frame_secure */,
-      FrameTreeNode::kFrameTreeNodeInvalidId,
-      mojo::MakeRequest(&((*out_provider_info)->host_ptr_info)),
+      FrameTreeNode::kFrameTreeNodeInvalidId, std::move(host_request),
       std::move(client_ptr_info), context));
   host->SetRenderProcessId(process_id);
 
diff --git a/content/browser/service_worker/service_worker_provider_host.h b/content/browser/service_worker/service_worker_provider_host.h
index f8dcb5e5..6eabfd63 100644
--- a/content/browser/service_worker/service_worker_provider_host.h
+++ b/content/browser/service_worker/service_worker_provider_host.h
@@ -114,15 +114,14 @@
   // id. |web_contents_getter| indicates the tab where the navigation is
   // occurring.
   //
-  // The returned host stays alive as long as the filled |out_provider_info|
-  // stays alive (namely, as long as |out_provider_info->host_ptr_info| stays
-  // alive). Upon navigation commit, OnBeginNavigationCommit() will complete
-  // initialization for it.
+  // The returned host stays alive as long as the corresponding host ptr for
+  // |host_request| stays alive.
   static base::WeakPtr<ServiceWorkerProviderHost> PreCreateNavigationHost(
       base::WeakPtr<ServiceWorkerContextCore> context,
       bool are_ancestors_secure,
       int frame_tree_node_id,
-      blink::mojom::ServiceWorkerProviderInfoForClientPtr* out_provider_info);
+      blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request,
+      blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info);
 
   // Used for starting a service worker. Returns a provider host for the service
   // worker and partially fills |out_provider_info|.  The host stays alive as
@@ -137,15 +136,14 @@
           out_provider_info);
 
   // Used for starting a web worker (dedicated worker or shared worker). Returns
-  // a provider host for the worker and fills |out_provider_info| with info to
-  // send to the renderer to connect to the host. The host stays alive as long
-  // as this info stays alive (namely, as long as
-  // |out_provider_info->host_ptr_info| stays alive).
+  // a provider host for the worker. The host stays alive as long as the
+  // corresponding host for |host_request| stays alive.
   static base::WeakPtr<ServiceWorkerProviderHost> PreCreateForWebWorker(
       base::WeakPtr<ServiceWorkerContextCore> context,
       int process_id,
       blink::mojom::ServiceWorkerProviderType provider_type,
-      blink::mojom::ServiceWorkerProviderInfoForClientPtr* out_provider_info);
+      blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request,
+      blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info);
 
   ~ServiceWorkerProviderHost() override;
 
diff --git a/content/browser/service_worker/service_worker_provider_host_unittest.cc b/content/browser/service_worker/service_worker_provider_host_unittest.cc
index c69173f..7b4e8007 100644
--- a/content/browser/service_worker/service_worker_provider_host_unittest.cc
+++ b/content/browser/service_worker/service_worker_provider_host_unittest.cc
@@ -485,13 +485,13 @@
 
 TEST_F(ServiceWorkerProviderHostTest, Controller) {
   // Create a host.
-  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  std::unique_ptr<ServiceWorkerProviderHostAndInfo> host_and_info =
+      CreateProviderHostAndInfoForWindow(helper_->context()->AsWeakPtr(),
+                                         /*are_ancestors_secure=*/true);
   base::WeakPtr<ServiceWorkerProviderHost> host =
-      ServiceWorkerProviderHost::PreCreateNavigationHost(
-          helper_->context()->AsWeakPtr(), true /* are_ancestors_secure */,
-          FrameTreeNode::kFrameTreeNodeInvalidId, &provider_info);
+      std::move(host_and_info->host);
   remote_endpoints_.emplace_back();
-  remote_endpoints_.back().BindForWindow(std::move(provider_info));
+  remote_endpoints_.back().BindForWindow(std::move(host_and_info->info));
   auto container = std::make_unique<MockServiceWorkerContainer>(
       std::move(*remote_endpoints_.back().client_request()));
 
@@ -521,13 +521,13 @@
 
 TEST_F(ServiceWorkerProviderHostTest, UncontrolledWithMatchingRegistration) {
   // Create a host.
-  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  std::unique_ptr<ServiceWorkerProviderHostAndInfo> host_and_info =
+      CreateProviderHostAndInfoForWindow(helper_->context()->AsWeakPtr(),
+                                         /*are_ancestors_secure=*/true);
   base::WeakPtr<ServiceWorkerProviderHost> host =
-      ServiceWorkerProviderHost::PreCreateNavigationHost(
-          helper_->context()->AsWeakPtr(), true /* are_ancestors_secure */,
-          FrameTreeNode::kFrameTreeNodeInvalidId, &provider_info);
+      std::move(host_and_info->host);
   remote_endpoints_.emplace_back();
-  remote_endpoints_.back().BindForWindow(std::move(provider_info));
+  remote_endpoints_.back().BindForWindow(std::move(host_and_info->info));
   auto container = std::make_unique<MockServiceWorkerContainer>(
       std::move(*remote_endpoints_.back().client_request()));
 
@@ -889,12 +889,16 @@
     blink::mojom::ServiceWorkerProviderType provider_type,
     const GURL url) {
   {
+    blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
+    blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request;
     auto provider_info =
         blink::mojom::ServiceWorkerProviderInfoForClient::New();
+    provider_info->client_request = mojo::MakeRequest(&client_ptr_info);
+    host_request = mojo::MakeRequest(&provider_info->host_ptr_info);
     base::WeakPtr<ServiceWorkerProviderHost> host =
         ServiceWorkerProviderHost::PreCreateForWebWorker(
             context_->AsWeakPtr(), helper_->mock_render_process_id(),
-            provider_type, &provider_info);
+            provider_type, std::move(host_request), std::move(client_ptr_info));
     host->UpdateUrls(url, url);
     EXPECT_FALSE(CanFindClientProviderHost(host.get()));
     host->CompleteWebWorkerPreparation();
@@ -902,14 +906,14 @@
   }
 
   {
-    auto provider_info =
-        blink::mojom::ServiceWorkerProviderInfoForClient::New();
+    std::unique_ptr<ServiceWorkerProviderHostAndInfo> host_and_info =
+        CreateProviderHostAndInfoForWindow(helper_->context()->AsWeakPtr(),
+                                           /*are_ancestors_secure=*/true);
     base::WeakPtr<ServiceWorkerProviderHost> host =
-        ServiceWorkerProviderHost::PreCreateNavigationHost(
-            helper_->context()->AsWeakPtr(), true,
-            FrameTreeNode::kFrameTreeNodeInvalidId, &provider_info);
+        std::move(host_and_info->host);
     ServiceWorkerRemoteProviderEndpoint remote_endpoint;
-    remote_endpoint.BindForWindow(std::move(provider_info));
+    remote_endpoint.BindForWindow(std::move(host_and_info->info));
+
     FinishNavigation(host.get());
     EXPECT_FALSE(CanFindClientProviderHost(host.get()));
 
@@ -938,16 +942,16 @@
 
 // Tests the client phase transitions for a navigation.
 TEST_F(ServiceWorkerProviderHostTest, ClientPhaseForWindow) {
-  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  std::unique_ptr<ServiceWorkerProviderHostAndInfo> host_and_info =
+      CreateProviderHostAndInfoForWindow(helper_->context()->AsWeakPtr(),
+                                         /*are_ancestors_secure=*/true);
   base::WeakPtr<ServiceWorkerProviderHost> host =
-      ServiceWorkerProviderHost::PreCreateNavigationHost(
-          helper_->context()->AsWeakPtr(), true,
-          FrameTreeNode::kFrameTreeNodeInvalidId, &provider_info);
+      std::move(host_and_info->host);
+  ServiceWorkerRemoteProviderEndpoint remote_endpoint;
+  remote_endpoint.BindForWindow(std::move(host_and_info->info));
   EXPECT_FALSE(host->is_response_committed());
   EXPECT_FALSE(host->is_execution_ready());
 
-  ServiceWorkerRemoteProviderEndpoint remote_endpoint;
-  remote_endpoint.BindForWindow(std::move(provider_info));
   FinishNavigation(host.get());
   EXPECT_TRUE(host->is_response_committed());
   EXPECT_FALSE(host->is_execution_ready());
@@ -964,11 +968,15 @@
 void ServiceWorkerProviderHostTest::TestClientPhaseTransition(
     blink::mojom::ServiceWorkerProviderType provider_type,
     const GURL url) {
+  blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
+  blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request;
   auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  provider_info->client_request = mojo::MakeRequest(&client_ptr_info);
+  host_request = mojo::MakeRequest(&provider_info->host_ptr_info);
   base::WeakPtr<ServiceWorkerProviderHost> host =
       ServiceWorkerProviderHost::PreCreateForWebWorker(
-          context_->AsWeakPtr(), helper_->mock_render_process_id(),
-          provider_type, &provider_info);
+          helper_->context()->AsWeakPtr(), helper_->mock_render_process_id(),
+          provider_type, std::move(host_request), std::move(client_ptr_info));
   EXPECT_FALSE(host->is_response_committed());
   EXPECT_FALSE(host->is_execution_ready());
 
diff --git a/content/browser/service_worker/service_worker_request_handler.cc b/content/browser/service_worker/service_worker_request_handler.cc
index 3f02ced..b51f6ae 100644
--- a/content/browser/service_worker/service_worker_request_handler.cc
+++ b/content/browser/service_worker/service_worker_request_handler.cc
@@ -88,11 +88,18 @@
   if (!context)
     return nullptr;
 
+  blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
+  blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request;
+
   auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  provider_info->client_request = mojo::MakeRequest(&client_ptr_info);
+  host_request = mojo::MakeRequest(&provider_info->host_ptr_info);
+
   // Initialize the SWProviderHost.
   *out_provider_host = ServiceWorkerProviderHost::PreCreateNavigationHost(
       context->AsWeakPtr(), request_info.are_ancestors_secure,
-      request_info.frame_tree_node_id, &provider_info);
+      request_info.frame_tree_node_id, std::move(host_request),
+      std::move(client_ptr_info));
   navigation_handle_core->OnCreatedProviderHost(*out_provider_host,
                                                 std::move(provider_info));
 
@@ -149,7 +156,6 @@
     return nullptr;
   }
 
-  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
   if (!navigation_handle_core->context_wrapper())
     return nullptr;
   ServiceWorkerContextCore* context =
@@ -173,10 +179,18 @@
       return nullptr;
   }
 
+  blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
+  blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request;
+
+  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  provider_info->client_request = mojo::MakeRequest(&client_ptr_info);
+  host_request = mojo::MakeRequest(&provider_info->host_ptr_info);
+
   // Initialize the SWProviderHost.
   base::WeakPtr<ServiceWorkerProviderHost> host =
       ServiceWorkerProviderHost::PreCreateForWebWorker(
-          context->AsWeakPtr(), process_id, provider_type, &provider_info);
+          context->AsWeakPtr(), process_id, provider_type,
+          std::move(host_request), std::move(client_ptr_info));
   navigation_handle_core->OnCreatedProviderHost(host, std::move(provider_info));
 
   return std::make_unique<ServiceWorkerControlleeRequestHandler>(
diff --git a/content/browser/service_worker/service_worker_test_utils.cc b/content/browser/service_worker/service_worker_test_utils.cc
index 360e86f..08d5c1e 100644
--- a/content/browser/service_worker/service_worker_test_utils.cc
+++ b/content/browser/service_worker/service_worker_test_utils.cc
@@ -238,17 +238,23 @@
   host_ptr_.Bind(std::move(info->host_ptr_info));
 }
 
+ServiceWorkerProviderHostAndInfo::ServiceWorkerProviderHostAndInfo(
+    base::WeakPtr<ServiceWorkerProviderHost> host,
+    blink::mojom::ServiceWorkerProviderInfoForClientPtr info)
+    : host(std::move(host)), info(std::move(info)) {}
+
+ServiceWorkerProviderHostAndInfo::~ServiceWorkerProviderHostAndInfo() = default;
+
 base::WeakPtr<ServiceWorkerProviderHost> CreateProviderHostForWindow(
     int process_id,
     bool is_parent_frame_secure,
     base::WeakPtr<ServiceWorkerContextCore> context,
     ServiceWorkerRemoteProviderEndpoint* output_endpoint) {
-  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  std::unique_ptr<ServiceWorkerProviderHostAndInfo> host_and_info =
+      CreateProviderHostAndInfoForWindow(context, is_parent_frame_secure);
   base::WeakPtr<ServiceWorkerProviderHost> host =
-      ServiceWorkerProviderHost::PreCreateNavigationHost(
-          context, is_parent_frame_secure,
-          FrameTreeNode::kFrameTreeNodeInvalidId, &provider_info);
-  output_endpoint->BindForWindow(std::move(provider_info));
+      std::move(host_and_info->host);
+  output_endpoint->BindForWindow(std::move(host_and_info->info));
 
   // In production code this is called from NavigationRequest in the browser
   // process right before navigation commit.
@@ -256,6 +262,22 @@
   return host;
 }
 
+std::unique_ptr<ServiceWorkerProviderHostAndInfo>
+CreateProviderHostAndInfoForWindow(
+    base::WeakPtr<ServiceWorkerContextCore> context,
+    bool are_ancestors_secure) {
+  blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
+  blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request;
+  auto info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  info->client_request = mojo::MakeRequest(&client_ptr_info);
+  host_request = mojo::MakeRequest(&(info->host_ptr_info));
+  return std::make_unique<ServiceWorkerProviderHostAndInfo>(
+      ServiceWorkerProviderHost::PreCreateNavigationHost(
+          context, are_ancestors_secure, FrameTreeNode::kFrameTreeNodeInvalidId,
+          std::move(host_request), std::move(client_ptr_info)),
+      std::move(info));
+}
+
 base::OnceCallback<void(blink::ServiceWorkerStatusCode)>
 ReceiveServiceWorkerStatus(base::Optional<blink::ServiceWorkerStatusCode>* out,
                            base::OnceClosure quit_closure) {
diff --git a/content/browser/service_worker/service_worker_test_utils.h b/content/browser/service_worker/service_worker_test_utils.h
index aeabf90..4171f3f 100644
--- a/content/browser/service_worker/service_worker_test_utils.h
+++ b/content/browser/service_worker/service_worker_test_utils.h
@@ -100,12 +100,33 @@
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRemoteProviderEndpoint);
 };
 
+struct ServiceWorkerProviderHostAndInfo {
+  ServiceWorkerProviderHostAndInfo(
+      base::WeakPtr<ServiceWorkerProviderHost> host,
+      blink::mojom::ServiceWorkerProviderInfoForClientPtr);
+  ~ServiceWorkerProviderHostAndInfo();
+
+  base::WeakPtr<ServiceWorkerProviderHost> host;
+  blink::mojom::ServiceWorkerProviderInfoForClientPtr info;
+
+  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHostAndInfo);
+};
+
+// Creates a provider host that finished navigation. Test code can typically use
+// this function, but if more control is required
+// CreateProviderHostAndInfoForWindow() can be used instead.
 base::WeakPtr<ServiceWorkerProviderHost> CreateProviderHostForWindow(
     int process_id,
     bool is_parent_frame_secure,
     base::WeakPtr<ServiceWorkerContextCore> context,
     ServiceWorkerRemoteProviderEndpoint* output_endpoint);
 
+// Creates a provider host that can be used for a navigation.
+std::unique_ptr<ServiceWorkerProviderHostAndInfo>
+CreateProviderHostAndInfoForWindow(
+    base::WeakPtr<ServiceWorkerContextCore> context,
+    bool are_ancestors_secure);
+
 base::WeakPtr<ServiceWorkerProviderHost>
 CreateProviderHostForServiceWorkerContext(
     int process_id,
diff --git a/content/browser/service_worker/service_worker_version_unittest.cc b/content/browser/service_worker/service_worker_version_unittest.cc
index c6d8d9f..45dcada 100644
--- a/content/browser/service_worker/service_worker_version_unittest.cc
+++ b/content/browser/service_worker/service_worker_version_unittest.cc
@@ -1263,18 +1263,19 @@
       0,
       helper_->mock_render_process_host()->foreground_service_worker_count());
 
+  version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
+  registration_->SetActiveVersion(version_);
+
   // Add a controllee, but don't begin the navigation commit yet.  This will
   // cause the client to have an invalid process id like we see in real
   // navigations.
-  version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
-  registration_->SetActiveVersion(version_);
   ServiceWorkerRemoteProviderEndpoint remote_endpoint;
-  auto provider_info = blink::mojom::ServiceWorkerProviderInfoForClient::New();
+  std::unique_ptr<ServiceWorkerProviderHostAndInfo> host_and_info =
+      CreateProviderHostAndInfoForWindow(helper_->context()->AsWeakPtr(),
+                                         /*are_ancestors_secure=*/true);
   base::WeakPtr<ServiceWorkerProviderHost> host =
-      ServiceWorkerProviderHost::PreCreateNavigationHost(
-          helper_->context()->AsWeakPtr(), true /* is_parent_frame_secure */,
-          FrameTreeNode::kFrameTreeNodeInvalidId, &provider_info);
-  remote_endpoint.BindForWindow(std::move(provider_info));
+      std::move(host_and_info->host);
+  remote_endpoint.BindForWindow(std::move(host_and_info->info));
   host->UpdateUrls(registration_->scope(), registration_->scope());
   host->SetControllerRegistration(registration_,
                                   false /* notify_controllerchange */);
diff --git a/content/browser/speech/speech_recognizer_impl.cc b/content/browser/speech/speech_recognizer_impl.cc
index 2216a4e6..ac501d6 100644
--- a/content/browser/speech/speech_recognizer_impl.cc
+++ b/content/browser/speech/speech_recognizer_impl.cc
@@ -22,7 +22,7 @@
 #include "content/public/browser/speech_recognition_event_listener.h"
 #include "media/audio/audio_system.h"
 #include "media/base/audio_converter.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "services/audio/public/cpp/audio_system_factory.h"
 #include "services/audio/public/cpp/device_factory.h"
 #include "services/service_manager/public/mojom/connector.mojom.h"
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 8893afd..6eb306c8 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -594,7 +594,7 @@
   ui::NativeTheme* native_theme = ui::NativeTheme::GetInstanceForWeb();
   native_theme_observer_.Add(native_theme);
   in_high_contrast_ = native_theme->UsesHighContrastColors();
-  in_dark_mode_ = native_theme->SystemDarkModeEnabled();
+  using_dark_colors_ = native_theme->ShouldUseDarkColors();
   preferred_color_scheme_ = native_theme->GetPreferredColorScheme();
 }
 
@@ -1452,14 +1452,26 @@
   }
 
   if (GetVisibility() != Visibility::VISIBLE && !was_captured) {
-    // Ensure that all views act as if they were visible before capture begins.
-    // TODO(fdoray): Replace RenderWidgetHostView::WasUnOccluded() with a method
-    // to explicitly notify the RenderWidgetHostView that capture began.
-    // https://crbug.com/668690
-    if (auto* main_view = GetRenderWidgetHostView())
-      main_view->WasUnOccluded();
+    // TODO: Share code with WasShown().
+    SendPageMessage(new PageMsg_WasShown(MSG_ROUTING_NONE));
+
+    if (auto* view = GetRenderWidgetHostView()) {
+      view->Show();
+#if defined(OS_MACOSX)
+      view->SetActive(true);
+#endif
+    }
+
     if (!ShowingInterstitialPage())
       SetVisibilityForChildViews(true);
+
+    for (FrameTreeNode* node : frame_tree_.Nodes()) {
+      RenderFrameProxyHost* parent = node->render_manager()->GetProxyToParent();
+      if (!parent)
+        continue;
+
+      parent->cross_process_frame_connector()->DelegateWasShown();
+    }
   }
 }
 
@@ -7239,14 +7251,14 @@
 void WebContentsImpl::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) {
   DCHECK(native_theme_observer_.IsObserving(observed_theme));
 
-  bool in_dark_mode = observed_theme->SystemDarkModeEnabled();
+  bool using_dark_colors = observed_theme->ShouldUseDarkColors();
   bool in_high_contrast = observed_theme->UsesHighContrastColors();
   ui::NativeTheme::PreferredColorScheme preferred_color_scheme =
       observed_theme->GetPreferredColorScheme();
   bool preferences_changed = false;
 
-  if (in_dark_mode_ != in_dark_mode) {
-    in_dark_mode_ = in_dark_mode;
+  if (using_dark_colors_ != using_dark_colors) {
+    using_dark_colors_ = using_dark_colors;
     preferences_changed = true;
   }
   if (in_high_contrast_ != in_high_contrast) {
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index b940dec4..7d23b840 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -1921,7 +1921,7 @@
       native_theme_observer_;
 
   bool in_high_contrast_ = false;
-  bool in_dark_mode_ = false;
+  bool using_dark_colors_ = false;
   ui::NativeTheme::PreferredColorScheme preferred_color_scheme_ =
       ui::NativeTheme::PreferredColorScheme::kNoPreference;
 
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index 7d3ca62..f1bcb7f 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -3029,7 +3029,10 @@
 
   // Navigate the main RenderFrame and commit. The frame should still be
   // loading.
-  NavigationSimulator::NavigateAndCommitFromBrowser(contents(), main_url);
+  auto main_frame_navigation =
+      NavigationSimulatorImpl::CreateBrowserInitiated(main_url, contents());
+  main_frame_navigation->SetKeepLoading(true);
+  main_frame_navigation->Commit();
   EXPECT_FALSE(contents()->CrossProcessNavigationPending());
   EXPECT_EQ(orig_rfh, main_test_rfh());
   EXPECT_TRUE(contents()->IsLoading());
@@ -3044,18 +3047,11 @@
 
   // Navigate the child frame to about:blank, which will send DidStopLoading
   // message.
-  {
-    NavigationSimulator::NavigateAndCommitFromDocument(initial_url, subframe);
-    subframe->OnMessageReceived(
-        FrameHostMsg_DidStopLoading(subframe->GetRoutingID()));
-  }
+  NavigationSimulator::NavigateAndCommitFromDocument(initial_url, subframe);
 
   // Navigate the frame to another URL, which will send again
   // DidStartLoading and DidStopLoading messages.
-  subframe = static_cast<TestRenderFrameHost*>(
-      NavigationSimulator::NavigateAndCommitFromDocument(foo_url, subframe));
-  subframe->OnMessageReceived(
-      FrameHostMsg_DidStopLoading(subframe->GetRoutingID()));
+  NavigationSimulator::NavigateAndCommitFromDocument(foo_url, subframe);
 
   // Since the main frame hasn't sent any DidStopLoading messages, it is
   // expected that the WebContents is still in loading state.
@@ -3085,9 +3081,6 @@
     navigation->Commit();
     subframe = static_cast<TestRenderFrameHost*>(
         navigation->GetFinalRenderFrameHost());
-
-    subframe->OnMessageReceived(
-        FrameHostMsg_DidStopLoading(subframe->GetRoutingID()));
   }
 
   // At this point the status should still be loading, since the main frame
@@ -3098,8 +3091,7 @@
 
   // Send the DidStopLoading for the main frame and ensure it isn't loading
   // anymore.
-  orig_rfh->OnMessageReceived(
-      FrameHostMsg_DidStopLoading(orig_rfh->GetRoutingID()));
+  main_frame_navigation->StopLoading();
   EXPECT_FALSE(contents()->IsLoading());
   EXPECT_FALSE(observer.is_loading());
   EXPECT_FALSE(observer.did_receive_response());
@@ -3114,7 +3106,10 @@
 
   // Navigate the main RenderFrame and commit. The frame should still be
   // loading.
-  NavigationSimulator::NavigateAndCommitFromBrowser(contents(), main_url);
+  auto navigation =
+      NavigationSimulatorImpl::CreateBrowserInitiated(main_url, contents());
+  navigation->SetKeepLoading(true);
+  navigation->Commit();
   EXPECT_FALSE(contents()->CrossProcessNavigationPending());
   EXPECT_EQ(orig_rfh, main_test_rfh());
   EXPECT_TRUE(contents()->IsLoading());
@@ -3122,8 +3117,7 @@
 
   // Send the DidStopLoading for the main frame and ensure it isn't loading
   // anymore.
-  orig_rfh->OnMessageReceived(
-      FrameHostMsg_DidStopLoading(orig_rfh->GetRoutingID()));
+  navigation->StopLoading();
   EXPECT_FALSE(contents()->IsLoading());
   EXPECT_FALSE(contents()->IsLoadingToDifferentDocument());
 
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index 9bf849b9..dda92e4 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -1261,9 +1261,6 @@
     return;
   }
 
-  if (drag_dest_delegate_)
-    drag_dest_delegate_->DragInitialize(web_contents_);
-
   DCHECK(transformed_pt.has_value());
   gfx::PointF screen_pt(display::Screen::GetScreen()->GetCursorScreenPoint());
   current_rwh_for_drag_->DragTargetDragEnter(
@@ -1285,6 +1282,7 @@
   PrepareDropData(drop_data.get(), event.data());
 
   if (drag_dest_delegate_) {
+    drag_dest_delegate_->DragInitialize(web_contents_);
     drag_dest_delegate_->OnReceiveDragData(event.data());
   }
 
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h
index 9be20d5..ed3c8d86 100644
--- a/content/browser/web_contents/web_contents_view_aura.h
+++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -226,6 +226,10 @@
                               bool drop_allowed)>;
   void RegisterDropCallbackForTesting(DropCallbackForTesting callback);
 
+  void SetDragDestDelegateForTesting(WebDragDestDelegate* delegate) {
+    drag_dest_delegate_ = delegate;
+  }
+
 #if defined(OS_WIN)
   // Callback for asynchronous retrieval of virtual files.
   void OnGotVirtualFilesAsTempFiles(
diff --git a/content/browser/web_contents/web_contents_view_aura_browsertest.cc b/content/browser/web_contents/web_contents_view_aura_browsertest.cc
index c797b45..3e0aa35 100644
--- a/content/browser/web_contents/web_contents_view_aura_browsertest.cc
+++ b/content/browser/web_contents/web_contents_view_aura_browsertest.cc
@@ -34,6 +34,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/web_contents_observer.h"
+#include "content/public/browser/web_drag_dest_delegate.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/content_browser_test.h"
@@ -244,6 +245,24 @@
   void StopObserveringFrames() { frame_observer_.reset(); }
 
  protected:
+  class MockWebDragDestDelegate : public WebDragDestDelegate {
+   public:
+    void DragInitialize(WebContents* contents) override {
+      drag_initialize_called_ = true;
+    }
+    void OnDragOver() override {}
+    void OnDragEnter() override {}
+    void OnDrop() override {}
+    void OnDragLeave() override {}
+    void OnReceiveDragData(const ui::OSExchangeData& data) override {}
+
+    void Reset() { drag_initialize_called_ = false; }
+    bool GetDragInitializeCalled() { return drag_initialize_called_; }
+
+   private:
+    bool drag_initialize_called_ = false;
+  };
+
   // ContentBrowserTest:
   void PostRunTestOnMainThread() override {
     // Delete this before the WebContents is destroyed.
@@ -256,6 +275,8 @@
   // A closure indicating that async drop operation has completed.
   base::OnceClosure async_drop_closure_;
 
+  MockWebDragDestDelegate drag_dest_delegate_;
+
  private:
   std::unique_ptr<RenderFrameSubmissionObserver> frame_observer_;
 
@@ -279,10 +300,10 @@
 // On Linux, the test frequently times out. (See crbug.com/440043).
 #if defined(OS_WIN) || defined(OS_LINUX)
 #define MAYBE_OverscrollNavigationWithTouchHandler \
-        DISABLED_OverscrollNavigationWithTouchHandler
+  DISABLED_OverscrollNavigationWithTouchHandler
 #else
 #define MAYBE_OverscrollNavigationWithTouchHandler \
-        OverscrollNavigationWithTouchHandler
+  OverscrollNavigationWithTouchHandler
 #endif
 IN_PROC_BROWSER_TEST_F(WebContentsViewAuraTest,
                        MAYBE_OverscrollNavigationWithTouchHandler) {
@@ -394,7 +415,7 @@
 // Flaky on CrOS as well: https://crbug.com/856079
 #if defined(OS_WIN) || defined(OS_CHROMEOS)
 #define MAYBE_QuickOverscrollDirectionChange \
-        DISABLED_QuickOverscrollDirectionChange
+  DISABLED_QuickOverscrollDirectionChange
 #else
 #define MAYBE_QuickOverscrollDirectionChange QuickOverscrollDirectionChange
 #endif
@@ -523,8 +544,11 @@
   WebContentsViewAura* view =
       static_cast<WebContentsViewAura*>(contents->GetView());
 
+  view->SetDragDestDelegateForTesting(&drag_dest_delegate_);
+
   // Drop on the root frame.
   {
+    drag_dest_delegate_.Reset();
     std::unique_ptr<ui::OSExchangeData> data =
         std::make_unique<ui::OSExchangeData>();
     view->RegisterDropCallbackForTesting(base::BindOnce(
@@ -536,6 +560,7 @@
     ui::DropTargetEvent event(*data.get(), point, point,
                               ui::DragDropTypes::DRAG_COPY);
     view->OnDragEntered(event);
+    EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled());
     view->OnPerformDrop(event, std::move(data));
 
     run_loop.Run();
@@ -548,6 +573,7 @@
   }
   // Drop on the element in the root frame overlapping the embedded OOPIF.
   {
+    drag_dest_delegate_.Reset();
     std::unique_ptr<ui::OSExchangeData> data =
         std::make_unique<ui::OSExchangeData>();
     view->RegisterDropCallbackForTesting(base::BindOnce(
@@ -567,6 +593,7 @@
     ui::DropTargetEvent event(*data.get(), point, point,
                               ui::DragDropTypes::DRAG_COPY);
     view->OnDragEntered(event);
+    EXPECT_TRUE(drag_dest_delegate_.GetDragInitializeCalled());
     view->OnPerformDrop(event, std::move(data));
 
     run_loop.Run();
diff --git a/content/browser/web_package/bundled_exchanges_reader.cc b/content/browser/web_package/bundled_exchanges_reader.cc
index a2f3692..3089625 100644
--- a/content/browser/web_package/bundled_exchanges_reader.cc
+++ b/content/browser/web_package/bundled_exchanges_reader.cc
@@ -137,7 +137,10 @@
 
 BundledExchangesReader::BundledExchangesReader(
     const BundledExchangesSource& source)
-    : file_(base::MakeRefCounted<SharedFile>(source.file_path)) {}
+    : parser_(ServiceManagerConnection::GetForProcess()
+                  ? ServiceManagerConnection::GetForProcess()->GetConnector()
+                  : nullptr),
+      file_(base::MakeRefCounted<SharedFile>(source.file_path)) {}
 
 BundledExchangesReader::~BundledExchangesReader() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -202,8 +205,7 @@
 }
 
 void BundledExchangesReader::SetBundledExchangesParserFactoryForTesting(
-    std::unique_ptr<data_decoder::mojom::BundledExchangesParserFactory>
-        factory) {
+    mojo::Remote<data_decoder::mojom::BundledExchangesParserFactory> factory) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   parser_.SetBundledExchangesParserFactoryForTesting(std::move(factory));
@@ -211,15 +213,17 @@
 
 void BundledExchangesReader::ReadMetadataInternal(MetadataCallback callback,
                                                   base::File file) {
-  parser_.OpenFile(
-      ServiceManagerConnection::GetForProcess()
-          ? ServiceManagerConnection::GetForProcess()->GetConnector()
-          : nullptr,
-      std::move(file));
-
-  parser_.ParseMetadata(
-      base::BindOnce(&BundledExchangesReader::OnMetadataParsed,
-                     base::Unretained(this), std::move(callback)));
+  base::File::Error error = parser_.OpenFile(std::move(file));
+  if (base::File::FILE_OK != error) {
+    PostTask(FROM_HERE,
+             base::BindOnce(std::move(callback),
+                            data_decoder::mojom::BundleMetadataParseError::New(
+                                base::File::ErrorToString(error))));
+  } else {
+    parser_.ParseMetadata(
+        base::BindOnce(&BundledExchangesReader::OnMetadataParsed,
+                       base::Unretained(this), std::move(callback)));
+  }
 }
 
 void BundledExchangesReader::OnMetadataParsed(
diff --git a/content/browser/web_package/bundled_exchanges_reader.h b/content/browser/web_package/bundled_exchanges_reader.h
index 82474737..92d90911 100644
--- a/content/browser/web_package/bundled_exchanges_reader.h
+++ b/content/browser/web_package/bundled_exchanges_reader.h
@@ -68,8 +68,7 @@
   const GURL& GetStartURL() const;
 
   void SetBundledExchangesParserFactoryForTesting(
-      std::unique_ptr<data_decoder::mojom::BundledExchangesParserFactory>
-          factory);
+      mojo::Remote<data_decoder::mojom::BundledExchangesParserFactory> factory);
 
  private:
   // A simple wrapper class to share a single base::File instance among multiple
diff --git a/content/browser/web_package/bundled_exchanges_reader_unittest.cc b/content/browser/web_package/bundled_exchanges_reader_unittest.cc
index 14a74d4..d01ba71 100644
--- a/content/browser/web_package/bundled_exchanges_reader_unittest.cc
+++ b/content/browser/web_package/bundled_exchanges_reader_unittest.cc
@@ -15,6 +15,10 @@
 #include "base/test/scoped_task_environment.h"
 #include "content/browser/web_package/bundled_exchanges_source.h"
 #include "mojo/public/c/system/data_pipe.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "services/data_decoder/public/mojom/bundled_exchanges_parser.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -133,7 +137,10 @@
     std::unique_ptr<MockParserFactory> factory =
         std::make_unique<MockParserFactory>();
     factory_ = factory.get();
-    reader_->SetBundledExchangesParserFactoryForTesting(std::move(factory));
+    mojo::Remote<data_decoder::mojom::BundledExchangesParserFactory> remote;
+    mojo::MakeSelfOwnedReceiver(std::move(factory),
+                                remote.BindNewPipeAndPassReceiver());
+    reader_->SetBundledExchangesParserFactoryForTesting(std::move(remote));
   }
 
  protected:
diff --git a/content/browser/worker_host/shared_worker_host_unittest.cc b/content/browser/worker_host/shared_worker_host_unittest.cc
index 221e4f4..f119850 100644
--- a/content/browser/worker_host/shared_worker_host_unittest.cc
+++ b/content/browser/worker_host/shared_worker_host_unittest.cc
@@ -95,13 +95,17 @@
     auto service_worker_handle =
         std::make_unique<ServiceWorkerNavigationHandle>(
             helper_->context_wrapper());
+    blink::mojom::ServiceWorkerContainerAssociatedPtrInfo client_ptr_info;
+    blink::mojom::ServiceWorkerContainerHostAssociatedRequest host_request;
     auto provider_info =
         blink::mojom::ServiceWorkerProviderInfoForClient::New();
+    provider_info->client_request = mojo::MakeRequest(&client_ptr_info);
+    host_request = mojo::MakeRequest(&provider_info->host_ptr_info);
     base::WeakPtr<ServiceWorkerProviderHost> service_worker_host =
         ServiceWorkerProviderHost::PreCreateForWebWorker(
             helper_->context()->AsWeakPtr(), mock_render_process_host_.GetID(),
             blink::mojom::ServiceWorkerProviderType::kForSharedWorker,
-            &provider_info);
+            std::move(host_request), std::move(client_ptr_info));
     service_worker_handle->OnCreatedProviderHost(std::move(provider_info));
     host->SetServiceWorkerHandle(std::move(service_worker_handle));
 
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index d82ee95..68cda70 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -545,6 +545,9 @@
 
   if (base::FeatureList::IsEnabled(features::kTrustedDOMTypes))
     WebRuntimeFeatures::EnableFeatureFromString("TrustedDOMTypes", true);
+
+  WebRuntimeFeatures::EnableBackForwardCache(
+      base::FeatureList::IsEnabled(features::kBackForwardCache));
 }
 
 }  // namespace
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index 3b96e6af..51303db 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -504,7 +504,7 @@
     "//content/public/common:resource_type_bindings",
     "//ipc:mojom_constants",
     "//media/capture/mojom:video_capture",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/mojom/base",
     "//services/audio/public/mojom",
     "//services/network/public/mojom",
diff --git a/content/common/child_process_host_impl.cc b/content/common/child_process_host_impl.cc
index 05a66b8..cebc3af 100644
--- a/content/common/child_process_host_impl.cc
+++ b/content/common/child_process_host_impl.cc
@@ -132,6 +132,10 @@
   return delegate_->BindInterface(interface_name, std::move(interface_pipe));
 }
 
+void ChildProcessHostImpl::BindReceiver(mojo::GenericPendingReceiver receiver) {
+  child_process_->BindReceiver(std::move(receiver));
+}
+
 void ChildProcessHostImpl::RunService(
     const std::string& service_name,
     mojo::PendingReceiver<service_manager::mojom::Service> receiver) {
diff --git a/content/common/child_process_host_impl.h b/content/common/child_process_host_impl.h
index d191761..b18d3ee 100644
--- a/content/common/child_process_host_impl.h
+++ b/content/common/child_process_host_impl.h
@@ -72,6 +72,7 @@
   void AddFilter(IPC::MessageFilter* filter) override;
   void BindInterface(const std::string& interface_name,
                      mojo::ScopedMessagePipeHandle interface_pipe) override;
+  void BindReceiver(mojo::GenericPendingReceiver receiver) override;
   void RunService(
       const std::string& service_name,
       mojo::PendingReceiver<service_manager::mojom::Service> receiver) override;
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index 453b32e4..380029a3 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -549,4 +549,8 @@
 
   // Sent by the renderer when the frame becomes focused.
   FrameFocused();
+
+  // Evicts the page from the back/forward cache due to e.g., JavaScript
+  // execution.
+  EvictFromBackForwardCache();
 };
diff --git a/content/common/media/renderer_audio_input_stream_factory.mojom b/content/common/media/renderer_audio_input_stream_factory.mojom
index 4332a9cc..5d43f4f7 100644
--- a/content/common/media/renderer_audio_input_stream_factory.mojom
+++ b/content/common/media/renderer_audio_input_stream_factory.mojom
@@ -4,10 +4,10 @@
 
 module content.mojom;
 
-import "media/mojo/interfaces/audio_data_pipe.mojom";
-import "media/mojo/interfaces/audio_input_stream.mojom";
-import "media/mojo/interfaces/audio_parameters.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/audio_data_pipe.mojom";
+import "media/mojo/mojom/audio_input_stream.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "services/audio/public/mojom/audio_processing.mojom";
 
diff --git a/content/common/media/renderer_audio_output_stream_factory.mojom b/content/common/media/renderer_audio_output_stream_factory.mojom
index e61a9b0..c26c8cc 100644
--- a/content/common/media/renderer_audio_output_stream_factory.mojom
+++ b/content/common/media/renderer_audio_output_stream_factory.mojom
@@ -4,9 +4,9 @@
 
 module content.mojom;
 
-import "media/mojo/interfaces/audio_output_stream.mojom";
-import "media/mojo/interfaces/audio_parameters.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/audio_output_stream.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 
 // This interface is used to create output streams. The client supplies a
diff --git a/content/common/tab_switch_time_recorder_unittest.cc b/content/common/tab_switch_time_recorder_unittest.cc
index 708f479..ce628fd 100644
--- a/content/common/tab_switch_time_recorder_unittest.cc
+++ b/content/common/tab_switch_time_recorder_unittest.cc
@@ -102,7 +102,7 @@
   }
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   TabSwitchTimeRecorder tab_switch_time_recorder_;
   base::HistogramTester histogram_tester_;
 };
diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
index ee4cb155..0939d25 100644
--- a/content/gpu/BUILD.gn
+++ b/content/gpu/BUILD.gn
@@ -75,7 +75,7 @@
     "//components/viz/service/main",
     "//media/gpu/ipc/service",
     "//media/mojo/clients:clients",
-    "//media/mojo/interfaces:constants",
+    "//media/mojo/mojom:constants",
     "//services/service_manager/embedder",
     "//services/service_manager/public/cpp",
     "//services/service_manager/public/mojom",
diff --git a/content/gpu/gpu_child_thread.cc b/content/gpu/gpu_child_thread.cc
index 03609d3a..a644fb1 100644
--- a/content/gpu/gpu_child_thread.cc
+++ b/content/gpu/gpu_child_thread.cc
@@ -170,6 +170,8 @@
     deps.sync_point_manager = GetContentClient()->gpu()->GetSyncPointManager();
     deps.shared_image_manager =
         GetContentClient()->gpu()->GetSharedImageManager();
+    deps.viz_compositor_thread_runner =
+        GetContentClient()->gpu()->GetVizCompositorThreadRunner();
   }
   auto* process = ChildProcess::current();
   deps.shutdown_event = process->GetShutDownEvent();
diff --git a/content/gpu/gpu_service_factory.cc b/content/gpu/gpu_service_factory.cc
index b7cf5c5d..f9c2beb 100644
--- a/content/gpu/gpu_service_factory.cc
+++ b/content/gpu/gpu_service_factory.cc
@@ -14,7 +14,7 @@
 
 #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
 #include "base/bind.h"
-#include "media/mojo/interfaces/constants.mojom.h"      // nogncheck
+#include "media/mojo/mojom/constants.mojom.h"      // nogncheck
 #include "media/mojo/services/media_service_factory.h"  // nogncheck
 #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
 #include "content/public/gpu/content_gpu_client.h"
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 3531f97..87987b7 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -64,7 +64,7 @@
     "//media/capture/content/android:screen_capture_java",
     "//media/capture/video/android:capture_java",
     "//media/midi:midi_java",
-    "//media/mojo/interfaces:interfaces_java",
+    "//media/mojo/mojom:mojom_java",
     "//mojo/public/java:base_java",
     "//mojo/public/java:bindings_java",
     "//mojo/public/java:system_java",
@@ -463,7 +463,7 @@
     "//media/base/android:media_java",
     "//media/capture/content/android:screen_capture_java",
     "//media/capture/video/android:capture_java",
-    "//media/mojo/interfaces:interfaces_java",
+    "//media/mojo/mojom:mojom_java",
     "//mojo/public/interfaces/bindings/tests:test_interfaces_java",
     "//mojo/public/java:bindings_java",
     "//mojo/public/java:system_java",
@@ -584,7 +584,7 @@
     "//base:base_java_process_launcher_test_support",
     "//base:base_java_test_support",
     "//base:base_junit_test_support",
-    "//media/mojo/interfaces:interfaces_java",
+    "//media/mojo/mojom:mojom_java",
     "//mojo/public/java:bindings_java",
     "//third_party/blink/public/mojom:android_mojo_bindings_java",
     "//ui/android:ui_java",
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/AdditionalMenuItemProviderImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/AdditionalMenuItemProviderImpl.java
index ea507f8..0540f071 100644
--- a/content/public/android/java/src/org/chromium/content/browser/selection/AdditionalMenuItemProviderImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/AdditionalMenuItemProviderImpl.java
@@ -16,6 +16,7 @@
 import android.view.textclassifier.TextClassification;
 
 import org.chromium.base.Log;
+import org.chromium.base.annotations.DoNotInline;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -23,7 +24,10 @@
 // TODO(ctzsm): Add unit tests for this class once this is upstreamed.
 /**
  * Implements AdditionalMenuItemProvider interface.
+ * We prevent inlinings since this uses a number of new Android APIs which would create verification
+ * errors (on older Android versions) which would require a slow re-verification at runtime.
  */
+@DoNotInline
 @SuppressLint("NewApi")
 public class AdditionalMenuItemProviderImpl implements AdditionalMenuItemProvider {
     private static final String TAG = "MenuItemProvider";
diff --git a/content/public/app/content_browser_manifest.cc b/content/public/app/content_browser_manifest.cc
index 859ad087..f57ec8f 100644
--- a/content/public/app/content_browser_manifest.cc
+++ b/content/public/app/content_browser_manifest.cc
@@ -154,6 +154,8 @@
           .RequireCapability("audio", "stream_factory")
           .RequireCapability("audio", "testing_api")
           .RequireCapability("content_gpu", "browser")
+          .RequireCapability("resource_coordinator", "app")
+          .RequireCapability("resource_coordinator", "heap_profiler_helper")
           .ExposeInterfaceFilterCapability_Deprecated(
               "navigation:shared_worker", "renderer",
               std::set<const char*>{
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index d9527c8..9f34319 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -386,7 +386,7 @@
     "//components/download/public/common:public",
     "//content/public/common:common_sources",
     "//ipc",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom:remoting",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/system",
     "//services/device/public/mojom:usb",
diff --git a/content/public/browser/audio_loopback_stream_creator.h b/content/public/browser/audio_loopback_stream_creator.h
index f6fbb2e..fe8a9ff 100644
--- a/content/public/browser/audio_loopback_stream_creator.h
+++ b/content/public/browser/audio_loopback_stream_creator.h
@@ -7,8 +7,8 @@
 
 #include "base/callback.h"
 #include "content/common/content_export.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 
 namespace media {
 class AudioParameters;
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index 21f956a..6d964ed 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -644,10 +644,6 @@
     const service_manager::Identity& identity,
     mojo::PendingReceiver<service_manager::mojom::Service>* receiver) {}
 
-void ContentBrowserClient::RunServiceInstanceOnIOThread(
-    const service_manager::Identity& identity,
-    mojo::PendingReceiver<service_manager::mojom::Service>* receiver) {}
-
 bool ContentBrowserClient::ShouldTerminateOnServiceQuit(
     const service_manager::Identity& id) {
   return false;
@@ -672,16 +668,6 @@
 }
 
 std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
-ContentBrowserClient::CreateURLLoaderThrottlesOnIO(
-    const network::ResourceRequest& request,
-    ResourceContext* resource_context,
-    const base::RepeatingCallback<WebContents*()>& wc_getter,
-    NavigationUIData* navigation_ui_data,
-    int frame_tree_node_id) {
-  return std::vector<std::unique_ptr<blink::URLLoaderThrottle>>();
-}
-
-std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
 ContentBrowserClient::CreateURLLoaderThrottles(
     const network::ResourceRequest& request,
     BrowserContext* browser_context,
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index 64fc6cd..52f9b4b 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -41,7 +41,7 @@
 #include "media/base/video_codecs.h"
 #include "media/cdm/cdm_proxy.h"
 #include "media/media_buildflags.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/bindings/generic_pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "net/base/mime_util.h"
@@ -981,15 +981,6 @@
       const service_manager::Identity& identity,
       mojo::PendingReceiver<service_manager::mojom::Service>* receiver);
 
-  // Handles an incoming service instance request on the IO thread.
-  //
-  // NOTE: This should ONLY be overridden to register services which MUST run on
-  // the browser's IO thread. For other in-process services, use
-  // |RunServiceInstance| above.
-  virtual void RunServiceInstanceOnIOThread(
-      const service_manager::Identity& identity,
-      mojo::PendingReceiver<service_manager::mojom::Service>* receiver);
-
   // Allows the embedder to terminate the browser if a specific service instance
   // quits or crashes.
   virtual bool ShouldTerminateOnServiceQuit(
@@ -1127,15 +1118,7 @@
   // and |frame_tree_node_id| take a callback returning a nullptr, nullptr, and
   // RenderFrameHost::kNoFrameTreeNodeId respectively.
   //
-  // This is called on the IO thread.
-  virtual std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
-  CreateURLLoaderThrottlesOnIO(
-      const network::ResourceRequest& request,
-      ResourceContext* resource_context,
-      const base::RepeatingCallback<WebContents*()>& wc_getter,
-      NavigationUIData* navigation_ui_data,
-      int frame_tree_node_id);
-  // Same as above but called on UI thread.
+  // This is called on the UI thread.
   virtual std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
   CreateURLLoaderThrottles(
       const network::ResourceRequest& request,
diff --git a/content/public/browser/content_index_context.h b/content/public/browser/content_index_context.h
index 9bb313ab..68cd5c2 100644
--- a/content/public/browser/content_index_context.h
+++ b/content/public/browser/content_index_context.h
@@ -32,16 +32,19 @@
                               std::vector<ContentIndexEntry>)>;
   using GetEntryCallback =
       base::OnceCallback<void(base::Optional<ContentIndexEntry>)>;
+  using GetIconsCallback = base::OnceCallback<void(std::vector<SkBitmap>)>;
 
   ContentIndexContext() = default;
   virtual ~ContentIndexContext() = default;
 
-  // The client will need to provide an icon for the entry when requested.
-  // Must be called on the UI thread. |icon_callback| must be invoked on the
-  // UI thread.
-  virtual void GetIcon(int64_t service_worker_registration_id,
-                       const std::string& description_id,
-                       base::OnceCallback<void(SkBitmap)> icon_callback) = 0;
+  // Returns all available icons for the entry identified by
+  // |service_worker_registration_id| and |description_id|.
+  // The number of icons and the sizes are chosen by the ContentIndexProvider.
+  // Must be called on the UI thread. |callback| must be invoked on the UI
+  // the UI thread.
+  virtual void GetIcons(int64_t service_worker_registration_id,
+                        const std::string& description_id,
+                        GetIconsCallback callback) = 0;
 
   // Must be called on the UI thread.
   virtual void GetAllEntries(GetAllEntriesCallback callback) = 0;
diff --git a/content/public/browser/provision_fetcher_impl.h b/content/public/browser/provision_fetcher_impl.h
index 7e6973fe..a18eb78 100644
--- a/content/public/browser/provision_fetcher_impl.h
+++ b/content/public/browser/provision_fetcher_impl.h
@@ -12,7 +12,7 @@
 #include "base/memory/weak_ptr.h"
 #include "content/public/browser/provision_fetcher_factory.h"
 #include "media/base/provision_fetcher.h"
-#include "media/mojo/interfaces/provision_fetcher.mojom.h"
+#include "media/mojo/mojom/provision_fetcher.mojom.h"
 
 namespace network {
 class SharedURLLoaderFactory;
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
index 62bea64..ba06df0 100644
--- a/content/public/common/BUILD.gn
+++ b/content/public/common/BUILD.gn
@@ -253,7 +253,7 @@
     # needed because of allow_circular_includes_from.
     "//content/common:mojo_bindings",
     "//media",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//ppapi/buildflags",
     "//ppapi/c",
     "//services/network/public/cpp",
diff --git a/content/public/common/child_process_host.h b/content/public/common/child_process_host.h
index e62da71f..610674e 100644
--- a/content/public/common/child_process_host.h
+++ b/content/public/common/child_process_host.h
@@ -15,6 +15,7 @@
 #include "content/common/content_export.h"
 #include "content/public/common/bind_interface_helpers.h"
 #include "ipc/ipc_channel_proxy.h"
+#include "mojo/public/cpp/bindings/generic_pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/service_manager/public/mojom/service.mojom.h"
 
@@ -113,10 +114,26 @@
   // Adds an IPC message filter.  A reference will be kept to the filter.
   virtual void AddFilter(IPC::MessageFilter* filter) = 0;
 
-  // Bind an interface exposed by the child process.
+  // Bind an interface exposed by the child process. Requests sent to the child
+  // process via this call are routed through the a ConnectionFilter on the
+  // corresponding ChildThreadImpl.
+  //
+  // DEPRECATED: Use |BindReceiver()| instead.
   virtual void BindInterface(const std::string& interface_name,
                              mojo::ScopedMessagePipeHandle interface_pipe) = 0;
 
+  // Bind an interface exposed by the child process. Whether or not the
+  // interface in |receiver| can be bound depends on the process type and
+  // potentially on the Content embedder.
+  //
+  // Receivers passed to this call arrive in the child process and go through
+  // the following flow, stopping if any step decides to bind the receiver:
+  //
+  //   1. IO thread, ChildProcessImpl::BindReceiver.
+  //   2. IO thread, ContentClient::BindChildProcessInterface.
+  //   3. Main thread, ChildThreadImpl::BindReceiver (virtual).
+  virtual void BindReceiver(mojo::GenericPendingReceiver receiver) = 0;
+
   // Instructs the child process to run an instance of the named service.
   virtual void RunService(
       const std::string& service_name,
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 74bb0f6..f1b9a8a 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -82,6 +82,11 @@
 const base::Feature kCacheInlineScriptCode{"CacheInlineScriptCode",
                                            base::FEATURE_ENABLED_BY_DEFAULT};
 
+// Enables support for parallel cache_storage operations via the
+// "max_shared_ops" fieldtrial parameter.
+const base::Feature kCacheStorageParallelOps{"CacheStorageParallelOps",
+                                             base::FEATURE_DISABLED_BY_DEFAULT};
+
 // If Canvas2D Image Chromium is allowed, this feature controls whether it is
 // enabled.
 const base::Feature kCanvas2DImageChromium {
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 3cd0a18..9ad142a3a 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -29,6 +29,7 @@
 CONTENT_EXPORT extern const base::Feature kBlockCredentialedSubresources;
 CONTENT_EXPORT extern const base::Feature kBundledHTTPExchanges;
 CONTENT_EXPORT extern const base::Feature kCacheInlineScriptCode;
+CONTENT_EXPORT extern const base::Feature kCacheStorageParallelOps;
 CONTENT_EXPORT extern const base::Feature kCanvas2DImageChromium;
 CONTENT_EXPORT extern const base::Feature kCompositeOpaqueFixedPosition;
 CONTENT_EXPORT extern const base::Feature kCompositeOpaqueScrollers;
diff --git a/content/public/gpu/content_gpu_client.cc b/content/public/gpu/content_gpu_client.cc
index 19addbb..ab2d9eb 100644
--- a/content/public/gpu/content_gpu_client.cc
+++ b/content/public/gpu/content_gpu_client.cc
@@ -18,6 +18,11 @@
   return nullptr;
 }
 
+viz::VizCompositorThreadRunner*
+ContentGpuClient::GetVizCompositorThreadRunner() {
+  return nullptr;
+}
+
 #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
 std::unique_ptr<media::CdmProxy> ContentGpuClient::CreateCdmProxy(
     const base::Token& cdm_guid) {
diff --git a/content/public/gpu/content_gpu_client.h b/content/public/gpu/content_gpu_client.h
index 20e31e1b..830d5e8 100644
--- a/content/public/gpu/content_gpu_client.h
+++ b/content/public/gpu/content_gpu_client.h
@@ -28,6 +28,10 @@
 class CdmProxy;
 }
 
+namespace viz {
+class VizCompositorThreadRunner;
+}
+
 namespace content {
 
 // Embedder API for participating in gpu logic.
@@ -53,10 +57,11 @@
   virtual void PostCompositorThreadCreated(
       base::SingleThreadTaskRunner* task_runner) {}
 
-  // Allows client to supply SyncPointManager and SharedImageManager instance
-  // instead of having content internally create one.
+  // Allows client to supply these object instances instead of having content
+  // internally create one.
   virtual gpu::SyncPointManager* GetSyncPointManager();
   virtual gpu::SharedImageManager* GetSharedImageManager();
+  virtual viz::VizCompositorThreadRunner* GetVizCompositorThreadRunner();
 
 #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
   // Creates a media::CdmProxy for the type of Content Decryption Module (CDM)
diff --git a/content/public/renderer/key_system_support.cc b/content/public/renderer/key_system_support.cc
index b2e2ea4..2a25c1d 100644
--- a/content/public/renderer/key_system_support.cc
+++ b/content/public/renderer/key_system_support.cc
@@ -7,7 +7,7 @@
 #include "base/logging.h"
 #include "content/public/common/service_names.mojom.h"
 #include "content/public/renderer/render_thread.h"
-#include "media/mojo/interfaces/key_system_support.mojom.h"
+#include "media/mojo/mojom/key_system_support.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
 
 namespace content {
diff --git a/content/public/renderer/key_system_support.h b/content/public/renderer/key_system_support.h
index d62111a0..bc367e8 100644
--- a/content/public/renderer/key_system_support.h
+++ b/content/public/renderer/key_system_support.h
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "content/common/content_export.h"
-#include "media/mojo/interfaces/key_system_support.mojom.h"
+#include "media/mojo/mojom/key_system_support.mojom.h"
 
 namespace content {
 
diff --git a/content/public/test/navigation_simulator.h b/content/public/test/navigation_simulator.h
index 8c4d0dd..19aed76 100644
--- a/content/public/test/navigation_simulator.h
+++ b/content/public/test/navigation_simulator.h
@@ -310,6 +310,21 @@
   // callback.
   virtual GlobalRequestID GetGlobalRequestID() = 0;
 
+  // By default, committing a navigation will also simulate the load stopping.
+  // In the cases where the NavigationSimulator needs to navigate but still be
+  // in a loading state, use the functions below.
+
+  // If |keep_loading| is true, maintain the loading state after committing.
+  virtual void SetKeepLoading(bool keep_loading) = 0;
+
+  // Simulate the ongoing load stopping successfully.
+  virtual void StopLoading() = 0;
+
+  // Simulates the ongoing load stopping due to |error_code|.
+  virtual void FailLoading(const GURL& url,
+                           int error_code,
+                           const base::string16& error_description) = 0;
+
  private:
   // This interface should only be implemented inside content.
   friend class NavigationSimulatorImpl;
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index b24af4e..887a6b3 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -690,7 +690,9 @@
   visual_properties.display_mode = blink::kWebDisplayModeBrowser;
   std::unique_ptr<IPC::Message> resize_message(
       new WidgetMsg_SynchronizeVisualProperties(0, visual_properties));
-  OnMessageReceived(*resize_message);
+  RenderWidget* render_widget =
+      static_cast<RenderViewImpl*>(view_)->GetWidget();
+  render_widget->OnMessageReceived(*resize_message);
 }
 
 void RenderViewTest::SimulateUserTypingASCIICharacter(char ascii_character,
@@ -743,11 +745,6 @@
   base::RunLoop().RunUntilIdle();
 }
 
-bool RenderViewTest::OnMessageReceived(const IPC::Message& msg) {
-  RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_);
-  return impl->OnMessageReceived(msg);
-}
-
 void RenderViewTest::OnSameDocumentNavigation(blink::WebLocalFrame* frame,
                                               bool is_new_navigation) {
   RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_);
diff --git a/content/public/test/render_view_test.h b/content/public/test/render_view_test.h
index 9ae805d..3f4ceb9 100644
--- a/content/public/test/render_view_test.h
+++ b/content/public/test/render_view_test.h
@@ -180,7 +180,6 @@
                                          const std::string& new_value);
 
   // These are all methods from RenderViewImpl that we expose to testing code.
-  bool OnMessageReceived(const IPC::Message& msg);
   void OnSameDocumentNavigation(blink::WebLocalFrame* frame,
                                 bool is_new_navigation);
   blink::WebWidget* GetWebWidget();
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 531f5c4..5595d09 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -461,8 +461,8 @@
     "//media/midi:mojo",
     "//media/mojo:buildflags",
     "//media/mojo/clients",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:remoting",
     "//media/webrtc",
     "//mojo/public/cpp/bindings",
     "//net",
diff --git a/content/renderer/input/widget_input_handler_manager.cc b/content/renderer/input/widget_input_handler_manager.cc
index a527fddc..b49802b 100644
--- a/content/renderer/input/widget_input_handler_manager.cc
+++ b/content/renderer/input/widget_input_handler_manager.cc
@@ -315,6 +315,14 @@
                                     std::move(observe_gesture_event_closure));
 }
 
+void WidgetInputHandlerManager::LogInputTimingUMA() {
+  if (!have_emitted_uma_) {
+    UMA_HISTOGRAM_ENUMERATION("PaintHolding.InputTiming2",
+                              current_lifecycle_state_);
+    have_emitted_uma_ = true;
+  }
+}
+
 void WidgetInputHandlerManager::DispatchEvent(
     std::unique_ptr<content::InputEvent> event,
     mojom::WidgetInputHandler::DispatchEventCallback callback) {
@@ -329,13 +337,11 @@
     return;
   }
 
-  if (!(have_emitted_uma_ ||
-        event->web_event->GetType() == WebInputEvent::Type::kMouseMove ||
-        event->web_event->GetType() == WebInputEvent::Type::kPointerMove)) {
-    UMA_HISTOGRAM_ENUMERATION("PaintHolding.InputTiming",
-                              current_lifecycle_state_);
-    have_emitted_uma_ = true;
-  }
+  bool event_is_move =
+      event->web_event->GetType() == WebInputEvent::Type::kMouseMove ||
+      event->web_event->GetType() == WebInputEvent::Type::kPointerMove;
+  if (!event_is_move)
+    LogInputTimingUMA();
 
   // If TimeTicks is not consistent across processes we cannot use the event's
   // platform timestamp in this process. Instead use the time that the event is
@@ -453,12 +459,17 @@
 #endif
 }
 
-void WidgetInputHandlerManager::MarkBeginMainFrame() {
+void WidgetInputHandlerManager::DidNavigate() {
+  current_lifecycle_state_ = InitialInputTiming::kBeforeLifecycle;
+  have_emitted_uma_ = false;
+}
+
+void WidgetInputHandlerManager::BeginMainFrame() {
   if (current_lifecycle_state_ == InitialInputTiming::kBeforeLifecycle)
     current_lifecycle_state_ = InitialInputTiming::kBeforeCommit;
 }
 
-void WidgetInputHandlerManager::MarkCompositorCommit() {
+void WidgetInputHandlerManager::CompositorDidCommit() {
   if (current_lifecycle_state_ == InitialInputTiming::kBeforeCommit)
     current_lifecycle_state_ = InitialInputTiming::kAfterCommit;
 }
diff --git a/content/renderer/input/widget_input_handler_manager.h b/content/renderer/input/widget_input_handler_manager.h
index bfce74d..b9e32e7 100644
--- a/content/renderer/input/widget_input_handler_manager.h
+++ b/content/renderer/input/widget_input_handler_manager.h
@@ -110,11 +110,15 @@
   void FallbackCursorModeLockCursor(bool left, bool right, bool up, bool down);
   void FallbackCursorModeSetCursorVisibility(bool visible);
 
-  // Called to inform us of a lifecycle update
-  void MarkBeginMainFrame();
+  // Called to inform us of navigation, which resets UMA metrics for input
+  // timing.
+  void DidNavigate();
 
   // Called to inform us of a lifecycle update
-  void MarkCompositorCommit();
+  void BeginMainFrame();
+
+  // Called to inform us the the compositor has committed a frame.
+  void CompositorDidCommit();
 
  protected:
   friend class base::RefCountedThreadSafe<WidgetInputHandlerManager>;
@@ -153,6 +157,12 @@
       const blink::WebGestureEvent& gesture_event,
       const cc::InputHandlerScrollResult& scroll_result);
 
+  // Logs UMA for the first real input event, to gather data on
+  // how often input occurs before a page is presented to the
+  // screen. It is a separate function to allow multiple sites to
+  // log to the same histogram.
+  void LogInputTimingUMA();
+
   // Returns the task runner for the thread that receives input. i.e. the
   // "Mojo-bound" thread.
   const scoped_refptr<base::SingleThreadTaskRunner>& InputThreadTaskRunner()
diff --git a/content/renderer/media/android/flinging_renderer_client.h b/content/renderer/media/android/flinging_renderer_client.h
index b9948ac..9b762f0 100644
--- a/content/renderer/media/android/flinging_renderer_client.h
+++ b/content/renderer/media/android/flinging_renderer_client.h
@@ -18,7 +18,7 @@
 #include "media/base/video_renderer_sink.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/clients/mojo_renderer_wrapper.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace content {
diff --git a/content/renderer/media/android/flinging_renderer_client_factory.cc b/content/renderer/media/android/flinging_renderer_client_factory.cc
index 0180aaf..9084d32 100644
--- a/content/renderer/media/android/flinging_renderer_client_factory.cc
+++ b/content/renderer/media/android/flinging_renderer_client_factory.cc
@@ -12,7 +12,7 @@
 #include "content/renderer/media/android/flinging_renderer_client.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/clients/mojo_renderer_factory.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 
 namespace content {
 
diff --git a/content/renderer/media/android/media_player_renderer_client.h b/content/renderer/media/android/media_player_renderer_client.h
index 906399e..03e6f6f 100644
--- a/content/renderer/media/android/media_player_renderer_client.h
+++ b/content/renderer/media/android/media_player_renderer_client.h
@@ -19,7 +19,7 @@
 #include "media/base/video_renderer_sink.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/clients/mojo_renderer_wrapper.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace content {
diff --git a/content/renderer/media/android/media_player_renderer_client_factory.cc b/content/renderer/media/android/media_player_renderer_client_factory.cc
index 3ab8fd39..9522d4f 100644
--- a/content/renderer/media/android/media_player_renderer_client_factory.cc
+++ b/content/renderer/media/android/media_player_renderer_client_factory.cc
@@ -7,7 +7,7 @@
 #include "content/renderer/media/android/media_player_renderer_client.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/clients/mojo_renderer_factory.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 
 namespace content {
 
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc.cc b/content/renderer/media/audio/mojo_audio_input_ipc.cc
index c616d11..b61dc6f 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc.cc
+++ b/content/renderer/media/audio/mojo_audio_input_ipc.cc
@@ -10,7 +10,7 @@
 #include "base/bind_helpers.h"
 #include "base/metrics/histogram_macros.h"
 #include "media/audio/audio_device_description.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
 namespace content {
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc.h b/content/renderer/media/audio/mojo_audio_input_ipc.h
index 360f1a0..a95865b 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc.h
+++ b/content/renderer/media/audio/mojo_audio_input_ipc.h
@@ -16,7 +16,7 @@
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
 #include "media/audio/audio_input_ipc.h"
 #include "media/audio/audio_source_parameters.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "media/webrtc/audio_processor_controls.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
diff --git a/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc b/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
index 5090e71..7b16104 100644
--- a/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
+++ b/content/renderer/media/audio/mojo_audio_input_ipc_unittest.cc
@@ -16,7 +16,7 @@
 #include "base/test/scoped_task_environment.h"
 #include "media/audio/audio_device_description.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/buffer.h"
 #include "mojo/public/cpp/system/platform_handle.h"
diff --git a/content/renderer/media/audio/mojo_audio_output_ipc.cc b/content/renderer/media/audio/mojo_audio_output_ipc.cc
index fcc933a..bb9224a 100644
--- a/content/renderer/media/audio/mojo_audio_output_ipc.cc
+++ b/content/renderer/media/audio/mojo_audio_output_ipc.cc
@@ -9,7 +9,7 @@
 #include "base/bind.h"
 #include "base/metrics/histogram_macros.h"
 #include "media/audio/audio_device_description.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/callback_helpers.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
diff --git a/content/renderer/media/audio/mojo_audio_output_ipc.h b/content/renderer/media/audio/mojo_audio_output_ipc.h
index 825ebdc..cc1ec18 100644
--- a/content/renderer/media/audio/mojo_audio_output_ipc.h
+++ b/content/renderer/media/audio/mojo_audio_output_ipc.h
@@ -16,8 +16,8 @@
 #include "content/common/content_export.h"
 #include "content/common/media/renderer_audio_output_stream_factory.mojom.h"
 #include "media/audio/audio_output_ipc.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace content {
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
index 9f06c32..5c9198f5 100644
--- a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
+++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
@@ -22,9 +22,9 @@
 #include "components/viz/common/gpu/context_lost_observer.h"
 #include "content/child/thread_safe_sender.h"
 #include "content/common/content_export.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
-#include "media/mojo/interfaces/video_decoder.mojom.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
+#include "media/mojo/mojom/video_decoder.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/video/gpu_video_accelerator_factories.h"
 #include "media/video/supported_video_decoder_config.h"
 #include "ui/gfx/geometry/size.h"
diff --git a/content/renderer/media/media_factory.h b/content/renderer/media/media_factory.h
index 5c30320..b746680d 100644
--- a/content/renderer/media/media_factory.h
+++ b/content/renderer/media/media_factory.h
@@ -15,14 +15,14 @@
 #include "media/blink/webmediaplayer_params.h"
 #include "media/media_buildflags.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "third_party/blink/public/platform/web_media_player_source.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 #include "third_party/blink/public/platform/web_set_sink_id_callbacks.h"
 #include "third_party/blink/public/platform/web_string.h"
 
 #if BUILDFLAG(ENABLE_MOJO_MEDIA)
-#include "media/mojo/interfaces/interface_factory.mojom.h"  // nogncheck
+#include "media/mojo/mojom/interface_factory.mojom.h"  // nogncheck
 #endif
 
 namespace blink {
diff --git a/content/renderer/media/media_interface_factory.cc b/content/renderer/media/media_interface_factory.cc
index f99a4c4..0c7f656 100644
--- a/content/renderer/media/media_interface_factory.cc
+++ b/content/renderer/media/media_interface_factory.cc
@@ -7,9 +7,9 @@
 #include <string>
 
 #include "base/bind.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 
diff --git a/content/renderer/media/media_interface_factory.h b/content/renderer/media/media_interface_factory.h
index d0b1136..ecf0f89 100644
--- a/content/renderer/media/media_interface_factory.h
+++ b/content/renderer/media/media_interface_factory.h
@@ -13,7 +13,7 @@
 #include "build/build_config.h"
 #include "content/common/content_export.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 #include "url/gurl.h"
 
 namespace service_manager {
diff --git a/content/renderer/media/stream/user_media_client_impl.cc b/content/renderer/media/stream/user_media_client_impl.cc
index 7a10a7b..16a5ca6 100644
--- a/content/renderer/media/stream/user_media_client_impl.cc
+++ b/content/renderer/media/stream/user_media_client_impl.cc
@@ -105,7 +105,7 @@
     RenderFrameImpl* render_frame,
     std::unique_ptr<UserMediaProcessor> user_media_processor,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
-    : RenderFrameObserver(render_frame),
+    : render_frame_(render_frame),
       user_media_processor_(std::move(user_media_processor)),
       apply_constraints_processor_(new ApplyConstraintsProcessor(
           base::BindRepeating(&UserMediaClientImpl::GetMediaDevicesDispatcher,
@@ -146,7 +146,7 @@
   // ownerDocument may be null if we are in a test.
   // In that case, it's OK to not check frame().
   DCHECK(web_request.OwnerDocument().IsNull() ||
-         render_frame()->GetWebFrame() ==
+         render_frame_->GetWebFrame() ==
              static_cast<blink::WebFrame*>(
                  web_request.OwnerDocument().GetFrame()));
 
@@ -240,8 +240,7 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   is_processing_request_ = false;
   if (!pending_request_infos_.empty()) {
-    render_frame()
-        ->GetTaskRunner(blink::TaskType::kInternalMedia)
+    render_frame_->GetTaskRunner(blink::TaskType::kInternalMedia)
         ->PostTask(
             FROM_HERE,
             base::BindOnce(&UserMediaClientImpl::MaybeProcessNextRequestInfo,
@@ -292,8 +291,7 @@
   pending_request_infos_.clear();
 }
 
-void UserMediaClientImpl::ReadyToCommitNavigation(
-    blink::WebDocumentLoader* document_loader) {
+void UserMediaClientImpl::ContextDestroyed() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // Cancel all outstanding UserMediaRequests.
   DeleteAllUserMediaRequests();
@@ -307,15 +305,11 @@
 const blink::mojom::MediaDevicesDispatcherHostPtr&
 UserMediaClientImpl::GetMediaDevicesDispatcher() {
   if (!media_devices_dispatcher_) {
-    render_frame()->GetRemoteInterfaces()->GetInterface(
+    render_frame_->GetRemoteInterfaces()->GetInterface(
         mojo::MakeRequest(&media_devices_dispatcher_));
   }
 
   return media_devices_dispatcher_;
 }
 
-void UserMediaClientImpl::OnDestruct() {
-  delete this;
-}
-
 }  // namespace content
diff --git a/content/renderer/media/stream/user_media_client_impl.h b/content/renderer/media/stream/user_media_client_impl.h
index 4565f1c..0582956 100644
--- a/content/renderer/media/stream/user_media_client_impl.h
+++ b/content/renderer/media/stream/user_media_client_impl.h
@@ -14,7 +14,6 @@
 #include "base/sequence_checker.h"
 #include "base/single_thread_task_runner.h"
 #include "content/common/content_export.h"
-#include "content/public/renderer/render_frame_observer.h"
 #include "content/renderer/media/stream/user_media_processor.h"
 #include "third_party/blink/public/common/mediastream/media_devices.h"
 #include "third_party/blink/public/mojom/mediastream/media_devices.mojom.h"
@@ -30,8 +29,7 @@
 // UserMediaClientImpl handles requests coming from the Blink MediaDevices
 // object. This includes getUserMedia and enumerateDevices. It must be created,
 // called and destroyed on the render thread.
-class CONTENT_EXPORT UserMediaClientImpl : public RenderFrameObserver,
-                                           public blink::WebUserMediaClient {
+class CONTENT_EXPORT UserMediaClientImpl : public blink::WebUserMediaClient {
  public:
   // TODO(guidou): Make all constructors private and replace with Create methods
   // that return a std::unique_ptr. This class is intended for instantiation on
@@ -58,10 +56,7 @@
       const blink::WebApplyConstraintsRequest& web_request) override;
   void StopTrack(const blink::WebMediaStreamTrack& web_track) override;
   bool IsCapturing() override;
-
-  // RenderFrameObserver override
-  void ReadyToCommitNavigation(
-      blink::WebDocumentLoader* document_loader) override;
+  void ContextDestroyed() override;
 
   void SetMediaDevicesDispatcherForTesting(
       blink::mojom::MediaDevicesDispatcherHostPtr media_devices_dispatcher);
@@ -105,12 +100,12 @@
 
   void DeleteAllUserMediaRequests();
 
-  // RenderFrameObserver implementation.
-  void OnDestruct() override;
-
   const blink::mojom::MediaDevicesDispatcherHostPtr&
   GetMediaDevicesDispatcher();
 
+  // |render_frame_| is the frame owning this UserMediaClientImpl.
+  RenderFrameImpl* const render_frame_;
+
   // |user_media_processor_| is a unique_ptr for testing purposes.
   std::unique_ptr<UserMediaProcessor> user_media_processor_;
   // |user_media_processor_| is a unique_ptr in order to avoid compilation
diff --git a/content/renderer/media/stream/user_media_client_impl_unittest.cc b/content/renderer/media/stream/user_media_client_impl_unittest.cc
index 3598936..1655a88 100644
--- a/content/renderer/media/stream/user_media_client_impl_unittest.cc
+++ b/content/renderer/media/stream/user_media_client_impl_unittest.cc
@@ -496,7 +496,7 @@
   }
 
   void LoadNewDocumentInFrame() {
-    user_media_client_impl_->ReadyToCommitNavigation(nullptr);
+    user_media_client_impl_->ContextDestroyed();
     base::RunLoop().RunUntilIdle();
   }
 
diff --git a/content/renderer/media/stream/user_media_processor.cc b/content/renderer/media/stream/user_media_processor.cc
index 5b89657..c92d2cdf 100644
--- a/content/renderer/media/stream/user_media_processor.cc
+++ b/content/renderer/media/stream/user_media_processor.cc
@@ -47,7 +47,6 @@
 #include "third_party/blink/public/web/modules/mediastream/processed_local_audio_source.h"
 #include "third_party/blink/public/web/modules/mediastream/web_media_stream_device_observer.h"
 #include "ui/gfx/geometry/size.h"
-#include "url/origin.h"
 
 namespace content {
 
@@ -317,8 +316,6 @@
     return request_->is_processing_user_gesture;
   }
 
-  const url::Origin& security_origin() const { return security_origin_; }
-
  private:
   void OnTrackStarted(blink::WebPlatformMediaStreamSource* source,
                       MediaStreamRequestResult result,
@@ -337,7 +334,6 @@
   bool is_video_content_capture_ = false;
   blink::WebMediaStream web_stream_;
   StreamControls stream_controls_;
-  const url::Origin security_origin_;
   ResourcesReady ready_callback_;
   MediaStreamRequestResult request_result_ = MediaStreamRequestResult::OK;
   blink::WebString request_result_name_;
@@ -355,7 +351,6 @@
 UserMediaProcessor::RequestInfo::RequestInfo(
     std::unique_ptr<UserMediaRequestInfo> request)
     : request_(std::move(request)),
-      security_origin_(url::Origin(request_->web_request.GetSecurityOrigin())),
       request_result_name_("") {}
 
 void UserMediaProcessor::RequestInfo::StartAudioTrack(
diff --git a/content/renderer/media/webrtc/rtc_video_encoder.cc b/content/renderer/media/webrtc/rtc_video_encoder.cc
index 3668b2b..3c6a161b 100644
--- a/content/renderer/media/webrtc/rtc_video_encoder.cc
+++ b/content/renderer/media/webrtc/rtc_video_encoder.cc
@@ -252,11 +252,15 @@
   gfx::Size input_frame_coded_size_;
   gfx::Size input_visible_size_;
 
-  // Shared memory buffers for input/output with the VEA.
+  // Shared memory buffers for input/output with the VEA. The input buffers may
+  // be referred to by a VideoFrame, so they are wrapped in a unique_ptr to have
+  // a stable memory location. That is not necessary for the output buffers.
   std::vector<std::unique_ptr<std::pair<base::UnsafeSharedMemoryRegion,
                                         base::WritableSharedMemoryMapping>>>
       input_buffers_;
-  std::vector<std::unique_ptr<base::SharedMemory>> output_buffers_;
+  std::vector<std::pair<base::UnsafeSharedMemoryRegion,
+                        base::WritableSharedMemoryMapping>>
+      output_buffers_;
 
   // Input buffers ready to be filled with input from Encode().  As a LIFO since
   // we don't care about ordering.
@@ -394,9 +398,9 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (video_encoder_) {
     video_encoder_->UseOutputBitstreamBuffer(media::BitstreamBuffer(
-        bitstream_buffer_id, output_buffers_[bitstream_buffer_id]->handle(),
-        false /* read_only */,
-        output_buffers_[bitstream_buffer_id]->mapped_size()));
+        bitstream_buffer_id,
+        output_buffers_[bitstream_buffer_id].first.Duplicate(),
+        output_buffers_[bitstream_buffer_id].first.GetSize()));
     output_buffers_free_count_++;
   }
 }
@@ -504,21 +508,23 @@
   }
 
   for (int i = 0; i < kOutputBufferCount; ++i) {
-    std::unique_ptr<base::SharedMemory> shm =
-        gpu_factories_->CreateSharedMemory(output_buffer_size);
-    if (!shm) {
+    base::UnsafeSharedMemoryRegion region =
+        gpu_factories_->CreateSharedMemoryRegion(output_buffer_size);
+    base::WritableSharedMemoryMapping mapping = region.Map();
+    if (!mapping.IsValid()) {
       LogAndNotifyError(FROM_HERE, "failed to create output buffer",
                         media::VideoEncodeAccelerator::kPlatformFailureError);
       return;
     }
-    output_buffers_.push_back(std::move(shm));
+    output_buffers_.push_back(
+        std::make_pair(std::move(region), std::move(mapping)));
   }
 
   // Immediately provide all output buffers to the VEA.
   for (size_t i = 0; i < output_buffers_.size(); ++i) {
-    video_encoder_->UseOutputBitstreamBuffer(media::BitstreamBuffer(
-        i, output_buffers_[i]->handle(), false /* read_only */,
-        output_buffers_[i]->mapped_size()));
+    video_encoder_->UseOutputBitstreamBuffer(
+        media::BitstreamBuffer(i, output_buffers_[i].first.Duplicate(),
+                               output_buffers_[i].first.GetSize()));
     output_buffers_free_count_++;
   }
   DCHECK_EQ(GetStatus(), WEBRTC_VIDEO_CODEC_UNINITIALIZED);
@@ -541,9 +547,10 @@
                       media::VideoEncodeAccelerator::kPlatformFailureError);
     return;
   }
-  base::SharedMemory* output_buffer =
-      output_buffers_[bitstream_buffer_id].get();
-  if (metadata.payload_size_bytes > output_buffer->mapped_size()) {
+  void* output_mapping_memory =
+      output_buffers_[bitstream_buffer_id].second.memory();
+  if (metadata.payload_size_bytes >
+      output_buffers_[bitstream_buffer_id].second.size()) {
     LogAndNotifyError(FROM_HERE, "invalid payload_size",
                       media::VideoEncodeAccelerator::kPlatformFailureError);
     return;
@@ -581,7 +588,7 @@
   webrtc::EncodedImage image;
   image.Allocate(metadata.payload_size_bytes);
   image.set_size(metadata.payload_size_bytes);
-  memcpy(image.data(), output_buffer->memory(), metadata.payload_size_bytes);
+  memcpy(image.data(), output_mapping_memory, metadata.payload_size_bytes);
   image._encodedWidth = input_visible_size_.width();
   image._encodedHeight = input_visible_size_.height();
   image.SetTimestamp(rtp_timestamp.value());
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 2c544b6..bbdbb17 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1921,6 +1921,8 @@
   for (auto& observer : observers_)
     observer.OnDestruct();
 
+  web_user_media_client_.reset();
+
   base::trace_event::TraceLog::GetInstance()->RemoveProcessLabel(routing_id_);
 
   if (auto* factory = AudioOutputIPCFactory::get())
@@ -4099,6 +4101,10 @@
   return blink::WebLocalFrameClient::AppCacheType::kAppCacheForFrame;
 }
 
+void RenderFrameImpl::EvictFromBackForwardCache() {
+  GetFrameHost()->EvictFromBackForwardCache();
+}
+
 void RenderFrameImpl::BindToFrame(blink::WebNavigationControl* frame) {
   DCHECK(!frame_);
 
@@ -5680,7 +5686,7 @@
 blink::WebUserMediaClient* RenderFrameImpl::UserMediaClient() {
   if (!web_user_media_client_)
     InitializeUserMediaClient();
-  return web_user_media_client_;
+  return web_user_media_client_.get();
 }
 
 blink::WebEncryptedMediaClient* RenderFrameImpl::EncryptedMediaClient() {
@@ -7106,7 +7112,7 @@
     return;
 
   DCHECK(!web_user_media_client_);
-  web_user_media_client_ = new UserMediaClientImpl(
+  web_user_media_client_ = std::make_unique<UserMediaClientImpl>(
       this,
       std::make_unique<blink::WebMediaStreamDeviceObserver>(GetWebFrame()),
       GetTaskRunner(blink::TaskType::kInternalMedia));
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 0d6c43c5..cc2efff 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -885,6 +885,7 @@
   void VisibilityChanged(blink::mojom::FrameVisibility visibility) override;
   const blink::BrowserInterfaceBrokerProxy* GetBrowserInterfaceBrokerProxy()
       override;
+  void EvictFromBackForwardCache() override;
 
   // WebFrameSerializerClient implementation:
   void DidSerializeDataForFrame(
@@ -1607,12 +1608,8 @@
   // of handling a FrameInputHandler::SelectRange IPC.
   bool handling_select_range_;
 
-  // The next group of objects all implement RenderFrameObserver, so are deleted
-  // along with the RenderFrame automatically.  This is why we just store weak
-  // references.
-
-  // Destroyed via the RenderFrameObserver::OnDestruct() mechanism.
-  UserMediaClientImpl* web_user_media_client_;
+  // Implements getUserMedia() and related functionality.
+  std::unique_ptr<UserMediaClientImpl> web_user_media_client_;
 
   mojom::RendererAudioInputStreamFactoryPtr audio_input_stream_factory_;
 
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 035801fb..70014b7 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1309,7 +1309,7 @@
 
     // Have the widget handle all other messages.
     // TODO(ajwong): Remove this cross-object dispatch.
-    IPC_MESSAGE_UNHANDLED(handled = GetWidget()->OnMessageReceived(message))
+    IPC_MESSAGE_UNHANDLED(handled = ForwardToWidgetAndCheckIfHandled(message))
   IPC_END_MESSAGE_MAP()
 
   return handled;
@@ -2274,4 +2274,13 @@
       ->CleanupTaskRunner();
 }
 
+bool RenderViewImpl::ForwardToWidgetAndCheckIfHandled(
+    const IPC::Message& message) {
+  // TODO(https://crbug.com/990607): This CHECK is temporary and will be
+  // removed, assuming nothing crashes in the wild.
+  bool handled = GetWidget()->OnMessageReceived(message);
+  CHECK(!handled);
+  return handled;
+}
+
 }  // namespace content
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index caf21b4..ce9c1da 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -513,6 +513,8 @@
   void UpdateThemePrefs() {}
 #endif
 
+  bool ForwardToWidgetAndCheckIfHandled(const IPC::Message& message);
+
   // ---------------------------------------------------------------------------
   // ADDING NEW FUNCTIONS? Please keep private functions alphabetized and put
   // it in the same order in the .cc file as it was in the header.
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 09ef4066..05801dc 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -1092,7 +1092,7 @@
 
   // The input handler wants to know about the main frame for metric purposes
   DCHECK(widget_input_handler_manager_);
-  widget_input_handler_manager_->MarkBeginMainFrame();
+  widget_input_handler_manager_->BeginMainFrame();
 
   GetWebWidget()->BeginFrame(frame_time, record_main_frame_metrics);
 }
@@ -1170,7 +1170,7 @@
 
   // The input handler wants to know about the commit for metric purposes
   DCHECK(widget_input_handler_manager_);
-  widget_input_handler_manager_->MarkCompositorCommit();
+  widget_input_handler_manager_->CompositorDidCommit();
 
   for (auto& observer : render_frames_)
     observer.DidCommitAndDrawCompositorFrame();
@@ -1890,8 +1890,13 @@
     std::move(after_warmup_callback_).Run(nullptr);
 }
 
-void RenderWidget::DoDeferredClose() {
-  Send(new WidgetHostMsg_Close(routing_id_));
+// static
+void RenderWidget::DoDeferredClose(int widget_routing_id) {
+  // DoDeferredClose() was a posted task, which means the RenderWidget may have
+  // become frozen in the meantime. Frozen RenderWidgets do not send messages,
+  // so break the dependency on RenderWidget here, by making this method static
+  // and going to RenderThread directly to send.
+  RenderThread::Get()->Send(new WidgetHostMsg_Close(widget_routing_id));
 }
 
 void RenderWidget::ClosePopupWidgetSoon() {
@@ -1922,7 +1927,7 @@
   // message back to the message loop, which won't run until the JS is
   // complete, and then the Close request can be sent.
   GetCleanupTaskRunner()->PostTask(
-      FROM_HERE, base::BindOnce(&RenderWidget::DoDeferredClose, this));
+      FROM_HERE, base::BindOnce(&RenderWidget::DoDeferredClose, routing_id_));
 }
 
 void RenderWidget::Close() {
@@ -3685,6 +3690,12 @@
   if (closing_)
     return;
 
+  // The input handler wants to know about navigation so that it can
+  // resets the state for UMA reporting of input arrival with respect to
+  // document lifecycle.
+  DCHECK(widget_input_handler_manager_);
+  widget_input_handler_manager_->DidNavigate();
+
   layer_tree_view_->ClearCachesOnNextCommit();
 }
 
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index cb79cdf..1d58e94 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -737,7 +737,7 @@
 
   // Request the window to close from the renderer by sending the request to the
   // browser.
-  void DoDeferredClose();
+  static void DoDeferredClose(int widget_routing_id);
 
   gfx::Size GetSizeForWebWidget() const;
   void ResizeWebWidget();
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn
index bc7c22a..d0f401d 100644
--- a/content/shell/BUILD.gn
+++ b/content/shell/BUILD.gn
@@ -380,7 +380,7 @@
   }
   if (mojo_media_host == "browser") {
     deps += [
-      "//media/mojo/interfaces:constants",
+      "//media/mojo/mojom:constants",
       "//media/mojo/services",
     ]
   }
diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc
index 37a5be30..15432c3 100644
--- a/content/shell/browser/shell_content_browser_client.cc
+++ b/content/shell/browser/shell_content_browser_client.cc
@@ -84,7 +84,7 @@
 #endif
 
 #if BUILDFLAG(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
-#include "media/mojo/interfaces/constants.mojom.h"      // nogncheck
+#include "media/mojo/mojom/constants.mojom.h"      // nogncheck
 #include "media/mojo/services/media_service_factory.h"  // nogncheck
 #endif
 
diff --git a/content/shell/test_runner/app_banner_service.cc b/content/shell/test_runner/app_banner_service.cc
index 8fe9c46..b4024806 100644
--- a/content/shell/test_runner/app_banner_service.cc
+++ b/content/shell/test_runner/app_banner_service.cc
@@ -32,7 +32,6 @@
   binding_.Bind(mojo::MakeRequest(&proxy));
   controller_->BannerPromptRequest(
       std::move(proxy), mojo::MakeRequest(&event_), platforms,
-      true /* require_gesture */,
       base::BindOnce(&AppBannerService::OnBannerPromptReply,
                      base::Unretained(this), std::move(callback)));
 }
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index bc2368d..29df2805 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -344,7 +344,7 @@
     "//content/public/common",
     "//ipc",
     "//media/mojo/clients",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//services/media_session/public/cpp/test:test_support",
     "//services/media_session/public/mojom",
     "//third_party/blink/public:blink",
diff --git a/content/test/data/accessibility/event/delete-subtree-expected-auralinux.txt b/content/test/data/accessibility/event/delete-subtree-expected-auralinux.txt
new file mode 100644
index 0000000..760d8b6
--- /dev/null
+++ b/content/test/data/accessibility/event/delete-subtree-expected-auralinux.txt
@@ -0,0 +1,5 @@
+CHILDREN-CHANGED index:0 CHILD:(role=ROLE_CHECK_BOX) role=ROLE_ARTICLE ENABLED,SENSITIVE,VISIBLE
+CHILDREN-CHANGED index:0 CHILD:(role=ROLE_PUSH_BUTTON) role=ROLE_ARTICLE ENABLED,SENSITIVE,SHOWING,VISIBLE
+CHILDREN-CHANGED index:1 CHILD:(role=ROLE_RADIO_BUTTON) role=ROLE_ARTICLE ENABLED,SENSITIVE,VISIBLE
+STATE-CHANGE:DEFUNCT:TRUE role=ROLE_INVALID name='(null)' DEFUNCT
+STATE-CHANGE:DEFUNCT:TRUE role=ROLE_INVALID name='(null)' DEFUNCT
diff --git a/content/test/data/accessibility/event/delete-subtree.html b/content/test/data/accessibility/event/delete-subtree.html
new file mode 100644
index 0000000..ba228b4
--- /dev/null
+++ b/content/test/data/accessibility/event/delete-subtree.html
@@ -0,0 +1,21 @@
+<!--
+@BLINK-ALLOW:offscreen
+@BLINK-ALLOW:size=(0, 0)
+@BLINK-ALLOW:clipsChildren*
+@BLINK-ALLOW:unclippedSize=(50, 20)
+@BLINK-ALLOW:pageSize=(50, 20)
+@BLINK-ALLOW:pageSize=(1, 1)
+@BLINK-ALLOW:pageSize=(50, 1)
+-->
+<!DOCTYPE html>
+<div id="parent" aria-label="parent" role="article"
+     style="position: absolute; width: 0; height: 0; overflow: visible">
+  <div style="width:50px; height: 20px" aria-label="first child" role="checkbox">first child</div>
+  <div style="width:50px; height: 20px" aria-label="second child" role="radio">second child</div>
+</div>
+
+<script>
+  function go() {
+    document.getElementById("parent").innerHTML = "<div role=button>new child</div>";
+  }
+</script>
diff --git a/content/test/data/accessibility/html/input-button-expected-blink.txt b/content/test/data/accessibility/html/input-button-expected-blink.txt
index 988c3e0..6d98534 100644
--- a/content/test/data/accessibility/html/input-button-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-button-expected-blink.txt
@@ -1,3 +1,3 @@
 rootWebArea
 ++genericContainer
-++++button name='Button'
\ No newline at end of file
+++++button inputType='button' name='Button'
diff --git a/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt
index 450edaa7..b692c3c 100644
--- a/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-button-in-menu-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer ignored
 ++++genericContainer
-++++++menuItem name='Button in menu element'
+++++++menuItem inputType='button' name='Button in menu element'
 ++++menu
-++++++menuItem name='Button in element with menu role'
+++++++menuItem inputType='button' name='Button in element with menu role'
diff --git a/content/test/data/accessibility/html/input-button-in-menu.html b/content/test/data/accessibility/html/input-button-in-menu.html
index 4902889..123a0ba 100644
--- a/content/test/data/accessibility/html/input-button-in-menu.html
+++ b/content/test/data/accessibility/html/input-button-in-menu.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @WIN-ALLOW:ia2_hypertext=*
 @WIN-ALLOW:xml-roles:*
 @AURALINUX-ALLOW:xml-roles:*
diff --git a/content/test/data/accessibility/html/input-button.html b/content/test/data/accessibility/html/input-button.html
index 23fd744..1ec7048 100644
--- a/content/test/data/accessibility/html/input-button.html
+++ b/content/test/data/accessibility/html/input-button.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @WIN-ALLOW:ia2_hypertext=*
 @WIN-ALLOW:xml-roles:*
 @AURALINUX-ALLOW:xml-roles:*
diff --git a/content/test/data/accessibility/html/input-checkbox-expected-blink.txt b/content/test/data/accessibility/html/input-checkbox-expected-blink.txt
index ea91520..961a6d0 100644
--- a/content/test/data/accessibility/html/input-checkbox-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-checkbox-expected-blink.txt
@@ -1,7 +1,7 @@
 rootWebArea
 ++genericContainer
-++++checkBox name='Checkbox0' checkedState=false
-++++checkBox name='Checkbox1' checkedState=true
-++++checkBox name='Checkbox2' checkedState=true
-++++checkBox name='Checkbox3' checkedState=true
-++++checkBox name='Checkbox4' checkedState=mixed
\ No newline at end of file
+++++checkBox inputType='checkbox' name='Checkbox0' checkedState=false
+++++checkBox inputType='checkbox' name='Checkbox1' checkedState=true
+++++checkBox inputType='checkbox' name='Checkbox2' checkedState=true
+++++checkBox inputType='checkbox' name='Checkbox3' checkedState=true
+++++checkBox inputType='checkbox' name='Checkbox4' checkedState=mixed
diff --git a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt
index 4dc5dfc..9873898 100644
--- a/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-checkbox-in-menu-expected-blink.txt
@@ -1,8 +1,8 @@
 rootWebArea
 ++genericContainer ignored
 ++++genericContainer
-++++++checkBox name='Checkbox1' checkedState=false
-++++++checkBox name='Checkbox2' checkedState=true
+++++++checkBox inputType='checkbox' name='Checkbox1' checkedState=false
+++++++checkBox inputType='checkbox' name='Checkbox2' checkedState=true
 ++++menu
-++++++checkBox name='Checkbox3' checkedState=true
-++++++checkBox name='Checkbox4' checkedState=mixed
+++++++checkBox inputType='checkbox' name='Checkbox3' checkedState=true
+++++++checkBox inputType='checkbox' name='Checkbox4' checkedState=mixed
diff --git a/content/test/data/accessibility/html/input-checkbox-in-menu.html b/content/test/data/accessibility/html/input-checkbox-in-menu.html
index f6649a1..f5d1332 100644
--- a/content/test/data/accessibility/html/input-checkbox-in-menu.html
+++ b/content/test/data/accessibility/html/input-checkbox-in-menu.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @WIN-ALLOW:CHECKED
 @WIN-ALLOW:checkable*
 @WIN-ALLOW:ia2_hypertext=*
diff --git a/content/test/data/accessibility/html/input-checkbox-label-expected-blink.txt b/content/test/data/accessibility/html/input-checkbox-label-expected-blink.txt
index 9b60741..189a5be 100644
--- a/content/test/data/accessibility/html/input-checkbox-label-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-checkbox-label-expected-blink.txt
@@ -1,3 +1,3 @@
 rootWebArea
 ++genericContainer
-++++checkBox name='Checkbox Title' checkedState=false
\ No newline at end of file
+++++checkBox inputType='checkbox' name='Checkbox Title' checkedState=false
diff --git a/content/test/data/accessibility/html/input-checkbox-label.html b/content/test/data/accessibility/html/input-checkbox-label.html
index 0fcd6e6..27fc22e2 100644
--- a/content/test/data/accessibility/html/input-checkbox-label.html
+++ b/content/test/data/accessibility/html/input-checkbox-label.html
@@ -1,3 +1,6 @@
+<!--
+@BLINK-ALLOW:inputType=*
+-->
 <html>
 <body>
   <label style="position: relative;">
diff --git a/content/test/data/accessibility/html/input-checkbox.html b/content/test/data/accessibility/html/input-checkbox.html
index 7a0bc7c..fb59eaab 100644
--- a/content/test/data/accessibility/html/input-checkbox.html
+++ b/content/test/data/accessibility/html/input-checkbox.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @WIN-ALLOW:checkable:*
 @WIN-ALLOW:CHECKED*
 @WIN-ALLOW:ia2_hypertext=*
diff --git a/content/test/data/accessibility/html/input-color-expected-blink.txt b/content/test/data/accessibility/html/input-color-expected-blink.txt
index 6de4914..c938a69 100644
--- a/content/test/data/accessibility/html/input-color-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-color-expected-blink.txt
@@ -1,3 +1,3 @@
 rootWebArea
 ++genericContainer
-++++colorWell value='#ff9900'
+++++colorWell inputType='color' value='#ff9900'
diff --git a/content/test/data/accessibility/html/input-color.html b/content/test/data/accessibility/html/input-color.html
index e0ff330e..6c958f1 100644
--- a/content/test/data/accessibility/html/input-color.html
+++ b/content/test/data/accessibility/html/input-color.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @MAC-DENY:AXTitle*
 @WIN-ALLOW:ia2_hypertext=*
diff --git a/content/test/data/accessibility/html/input-date-expected-blink.txt b/content/test/data/accessibility/html/input-date-expected-blink.txt
index 817e421..1a17258 100644
--- a/content/test/data/accessibility/html/input-date-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-date-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++date value='2008-09-01'
+++++date inputType='date' value='2008-09-01'
 ++++++genericContainer
 ++++++++genericContainer
 ++++++++++spinButton name='Month' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt b/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt
index 71aafb7..b0293a51 100644
--- a/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++date value='2008-09-01' controlsIds=rootWebArea
+++++date inputType='date' value='2008-09-01' controlsIds=rootWebArea
 ++++++genericContainer
 ++++++++genericContainer
 ++++++++++spinButton name='Month' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open.html b/content/test/data/accessibility/html/input-date-with-popup-open.html
index c154848..dc73a2d 100644
--- a/content/test/data/accessibility/html/input-date-with-popup-open.html
+++ b/content/test/data/accessibility/html/input-date-with-popup-open.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:ia2_hypertext=*
 @UIA-WIN-ALLOW:ControllerFor=*
diff --git a/content/test/data/accessibility/html/input-date.html b/content/test/data/accessibility/html/input-date.html
index 9380de1..d2aae226 100644
--- a/content/test/data/accessibility/html/input-date.html
+++ b/content/test/data/accessibility/html/input-date.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:ia2_hypertext=*
 -->
diff --git a/content/test/data/accessibility/html/input-datetime-expected-blink.txt b/content/test/data/accessibility/html/input-datetime-expected-blink.txt
index fac77a0..1e1d0db 100644
--- a/content/test/data/accessibility/html/input-datetime-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-datetime-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++textField value='1/1/2015 1:00AM'
+++++textField inputType='datetime' value='1/1/2015 1:00AM'
 ++++++genericContainer
 ++++++++staticText name='1/1/2015 1:00AM'
 ++++++++++inlineTextBox name='1/1/2015 1:00AM'
diff --git a/content/test/data/accessibility/html/input-datetime-local.html b/content/test/data/accessibility/html/input-datetime-local.html
index 3e2e4f4..8526057 100644
--- a/content/test/data/accessibility/html/input-datetime-local.html
+++ b/content/test/data/accessibility/html/input-datetime-local.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:description=*
 @WIN-ALLOW:haspopup*
diff --git a/content/test/data/accessibility/html/input-datetime.html b/content/test/data/accessibility/html/input-datetime.html
index 4556e3a3..c9e98a0 100644
--- a/content/test/data/accessibility/html/input-datetime.html
+++ b/content/test/data/accessibility/html/input-datetime.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:ia2_hypertext=*
 @AURALINUX-ALLOW:xml-roles:*
diff --git a/content/test/data/accessibility/html/input-email-expected-blink.txt b/content/test/data/accessibility/html/input-email-expected-blink.txt
index 032c081..1335e0c 100644
--- a/content/test/data/accessibility/html/input-email-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-email-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++textField value='someone@example.com' textSelStart=0 textSelEnd=0
+++++textField inputType='email' value='someone@example.com' textSelStart=0 textSelEnd=0
 ++++++genericContainer
 ++++++++staticText name='someone@example.com'
 ++++++++++inlineTextBox name='someone@example.com'
diff --git a/content/test/data/accessibility/html/input-email.html b/content/test/data/accessibility/html/input-email.html
index 8ec892b..d3b94a3c 100644
--- a/content/test/data/accessibility/html/input-email.html
+++ b/content/test/data/accessibility/html/input-email.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:textSel*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:caret_offset*
diff --git a/content/test/data/accessibility/html/input-file-expected-blink.txt b/content/test/data/accessibility/html/input-file-expected-blink.txt
index ec45ba3..dda4b93 100644
--- a/content/test/data/accessibility/html/input-file-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-file-expected-blink.txt
@@ -1,3 +1,3 @@
 rootWebArea
 ++genericContainer
-++++button name='Choose File' value='No file chosen'
+++++button inputType='file' name='Choose File' value='No file chosen'
diff --git a/content/test/data/accessibility/html/input-file.html b/content/test/data/accessibility/html/input-file.html
index c14a3e9..af3671b8 100644
--- a/content/test/data/accessibility/html/input-file.html
+++ b/content/test/data/accessibility/html/input-file.html
@@ -1,5 +1,6 @@
 <!DOCTYPE html>
 <!--
+@BLINK-ALLOW:inputType=*
 @WIN-ALLOW:ia2_hypertext=*
 -->
 <html>
diff --git a/content/test/data/accessibility/html/input-hidden.html b/content/test/data/accessibility/html/input-hidden.html
index eec394c..defa1f14 100644
--- a/content/test/data/accessibility/html/input-hidden.html
+++ b/content/test/data/accessibility/html/input-hidden.html
@@ -1,3 +1,6 @@
+<!--
+@BLINK-ALLOW:inputType=*
+-->
 <!DOCTYPE html>
 <html>
     <body>
diff --git a/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt
index 48098f8..43946bf 100644
--- a/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-image-button-in-menu-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer ignored
 ++++genericContainer
-++++++button name='Bullet'
+++++++button inputType='image' name='Bullet'
 ++++menu
-++++++button name='Bullet'
+++++++button inputType='image' name='Bullet'
diff --git a/content/test/data/accessibility/html/input-image-button-in-menu.html b/content/test/data/accessibility/html/input-image-button-in-menu.html
index a0a2144..871b2af 100644
--- a/content/test/data/accessibility/html/input-image-button-in-menu.html
+++ b/content/test/data/accessibility/html/input-image-button-in-menu.html
@@ -1,3 +1,6 @@
+<!--
+@BLINK-ALLOW:inputType=*
+-->
 <!DOCTYPE html>
 <html>
   <body>
diff --git a/content/test/data/accessibility/html/input-image-expected-blink.txt b/content/test/data/accessibility/html/input-image-expected-blink.txt
index 2ae6148..f04d216 100644
--- a/content/test/data/accessibility/html/input-image-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-image-expected-blink.txt
@@ -1,3 +1,3 @@
 rootWebArea
 ++genericContainer
-++++button name='Submit'
\ No newline at end of file
+++++button inputType='image' name='Submit'
diff --git a/content/test/data/accessibility/html/input-image-with-title-expected-blink.txt b/content/test/data/accessibility/html/input-image-with-title-expected-blink.txt
index 6fb784d..9f282de0 100644
--- a/content/test/data/accessibility/html/input-image-with-title-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-image-with-title-expected-blink.txt
@@ -1,3 +1,3 @@
 rootWebArea
 ++genericContainer
-++++button name='email'
+++++button inputType='image' name='email'
diff --git a/content/test/data/accessibility/html/input-image-with-title.html b/content/test/data/accessibility/html/input-image-with-title.html
index 0949768..bab8ddc 100644
--- a/content/test/data/accessibility/html/input-image-with-title.html
+++ b/content/test/data/accessibility/html/input-image-with-title.html
@@ -1,3 +1,6 @@
+<!--
+@BLINK-ALLOW:inputType=*
+-->
 <html>
 <body>
 <input type="image" src="envelope.png" id="test" title="email"/>
diff --git a/content/test/data/accessibility/html/input-image.html b/content/test/data/accessibility/html/input-image.html
index 64e07ac..b95659c 100644
--- a/content/test/data/accessibility/html/input-image.html
+++ b/content/test/data/accessibility/html/input-image.html
@@ -1,5 +1,6 @@
 <!--
 @BLINK-ALLOW:default
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:DEFAULT
 @WIN-ALLOW:xml-roles*
diff --git a/content/test/data/accessibility/html/input-inside-label-expected-blink.txt b/content/test/data/accessibility/html/input-inside-label-expected-blink.txt
index 5ad82961..0e6acd17 100644
--- a/content/test/data/accessibility/html/input-inside-label-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-inside-label-expected-blink.txt
@@ -1,12 +1,12 @@
 rootWebArea
 ++genericContainer
-++++checkBox name='foo bar baz' checkedState=false
-++++textField value='bar'
+++++checkBox inputType='checkbox' name='foo bar baz' checkedState=false
+++++textField inputType='text' value='bar'
 ++++++genericContainer
 ++++++++staticText name='bar'
 ++++++++++inlineTextBox name='bar'
-++++checkBox name='foo bar baz' checkedState=false
-++++textField value='bar'
+++++checkBox inputType='checkbox' name='foo bar baz' checkedState=false
+++++textField inputType='text' value='bar'
 ++++++genericContainer
 ++++++++staticText name='bar'
 ++++++++++inlineTextBox name='bar'
diff --git a/content/test/data/accessibility/html/input-inside-label.html b/content/test/data/accessibility/html/input-inside-label.html
index 84a951e9..17c553c 100644
--- a/content/test/data/accessibility/html/input-inside-label.html
+++ b/content/test/data/accessibility/html/input-inside-label.html
@@ -1,3 +1,6 @@
+<!--
+@BLINK-ALLOW:inputType=*
+-->
 <html>
 <body>
   <input type="checkbox" id="test1">
diff --git a/content/test/data/accessibility/html/input-list.html b/content/test/data/accessibility/html/input-list.html
index b5f8c768..aecd5d19 100644
--- a/content/test/data/accessibility/html/input-list.html
+++ b/content/test/data/accessibility/html/input-list.html
@@ -8,6 +8,7 @@
 @BLINK-ALLOW:editable
 @BLINK-ALLOW:focusable
 @BLINK-ALLOW:haspopup*
+@BLINK-ALLOW:inputType=*
 -->
 <!DOCTYPE html>
 <html>
diff --git a/content/test/data/accessibility/html/input-month-expected-blink.txt b/content/test/data/accessibility/html/input-month-expected-blink.txt
index 4a760286f..3275350 100644
--- a/content/test/data/accessibility/html/input-month-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-month-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++dateTime
+++++dateTime inputType='month'
 ++++++genericContainer
 ++++++++genericContainer
 ++++++++++spinButton name='Month' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=12.00
diff --git a/content/test/data/accessibility/html/input-month.html b/content/test/data/accessibility/html/input-month.html
index 66fff2fd..2a1184c 100644
--- a/content/test/data/accessibility/html/input-month.html
+++ b/content/test/data/accessibility/html/input-month.html
@@ -2,6 +2,7 @@
 <!--
 @BLINK-ALLOW:haspopup*
 @BLINK-ALLOW:value*
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:description*
 @WIN-ALLOW:haspopup*
diff --git a/content/test/data/accessibility/html/input-number-expected-blink.txt b/content/test/data/accessibility/html/input-number-expected-blink.txt
index d936b27..f00b667 100644
--- a/content/test/data/accessibility/html/input-number-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-number-expected-blink.txt
@@ -1,12 +1,12 @@
 rootWebArea
 ++genericContainer
-++++spinButton value='1' valueForRange=1.00
+++++spinButton inputType='number' value='1' valueForRange=1.00
 ++++++genericContainer
 ++++++++genericContainer
 ++++++++++staticText name='1'
 ++++++++++++inlineTextBox name='1'
-++++spinButton value='6' valueForRange=6.00 minValueForRange=5.00 maxValueForRange=10.00
+++++spinButton inputType='number' value='6' valueForRange=6.00 minValueForRange=5.00 maxValueForRange=10.00
 ++++++genericContainer
 ++++++++genericContainer
 ++++++++++staticText name='6'
-++++++++++++inlineTextBox name='6'
\ No newline at end of file
+++++++++++++inlineTextBox name='6'
diff --git a/content/test/data/accessibility/html/input-number.html b/content/test/data/accessibility/html/input-number.html
index ca1dd90..c393048f 100644
--- a/content/test/data/accessibility/html/input-number.html
+++ b/content/test/data/accessibility/html/input-number.html
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <!--
 @BLINK-ALLOW:currentValue*
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:maximumValue*
 @BLINK-ALLOW:minimumValue*
 @BLINK-ALLOW:valuetext*
diff --git a/content/test/data/accessibility/html/input-password-expected-blink.txt b/content/test/data/accessibility/html/input-password-expected-blink.txt
index b87c9a2..aa2d5f5 100644
--- a/content/test/data/accessibility/html/input-password-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-password-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++textField protected value='••••••' textSelStart=6 textSelEnd=6
+++++textField protected inputType='password' value='••••••' textSelStart=6 textSelEnd=6
 ++++++genericContainer
 ++++++++staticText name='••••••'
 ++++++++++inlineTextBox name='••••••'
diff --git a/content/test/data/accessibility/html/input-password.html b/content/test/data/accessibility/html/input-password.html
index 73ee1c3..c9ec012 100644
--- a/content/test/data/accessibility/html/input-password.html
+++ b/content/test/data/accessibility/html/input-password.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:textSel*
 @MAC-ALLOW:AXRole*
 @MAC-ALLOW:AXSubrole*
diff --git a/content/test/data/accessibility/html/input-radio-expected-blink.txt b/content/test/data/accessibility/html/input-radio-expected-blink.txt
index aaae13d..b5eed1a 100644
--- a/content/test/data/accessibility/html/input-radio-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-radio-expected-blink.txt
@@ -1,17 +1,17 @@
 rootWebArea
 ++genericContainer ignored
 ++++form
-++++++radioButton checkedState=false radioGroupIds=radioButton
+++++++radioButton inputType='radio' checkedState=false radioGroupIds=radioButton
 ++++++staticText name='Radio1'
 ++++++++inlineTextBox name='Radio1'
 ++++++lineBreak name='<newline>'
 ++++++++inlineTextBox name='<newline>'
-++++++radioButton checkedState=false radioGroupIds=radioButton
+++++++radioButton inputType='radio' checkedState=false radioGroupIds=radioButton
 ++++++staticText name='Radio2'
 ++++++++inlineTextBox name='Radio2'
 ++++form
-++++++radioButton name='Radio3' checkedState=false radioGroupIds=radioButton,radioButton
-++++++radioButton name='Radio4' checkedState=true radioGroupIds=radioButton,radioButton
+++++++radioButton inputType='radio' name='Radio3' checkedState=false radioGroupIds=radioButton,radioButton
+++++++radioButton inputType='radio' name='Radio4' checkedState=true radioGroupIds=radioButton,radioButton
 ++++form
-++++++radioButton name='Radio5' checkedState=false radioGroupIds=radioButton
-++++++radioButton name='Radio6' checkedState=true radioGroupIds=radioButton
+++++++radioButton inputType='radio' name='Radio5' checkedState=false radioGroupIds=radioButton
+++++++radioButton inputType='radio' name='Radio6' checkedState=true radioGroupIds=radioButton
diff --git a/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt b/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt
index 85ff50a..af0aed0b 100644
--- a/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-radio-in-menu-expected-blink.txt
@@ -1,14 +1,14 @@
 rootWebArea
 ++genericContainer ignored
 ++++genericContainer
-++++++menuItemRadio checkedState=true
+++++++menuItemRadio inputType='radio' checkedState=true
 ++++++staticText name='Radio0 '
 ++++++++inlineTextBox name='Radio0 '
-++++++menuItemRadio checkedState=false
+++++++menuItemRadio inputType='radio' checkedState=false
 ++++++staticText name='Radio1 '
 ++++++++inlineTextBox name='Radio1 '
-++++++radioButton name='Radio2' checkedState=false
+++++++radioButton inputType='radio' name='Radio2' checkedState=false
 ++++menu
-++++++radioButton name='Radio3' checkedState=false
-++++++menuItemRadio checkedState=false
-++++++menuItemRadio checkedState=true
+++++++radioButton inputType='radio' name='Radio3' checkedState=false
+++++++menuItemRadio inputType='radio' checkedState=false
+++++++menuItemRadio inputType='radio' checkedState=true
diff --git a/content/test/data/accessibility/html/input-radio-in-menu.html b/content/test/data/accessibility/html/input-radio-in-menu.html
index ef51ca2..37c91a1 100644
--- a/content/test/data/accessibility/html/input-radio-in-menu.html
+++ b/content/test/data/accessibility/html/input-radio-in-menu.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @WIN-ALLOW:CHECKED*
 @WIN-ALLOW:MIXED*
 @WIN-ALLOW:checkable*
diff --git a/content/test/data/accessibility/html/input-radio.html b/content/test/data/accessibility/html/input-radio.html
index bdf786a..0f9bbff9a 100644
--- a/content/test/data/accessibility/html/input-radio.html
+++ b/content/test/data/accessibility/html/input-radio.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:radioGroupIds=*
 @MAC-ALLOW:AXLinkedUIElements*
 @MAC-DENY:AXLinkedUIElements=[]
diff --git a/content/test/data/accessibility/html/input-range.html b/content/test/data/accessibility/html/input-range.html
index f976e79..b79ab20e 100644
--- a/content/test/data/accessibility/html/input-range.html
+++ b/content/test/data/accessibility/html/input-range.html
@@ -1,5 +1,6 @@
 <!--
 @BLINK-ALLOW:currentValue*
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:maximumValue*
 @BLINK-ALLOW:minimumValue*
 @BLINK-ALLOW:valuetext*
diff --git a/content/test/data/accessibility/html/input-reset-expected-blink.txt b/content/test/data/accessibility/html/input-reset-expected-blink.txt
index b87815bd..8b5b181 100644
--- a/content/test/data/accessibility/html/input-reset-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-reset-expected-blink.txt
@@ -1,5 +1,5 @@
 rootWebArea
 ++genericContainer
-++++textField
+++++textField inputType='text'
 ++++++genericContainer
-++++button name='Reset'
\ No newline at end of file
+++++button inputType='reset' name='Reset'
diff --git a/content/test/data/accessibility/html/input-reset.html b/content/test/data/accessibility/html/input-reset.html
index 7e61221c..6ef65cda 100644
--- a/content/test/data/accessibility/html/input-reset.html
+++ b/content/test/data/accessibility/html/input-reset.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @AURALINUX-ALLOW:focus*
 @AURALINUX-ALLOW:editable
diff --git a/content/test/data/accessibility/html/input-submit-expected-blink.txt b/content/test/data/accessibility/html/input-submit-expected-blink.txt
index 4516ae7..0e52f4c 100644
--- a/content/test/data/accessibility/html/input-submit-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-submit-expected-blink.txt
@@ -1,13 +1,13 @@
 rootWebArea
 ++genericContainer ignored
 ++++form
-++++++textField
+++++++textField inputType='text'
 ++++++++genericContainer
-++++++button default name='First submit in a form is a valid default button'
-++++++button name='Second submit in a form not a valid default button'
+++++++button default inputType='submit' name='First submit in a form is a valid default button'
+++++++button inputType='submit' name='Second submit in a form not a valid default button'
 ++++form
-++++++textField
+++++++textField inputType='text'
 ++++++++genericContainer
-++++++button default name='First image button in a form is a valid default button'
-++++++button name='Second image button in a form not a valid default button'
-++++button name='Submit outside of form not a valid default button'
+++++++button default inputType='image' name='First image button in a form is a valid default button'
+++++++button inputType='image' name='Second image button in a form not a valid default button'
+++++button inputType='submit' name='Submit outside of form not a valid default button'
diff --git a/content/test/data/accessibility/html/input-submit.html b/content/test/data/accessibility/html/input-submit.html
index 475e18b..a61d262 100644
--- a/content/test/data/accessibility/html/input-submit.html
+++ b/content/test/data/accessibility/html/input-submit.html
@@ -1,5 +1,6 @@
 <!--
 @BLINK-ALLOW:default
+@BLINK-ALLOW:inputType=*
 @WIN-ALLOW:DEFAULT
 @MAC-ALLOW:AXRole*
 @AURALINUX-ALLOW:default
diff --git a/content/test/data/accessibility/html/input-suggestions-source-element-expected-blink.txt b/content/test/data/accessibility/html/input-suggestions-source-element-expected-blink.txt
index 2d76681..241fabe 100644
--- a/content/test/data/accessibility/html/input-suggestions-source-element-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-suggestions-source-element-expected-blink.txt
@@ -1,4 +1,4 @@
 rootWebArea
 ++genericContainer
-++++textFieldWithComboBox autoComplete='list' haspopup=listbox
-++++++genericContainer
\ No newline at end of file
+++++textFieldWithComboBox autoComplete='list' inputType='text' haspopup=listbox
+++++++genericContainer
diff --git a/content/test/data/accessibility/html/input-suggestions-source-element.html b/content/test/data/accessibility/html/input-suggestions-source-element.html
index 038e853..03a31ed 100644
--- a/content/test/data/accessibility/html/input-suggestions-source-element.html
+++ b/content/test/data/accessibility/html/input-suggestions-source-element.html
@@ -7,6 +7,7 @@
 @AURALINUX-ALLOW:editable
 @AURALINUX-ALLOW:focus*
 @BLINK-ALLOW:haspopup*
+@BLINK-ALLOW:inputType=*
 -->
 <!DOCTYPE html>
 <html>
diff --git a/content/test/data/accessibility/html/input-text-expected-blink.txt b/content/test/data/accessibility/html/input-text-expected-blink.txt
index 416a1dea..4fa6185 100644
--- a/content/test/data/accessibility/html/input-text-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-text-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++textField name='Name' textSelStart=0 textSelEnd=0
+++++textField inputType='text' name='Name' textSelStart=0 textSelEnd=0
 ++++++staticText name='Name'
 ++++++++inlineTextBox name='Name'
 ++++++genericContainer
diff --git a/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt b/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt
index dcb055f..49e4dc6 100644
--- a/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-text-name-calc-expected-blink.txt
@@ -1,30 +1,30 @@
 rootWebArea
 ++genericContainer ignored
-++++textField name='Title0'
+++++textField inputType='text' name='Title0'
 ++++++genericContainer
-++++textField description='Title1' name='Label1' descriptionFrom=attribute
+++++textField description='Title1' inputType='text' name='Label1' descriptionFrom=attribute
 ++++++genericContainer
-++++textField description='Title2' name='AriaLabel2' descriptionFrom=attribute
+++++textField description='Title2' inputType='text' name='AriaLabel2' descriptionFrom=attribute
 ++++++genericContainer
-++++textField description='Title3' name='LabelledBy3' descriptionFrom=attribute
+++++textField description='Title3' inputType='text' name='LabelledBy3' descriptionFrom=attribute
 ++++++genericContainer
-++++textField name='Placeholder4'
+++++textField inputType='text' name='Placeholder4'
 ++++++staticText name='Placeholder4'
 ++++++++inlineTextBox name='Placeholder4'
 ++++++genericContainer
-++++textField name='ARIA Placeholder4a'
+++++textField inputType='text' name='ARIA Placeholder4a'
 ++++++genericContainer
-++++textField name='Placeholder4b'
+++++textField inputType='text' name='Placeholder4b'
 ++++++staticText name='Placeholder4b'
 ++++++++inlineTextBox name='Placeholder4b'
 ++++++genericContainer
-++++textField description='Title5' name='Placeholder5' descriptionFrom=attribute
+++++textField description='Title5' inputType='text' name='Placeholder5' descriptionFrom=attribute
 ++++++staticText name='Placeholder5'
 ++++++++inlineTextBox name='Placeholder5'
 ++++++genericContainer
-++++textField description='DescribedBy6' name='LabelledBy6' descriptionFrom=relatedElement
+++++textField description='DescribedBy6' inputType='text' name='LabelledBy6' descriptionFrom=relatedElement
 ++++++genericContainer
-++++textField description='DescribedBy7' name='AriaLabel7' descriptionFrom=relatedElement
+++++textField description='DescribedBy7' inputType='text' name='AriaLabel7' descriptionFrom=relatedElement
 ++++++staticText name='Placeholder7'
 ++++++++inlineTextBox name='Placeholder7'
 ++++++genericContainer
diff --git a/content/test/data/accessibility/html/input-text-name-calc.html b/content/test/data/accessibility/html/input-text-name-calc.html
index 8aa6d37..c467209 100644
--- a/content/test/data/accessibility/html/input-text-name-calc.html
+++ b/content/test/data/accessibility/html/input-text-name-calc.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @UIA-WIN-ALLOW:HelpText*
 @WIN-ALLOW:description*
 @WIN-ALLOW:explicit-name*
diff --git a/content/test/data/accessibility/html/input-text-read-only-expected-blink.txt b/content/test/data/accessibility/html/input-text-read-only-expected-blink.txt
index c75349a..03529bca 100644
--- a/content/test/data/accessibility/html/input-text-read-only-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-text-read-only-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++textField name='Name' textSelStart=0 textSelEnd=0 restriction=readOnly
+++++textField inputType='text' name='Name' textSelStart=0 textSelEnd=0 restriction=readOnly
 ++++++staticText name='Name'
 ++++++++inlineTextBox name='Name'
 ++++++genericContainer
diff --git a/content/test/data/accessibility/html/input-text-read-only.html b/content/test/data/accessibility/html/input-text-read-only.html
index 9622a7e..cc3b662 100644
--- a/content/test/data/accessibility/html/input-text-read-only.html
+++ b/content/test/data/accessibility/html/input-text-read-only.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:textSel*
 @MAC-ALLOW:AXRole*
 @MAC-ALLOW:AXPlaceholder*
diff --git a/content/test/data/accessibility/html/input-text-value-changed.html b/content/test/data/accessibility/html/input-text-value-changed.html
index b3039afd..4ba3874 100644
--- a/content/test/data/accessibility/html/input-text-value-changed.html
+++ b/content/test/data/accessibility/html/input-text-value-changed.html
@@ -1,6 +1,7 @@
 <!--
 @ANDROID-ALLOW:text_change_added_count
 @ANDROID-ALLOW:text_change_removed_count
+@BLINK-ALLOW:inputType=*
 @WAIT-FOR:After
 -->
 <html>
diff --git a/content/test/data/accessibility/html/input-text-value.html b/content/test/data/accessibility/html/input-text-value.html
index 687ace1d..b1473ed 100644
--- a/content/test/data/accessibility/html/input-text-value.html
+++ b/content/test/data/accessibility/html/input-text-value.html
@@ -4,6 +4,7 @@
 @WIN-ALLOW:IA2_STATE_MULTI_LINE
 @BLINK-ALLOW:description*
 @BLINK-ALLOW:focusable*
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:multiline
 @AURALINUX-ALLOW:*-line
 @AURALINUX-DENY:selectable-text
diff --git a/content/test/data/accessibility/html/input-text-with-selection.html b/content/test/data/accessibility/html/input-text-with-selection.html
index 5ad4be4c..94729b3 100644
--- a/content/test/data/accessibility/html/input-text-with-selection.html
+++ b/content/test/data/accessibility/html/input-text-with-selection.html
@@ -12,6 +12,7 @@
 @AURALINUX-ALLOW:*-line
 @AURALINUX-ALLOW:editable
 @AURALINUX-ALLOW:focus*
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:textSel*
 -->
 <!DOCTYPE html>
diff --git a/content/test/data/accessibility/html/input-text.html b/content/test/data/accessibility/html/input-text.html
index eda91b0..82b49ae 100644
--- a/content/test/data/accessibility/html/input-text.html
+++ b/content/test/data/accessibility/html/input-text.html
@@ -1,5 +1,6 @@
 <!DOCTYPE html>
 <!--
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:textSel*
 @MAC-ALLOW:AXEditableAncestor*
 @MAC-ALLOW:AXHighestEditableAncestor*
diff --git a/content/test/data/accessibility/html/input-time-expected-blink.txt b/content/test/data/accessibility/html/input-time-expected-blink.txt
index 95895126..02e3298 100644
--- a/content/test/data/accessibility/html/input-time-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-time-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++inputTime value='00:00:00'
+++++inputTime inputType='time' value='00:00:00'
 ++++++genericContainer
 ++++++++genericContainer
 ++++++++++spinButton name='Hours' value='12' valueForRange=12.00 minValueForRange=1.00 maxValueForRange=12.00
diff --git a/content/test/data/accessibility/html/input-time.html b/content/test/data/accessibility/html/input-time.html
index b31c121a..20fadac 100644
--- a/content/test/data/accessibility/html/input-time.html
+++ b/content/test/data/accessibility/html/input-time.html
@@ -1,4 +1,5 @@
 <!--
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:ia2_hypertext=*
 @WIN-ALLOW:xml-roles*
diff --git a/content/test/data/accessibility/html/input-url.html b/content/test/data/accessibility/html/input-url.html
index fe496c5..1ddea8a 100644
--- a/content/test/data/accessibility/html/input-url.html
+++ b/content/test/data/accessibility/html/input-url.html
@@ -9,6 +9,7 @@
 @AURALINUX-ALLOW:text-input-type:*
 @AURALINUX-ALLOW:focus*
 @AURALINUX-ALLOW:editable
+@BLINK-ALLOW:inputType=*
 @BLINK-ALLOW:textSel*
 -->
 <!DOCTYPE html>
diff --git a/content/test/data/accessibility/html/input-week-expected-blink.txt b/content/test/data/accessibility/html/input-week-expected-blink.txt
index 751ef207..e298a6fe1 100644
--- a/content/test/data/accessibility/html/input-week-expected-blink.txt
+++ b/content/test/data/accessibility/html/input-week-expected-blink.txt
@@ -1,6 +1,6 @@
 rootWebArea
 ++genericContainer
-++++dateTime
+++++dateTime inputType='week'
 ++++++genericContainer
 ++++++++genericContainer
 ++++++++++staticText name='Week '
@@ -13,4 +13,4 @@
 ++++++++++spinButton name='Year' valueForRange=0.00 minValueForRange=1.00 maxValueForRange=275760.00
 ++++++++++++staticText name='----'
 ++++++++++++++inlineTextBox name='----'
-++++++popUpButton name='Show date picker' haspopup=menu
\ No newline at end of file
+++++++popUpButton name='Show date picker' haspopup=menu
diff --git a/content/test/data/accessibility/html/input-week.html b/content/test/data/accessibility/html/input-week.html
index ba7e5e2..b702a34 100644
--- a/content/test/data/accessibility/html/input-week.html
+++ b/content/test/data/accessibility/html/input-week.html
@@ -1,5 +1,6 @@
 <!--
 @BLINK-ALLOW:haspopup*
+@BLINK-ALLOW:inputType=*
 @MAC-ALLOW:AXRole*
 @WIN-ALLOW:ia2_hypertext=*
 @WIN-ALLOW:description*
diff --git a/content/test/gpu/OWNERS b/content/test/gpu/OWNERS
index dc1047b0..59d5ac0c 100644
--- a/content/test/gpu/OWNERS
+++ b/content/test/gpu/OWNERS
@@ -11,4 +11,5 @@
 # Emeritus:
 # dtu@chromium.org
 
-# COMPONENT: Test
+# COMPONENT: Internals>GPU>Internals
+# TEAM: graphics-dev@chromium.org
diff --git a/content/test/gpu/gather_power_measurement_results.py b/content/test/gpu/gather_power_measurement_results.py
index cb2933fa..36fae33a 100755
--- a/content/test/gpu/gather_power_measurement_results.py
+++ b/content/test/gpu/gather_power_measurement_results.py
@@ -235,7 +235,7 @@
     formatter_class=argparse.ArgumentDefaultsHelpFormatter)
   parser.add_argument('-v', '--verbose', action='store_true', default=False,
                       help='Enable verbose output')
-  parser.add_argument('--bot', default='Win10 FYI Release (Intel HD 630)',
+  parser.add_argument('--bot', default='Win10 FYI x64 Release (Intel HD 630)',
                       help='Which bot to examine.')
   parser.add_argument('--last-build', type=int,
                       help='The last of a range of builds to fetch. If not '
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
index bceb71b..31b5fa8d 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -94,7 +94,7 @@
 # declare any OS.
 crbug.com/979444 [ chromeos ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ]
 crbug.com/979444 [ linux ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ]
-crbug.com/979444 [ mac ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ]
+crbug.com/979444 [ mac no-passthrough ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ]
 crbug.com/979444 [ win ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ]
 crbug.com/979444 [ android no-angle ] conformance/textures/misc/texture-corner-case-videos.html [ RetryOnFailure ]
 
@@ -343,11 +343,48 @@
 crbug.com/635081 [ mac nvidia-0xfe9 ] conformance/programs/gl-bind-attrib-location-long-names-test.html [ Failure ]
 crbug.com/635081 [ mac nvidia-0xfe9 ] conformance/programs/gl-bind-attrib-location-test.html [ Failure ]
 crbug.com/635081 [ mac nvidia-0xfe9 no-passthrough ] conformance/renderbuffers/framebuffer-object-attachment.html [ Failure ]
-crbug.com/635081 [ mac nvidia-0xfe9 ] conformance/textures/misc/tex-input-validation.html [ Failure ]
+crbug.com/635081 [ mac nvidia-0xfe9 no-passthrough ] conformance/textures/misc/tex-input-validation.html [ Failure ]
 crbug.com/784817 [ mac nvidia-0xfe9 ] conformance/glsl/bugs/init-array-with-loop.html [ Failure ]
 crbug.com/871352 [ mac debug nvidia-0xfe9 ] conformance/uniforms/uniform-samplers-test.html [ Failure ]
 crbug.com/948218 [ mac debug nvidia-0xfe9 ] conformance/glsl/misc/shader-with-non-reserved-words.html [ Failure ]
 
+# Mac / Passthrough command decoder
+crbug.com/990368 [ mac passthrough ] conformance/canvas/canvas-test.html [ Failure ]
+crbug.com/990368 [ mac passthrough ] conformance/canvas/draw-static-webgl-to-multiple-canvas-test.html [ Failure ]
+crbug.com/990368 [ mac passthrough ] conformance/canvas/draw-webgl-to-canvas-test.html [ Failure ]
+crbug.com/990368 [ mac passthrough ] conformance/canvas/to-data-url-test.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/context/context-attribute-preserve-drawing-buffer.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/context/context-attributes-alpha-depth-stencil-antialias.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/context/context-hidden-alpha.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/context/context-no-alpha-fbo-with-alpha.html [ Failure ]
+crbug.com/990368 [ mac passthrough ] conformance/context/premultiplyalpha-test.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/extensions/oes-texture-float-with-video.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/extensions/oes-texture-half-float-with-video.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/extensions/oes-texture-half-float.html [ Failure ]
+crbug.com/angleproject/3768 [ mac passthrough ] conformance/glsl/bugs/sequence-operator-evaluation-order.html [ Failure ]
+crbug.com/angleproject/3769 [ mac passthrough ] conformance/glsl/misc/shader-struct-scope.html [ Failure ]
+crbug.com/angleproject/3769 [ mac passthrough ] conformance/glsl/misc/shader-with-short-circuiting-operators.html [ Failure ]
+crbug.com/angleproject/3771 [ mac passthrough ] conformance/glsl/samplers/glsl-function-texture2dprojlod.html [ Failure ]
+crbug.com/angleproject/3770 [ mac passthrough ] conformance/ogles/GL/build/build_177_to_178.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/rendering/color-mask-preserved-during-implicit-clears.html [ Failure ]
+crbug.com/angleproject/3772 [ mac passthrough ] conformance/rendering/draw-webgl-to-canvas-2d-repeatedly.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/rendering/scissor-rect-repeated-rendering.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/textures/image_bitmap_from_video/* [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/textures/video/* [ Failure ]
+crbug.com/990368 [ mac passthrough ] conformance/textures/webgl_canvas/* [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/textures/misc/copy-tex-image-2d-formats.html [ Failure ]
+crbug.com/angleproject/3774 [ mac passthrough ] conformance/textures/misc/gl-pixelstorei.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/textures/misc/gl-teximage.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/textures/misc/tex-image-webgl.html [ Failure ]
+crbug.com/angleproject/3766 [ mac passthrough ] conformance/textures/misc/tex-input-validation.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/textures/misc/tex-video-using-tex-unit-non-zero.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/textures/misc/texture-corner-case-videos.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/textures/misc/texture-npot-video.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/textures/misc/texture-upload-size.html [ Failure ]
+crbug.com/989194 [ mac passthrough ] conformance/textures/misc/texture-video-transparent.html [ Failure ]
+
+# Mac / Passthrough command decoder / AMD
+crbug.com/angleproject/3767 [ mac passthrough amd ] conformance/rendering/rendering-stencil-large-viewport.html [ Failure ]
 
 ####################
 # Linux failures   #
diff --git a/content/test/navigation_simulator_impl.cc b/content/test/navigation_simulator_impl.cc
index 48fe6101..a0f248d 100644
--- a/content/test/navigation_simulator_impl.cc
+++ b/content/test/navigation_simulator_impl.cc
@@ -632,6 +632,8 @@
   }
 
   state_ = FINISHED;
+  if (!keep_loading_)
+    StopLoading();
 
   if (!IsRendererDebugURL(navigation_url_))
     CHECK_EQ(1, num_did_finish_navigation_called_);
@@ -654,6 +656,8 @@
   render_frame_host_->AbortCommit(request_);
 
   state_ = FINISHED;
+  StopLoading();
+
   CHECK_EQ(1, num_did_finish_navigation_called_);
 }
 
@@ -757,6 +761,8 @@
   }
 
   state_ = FINISHED;
+  if (!keep_loading_)
+    StopLoading();
 
   CHECK_EQ(1, num_did_finish_navigation_called_);
 }
@@ -801,6 +807,9 @@
     return;
   }
   state_ = FINISHED;
+  if (!keep_loading_)
+    StopLoading();
+
   CHECK_EQ(1, num_did_start_navigation_called_);
   CHECK_EQ(1, num_did_finish_navigation_called_);
 }
@@ -1066,9 +1075,9 @@
 
       // A navigation to a renderer-debug URL cannot commit. Simulate the
       // renderer process aborting it.
-      web_contents_->GetMainFrame()->OnMessageReceived(
-          FrameHostMsg_DidStopLoading(
-              web_contents_->GetMainFrame()->GetRoutingID()));
+      render_frame_host_ =
+          static_cast<TestRenderFrameHost*>(web_contents_->GetMainFrame());
+      StopLoading();
       state_ = FAILED;
       return false;
     } else if (request_ &&
@@ -1332,4 +1341,22 @@
   return params;
 }
 
+void NavigationSimulatorImpl::SetKeepLoading(bool keep_loading) {
+  keep_loading_ = keep_loading;
+}
+
+void NavigationSimulatorImpl::StopLoading() {
+  CHECK(render_frame_host_);
+  render_frame_host_->OnMessageReceived(
+      FrameHostMsg_DidStopLoading(render_frame_host_->GetRoutingID()));
+}
+
+void NavigationSimulatorImpl::FailLoading(
+    const GURL& url,
+    int error_code,
+    const base::string16& error_description) {
+  CHECK(render_frame_host_);
+  render_frame_host_->DidFailLoadWithError(url, error_code, error_description);
+}
+
 }  // namespace content
diff --git a/content/test/navigation_simulator_impl.h b/content/test/navigation_simulator_impl.h
index d5b8c34..1f590bb 100644
--- a/content/test/navigation_simulator_impl.h
+++ b/content/test/navigation_simulator_impl.h
@@ -100,6 +100,12 @@
   NavigationHandleImpl* GetNavigationHandle() override;
   content::GlobalRequestID GetGlobalRequestID() override;
 
+  void SetKeepLoading(bool keep_loading) override;
+  void StopLoading() override;
+  void FailLoading(const GURL& url,
+                   int error_code,
+                   const base::string16& error_description) override;
+
   // Additional utilites usable only inside content/.
 
   // This will do the very beginning of a navigation but stop before the
@@ -292,6 +298,7 @@
   bool auto_advance_ = true;
   bool drop_swap_out_ack_ = false;
   bool block_on_before_unload_ack_ = false;
+  bool keep_loading_ = false;
 
   // Generic params structure used for fully customized browser initiated
   // navigation requests. Only valid if explicitely provided.
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index db176a6f..511ec284 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -217,6 +217,8 @@
   void UpdateUserGestureCarryoverInfo() override {}
 #endif
 
+  void EvictFromBackForwardCache() override {}
+
  private:
   std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params>
       last_commit_params_;
diff --git a/content/utility/BUILD.gn b/content/utility/BUILD.gn
index 0c5956d..4538dc2 100644
--- a/content/utility/BUILD.gn
+++ b/content/utility/BUILD.gn
@@ -64,7 +64,7 @@
     deps += [
       "//media",
       "//media/mojo:buildflags",
-      "//media/mojo/interfaces:constants",
+      "//media/mojo/mojom:constants",
       "//media/mojo/services",
     ]
   }
diff --git a/content/utility/utility_service_factory.cc b/content/utility/utility_service_factory.cc
index a16d93d..9b0759a 100644
--- a/content/utility/utility_service_factory.cc
+++ b/content/utility/utility_service_factory.cc
@@ -34,7 +34,7 @@
 
 #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
 #include "media/cdm/cdm_adapter_factory.h"           // nogncheck
-#include "media/mojo/interfaces/constants.mojom.h"   // nogncheck
+#include "media/mojo/mojom/constants.mojom.h"   // nogncheck
 #include "media/mojo/services/cdm_service.h"         // nogncheck
 #include "media/mojo/services/mojo_cdm_helper.h"     // nogncheck
 #include "media/mojo/services/mojo_media_client.h"   // nogncheck
diff --git a/docs/security/integer-semantics.md b/docs/security/integer-semantics.md
index 87569cf..8b73d9e 100644
--- a/docs/security/integer-semantics.md
+++ b/docs/security/integer-semantics.md
@@ -21,12 +21,13 @@
 base/numerics](../../base/numerics/README.md) to avoid overflows, **especially when
 calculating the size or offset of memory allocations**.
 * Use unsigned types for values that shouldn't be negative or where defined
-overflow behavior is required.
-* Use explicitly sized integer types, such as `int32_t`, `int64_t`, or
-`uint32_t`, since caller and callee could potentially use different
-interpretations of implicitly-sized types like `int` or `long`. (For example, a
-64-bit browser process and a 32-bit plug-in process might interpret `long`
-differently.)
+overflow behavior is required. (Overflow is undefined behavior for signed
+types!)
+* Across any process boundary, use explicitly sized integer types, such as
+`int32_t`, `int64_t`, or `uint32_t`, since caller and callee could potentially
+use different interpretations of implicitly-sized types like `int` or `long`.
+(For example, a 64-bit browser process and a 32-bit plug-in process might
+interpret `long` differently.)
 
 ## Be Aware Of The Subtleties Of Integer Types Across Languages
 
@@ -50,12 +51,12 @@
 
 You need to make sure that every integer value survives its journey across
 languages intact. That generally means explicit casts with range checks; the
-easiest way to do this is with the `base::checked_cast` or
+easiest way to do this is with the `base::checked_cast` or (much less likely)
 `base::saturated_cast` templates in base/numerics. Depending on how the integer
 object is going to be used, and in which direction the value is flowing, it may
 make sense to cast the value to `jint` (an ID or regular integer), `jlong` (a
 regular long integer), `size_t` (a size or index), or one of the other more
-exotic C++ integer types like `off_t`.
+exotic C/C++ integer types like `off_t`.
 
 ### JavaScript And JSON
 
diff --git a/docs/ui/android/mvc_simple_list_tutorial.md b/docs/ui/android/mvc_simple_list_tutorial.md
index cba200e..442cbdf 100644
--- a/docs/ui/android/mvc_simple_list_tutorial.md
+++ b/docs/ui/android/mvc_simple_list_tutorial.md
@@ -8,32 +8,37 @@
 label.
 
 ### Additional Resources
-[Introductory MVC tutorial][mvc_tutorial_link]
-
-#### Todo
-[Update this doc to use data providers](https://crbug.com/967054)
+* [Introductory MVC tutorial][mvc_tutorial_link]
+* [Expanding to RecyclerViews in MVC][mvc_recycler_view_tutorial]
 
 ### File Structure
 The file structure of our component will be the following:
 * ./chrome/android/java/src/org/chromium/chrome/browser/simple_menu/
   * [`SimpleMenuCoordinator.java`](#SimpleMenuCoordinator)
+  * [`SimpleMenuMediator.java`](#SimpleMenuMediator)
   * [`SimpleMenuItemViewBinder.java`](#SimpleMenuItemViewBinder)
   * [`SimpleMenuProperties.java`](#SimpleMenuProperties)
 * ./chrome/android/java/res/layout/
   * [`simple_menu_item.xml`](#simple_menu_item_xml)
 
 ### SimpleMenuCoordinator
-This class will own the ListAdapter that knows how to show PropertyModels. In this example we'll be
-combining the responsibilities of what would otherwise be the coordinator and mediator for
-simplicity.
+This class will own the ```ModelListAdapter``` that knows how to show ```PropertyModels```. In
+this example we'll be combining the responsibilities of what would otherwise be the coordinator
+and mediator for simplicity.
 
 ```java
 public class SimpleMenuCoordinator {
 
-    public SimpleMenuCoordinator(Context context, ListView listView) {
-        ModelListAdapter adapter = new ModelListAdapter();
+    private SimpleMenuMediator mMediator;
 
-        final LayoutInflater layoutInflater = context.getSystemService(LAYOUT_INFLATER_SERVICE);
+    public SimpleMenuCoordinator(Context context, ListView listView) {
+        ModelList listItems = new ModelList();
+
+        // Once this is attached to the ListView, there is no need to hold a reference to it.
+        ModelListAdapter adapter = new ModelListAdapter(listItems);
+
+        final LayoutInflater layoutInflater =
+                (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
 
         // If this is a heterogeneous list, register more than one type.
         adapter.registerType(
@@ -43,27 +48,34 @@
 
         listView.setAdapter(adapter);
 
-        List<Pair<Integer, PropertyModel>> items = new ArrayList<>();
-        PropertyModel listModel1 = generateListItem(
+        mMediator = new SimpleMenuMediator(context, listItems);
+    }
+}
+```
+
+### SimpleMenuMediator
+This class is responsible for pushing updates into the ```ModelList```. Updates to that
+object are automatically pushed and bound to the list view. For a more complex system, the
+```ModelList``` may be part of a larger ```PropertyModel``` that the mediator maintains.
+```java
+class SimpleMenuMediator {
+
+    private ModelList mModelList;
+
+    SimpleMenuMediator(Context context, ModelList modelList) {
+        mModelList = modelList;
+        PropertyModel itemModel = generateListItem(
                 ApiCompatibilityUtils.getDrawable(context.getResources(), R.drawable.icon),
                 context.getResources().getString(R.string.label));
-        // The list adapter needs to be told what kind of view should render the data; hence the
-        // pair object.
-        list.add(new Pair(ListItemType.DEFAULT, listModel1));
-
-        // ... add other list items as needed. Typically this work is done in the mediator piece of
-        // the component.
-
-        adapter.updateModels(items);
+        mModelList.add(new ModelListAdapter.ListItem(ListItemType.DEFAULT, itemModel));
     }
 
-    public PropertyModel generateListItem(Drawable icon, String text) {
-        return PropertyModel.Builder(SimpleMenuProperties.ALL_KEYS)
+    private PropertyModel generateListItem(Drawable icon, String text) {
+        return new PropertyModel.Builder(SimpleMenuProperties.ALL_KEYS)
                 .with(SimpleMenuProperties.ICON, icon)
                 .with(SimpleMenuProperties.LABEL, text)
                 .with(SimpleMenuProperties.CLICK_LISTENER, (view) -> handleClick(view))
                 .build();
-        // Click handling can be done as above or the listener can be passed in.
     }
 
     private void handleClick(View view) {
@@ -72,6 +84,7 @@
 }
 ```
 
+
 ### SimpleMenuProperties
 These are the types of data that we want to apply to each list item in our menu.
 ```java
@@ -122,7 +135,6 @@
             view.setOnClickListener(model.get(SimpleMenuProperties.CLICK_LISTENER));
         }
     }
-
 }
 ```
 
@@ -157,4 +169,5 @@
 ```
 
 [mvc_tutorial_link]:https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ui/android/mvc_architecture_tutorial.md
+[mvc_recycler_view_tutorial]:https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ui/android/mvc_simple_recycler_view_tutorial.md
 
diff --git a/docs/ui/android/mvc_simple_recycler_view_tutorial.md b/docs/ui/android/mvc_simple_recycler_view_tutorial.md
new file mode 100644
index 0000000..65bee2a31
--- /dev/null
+++ b/docs/ui/android/mvc_simple_recycler_view_tutorial.md
@@ -0,0 +1,60 @@
+# Simple RecyclerView use in MVC
+
+### Overview
+This tutorial briefly describes the use of ```RecyclerViews``` in an MVC component. For the
+prerequisites to this tutorial, see [Additional Resources](#Additional-Resources).
+
+Using ```RecyclerViews``` in a basic way in MVC is now very similar to how basic non-recycler
+lists work. The general flow is as follows:
+* Build and maintain a [```ModelList```][model_list_link].
+* Create a [```SimpleRecyclerViewAdapter```][simple_rva_link].
+* Register each type of view with the adapter.
+* Clean up recycled views if necessary.
+
+Both the ```ModelListAdapter``` and the ```SimpleRecyclerViewAdapter```  implement the
+```MVCListAdapter``` interface. That is to say that usage of the two adapters is roughly identical.
+The main reason to use one or the other is dependent on the capabilities needed by the views that
+each adapter is attached to. Changing from using a ```ListView``` to a ```RecyclerView``` should be
+simple once the adapter is implemented.
+
+### Additional Resources
+* [Introductory MVC tutorial][mvc_tutorial_link]
+* [Simple MVC list tutorial][mvc_list_tutorial_link]
+
+### Instantiating a ```SimpleRecyclerViewAdapter```
+
+A ```SimpleRecyclerViewAdapter``` is instantiated the same way a ```ModelListAdapter``` is; you
+only need to provide a handle to the ```ModelList``` for the data the view will display.
+
+### Fast view lookup
+Typical usage of ```RecyclerView``` requires the creation of a ```ViewHolder``` to cache the views
+that frequently have new content bound to them. The ```SimpleRecyclerViewAdapter``` does away with
+this concept.
+
+A generic solution to fast view lookup can be found in
+[```ViewLookupCachingFrameLayout```][fast_lookup_frame_layout_link]. This version of a
+```FrameLayout``` exposes a method: ```fastFindViewById```. The added method attempts to find the
+specified view, and if it exists, it will be cached for faster lookups. See the full documentation
+for this class [here][fast_lookup_frame_layout_link].
+
+### Cleaning up a recycled view
+In some cases complex views can hold on to expensive resources; the most common cases is holding a
+reference to a large bitmap. The ```SimpleRecyclerViewAdapter``` does not explicitly provide a way
+to do resource cleanup, but this can still be achieved with ```RecyclerView#RecyclerListener```.
+
+```java
+recyclerListener = (holder) -> {
+    // Do cleanup for |holder| here. The root view can be accessed via |holder#itemView|
+};
+
+// Optionally the listener can be defined in-line below.
+mRecyclerView.setRecyclerListener(recyclerListener);
+
+````
+
+[model_list_link]:(https://codesearch.chromium.org/chromium/src/ui/android/java/src/org/chromium/ui/modelutil/MVCListAdapter.java?rcl=d22c9731463bad77645cb0f1a928dec7da79bff9&l=38)
+[simple_rva_link]:(https://codesearch.chromium.org/chromium/src/ui/android/java/src/org/chromium/ui/modelutil/SimpleRecyclerViewAdapter.java)
+[mvc_tutorial_link]:https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ui/android/mvc_architecture_tutorial.md
+[mvc_list_tutorial_link]:https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ui/android/mvc_simple_list_tutorial.md
+[fast_lookup_frame_layout_link]:https://codesearch.chromium.org/chromium/src/ui/android/java/src/org/chromium/ui/widget/ViewLookupCachingFrameLayout.java
+
diff --git a/extensions/browser/updater/extension_downloader.cc b/extensions/browser/updater/extension_downloader.cc
index 79fe4b38..8efc5b8 100644
--- a/extensions/browser/updater/extension_downloader.cc
+++ b/extensions/browser/updater/extension_downloader.cc
@@ -572,9 +572,8 @@
         })");
   auto resource_request = std::make_unique<network::ResourceRequest>();
   resource_request->url = active_request->full_url(),
-  resource_request->load_flags = net::LOAD_DO_NOT_SEND_COOKIES |
-                                 net::LOAD_DO_NOT_SAVE_COOKIES |
-                                 net::LOAD_DISABLE_CACHE;
+  resource_request->load_flags = net::LOAD_DISABLE_CACHE;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
 
   // Send traffic-management headers to the webstore.
   // https://bugs.chromium.org/p/chromium/issues/detail?id=647516
@@ -988,10 +987,11 @@
 
   int load_flags = net::LOAD_DISABLE_CACHE;
   bool is_secure = fetch->url.SchemeIsCryptographic();
-  if (fetch->credentials != ExtensionFetch::CREDENTIALS_COOKIES || !is_secure) {
-    load_flags |= net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES;
-  }
   extension_loader_resource_request_->load_flags = load_flags;
+  if (fetch->credentials != ExtensionFetch::CREDENTIALS_COOKIES || !is_secure) {
+    extension_loader_resource_request_->credentials_mode =
+        network::mojom::CredentialsMode::kOmit;
+  }
 
   if (fetch->credentials == ExtensionFetch::CREDENTIALS_OAUTH2_TOKEN &&
       is_secure) {
diff --git a/extensions/common/api/_api_features.json b/extensions/common/api/_api_features.json
index 993ef7cf..97baa25 100644
--- a/extensions/common/api/_api_features.json
+++ b/extensions/common/api/_api_features.json
@@ -305,7 +305,7 @@
   "management.installReplacementWebApp": {
     "dependencies": ["manifest:replacement_web_app"],
     "channel": "stable",
-    "extension_types": ["extension"]
+    "extension_types": ["extension", "platform_app"]
   },
   "management.uninstallSelf": {
     "dependencies": [],
diff --git a/fuchsia/base/BUILD.gn b/fuchsia/base/BUILD.gn
index f3db8b8..4eed8c3 100644
--- a/fuchsia/base/BUILD.gn
+++ b/fuchsia/base/BUILD.gn
@@ -90,6 +90,7 @@
     "//base",
     "//base:testfidl",
     "//base/test:run_all_unittests",
+    "//base/test:test_support",
     "//testing/gtest",
   ]
 }
diff --git a/fuchsia/base/agent_impl_unittests.cc b/fuchsia/base/agent_impl_unittests.cc
index dee70fa..6e0e4c5 100644
--- a/fuchsia/base/agent_impl_unittests.cc
+++ b/fuchsia/base/agent_impl_unittests.cc
@@ -9,7 +9,7 @@
 #include "base/fuchsia/service_directory_client.h"
 #include "base/fuchsia/testfidl/cpp/fidl.h"
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
+#include "base/test/scoped_task_environment.h"
 #include "fuchsia/base/fit_adapter.h"
 #include "fuchsia/base/result_receiver.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -100,7 +100,9 @@
     return nullptr;
   }
 
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   std::unique_ptr<base::fuchsia::ServiceDirectory> services_;
   std::unique_ptr<base::fuchsia::ServiceDirectoryClient> services_client_;
 
diff --git a/fuchsia/cipd/BUILD.gn b/fuchsia/cipd/BUILD.gn
index 367b360..c99925a 100644
--- a/fuchsia/cipd/BUILD.gn
+++ b/fuchsia/cipd/BUILD.gn
@@ -176,7 +176,7 @@
 
 cipd_archive("chromedriver") {
   cipd_manifest_name = "chromedriver.yaml"
-  cipd_path = "chromium/fuchsia/chromedriver-\${os}-\${arch}"
+  cipd_path = "chromium/fuchsia/chromedriver/\${os}-\${arch}"
   cipd_description = "Prebuilt Chromedriver binary for Fuchsia host."
 
   deps = [
diff --git a/fuchsia/engine/context_provider_impl_unittest.cc b/fuchsia/engine/context_provider_impl_unittest.cc
index 088d2778..f9821e9 100644
--- a/fuchsia/engine/context_provider_impl_unittest.cc
+++ b/fuchsia/engine/context_provider_impl_unittest.cc
@@ -29,9 +29,9 @@
 #include "base/fuchsia/file_utils.h"
 #include "base/fuchsia/fuchsia_logging.h"
 #include "base/fuchsia/service_directory.h"
-#include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
 #include "base/test/multiprocess_test.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/test/test_timeouts.h"
 #include "fuchsia/engine/common.h"
 #include "fuchsia/engine/fake_context.h"
@@ -46,7 +46,9 @@
 constexpr char kTitle[] = "Palindrome";
 
 MULTIPROCESS_TEST_MAIN(SpawnContextServer) {
-  base::MessageLoopForIO message_loop;
+  base::test::ScopedTaskEnvironment scoped_task_environment(
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO);
 
   base::FilePath data_dir;
   CHECK(base::PathService::Get(base::DIR_APP_DATA, &data_dir));
@@ -177,7 +179,9 @@
   }
 
  protected:
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   std::unique_ptr<ContextProviderImpl> provider_;
   fuchsia::web::ContextProviderPtr provider_ptr_;
   fidl::BindingSet<fuchsia::web::ContextProvider> bindings_;
diff --git a/fuchsia/engine/test/web_engine_test_launcher.cc b/fuchsia/engine/test/web_engine_test_launcher.cc
index a05759d2..d989d0a 100644
--- a/fuchsia/engine/test/web_engine_test_launcher.cc
+++ b/fuchsia/engine/test/web_engine_test_launcher.cc
@@ -57,9 +57,10 @@
 
 int main(int argc, char** argv) {
   base::CommandLine::Init(argc, argv);
-  base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      switches::kOzonePlatform, "headless");
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kDisableGpu);
+  auto* command_line = base::CommandLine::ForCurrentProcess();
+  command_line->AppendSwitchASCII(switches::kOzonePlatform, "headless");
+  command_line->AppendSwitchASCII(switches::kEnableLogging, "stderr");
+  command_line->AppendSwitch(switches::kDisableGpu);
 
   size_t parallel_jobs = base::NumParallelJobs();
   if (parallel_jobs > 1U) {
diff --git a/fuchsia/engine/web_engine_debug_integration_test.cc b/fuchsia/engine/web_engine_debug_integration_test.cc
index e70c05b..c7df69d 100644
--- a/fuchsia/engine/web_engine_debug_integration_test.cc
+++ b/fuchsia/engine/web_engine_debug_integration_test.cc
@@ -10,6 +10,7 @@
 #include "base/fuchsia/file_utils.h"
 #include "base/fuchsia/service_directory_client.h"
 #include "base/macros.h"
+#include "base/test/scoped_task_environment.h"
 #include "fuchsia/base/fit_adapter.h"
 #include "fuchsia/base/frame_test_util.h"
 #include "fuchsia/base/result_receiver.h"
@@ -93,7 +94,9 @@
               fuchsia::web::ContextError::REMOTE_DEBUGGING_PORT_NOT_OPENED);
   }
 
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
 
   TestDebugListener dev_tools_listener_;
   fidl::Binding<fuchsia::web::DevToolsListener> dev_tools_listener_binding_;
diff --git a/fuchsia/engine/web_engine_main_delegate.cc b/fuchsia/engine/web_engine_main_delegate.cc
index e88300dc..9ef5b497 100644
--- a/fuchsia/engine/web_engine_main_delegate.cc
+++ b/fuchsia/engine/web_engine_main_delegate.cc
@@ -24,7 +24,11 @@
 
 void InitLoggingFromCommandLine(const base::CommandLine& command_line) {
   logging::LoggingSettings settings;
-  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  if (command_line.GetSwitchValueASCII(switches::kEnableLogging) == "stderr") {
+    settings.logging_dest = logging::LOG_TO_STDERR;
+  } else {
+    settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
+  }
   if (command_line.HasSwitch(switches::kLogFile)) {
     settings.logging_dest |= logging::LOG_TO_FILE;
     settings.log_file =
diff --git a/fuchsia/mojom/BUILD.gn b/fuchsia/mojom/BUILD.gn
index c797103..e8c4919 100644
--- a/fuchsia/mojom/BUILD.gn
+++ b/fuchsia/mojom/BUILD.gn
@@ -34,6 +34,7 @@
   deps = [
     ":example_interfaces",
     "//base:testfidl",
+    "//base/test:test_support",
     "//mojo/core/test:run_all_unittests",
     "//mojo/public/cpp/test_support:test_utils",
     "//testing/gtest",
diff --git a/fuchsia/mojom/fidl_interface_request_mojom_traits_unittest.cc b/fuchsia/mojom/fidl_interface_request_mojom_traits_unittest.cc
index f5ca105..0be77cf 100644
--- a/fuchsia/mojom/fidl_interface_request_mojom_traits_unittest.cc
+++ b/fuchsia/mojom/fidl_interface_request_mojom_traits_unittest.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/fuchsia/testfidl/cpp/fidl.h"
-#include "base/message_loop/message_loop.h"
+#include "base/test/scoped_task_environment.h"
 #include "fuchsia/mojom/example.mojom.h"
 #include "fuchsia/mojom/test_interface_request_mojom_traits.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
@@ -15,7 +15,9 @@
 using base::fuchsia::testfidl::TestInterfacePtr;
 
 TEST(InterfaceRequestStructTraitsTest, Serialization) {
-  base::MessageLoopForIO message_loop;
+  base::test::ScopedTaskEnvironment scoped_task_environment(
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO);
   TestInterfacePtr test_ptr;
   fidl::InterfaceRequest<TestInterface> input_request = test_ptr.NewRequest();
   fidl::InterfaceRequest<TestInterface> output_request;
diff --git a/fuchsia/runners/cast/cast_runner_integration_test.cc b/fuchsia/runners/cast/cast_runner_integration_test.cc
index 3001e1c..1ecbe9b 100644
--- a/fuchsia/runners/cast/cast_runner_integration_test.cc
+++ b/fuchsia/runners/cast/cast_runner_integration_test.cc
@@ -10,9 +10,9 @@
 #include "base/fuchsia/scoped_service_binding.h"
 #include "base/fuchsia/service_directory.h"
 #include "base/fuchsia/service_directory_client.h"
-#include "base/message_loop/message_loop.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/bind_test_util.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "fuchsia/base/agent_impl.h"
@@ -242,7 +242,9 @@
   }
 
   const base::RunLoop::ScopedRunTimeoutForTest run_timeout_;
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   net::EmbeddedTestServer test_server_;
 
   // Returns fake Cast application information to the CastRunner.
diff --git a/fuchsia/runners/web/web_runner_smoke_test.cc b/fuchsia/runners/web/web_runner_smoke_test.cc
index 03d804e8..11442c4 100644
--- a/fuchsia/runners/web/web_runner_smoke_test.cc
+++ b/fuchsia/runners/web/web_runner_smoke_test.cc
@@ -12,6 +12,7 @@
 #include "base/fuchsia/service_directory_client.h"
 #include "base/fuchsia/service_provider_impl.h"
 #include "base/test/bind_test_util.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
@@ -84,7 +85,9 @@
   bool test_html_requested_ = false;
   bool test_image_requested_ = false;
 
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
 
   std::unique_ptr<base::fuchsia::ServiceDirectory> service_directory_;
   std::unique_ptr<base::fuchsia::ServiceProviderImpl> service_provider_;
diff --git a/google_apis/gcm/OWNERS b/google_apis/gcm/OWNERS
index f81b5f5..1ef66754 100644
--- a/google_apis/gcm/OWNERS
+++ b/google_apis/gcm/OWNERS
@@ -3,3 +3,4 @@
 zea@chromium.org
 
 # COMPONENT: Services>CloudMessaging
+# TEAM: platform-capabilities@chromium.org
diff --git a/infra/config/cr-buildbucket.cfg b/infra/config/cr-buildbucket.cfg
index 49dfef01..3e0bbb4d 100644
--- a/infra/config/cr-buildbucket.cfg
+++ b/infra/config/cr-buildbucket.cfg
@@ -2285,34 +2285,14 @@
       mixins: "win-gpu-fyi-ci"
     }
     builders {
-      name: "GPU FYI XR Win Builder"
+      name: "GPU FYI XR Win x64 Builder"
       mixins: "win-gpu-fyi-ci"
     }
     # Note that the Win testers are all thin Linux VMs, triggering jobs on the
     # physical Win hardware in the Swarming pool, and therefore use the
     # linux-gpu-fyi-ci-tester mixin.
     builders {
-      name: "Win10 FYI Debug (NVIDIA)"
-      mixins: "linux-gpu-fyi-ci-tester"
-    }
-    builders {
-      name: "Win10 FYI dEQP Release (NVIDIA)"
-      mixins: "linux-gpu-fyi-ci-tester"
-    }
-    builders {
-      name: "Win10 FYI Release (Intel HD 630)"
-      mixins: "linux-gpu-fyi-ci-tester"
-    }
-    builders {
-      name: "Win10 FYI dEQP Release (Intel HD 630)"
-      mixins: "linux-gpu-fyi-ci-tester"
-    }
-    builders {
-      name: "Win10 FYI Release (NVIDIA)"
-      mixins: "linux-gpu-fyi-ci-tester"
-    }
-    builders {
-      name: "Win10 FYI Release XR Perf (NVIDIA)"
+      name: "Win10 FYI x64 Debug (NVIDIA)"
       mixins: "linux-gpu-fyi-ci-tester"
     }
     builders {
@@ -2328,11 +2308,31 @@
       mixins: "linux-gpu-fyi-ci-tester"
     }
     builders {
+      name: "Win10 FYI x64 Release (Intel HD 630)"
+      mixins: "linux-gpu-fyi-ci-tester"
+    }
+    builders {
       name: "Win10 FYI x64 Release (NVIDIA GeForce GTX 1660)"
       mixins: "linux-gpu-fyi-ci-tester"
       execution_timeout_secs: 64800 # 18h.
     }
     builders {
+      name: "Win10 FYI x64 Release (NVIDIA)"
+      mixins: "linux-gpu-fyi-ci-tester"
+    }
+    builders {
+      name: "Win10 FYI x64 Release XR Perf (NVIDIA)"
+      mixins: "linux-gpu-fyi-ci-tester"
+    }
+    builders {
+      name: "Win10 FYI x64 dEQP Release (Intel HD 630)"
+      mixins: "linux-gpu-fyi-ci-tester"
+    }
+    builders {
+      name: "Win10 FYI x64 dEQP Release (NVIDIA)"
+      mixins: "linux-gpu-fyi-ci-tester"
+    }
+    builders {
       name: "Win7 FYI Debug (AMD)"
       mixins: "linux-gpu-fyi-ci-tester"
     }
@@ -2663,6 +2663,12 @@
       mixins: "linux-xenial"
       mixins: "builderless"
     }
+    builders {
+      name: "android-pie-x86-fyi-rel"
+      mixins: "android-fyi-ci"
+      mixins: "linux-xenial"
+      mixins: "builderless"
+    }
 
     builders {
       name: "ASan Debug (32-bit x86 with V8-ARM)"
@@ -3883,6 +3889,12 @@
       mixins: "linux-xenial"
       mixins: "builderless"
     }
+    builders {
+      name: "android-pie-x86-fyi-rel"
+      mixins: "android-try"
+      mixins: "linux-xenial"
+      mixins: "builderless"
+    }
 
     builders {
       mixins: "chromeos-try"
@@ -4415,19 +4427,19 @@
 
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win-xr-builder"
+      name: "gpu-fyi-try-win-xr-builder-64"
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win7-amd-dbg"
+      name: "gpu-fyi-try-win7-amd-dbg-32"
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win7-amd-dqp"
+      name: "gpu-fyi-try-win7-amd-dqp-32"
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win7-amd-rel"
+      name: "gpu-fyi-try-win7-amd-rel-32"
     }
     builders {
       mixins: "win-optional-gpu-try"
@@ -4435,7 +4447,7 @@
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win7-nvidia-rel"
+      name: "gpu-fyi-try-win7-nvidia-rel-32"
     }
     builders {
       mixins: "win-optional-gpu-try"
@@ -4443,7 +4455,7 @@
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win10-intel-dqp"
+      name: "gpu-fyi-try-win10-intel-dqp-64"
     }
     builders {
       mixins: "win-optional-gpu-try"
@@ -4451,15 +4463,15 @@
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win10-intel-rel"
+      name: "gpu-fyi-try-win10-intel-rel-64"
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win10-nvidia-dbg"
+      name: "gpu-fyi-try-win10-nvidia-dbg-64"
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win10-nvidia-dqp"
+      name: "gpu-fyi-try-win10-nvidia-dqp-64"
     }
     builders {
       mixins: "win-optional-gpu-try"
@@ -4467,7 +4479,7 @@
     }
     builders {
       mixins: "win-optional-gpu-try"
-      name: "gpu-fyi-try-win10-nvidia-rel"
+      name: "gpu-fyi-try-win10-nvidia-rel-64"
     }
     builders {
       mixins: "win-optional-gpu-try"
@@ -4505,8 +4517,10 @@
         name: "chromium_libfuzzer_trybot"
       }
     }
-    builders { mixins: "win-angle-try" name: "win-angle-rel" }
-    builders { mixins: "win-angle-try" name: "win_angle_deqp_rel_ng" }
+    builders { mixins: "win-angle-try" name: "win-angle-deqp-rel-32" }
+    builders { mixins: "win-angle-try" name: "win-angle-deqp-rel-64" }
+    builders { mixins: "win-angle-try" name: "win-angle-rel-32" }
+    builders { mixins: "win-angle-try" name: "win-angle-rel-64" }
     builders { mixins: "win-try" name: "win_archive" }
     builders {
       mixins: "win-try"
diff --git a/infra/config/luci-milo.cfg b/infra/config/luci-milo.cfg
index 56cb70c3..8669275 100644
--- a/infra/config/luci-milo.cfg
+++ b/infra/config/luci-milo.cfg
@@ -1612,6 +1612,13 @@
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Android WebView O NetworkService (dbg)"
+    category: "webview"
+    short_name: "ns"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.ci/android-pie-x86-fyi-rel"
+    category: "emulator|pie|x86"
+    short_name: "rel"
   }
 }
 
@@ -3161,12 +3168,12 @@
   manifest_name: "REVISION"
   builders {
     name: "buildbucket/luci.chromium.ci/GPU FYI Win Builder"
-    category: "Windows|Builder"
+    category: "Windows|Builder|Release"
     short_name: "x86"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/GPU FYI Win x64 Builder"
-    category: "Windows|Builder"
+    category: "Windows|Builder|Release"
     short_name: "x64"
   }
   builders {
@@ -3190,88 +3197,88 @@
     short_name: "x64"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/GPU FYI XR Win Builder"
-    category: "Windows|Builder|Release"
-    short_name: "xr"
+    name: "buildbucket/luci.chromium.ci/GPU FYI XR Win x64 Builder"
+    category: "Windows|Builder|XR"
+    short_name: "x64"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Win10 FYI Debug (NVIDIA)"
-    category: "Windows|10-x86|Nvidia"
+    name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Debug (NVIDIA)"
+    category: "Windows|10|x64|Nvidia"
     short_name: "dbg"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Win10 FYI Release (Intel HD 630)"
-    category: "Windows|10-x86|Intel"
+    name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Release (Intel HD 630)"
+    category: "Windows|10|x64|Intel"
     short_name: "rel"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Win10 FYI Release (NVIDIA)"
-    category: "Windows|10-x86|Nvidia"
+    name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Release (NVIDIA)"
+    category: "Windows|10|x64|Nvidia"
     short_name: "rel"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Win10 FYI Release XR Perf (NVIDIA)"
-    category: "Windows|10-x86|Nvidia"
+    name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Release XR Perf (NVIDIA)"
+    category: "Windows|10|x64|Nvidia"
     short_name: "xr"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Win10 FYI dEQP Release (Intel HD 630)"
-    category: "Windows|10-x86|Intel"
+    name: "buildbucket/luci.chromium.ci/Win10 FYI x64 dEQP Release (Intel HD 630)"
+    category: "Windows|10|x64|Intel"
     short_name: "dqp"
   }
   builders {
-    name: "buildbucket/luci.chromium.ci/Win10 FYI dEQP Release (NVIDIA)"
-    category: "Windows|10-x86|Nvidia"
+    name: "buildbucket/luci.chromium.ci/Win10 FYI x64 dEQP Release (NVIDIA)"
+    category: "Windows|10|x64|Nvidia"
     short_name: "dqp"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Exp Release (Intel HD 630)"
-    category: "Windows|10-x64|Intel"
+    category: "Windows|10|x64|Intel"
     short_name: "exp"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Exp Release (NVIDIA)"
-    category: "Windows|10-x64|Nvidia"
+    category: "Windows|10|x64|Nvidia"
     short_name: "exp"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Release (AMD RX 550)"
-    category: "Windows|10-x64|AMD"
+    category: "Windows|10|x64|AMD"
     short_name: "rel"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win10 FYI x64 Release (NVIDIA GeForce GTX 1660)"
-    category: "Windows|10-x64|Nvidia"
+    category: "Windows|10|x64|Nvidia"
     short_name: "gtx"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win7 FYI Debug (AMD)"
-    category: "Windows|7|AMD"
+    category: "Windows|7|x86|AMD"
     short_name: "dbg"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win7 FYI dEQP Release (AMD)"
-    category: "Windows|7|AMD"
+    category: "Windows|7|x86|AMD"
     short_name: "dqp"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win7 FYI Release (AMD)"
-    category: "Windows|7|AMD"
+    category: "Windows|7|x86|AMD"
     short_name: "rel"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win7 FYI Release (NVIDIA)"
-    category: "Windows|7|Nvidia"
+    category: "Windows|7|x86|Nvidia"
     short_name: "rel"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win7 FYI x64 Release (NVIDIA)"
-    category: "Windows|7|Nvidia|x64"
+    category: "Windows|7|x64|Nvidia"
     short_name: "rel"
   }
   builders {
     name: "buildbucket/luci.chromium.ci/Win7 FYI x64 dEQP Release (NVIDIA)"
-    category: "Windows|7|Nvidia|x64"
+    category: "Windows|7|x64|Nvidia"
     short_name: "dqp"
   }
   builders {
@@ -4140,6 +4147,9 @@
   builders {
     name: "buildbucket/luci.chromium.try/android-pie-arm64-dbg"
   }
+  builders {
+    name: "buildbucket/luci.chromium.try/android-pie-x86-fyi-rel"
+  }
   builder_view_only: true
 }
 
@@ -4503,46 +4513,46 @@
   refs: "refs/heads/master"
   manifest_name: "REVISION"
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win-xr-builder"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win-xr-builder-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dbg"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dbg-32"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dqp"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dqp-32"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-rel-32"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-dqp-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-rel-32"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-rel-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-dqp"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-dqp-64"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-exp-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-rel-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dbg"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dbg-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dqp"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dqp-64"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-exp-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-rel-64"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-try-win10-nvidia-dbg"
@@ -4678,10 +4688,16 @@
     name: "buildbucket/luci.chromium.try/mac-angle-rel"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/win-angle-rel"
+    name: "buildbucket/luci.chromium.try/win-angle-deqp-rel-32"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/win_angle_deqp_rel_ng"
+    name: "buildbucket/luci.chromium.try/win-angle-deqp-rel-64"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.try/win-angle-rel-32"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.try/win-angle-rel-64"
   }
   builder_view_only: true
 }
@@ -4859,46 +4875,46 @@
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-linux-nvidia-tsn"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win-xr-builder"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win-xr-builder-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dbg"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dbg-32"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dqp"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-dqp-32"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-amd-rel-32"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-dqp-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-rel-32"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win7-nvidia-rel-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-dqp"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-dqp-64"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-exp-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-intel-rel-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dbg"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dbg-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dqp"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-dqp-64"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-exp-64"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-rel"
+    name: "buildbucket/luci.chromium.try/gpu-fyi-try-win10-nvidia-rel-64"
   }
   builders {
     name: "buildbucket/luci.chromium.try/gpu-fyi-try-mac-amd-dqp"
@@ -5138,6 +5154,9 @@
     name: "buildbucket/luci.chromium.try/android-pie-arm64-dbg"
   }
   builders {
+    name: "buildbucket/luci.chromium.try/android-pie-x86-fyi-rel"
+  }
+  builders {
     name: "buildbucket/luci.chromium.try/win7-rel"
   }
   builders {
@@ -5150,15 +5169,21 @@
     name: "buildbucket/luci.chromium.try/win10_chromium_x64_rel_ng_exp"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/win-angle-rel"
+    name: "buildbucket/luci.chromium.try/win-angle-deqp-rel-32"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.try/win-angle-deqp-rel-64"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.try/win-angle-rel-32"
+  }
+  builders {
+    name: "buildbucket/luci.chromium.try/win-angle-rel-64"
   }
   builders {
     name: "buildbucket/luci.chromium.try/win-jumbo-rel"
   }
   builders {
-    name: "buildbucket/luci.chromium.try/win_angle_deqp_rel_ng"
-  }
-  builders {
     name: "buildbucket/luci.chromium.try/win_archive"
   }
   builders {
diff --git a/infra/config/luci-scheduler.cfg b/infra/config/luci-scheduler.cfg
index 58911a68..8310a9d4 100644
--- a/infra/config/luci-scheduler.cfg
+++ b/infra/config/luci-scheduler.cfg
@@ -162,7 +162,7 @@
   triggers: "GPU FYI Win x64 Builder (dbg)"
   triggers: "GPU FYI Win x64 Builder"
   triggers: "GPU FYI Win x64 dEQP Builder"
-  triggers: "GPU FYI XR Win Builder"
+  triggers: "GPU FYI XR Win x64 Builder"
   triggers: "GPU Linux Builder (dbg)"
   triggers: "GPU Linux Builder"
   triggers: "GPU Mac Builder (dbg)"
@@ -312,6 +312,7 @@
   triggers: "android-marshmallow-arm64-rel"
   triggers: "android-mojo-webview-rel"
   triggers: "android-oreo-arm64-rel"
+  triggers: "android-pie-x86-fyi-rel"
   triggers: "android-archive-rel"
   triggers: "chromeos-amd64-generic-asan-rel"
   triggers: "chromeos-amd64-generic-cfi-thin-lto-rel"
@@ -860,6 +861,19 @@
 }
 
 job {
+  id: "android-pie-x86-fyi-rel"
+  acl_sets: "default"
+  # Only run nightly while we work out test issues and
+  # productionize emulator infra. crbug.com/961025
+  schedule: "0 7 * * *"
+  buildbucket: {
+    server: "cr-buildbucket.appspot.com"
+    bucket: "luci.chromium.ci"
+    builder: "android-pie-x86-fyi-rel"
+  }
+}
+
+job {
   id: "Cast Android (dbg)"
   acl_sets: "default"
   buildbucket: {
@@ -1306,22 +1320,6 @@
 }
 
 job {
-  id: "Dawn GPU Linux Release (Intel HD 630)"
-  # Triggered by "GPU FYI Linux Builder".
-  acl_sets: "triggered-by-parent-builders"
-  # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
-  noop: {}
-}
-
-job {
-  id: "Dawn GPU Linux Release (NVIDIA)"
-  # Triggered by "GPU FYI Linux Builder".
-  acl_sets: "triggered-by-parent-builders"
-  # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
-  noop: {}
-}
-
-job {
   id: "Dawn Linux x64 Builder"
   acl_sets: "default"
   buildbucket: {
@@ -1991,30 +1989,6 @@
 }
 
 job {
-  id: "Dawn GPU Mac Release (Intel)"
-  # Triggered by "GPU FYI Mac Builder".
-  acl_sets: "triggered-by-parent-builders"
-  # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
-  noop: {}
-}
-
-job {
-  id: "Dawn GPU Mac Retina Release (NVIDIA)"
-  # Triggered by "GPU FYI Mac Builder".
-  acl_sets: "triggered-by-parent-builders"
-  # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
-  noop: {}
-}
-
-job {
-  id: "Dawn GPU Mac Retina Release (AMD)"
-  # Triggered by "GPU FYI Mac Builder".
-  acl_sets: "triggered-by-parent-builders"
-  # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
-  noop: {}
-}
-
-job {
   id: "Dawn Mac x64 Builder"
   acl_sets: "default"
   buildbucket: {
@@ -2514,32 +2488,16 @@
 ################################################################################
 
 job {
-  id: "ANGLE GPU Win10 Release (Intel HD 630)"
-  # Triggered by "GPU FYI Win Builder"
+  id: "ANGLE GPU Win10 x64 Release (Intel HD 630)"
+  # Triggered by "GPU FYI Win x64 Builder"
   acl_sets: "triggered-by-parent-builders"
   # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
   noop: {}
 }
 
 job {
-  id: "ANGLE GPU Win10 Release (NVIDIA)"
-  # Triggered by "GPU FYI Win Builder"
-  acl_sets: "triggered-by-parent-builders"
-  # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
-  noop: {}
-}
-
-job {
-  id: "Dawn GPU Win10 Release (Intel HD 630)"
-  # Triggered by "GPU FYI Win Builder"
-  acl_sets: "triggered-by-parent-builders"
-  # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
-  noop: {}
-}
-
-job {
-  id: "Dawn GPU Win10 Release (NVIDIA)"
-  # Triggered by "GPU FYI Win Builder"
+  id: "ANGLE GPU Win10 x64 Release (NVIDIA)"
+  # Triggered by "GPU FYI Win x64 Builder"
   acl_sets: "triggered-by-parent-builders"
   # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
   noop: {}
@@ -2684,72 +2642,72 @@
 }
 
 job {
-  id: "GPU FYI XR Win Builder"
+  id: "GPU FYI XR Win x64 Builder"
   acl_sets: "default"
   buildbucket: {
     server: "cr-buildbucket.appspot.com"
     bucket: "luci.chromium.ci"
-    builder: "GPU FYI XR Win Builder"
+    builder: "GPU FYI XR Win x64 Builder"
   }
 }
 
 job {
-  id: "Optional Win10 Release (Intel HD 630)"
-  # Triggered by "GPU FYI Win Builder"
+  id: "Optional Win10 x64 Release (Intel HD 630)"
+  # Triggered by "GPU FYI Win x64 Builder"
   acl_sets: "triggered-by-parent-builders"
   # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
   noop: {}
 }
 
 job {
-  id: "Optional Win10 Release (NVIDIA)"
-  # Triggered by "GPU FYI Win Builder"
+  id: "Optional Win10 x64 Release (NVIDIA)"
+  # Triggered by "GPU FYI Win x64 Builder"
   acl_sets: "triggered-by-parent-builders"
   # This bot doesn't actually exist, so it's noop'ed out. crbug.com/819899
   noop: {}
 }
 
 job {
-  id: "Win10 FYI Release (Intel HD 630)"
-  # Triggered by "GPU FYI Win Builder"
+  id: "Win10 FYI x64 Release (Intel HD 630)"
+  # Triggered by "GPU FYI Win x64 Builder"
   acl_sets: "triggered-by-parent-builders"
   buildbucket: {
     server: "cr-buildbucket.appspot.com"
     bucket: "luci.chromium.ci"
-    builder: "Win10 FYI Release (Intel HD 630)"
+    builder: "Win10 FYI x64 Release (Intel HD 630)"
   }
 }
 
 job {
-  id: "Win10 FYI dEQP Release (Intel HD 630)"
-  # Triggered by "GPU FYI Win dEQP Builder"
+  id: "Win10 FYI x64 dEQP Release (Intel HD 630)"
+  # Triggered by "GPU FYI Win x64 dEQP Builder"
   acl_sets: "triggered-by-parent-builders"
   buildbucket: {
     server: "cr-buildbucket.appspot.com"
     bucket: "luci.chromium.ci"
-    builder: "Win10 FYI dEQP Release (Intel HD 630)"
+    builder: "Win10 FYI x64 dEQP Release (Intel HD 630)"
   }
 }
 
 job {
-  id: "Win10 FYI Release (NVIDIA)"
-  # Triggered by "GPU FYI Win Builder"
+  id: "Win10 FYI x64 Release (NVIDIA)"
+  # Triggered by "GPU FYI Win x64 Builder"
   acl_sets: "triggered-by-parent-builders"
   buildbucket: {
     server: "cr-buildbucket.appspot.com"
     bucket: "luci.chromium.ci"
-    builder: "Win10 FYI Release (NVIDIA)"
+    builder: "Win10 FYI x64 Release (NVIDIA)"
   }
 }
 
 job {
-  id: "Win10 FYI Release XR Perf (NVIDIA)"
-  # Triggered by "GPU FYI Win Builder"
+  id: "Win10 FYI x64 Release XR Perf (NVIDIA)"
+  # Triggered by "GPU FYI Win x64 Builder"
   acl_sets: "triggered-by-parent-builders"
   buildbucket: {
     server: "cr-buildbucket.appspot.com"
     bucket: "luci.chromium.ci"
-    builder: "Win10 FYI Release XR Perf (NVIDIA)"
+    builder: "Win10 FYI x64 Release XR Perf (NVIDIA)"
   }
 }
 
@@ -2838,13 +2796,13 @@
 }
 
 job {
-  id: "Win10 FYI Debug (NVIDIA)"
-  # Triggered by "GPU FYI Win Builder (dbg)"
+  id: "Win10 FYI x64 Debug (NVIDIA)"
+  # Triggered by "GPU FYI Win x64 Builder (dbg)"
   acl_sets: "triggered-by-parent-builders"
   buildbucket: {
     server: "cr-buildbucket.appspot.com"
     bucket: "luci.chromium.ci"
-    builder: "Win10 FYI Debug (NVIDIA)"
+    builder: "Win10 FYI x64 Debug (NVIDIA)"
   }
 }
 
@@ -2870,13 +2828,13 @@
 }
 
 job {
-  id: "Win10 FYI dEQP Release (NVIDIA)"
-  # Triggered by "GPU FYI Win dEQP Builder"
+  id: "Win10 FYI x64 dEQP Release (NVIDIA)"
+  # Triggered by "GPU FYI Win x64 dEQP Builder"
   acl_sets: "triggered-by-parent-builders"
   buildbucket: {
     server: "cr-buildbucket.appspot.com"
     bucket: "luci.chromium.ci"
-    builder: "Win10 FYI dEQP Release (NVIDIA)"
+    builder: "Win10 FYI x64 dEQP Release (NVIDIA)"
   }
 }
 
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 23513515..fc4599e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="am">
+<translation id="1005230401424685968">ዓዓዓዓ</translation>
 <translation id="1016495303386450659">ንጥል ተዘምኗል</translation>
 <translation id="1047726139967079566">ለእዚህ ገጽ ዕልባት አዘጋጅ…</translation>
 <translation id="1049743911850919806">ማንነት የማያሳውቅ</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">የራስ-ሙላ ውሂብ</translation>
 <translation id="3609785682760573515">በማመሳሰል ላይ...</translation>
 <translation id="3638472932233958418">ድረ-ገጾችን አስቀድመው ይጫኑ</translation>
+<translation id="3670030362669914947">ቁጥር</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ላይ ዕልባት ተደርጓል</translation>
 <translation id="3771033907050503522">ማንነት የማያሳውቁ ትሮች</translation>
 <translation id="3775743491439407556">ስምረት እየሰራ አይደለም</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> አይደለም</translation>
 <translation id="7454057999980797137">ግዛት / አውራጃ</translation>
 <translation id="7456847797759667638">የተቀመጠበትን ቦታ ክፈት…</translation>
+<translation id="7460314822154045102">ካሜራ ተጠቀም</translation>
 <translation id="7464701184726199289">ይሄ የሠመረ ከሁሉም መሣሪያዎች ያጸዳል። የተቀመጡ የጣቢያ ቅንብሮች አይሰረዙም፣ እና የእርስዎን የአሰሳ ልማዶች ሊያንጸባርቁ ይችላሉ። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">የኩባንያ ስም</translation>
 <translation id="7481312909269577407">ወደ ፊት</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index 4762750..5e89cca 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ar">
+<translation id="1005230401424685968">سنة</translation>
 <translation id="1016495303386450659">تم تحديث العنصر</translation>
 <translation id="1047726139967079566">وضع إشارة مرجعية على هذه الصفحة...</translation>
 <translation id="1049743911850919806">التصفح المتخفي</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">ملء البيانات تلقائيًا</translation>
 <translation id="3609785682760573515">جارٍ المزامنة...</translation>
 <translation id="3638472932233958418">تحميل صفحات الويب مسبقًا</translation>
+<translation id="3670030362669914947">رقم</translation>
 <translation id="3691593122358196899">أُضيفَت إشارة مرجعية إلى <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">علامات تبويب التصفح المتخفي</translation>
 <translation id="3775743491439407556">المزامنة لا تعمل على نحو سليم</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">ليس <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">الولاية/المقاطعة</translation>
 <translation id="7456847797759667638">فتح موقع...</translation>
+<translation id="7460314822154045102">استخدام الكاميرا</translation>
 <translation id="7464701184726199289">يمحو هذا الخيار البيانات المتزامنة من كافة الأجهزة. لن يتم حذف إعدادات موقع الويب المحفوظة وقد تعكس عادات التصفح. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">اسم الشركة</translation>
 <translation id="7481312909269577407">إلى الأمام</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index a27f3437..d58fa08 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bg">
+<translation id="1005230401424685968">ГГГГ</translation>
 <translation id="1016495303386450659">Елементът е актуализиран</translation>
 <translation id="1047726139967079566">Запазване на отметка към тази страница...</translation>
 <translation id="1049743911850919806">„Инкогнито“</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Автоматично попълване на данни</translation>
 <translation id="3609785682760573515">Синхронизира се...</translation>
 <translation id="3638472932233958418">Предв. зареждане на уеб стр.</translation>
+<translation id="3670030362669914947">Номер</translation>
 <translation id="3691593122358196899">Отметката бе запазена в/ъв „<ph name="FOLDER_TITLE" />“</translation>
 <translation id="3771033907050503522">Раздели „инкогнито“</translation>
 <translation id="3775743491439407556">Синхронизирането не работи</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Не съм <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Щат/държава</translation>
 <translation id="7456847797759667638">Отваряне на местоположение...</translation>
+<translation id="7460314822154045102">Използване на камерата</translation>
 <translation id="7464701184726199289">Синхронизираните данни ще се изчистят от всички устройства. Запазените настройки за сайтове няма да бъдат изтрити и може да отразяват навиците ви при сърфиране. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Име на фирмата</translation>
 <translation id="7481312909269577407">Препращане</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index 7557b0d..1c517e42 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="bn">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">আইটেম আপডেট হয়েছে</translation>
 <translation id="1047726139967079566">এই পৃষ্ঠাটি বুকমার্ক করুন...</translation>
 <translation id="1049743911850919806">ছদ্মবেশী</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">ডেটা স্বতঃপূর্ণ করুন</translation>
 <translation id="3609785682760573515">সিঙ্ক হচ্ছে...</translation>
 <translation id="3638472932233958418">পূর্বলোড ওয়েবপৃষ্ঠা</translation>
+<translation id="3670030362669914947">নম্বর</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> এ বুকমার্ক করা হয়েছে</translation>
 <translation id="3771033907050503522">ছদ্মবেশী ট্যাবগুলি</translation>
 <translation id="3775743491439407556">সিঙ্ক কাজ করছে না</translation>
@@ -450,6 +452,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> না</translation>
 <translation id="7454057999980797137">রাজ্য / দেশ</translation>
 <translation id="7456847797759667638">লোকেশন খুলুন...</translation>
+<translation id="7460314822154045102">ক্যামেরা ব্যবহার করুন</translation>
 <translation id="7464701184726199289">এটি সব ডিভাইস থেকে সিঙ্ক হওয়া ডেটা সাফ করবে। সংরক্ষিত সাইটের সেটিংস মোছা হবে না এবং আপনার ব্রাউজিং অভ্যাস প্রতিফলিত হতে পারে। <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">কোম্পানির নাম:</translation>
 <translation id="7481312909269577407">ফরওয়ার্ড</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 20f450d..5c2758631 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ca">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">S'ha actualitzat l'element.</translation>
 <translation id="1047726139967079566">Afegeix aquesta pàgina a les adreces d'interès...</translation>
 <translation id="1049743911850919806">Incògnit</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Dades d'Emplenament automàtic</translation>
 <translation id="3609785682760573515">S'està sincronitzant...</translation>
 <translation id="3638472932233958418">Càrrega prèvia de pàgines web</translation>
+<translation id="3670030362669914947">Número</translation>
 <translation id="3691593122358196899">Adreça d'interès afegida a <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Pestanyes d'incògnit</translation>
 <translation id="3775743491439407556">La sincronització no funciona</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">No soc <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Província</translation>
 <translation id="7456847797759667638">Obre la ubicació...</translation>
+<translation id="7460314822154045102">Utilitza la càmera</translation>
 <translation id="7464701184726199289">S'esborraran les dades sincronitzades de tots els dispositius. La configuració desada del lloc no se suprimirà i és possible que reflecteixi els vostres hàbits de navegació. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nom de l'empresa</translation>
 <translation id="7481312909269577407">Endavant</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 34b505a..740ba73 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="cs">
+<translation id="1005230401424685968">RRRR</translation>
 <translation id="1016495303386450659">Položka byla aktualizována</translation>
 <translation id="1047726139967079566">Přidat stránku do záložek...</translation>
 <translation id="1049743911850919806">Anonymní režim</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Data automatického vyplňování</translation>
 <translation id="3609785682760573515">Synchronizace...</translation>
 <translation id="3638472932233958418">Přednačítat stránky</translation>
+<translation id="3670030362669914947">Číslo</translation>
 <translation id="3691593122358196899">Záložka přidána do složky <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Anonymní karty</translation>
 <translation id="3775743491439407556">Synchronizace nefunguje</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Nejsem <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Stát / země</translation>
 <translation id="7456847797759667638">Otevřít umístění...</translation>
+<translation id="7460314822154045102">Použít aplikaci Fotoaparát</translation>
 <translation id="7464701184726199289">Tímto vymažete synchronizovaná data ze všech zařízení. Uložená nastavení webů nebudou smazána a mohou vypovídat o vašich zvycích při prohlížení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Název společnosti</translation>
 <translation id="7481312909269577407">Vpřed</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index 6a50ae1..b6d012b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="da">
+<translation id="1005230401424685968">ÅÅÅÅ</translation>
 <translation id="1016495303386450659">Elementet blev opdateret</translation>
 <translation id="1047726139967079566">Tilføj denne side som bogmærke...</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">AutoFyld-data</translation>
 <translation id="3609785682760573515">Synkroniserer…</translation>
 <translation id="3638472932233958418">Forudindlæs websider</translation>
+<translation id="3670030362669914947">Nummer</translation>
 <translation id="3691593122358196899">Bogmærket er gemt i <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Inkognitofaner</translation>
 <translation id="3775743491439407556">Synkronisering fungerer ikke</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Ikke <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Delstat/amt</translation>
 <translation id="7456847797759667638">Åbn placering...</translation>
+<translation id="7460314822154045102">Brug Kamera</translation>
 <translation id="7464701184726199289">Dette rydder synkroniserede data fra alle enheder. Gemte websiteindstillinger slettes ikke og kan afspejle dine søgevaner. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Virksomhedsnavn</translation>
 <translation id="7481312909269577407">Frem</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 11c01a5..468c765 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="de">
+<translation id="1005230401424685968">JJJJ</translation>
 <translation id="1016495303386450659">Element aktualisiert</translation>
 <translation id="1047726139967079566">Lesezeichen für diese Seite erstellen</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">AutoFill-Daten</translation>
 <translation id="3609785682760573515">Synchronisieren...</translation>
 <translation id="3638472932233958418">Webseiten vorabladen</translation>
+<translation id="3670030362669914947">Nummer</translation>
 <translation id="3691593122358196899">Als Lesezeichen in "<ph name="FOLDER_TITLE" />" gespeichert</translation>
 <translation id="3771033907050503522">Inkognito-Tabs</translation>
 <translation id="3775743491439407556">Synchronisierung funktioniert nicht</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> ist nicht mein Konto</translation>
 <translation id="7454057999980797137">Bundesl./Landkr.</translation>
 <translation id="7456847797759667638">Adresse öffnen...</translation>
+<translation id="7460314822154045102">Kamera verwenden</translation>
 <translation id="7464701184726199289">Dadurch werden synchronisierte Daten von allen Geräten gelöscht. Gespeicherte Website-Einstellungen werden nicht gelöscht und können möglicherweise Ihre Surfgewohnheiten wiedergeben. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Unternehmensname</translation>
 <translation id="7481312909269577407">Vorwärts</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index 69d8bf6..b723ee3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="el">
+<translation id="1005230401424685968">ΕΕΕΕ</translation>
 <translation id="1016495303386450659">Το στοιχείο ενημερώθηκε</translation>
 <translation id="1047726139967079566">Τοποθέτηση Σελιδοδείκτη σε Αυτήν τη Σελίδα...</translation>
 <translation id="1049743911850919806">Ανώνυμη περιήγηση</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Δεδομένα Αυτόματης συμπλήρωσης</translation>
 <translation id="3609785682760573515">Συγχρονισμός…</translation>
 <translation id="3638472932233958418">Προφόρτ. ιστοσελίδων</translation>
+<translation id="3670030362669914947">Αριθμός</translation>
 <translation id="3691593122358196899">Ο σελιδοδείκτης είναι στο "<ph name="FOLDER_TITLE" />"</translation>
 <translation id="3771033907050503522">Καρτ.αν.περιήγ.</translation>
 <translation id="3775743491439407556">Ο συγχρονισμός δεν λειτουργεί</translation>
@@ -450,6 +452,7 @@
 <translation id="744343212394640790">Δεν είμαι ο χρήστης <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Νομός/Επαρχία</translation>
 <translation id="7456847797759667638">Άνοιγμα Τοποθεσίας...</translation>
+<translation id="7460314822154045102">Χρήση κάμερας</translation>
 <translation id="7464701184726199289">Διαγράφει τα συγχρονισμένα δεδομένα από όλες τις συσκευές. Οι αποθηκευμένες ρυθμίσεις ιστότοπου δεν θα διαγραφούν και ενδέχεται να υποδεικνύουν τις συνήθειες περιήγησής σας. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Επων. εταιρείας</translation>
 <translation id="7481312909269577407">Προώθηση</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index 54906c2..aef56f3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="en-GB">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">Item updated</translation>
 <translation id="1047726139967079566">Bookmark This Page...</translation>
 <translation id="1049743911850919806">Incognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Auto-fill Data</translation>
 <translation id="3609785682760573515">Syncing...</translation>
 <translation id="3638472932233958418">Pre-load Web Pages</translation>
+<translation id="3670030362669914947">Number</translation>
 <translation id="3691593122358196899">Bookmarked to <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Incognito Tabs</translation>
 <translation id="3775743491439407556">Sync isn't working</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Not <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">State / County</translation>
 <translation id="7456847797759667638">Open Location...</translation>
+<translation id="7460314822154045102">Use camera</translation>
 <translation id="7464701184726199289">This clears synced data from all devices. Saved site settings will not be deleted and may reflect your browsing habits. <ph name="BEGIN_LINK" />Find out more<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Company Name</translation>
 <translation id="7481312909269577407">Forward</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index 75186c5..079b66b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="es-419">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">Elemento actualizado</translation>
 <translation id="1047726139967079566">Agregar esta página a favoritos...</translation>
 <translation id="1049743911850919806">Incógnito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Autocompletar datos</translation>
 <translation id="3609785682760573515">Sincronizando…</translation>
 <translation id="3638472932233958418">Precargar pág. web</translation>
+<translation id="3670030362669914947">Número</translation>
 <translation id="3691593122358196899">Se agregó a favoritos en <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Pestañas de incógnito</translation>
 <translation id="3775743491439407556">La sincronización no funciona</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">No soy <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Estado/condado</translation>
 <translation id="7456847797759667638">Abrir ubicación...</translation>
+<translation id="7460314822154045102">Usar la cámara</translation>
 <translation id="7464701184726199289">Esta opción borra los datos sincronizados en todos los dispositivos. Las opciones de configuración de sitios guardadas no se borrarán y es posible que reflejen tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nombre de empresa</translation>
 <translation id="7481312909269577407">Reenviar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index 3ad9dad4..021d14b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="es">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">Elemento actualizado</translation>
 <translation id="1047726139967079566">Añadir esta página a marcadores...</translation>
 <translation id="1049743911850919806">Incógnito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Datos de la función Autocompletar</translation>
 <translation id="3609785682760573515">Sincronizando...</translation>
 <translation id="3638472932233958418">Precargar páginas web</translation>
+<translation id="3670030362669914947">Número</translation>
 <translation id="3691593122358196899">Marcador añadido a <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Pestañas incógnito</translation>
 <translation id="3775743491439407556">La sincronización no funciona</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">No soy <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Región</translation>
 <translation id="7456847797759667638">Abrir ubicación...</translation>
+<translation id="7460314822154045102">Utilizar la cámara</translation>
 <translation id="7464701184726199289">Se borrarán los datos sincronizados de todos los dispositivos. No se eliminará la configuración guardada de los sitios web, lo cual puede reflejar tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nombre de empresa</translation>
 <translation id="7481312909269577407">Adelante</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index 0675197..3457c3e2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="et">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">Üksus on värskendatud</translation>
 <translation id="1047726139967079566">Lisa selle lehe järjehoidja...</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Automaattäite andmed</translation>
 <translation id="3609785682760573515">Sünkroonimine ...</translation>
 <translation id="3638472932233958418">Lehtede eellaadimine</translation>
+<translation id="3670030362669914947">Number</translation>
 <translation id="3691593122358196899">Lisatud järjehoidjana kausta <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Inkogn. vahelehed</translation>
 <translation id="3775743491439407556">Sünkroonimine ei tööta</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Pole <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Osariik/maakond</translation>
 <translation id="7456847797759667638">Ava asukoht...</translation>
+<translation id="7460314822154045102">Kasuta kaamerat</translation>
 <translation id="7464701184726199289">See kustutab sünkroonitud andmed kõikidest seadmetest. Saitide salvestatud seadeid ei kustutata ja need võivad kajastada teie sirvimisharjumusi. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Ettevõtte nimi</translation>
 <translation id="7481312909269577407">Edasta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 4954b46..db86d1b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fa">
+<translation id="1005230401424685968">yyyy</translation>
 <translation id="1016495303386450659">مورد به‌روز شد</translation>
 <translation id="1047726139967079566">نشانک گذاری این صفحه...</translation>
 <translation id="1049743911850919806">ناشناس</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">داده‌های تکمیل خودکار</translation>
 <translation id="3609785682760573515">در حال همگام‌سازی...</translation>
 <translation id="3638472932233958418">صفحات وب از پیش بارگیری شده</translation>
+<translation id="3670030362669914947">عدد</translation>
 <translation id="3691593122358196899">نشانک به <ph name="FOLDER_TITLE" /> اضافه شد</translation>
 <translation id="3771033907050503522">برگه‌های ناشناس</translation>
 <translation id="3775743491439407556">همگام‌سازی کار نمی‌کند</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" />، نشانی ایمیل من نیست</translation>
 <translation id="7454057999980797137">ایالت / استان</translation>
 <translation id="7456847797759667638">باز کردن مکان...</translation>
+<translation id="7460314822154045102">استفاده از دوربین</translation>
 <translation id="7464701184726199289">با این کار داده‌های همگام‌سازی‌شده در همه دستگاه‌ها پاک می‌شوند. تنظیمات ذخیره‌شده سایت حذف نمی‌شوند و احتمالاً عادات مرور شما را نشان می‌دهند. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">نام شرکت</translation>
 <translation id="7481312909269577407">ارسال کردن</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index f8a44479..3446111 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fi">
+<translation id="1005230401424685968">VVVV</translation>
 <translation id="1016495303386450659">Kohde päivitettiin</translation>
 <translation id="1047726139967079566">Aseta tämä sivu kirjanmerkiksi...</translation>
 <translation id="1049743911850919806">Incognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Automaattisen täytön tiedot</translation>
 <translation id="3609785682760573515">Synkronoidaan…</translation>
 <translation id="3638472932233958418">Esilataa verkkosivut</translation>
+<translation id="3670030362669914947">Numero</translation>
 <translation id="3691593122358196899">Lisätty kirjanmerkiksi kansioon <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Incognito</translation>
 <translation id="3775743491439407556">Synkronointi ei toimi</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Ei <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Alue/maa</translation>
 <translation id="7456847797759667638">Avaa sijainti...</translation>
+<translation id="7460314822154045102">Käytä kameraa</translation>
 <translation id="7464701184726199289">Synkronoidut tiedot poistetaan kaikilta laitteilta. Tallennettuja sivustoasetuksia ei poisteta, ja ne saattavat sisältää tietoa selaustavoistasi. <ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Yrityksen nimi</translation>
 <translation id="7481312909269577407">Seuraava</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index 4eeaa65d..9659156 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="fr">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">Élément mis à jour</translation>
 <translation id="1047726139967079566">Ajouter cette page aux favoris</translation>
 <translation id="1049743911850919806">Navigation privée</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Saisie automatique</translation>
 <translation id="3609785682760573515">Synchronisation en cours…</translation>
 <translation id="3638472932233958418">Précharger pages Web</translation>
+<translation id="3670030362669914947">Numéro</translation>
 <translation id="3691593122358196899">Ajouté aux favoris dans "<ph name="FOLDER_TITLE" />"</translation>
 <translation id="3771033907050503522">Ongl. navig. priv.</translation>
 <translation id="3775743491439407556">La synchronisation ne fonctionne pas</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Autre que <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">État/Comté</translation>
 <translation id="7456847797759667638">Ouvrir une adresse</translation>
+<translation id="7460314822154045102">Utiliser la caméra</translation>
 <translation id="7464701184726199289">Les données synchronisées seront effacées de tous les appareils. Les paramètres de site enregistrés ne seront pas supprimés et peuvent donner des indications sur vos habitudes de navigation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nom de la société</translation>
 <translation id="7481312909269577407">Avancer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index d6ce3f4..b7e8ddc7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="gu">
+<translation id="1005230401424685968">yyyy</translation>
 <translation id="1016495303386450659">આઇટમ અપડેટ કરી</translation>
 <translation id="1047726139967079566">આ પૃષ્ઠને બુકમાર્ક કરો...</translation>
 <translation id="1049743911850919806">છૂપી</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">સ્વતઃભરણ ડેટા</translation>
 <translation id="3609785682760573515">સમન્વય કરી રહ્યું છે...</translation>
 <translation id="3638472932233958418">વેબપૃષ્ઠો પહેલાથી લોડ કરો</translation>
+<translation id="3670030362669914947">નંબર</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> પર બુકમાર્ક કર્યું</translation>
 <translation id="3771033907050503522">છૂપા ટેબ્સ</translation>
 <translation id="3775743491439407556">સિંક કાર્ય કરી રહ્યું નથી</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> નથી</translation>
 <translation id="7454057999980797137">રાજ્ય / કાઉન્ટી</translation>
 <translation id="7456847797759667638">સ્થાન ખોલો...</translation>
+<translation id="7460314822154045102">કૅમેરાનો ઉપયોગ કરો</translation>
 <translation id="7464701184726199289">આનાથી તમામ ઉપકરણોમાંથી સમન્વયિત ડેટા સાફ થાય છે. સાચવેલ સાઇટ સેટિંગ્સ કાઢી નાખવામાં આવશે નહીં અને તે તમારી બ્રાઉઝિંગ ટેવોને પ્રતિબિંબિત કરી શકે છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">કંપનીનું નામ</translation>
 <translation id="7481312909269577407">ફોર્વર્ડ કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index cd9ccd6..c9282ee 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hi">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">आइटम अपडेट किया गया</translation>
 <translation id="1047726139967079566">इस पेज को बुकमार्क करें...</translation>
 <translation id="1049743911850919806">गुप्त</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">ऑटोमैटिक भरना</translation>
 <translation id="3609785682760573515">समन्वयित हो रहा है...</translation>
 <translation id="3638472932233958418">पहले से लोड वेबपेज</translation>
+<translation id="3670030362669914947">कार्ड नंबर</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> में बुकमार्क किया गया</translation>
 <translation id="3771033907050503522">गुप्त टैब</translation>
 <translation id="3775743491439407556">सिंक की सुविधा काम नहीं कर रही है</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> नहीं है</translation>
 <translation id="7454057999980797137">राज्य / देश</translation>
 <translation id="7456847797759667638">स्थान खोलें...</translation>
+<translation id="7460314822154045102">कैमरा इस्तेमाल करें</translation>
 <translation id="7464701184726199289">इससे सभी डिवाइस में समन्वयित डेटा साफ़ हो जाता है. सहेजी गई साइट सेटिंग नहीं हटाई जाएंगी और इससे आपका ब्राउज़िंग व्यवहार प्रदर्शित हो सकता है. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">कंपनी का नाम</translation>
 <translation id="7481312909269577407">आगे जाएं</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index cef5017..ad02cda 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hr">
+<translation id="1005230401424685968">GGGG</translation>
 <translation id="1016495303386450659">Stavka je ažurirana</translation>
 <translation id="1047726139967079566">Označi ovu stranicu...</translation>
 <translation id="1049743911850919806">Anonimno</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Podaci automatskog popunjavanja</translation>
 <translation id="3609785682760573515">Sinkronizacija...</translation>
 <translation id="3638472932233958418">Već učitane stranice</translation>
+<translation id="3670030362669914947">Broj</translation>
 <translation id="3691593122358196899">Oznaka dodana u mapu <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Anonimne kartice</translation>
 <translation id="3775743491439407556">Sinkronizacija ne funkcionira</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Nisam <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Županija</translation>
 <translation id="7456847797759667638">Otvori lokaciju...</translation>
+<translation id="7460314822154045102">Koristi Kameru</translation>
 <translation id="7464701184726199289">Sinkronizirani podaci izbrisat će se sa svih uređaja. Spremljene postavke web-lokacije neće se izbrisati i mogu odražavati vaše navike prilikom pregledavanja. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Naziv tvrtke</translation>
 <translation id="7481312909269577407">Naprijed</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 2ed9b0ff5..b9c6238 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="hu">
+<translation id="1005230401424685968">ÉÉÉÉ</translation>
 <translation id="1016495303386450659">Elem frissítve</translation>
 <translation id="1047726139967079566">Könyvjelző hozzáadása ehhez az oldalhoz...</translation>
 <translation id="1049743911850919806">Inkognitómód</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Automatikus kitöltés adatai</translation>
 <translation id="3609785682760573515">Szinkronizálás...</translation>
 <translation id="3638472932233958418">Weboldalak előtöltése</translation>
+<translation id="3670030362669914947">Szám</translation>
 <translation id="3691593122358196899">Könyvjelzők közé téve itt: <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Inkognitólapok</translation>
 <translation id="3775743491439407556">A szinkronizálás nem működik</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Nem <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Állam/megye</translation>
 <translation id="7456847797759667638">Hely megnyitása...</translation>
+<translation id="7460314822154045102">A Kamera használata</translation>
 <translation id="7464701184726199289">Az összes eszközről törli a szinkronizált adatokat. A mentett webhelybeállítások nem törlődnek, és tájékozódási alapul szolgálhatnak böngészési szokásait illetően. <ph name="BEGIN_LINK" />További információ.<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Vállalat neve</translation>
 <translation id="7481312909269577407">Előre</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 96cb0a15..f335db5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="id">
+<translation id="1005230401424685968">TTTT</translation>
 <translation id="1016495303386450659">Item diperbarui</translation>
 <translation id="1047726139967079566">Bookmark Halaman Ini...</translation>
 <translation id="1049743911850919806">Samaran</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Data Isi-Otomatis</translation>
 <translation id="3609785682760573515">Menyinkronkan...</translation>
 <translation id="3638472932233958418">Pramuat Halaman Web</translation>
+<translation id="3670030362669914947">Nomor</translation>
 <translation id="3691593122358196899">Dibookmark ke <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Tab Samaran</translation>
 <translation id="3775743491439407556">Sinkronisasi Tidak Berfungsi</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Bukan <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Prov./Wilayah</translation>
 <translation id="7456847797759667638">Buka Lokasi...</translation>
+<translation id="7460314822154045102">Gunakan Kamera</translation>
 <translation id="7464701184726199289">Tindakan ini akan menghapus data yang disinkronkan dari semua perangkat. Setelan situs yang disimpan tidak akan dihapus dan dapat mencerminkan kebiasaan penjelajahan Anda. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nama Perusahaan</translation>
 <translation id="7481312909269577407">Maju</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index c8cafdc9..34363fe 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="it">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">Elemento aggiornato</translation>
 <translation id="1047726139967079566">Aggiungi questa pagina ai Preferiti...</translation>
 <translation id="1049743911850919806">In incognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Dati della Compilazione automatica</translation>
 <translation id="3609785682760573515">Sincronizzazione in corso...</translation>
 <translation id="3638472932233958418">Precarica pagine web</translation>
+<translation id="3670030362669914947">Numero</translation>
 <translation id="3691593122358196899">Preferito aggiunto in: <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Schede di navigazione in incognito</translation>
 <translation id="3775743491439407556">La sincronizzazione non funziona</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Non sono <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Stato/contea</translation>
 <translation id="7456847797759667638">Apri percorso...</translation>
+<translation id="7460314822154045102">Usa Fotocamera</translation>
 <translation id="7464701184726199289">Questa operazione comporta la cancellazione dei dati sincronizzati da tutti i dispositivi. Le impostazioni del sito salvate non verranno eliminate e potrebbero rispecchiare le tue abitudini di navigazione. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nome dell'azienda</translation>
 <translation id="7481312909269577407">Avanti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index c45f36c4..cf5db8c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ja">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">更新済みのアイテム</translation>
 <translation id="1047726139967079566">ブックマークに追加...</translation>
 <translation id="1049743911850919806">シークレット モード</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">自動入力のデータ</translation>
 <translation id="3609785682760573515">同期しています...</translation>
 <translation id="3638472932233958418">ウェブページのプリロード</translation>
+<translation id="3670030362669914947">番号</translation>
 <translation id="3691593122358196899">「<ph name="FOLDER_TITLE" />」にブックマークしました</translation>
 <translation id="3771033907050503522">シークレットタブ</translation>
 <translation id="3775743491439407556">同期が機能していません</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> ではありません</translation>
 <translation id="7454057999980797137">州/都道府県</translation>
 <translation id="7456847797759667638">場所を開く...</translation>
+<translation id="7460314822154045102">カメラを使う</translation>
 <translation id="7464701184726199289">すべてのデバイスから同期データを削除します。保存済みのサイト設定は削除されず、普段の閲覧行動を反映した設定などが残る場合があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">会社名</translation>
 <translation id="7481312909269577407">進む</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index ebace8f..e683cc2be 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="kn">
+<translation id="1005230401424685968">ವವವವ</translation>
 <translation id="1016495303386450659">ಐಟಂ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="1047726139967079566">ಈ ಪುಟವನ್ನು ಬುಕ್‌ಮಾರ್ಕ್ ಮಾಡಿ...</translation>
 <translation id="1049743911850919806">ಅದೃಶ್ಯ</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">ಸ್ವಯಂಭರ್ತಿ ಡೇಟಾ</translation>
 <translation id="3609785682760573515">ಸಿಂಕ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="3638472932233958418">ವೆಬ್ ಪುಟಗಳನ್ನು ಪೂರ್ವಲೋಡ್ ಮಾಡಿ</translation>
+<translation id="3670030362669914947">ಸಂಖ್ಯೆ</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ಗೆ ಬುಕ್‌ಮಾರ್ಕ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="3771033907050503522">ಅದೃಶ್ಯ ಟ್ಯಾಬ್‌ಗಳು</translation>
 <translation id="3775743491439407556">ಸಿಂಕ್ ಕೆಲಸ ಮಾಡುತ್ತಿಲ್ಲ</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> ಅಲ್ಲ</translation>
 <translation id="7454057999980797137">ರಾಜ್ಯ / ಕೌಂಟಿ</translation>
 <translation id="7456847797759667638">ಸ್ಥಳವನ್ನು ತೆರೆ...</translation>
+<translation id="7460314822154045102">ಕ್ಯಾಮರಾ ಬಳಸಿ</translation>
 <translation id="7464701184726199289">ಇದು ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲಿನ ಸಿಂಕ್‌ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ. ಉಳಿಸಲಾದ ಸೈಟ್‌ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಹವ್ಯಾಸಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">ಕಂಪನಿ ಹೆಸರು</translation>
 <translation id="7481312909269577407">ಫಾರ್ವರ್ಡ್</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index fb59ce5..4437dd3f2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ko">
+<translation id="1005230401424685968">연도</translation>
 <translation id="1016495303386450659">북마크가 업데이트되었습니다.</translation>
 <translation id="1047726139967079566">현재 페이지를 북마크에 추가...</translation>
 <translation id="1049743911850919806">시크릿</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">데이터 자동 완성</translation>
 <translation id="3609785682760573515">동기화 중...</translation>
 <translation id="3638472932233958418">웹페이지 미리 로드하기</translation>
+<translation id="3670030362669914947">번호</translation>
 <translation id="3691593122358196899">북마크를 <ph name="FOLDER_TITLE" />에 추가함</translation>
 <translation id="3771033907050503522">시크릿 탭</translation>
 <translation id="3775743491439407556">동기화가 작동하지 않음</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> 아님</translation>
 <translation id="7454057999980797137">도/군</translation>
 <translation id="7456847797759667638">위치 열기...</translation>
+<translation id="7460314822154045102">카메라 사용</translation>
 <translation id="7464701184726199289">모든 기기에서 동기화된 데이터가 삭제됩니다. 저장된 사이트 설정은 삭제되지 않으며 인터넷 사용 습관이 반영될 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">회사명</translation>
 <translation id="7481312909269577407">앞으로</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index 0b7ac01..1a3495a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lt">
+<translation id="1005230401424685968">MMMM</translation>
 <translation id="1016495303386450659">Elementas atnaujintas</translation>
 <translation id="1047726139967079566">Įtraukti šį puslapį į žymes...</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Autom. pild. duom.</translation>
 <translation id="3609785682760573515">Sinchronizuojama...</translation>
 <translation id="3638472932233958418">Iš anksto įk. tinkl.</translation>
+<translation id="3670030362669914947">Numeris</translation>
 <translation id="3691593122358196899">Sukurta „<ph name="FOLDER_TITLE" />“ žymė</translation>
 <translation id="3771033907050503522">Inkognito skirt.</translation>
 <translation id="3775743491439407556">Sinchronizavimas neveikia</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Ne <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Valst. / apyg.</translation>
 <translation id="7456847797759667638">Atidaryti vietą...</translation>
+<translation id="7460314822154045102">Naudoti fotoaparatą</translation>
 <translation id="7464701184726199289">Taip sinchronizuoti duomenys bus išvalyti iš visų įrenginių. Išsaugoti svetainių nustatymai nebus ištrinti ir gali nurodyti naršymo įpročius. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Įmonės pavad.</translation>
 <translation id="7481312909269577407">Persiųsti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index d748800a..bb0dba2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="lv">
+<translation id="1005230401424685968">GGGG</translation>
 <translation id="1016495303386450659">Vienums atjaunināts</translation>
 <translation id="1047726139967079566">Saglabāt šo lapu kā grāmatzīmi...</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Aut. aizpildes dati</translation>
 <translation id="3609785682760573515">Notiek sinhronizēšana...</translation>
 <translation id="3638472932233958418">Pirmsiel. tīm. lapas</translation>
+<translation id="3670030362669914947">Numurs</translation>
 <translation id="3691593122358196899">Grāmatzīme saglabāta mapē <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Inkognito režīma cilnes</translation>
 <translation id="3775743491439407556">Sinhronizācija nedarbojas</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> nav mana e-pasta adrese</translation>
 <translation id="7454057999980797137">Štats/valsts</translation>
 <translation id="7456847797759667638">Atvērt atrašanās vietu...</translation>
+<translation id="7460314822154045102">Kameras lietošana</translation>
 <translation id="7464701184726199289">Tādējādi visās ierīcēs tiek notīrīti sinhronizētie dati. Saglabātie vietņu iestatījumi netiks dzēsti, un tie var atspoguļot jūsu pārlūkošanas ieradumus. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation>
 <translation id="7472734401283673885">Uzņ. nosaukums</translation>
 <translation id="7481312909269577407">Pārsūtīt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index b1f5a80..b0c28c22e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ml">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">ഇനം അപ്‌ഡേറ്റുചെയ്‌തു</translation>
 <translation id="1047726139967079566">ഈ പേജ് ബുക്ക്‌മാര്‍ക്ക് ചെയ്യുക...</translation>
 <translation id="1049743911850919806">ആള്‍‌മാറാട്ടം</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">സ്വയമേവ പൂരിപ്പിക്കൽ ഡാറ്റ</translation>
 <translation id="3609785682760573515">സമന്വയിപ്പിക്കുന്നു...</translation>
 <translation id="3638472932233958418">മുമ്പ് ലോഡുചെയ്‌ത വെബ്‌പേജുകൾ</translation>
+<translation id="3670030362669914947">നമ്പർ</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ഫോൾഡറിലേക്ക് ബുക്ക്മാർക്ക് ചെയ്‌തു</translation>
 <translation id="3771033907050503522">ആൾമാറാട്ട ടാബുകൾ</translation>
 <translation id="3775743491439407556">സമന്വയം പ്രവർത്തിക്കുന്നില്ല</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> അല്ല</translation>
 <translation id="7454057999980797137">സംസ്ഥാനം / രാജ്യം</translation>
 <translation id="7456847797759667638">സ്ഥാനം തുറക്കുക...</translation>
+<translation id="7460314822154045102">ക്യാമറ ഉപയോഗിക്കുക</translation>
 <translation id="7464701184726199289">ഇത് എല്ലാ ഉപകരണങ്ങളിൽ നിന്നും സമന്വയിപ്പിച്ച ഡാറ്റയെ മായ്‌ക്കും. സംരക്ഷിച്ച സൈറ്റ് ക്രമീകരണം ഇല്ലാതാക്കപ്പെടില്ല, ഇത് നിങ്ങളുടെ ബ്രൗസിംഗ് രീതികളെ പ്രതിഫലിപ്പിക്കാനുമിടയുണ്ട്. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">കമ്പനിയുടെ പേര്</translation>
 <translation id="7481312909269577407">മുന്നോട്ട്</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 2fe70aa32..188fbae4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">आयटम अपडेट केला</translation>
 <translation id="1047726139967079566">हे पृष्ठ बुकमार्क करा...</translation>
 <translation id="1049743911850919806">गुप्त</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">अॉटोफिल डेटा</translation>
 <translation id="3609785682760573515">संकालन करत आहे...</translation>
 <translation id="3638472932233958418">वेबपृष्ठे प्रीलोड करा</translation>
+<translation id="3670030362669914947">नंबर</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> मध्ये बुकमार्क केले</translation>
 <translation id="3771033907050503522">गुप्त टॅब</translation>
 <translation id="3775743491439407556">सिंक काम करत नाही</translation>
@@ -450,6 +452,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> नाही</translation>
 <translation id="7454057999980797137">राज्य / विभाग</translation>
 <translation id="7456847797759667638">स्थान उघडा...</translation>
+<translation id="7460314822154045102">कॅमेरा वापरा</translation>
 <translation id="7464701184726199289">हे सर्व डिव्हाइसेसवरून संकालित केलेला डेटा साफ करेल. सेव्ह केलेल्या साइट सेटिंग्ज हटविल्या जाणार नाहीत आणि कदाचित आपल्या ब्राउझिंग सवयी दर्शवेल. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">कंपनीचे नाव</translation>
 <translation id="7481312909269577407">पुढील</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index edc10f4c..b86008ff 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ms">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">Item dikemas kini</translation>
 <translation id="1047726139967079566">Tanda Halaman Ini...</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Autolengkap Data</translation>
 <translation id="3609785682760573515">Menyegerakkan...</translation>
 <translation id="3638472932233958418">Pramuat Halaman Web</translation>
+<translation id="3670030362669914947">Nombor</translation>
 <translation id="3691593122358196899">Ditandai halaman ke <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Tab Inkognito</translation>
 <translation id="3775743491439407556">Penyegerakan Tidak Berfungsi</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Bukan <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Negeri / Daerah</translation>
 <translation id="7456847797759667638">Buka Lokasi...</translation>
+<translation id="7460314822154045102">Gunakan Kamera</translation>
 <translation id="7464701184726199289">Tetapan ini akan menghapuskan data yang disegerakkan daripada semua peranti. Tetapan tapak yang disimpan tidak akan dipadamkan dan mungkin mencerminkan tabiat semak imbas anda. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nama Syarikat</translation>
 <translation id="7481312909269577407">Majukan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index 5ee603b5..6992d03 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="nl">
+<translation id="1005230401424685968">JJJJ</translation>
 <translation id="1016495303386450659">Item geüpdated</translation>
 <translation id="1047726139967079566">Bladwijzer instellen voor deze pagina...</translation>
 <translation id="1049743911850919806">Incognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Gegevens van Automatisch aanvullen</translation>
 <translation id="3609785682760573515">Synchroniseren...</translation>
 <translation id="3638472932233958418">Webpagina's vooraf laden</translation>
+<translation id="3670030362669914947">Nummer</translation>
 <translation id="3691593122358196899">Bladwijzer gemaakt in <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Incognitotabbladen</translation>
 <translation id="3775743491439407556">Synchronisatie werkt niet</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Niet <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Provincie</translation>
 <translation id="7456847797759667638">Open locatie...</translation>
+<translation id="7460314822154045102">Camera gebruiken</translation>
 <translation id="7464701184726199289">Hiermee worden gesynchroniseerde gegevens van alle apparaten gewist. Opgeslagen site-instellingen worden niet verwijderd en kunnen je browsegedrag weerspiegelen. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Bedrijfsnaam</translation>
 <translation id="7481312909269577407">Vooruit</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index 2d9beb5d..e605f958 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="no">
+<translation id="1005230401424685968">ÅÅÅÅ</translation>
 <translation id="1016495303386450659">Elementet er oppdatert</translation>
 <translation id="1047726139967079566">Legg til bokmerke for denne siden...</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Autofylldata</translation>
 <translation id="3609785682760573515">Synkroniserer …</translation>
 <translation id="3638472932233958418">Last inn nettsider på forhånd</translation>
+<translation id="3670030362669914947">Nummer</translation>
 <translation id="3691593122358196899">Satt som bokmerke i <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Inkognitofaner</translation>
 <translation id="3775743491439407556">Synkronisering fungerer ikke</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Ikke <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Fylke/kommune</translation>
 <translation id="7456847797759667638">Åpne sted</translation>
+<translation id="7460314822154045102">Bruk kameraet</translation>
 <translation id="7464701184726199289">Dette sletter synkroniserte data fra alle enheter. Lagrede nettstedsinnstillinger slettes ikke og kan gjenspeile nettleserbruken din. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Bedriftsnavn</translation>
 <translation id="7481312909269577407">Frem</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index aae4770..8aacfaa6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pl">
+<translation id="1005230401424685968">RRRR</translation>
 <translation id="1016495303386450659">Zaktualizowano element</translation>
 <translation id="1047726139967079566">Dodaj stronę do zakładek...</translation>
 <translation id="1049743911850919806">Incognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Autouzupełnianie</translation>
 <translation id="3609785682760573515">Synchronizuję...</translation>
 <translation id="3638472932233958418">Wstępne wczytywanie stron</translation>
+<translation id="3670030362669914947">Numer</translation>
 <translation id="3691593122358196899">Utworzono zakładkę w folderze <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Karty incognito</translation>
 <translation id="3775743491439407556">Synchronizacja nie działa</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Konto <ph name="EMAIL" /> nie jest moje</translation>
 <translation id="7454057999980797137">Stan/region</translation>
 <translation id="7456847797759667638">Otwórz lokalizację...</translation>
+<translation id="7460314822154045102">Użyj aparatu</translation>
 <translation id="7464701184726199289">Spowoduje to usunięcie zsynchronizowanych danych ze wszystkich urządzeń. Zapisane ustawienia witryn nie zostaną usunięte i mogą zawierać informacje o Twoim korzystaniu z przeglądarki. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nazwa firmy</translation>
 <translation id="7481312909269577407">Dalej</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index bfb9a12..c28d531 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-BR">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">Item atualizado</translation>
 <translation id="1047726139967079566">Adicionar esta página aos favoritos...</translation>
 <translation id="1049743911850919806">Modo anônimo</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Dados de preenchimento automático</translation>
 <translation id="3609785682760573515">Sincronizando...</translation>
 <translation id="3638472932233958418">Pré-carregar páginas da web</translation>
+<translation id="3670030362669914947">Número</translation>
 <translation id="3691593122358196899">Adicionado como favorito em <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Guias anônimas</translation>
 <translation id="3775743491439407556">A sincronização não está funcionando</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Não sou <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Estado/Prov.</translation>
 <translation id="7456847797759667638">Abrir local...</translation>
+<translation id="7460314822154045102">Usar a câmera</translation>
 <translation id="7464701184726199289">Isso limpa os dados sincronizados de todos os dispositivos. As configurações salvas em sites não são excluídas e podem refletir seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nome da empresa</translation>
 <translation id="7481312909269577407">Avançar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index 0e546de..7cd9b2b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-PT">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">Item atualizado</translation>
 <translation id="1047726139967079566">Marcar esta página...</translation>
 <translation id="1049743911850919806">Navegação anónima</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Dados de preenchimento automático</translation>
 <translation id="3609785682760573515">A sincronizar…</translation>
 <translation id="3638472932233958418">Pré-carregar Páginas Web</translation>
+<translation id="3670030362669914947">Número</translation>
 <translation id="3691593122358196899">Adicionado aos marcadores em <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Sep. nav. anónima</translation>
 <translation id="3775743491439407556">A sincronização não está a funcionar</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Não é <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Distrito/concelho</translation>
 <translation id="7456847797759667638">Abrir localização...</translation>
+<translation id="7460314822154045102">Utilizar a Câmara</translation>
 <translation id="7464701184726199289">Esta ação limpa os dados sincronizados de todos os dispositivos. As definições de sites guardadas não são eliminadas e podem refletir os seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Nome da empresa</translation>
 <translation id="7481312909269577407">Avançar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 83b795b9..3328447 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ro">
+<translation id="1005230401424685968">AAAA</translation>
 <translation id="1016495303386450659">Element actualizat</translation>
 <translation id="1047726139967079566">Marcați această pagină...</translation>
 <translation id="1049743911850919806">Incognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Datele de completare automată</translation>
 <translation id="3609785682760573515">Se sincronizează...</translation>
 <translation id="3638472932233958418">Preîncarcă pagini</translation>
+<translation id="3670030362669914947">Număr</translation>
 <translation id="3691593122358196899">Marcaj adăugat în <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">File incognito</translation>
 <translation id="3775743491439407556">Sincronizarea nu funcționează</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Nu ca <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Stat/Județ</translation>
 <translation id="7456847797759667638">Deschide o locație...</translation>
+<translation id="7460314822154045102">Folosește camera foto</translation>
 <translation id="7464701184726199289">Astfel, datele sincronizate vor fi șterse de pe toate dispozitivele. Setările salvate pentru site-uri nu vor fi șterse și pot reflecta obiceiurile de navigare. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Numele companiei</translation>
 <translation id="7481312909269577407">Înainte</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index 69c84bc0..e87e94c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ru">
+<translation id="1005230401424685968">ГГГГ</translation>
 <translation id="1016495303386450659">Обновлено</translation>
 <translation id="1047726139967079566">Добавить страницу в закладки…</translation>
 <translation id="1049743911850919806">Инкогнито</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Данные автозаполнения</translation>
 <translation id="3609785682760573515">Cинхронизация…</translation>
 <translation id="3638472932233958418">Предварительная загрузка</translation>
+<translation id="3670030362669914947">Номер</translation>
 <translation id="3691593122358196899">Закладка добавлена в папку "<ph name="FOLDER_TITLE" />"</translation>
 <translation id="3771033907050503522">Вкладки инкогнито</translation>
 <translation id="3775743491439407556">Ошибка синхронизации</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Не <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Регион</translation>
 <translation id="7456847797759667638">Открыть адрес...</translation>
+<translation id="7460314822154045102">Использовать камеру</translation>
 <translation id="7464701184726199289">Синхронизированные данные будут удалены со всех устройств. Настройки сайтов не изменятся, поэтому данные о вашей работе в Интернете сохранятся. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Название компании</translation>
 <translation id="7481312909269577407">Вперед</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index d0eac3d..cceb75d2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sk">
+<translation id="1005230401424685968">RRRR</translation>
 <translation id="1016495303386450659">Položka bola aktualizovaná</translation>
 <translation id="1047726139967079566">Pridať stránku medzi záložky…</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Údaje automatického dopĺňania</translation>
 <translation id="3609785682760573515">Prebieha synchronizácia...</translation>
 <translation id="3638472932233958418">Predbežne načítavať webové stránky</translation>
+<translation id="3670030362669914947">Číslo</translation>
 <translation id="3691593122358196899">Uložené ako záložka v priečinku <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Karty inkognito</translation>
 <translation id="3775743491439407556">Synchronizácia nefunguje</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Nie som <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Štát/okres</translation>
 <translation id="7456847797759667638">Otvoriť umiestnenie...</translation>
+<translation id="7460314822154045102">Použiť fotoaparát</translation>
 <translation id="7464701184726199289">Táto akcia vymaže synchronizované údaje zo všetkých zariadení. Uložené nastavenia webov sa neodstránia a môžu odrážať vaše návyky prehliadania. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Názov spoločnosti</translation>
 <translation id="7481312909269577407">Dopredu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index ecb6d09..5158ebb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sl">
+<translation id="1005230401424685968">LLLL</translation>
 <translation id="1016495303386450659">Item updated</translation>
 <translation id="1047726139967079566">Zaznamek za to stran ...</translation>
 <translation id="1049743911850919806">Način brez beleženja zgodovine</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Autofill Data</translation>
 <translation id="3609785682760573515">Sinhroniziranje ...</translation>
 <translation id="3638472932233958418">Vnaprej naloži spletne strani</translation>
+<translation id="3670030362669914947">Številka</translation>
 <translation id="3691593122358196899">Zaznamek ustvarjen v mapi <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Incognito Tabs</translation>
 <translation id="3775743491439407556">Sinhronizacija ne deluje</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Nisem <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Regija</translation>
 <translation id="7456847797759667638">Odpri mesto ...</translation>
+<translation id="7460314822154045102">Uporabi fotoaparat</translation>
 <translation id="7464701184726199289">S tem bodo sinhronizirani podatki izbrisani iz vseh naprav. Shranjene nastavitve spletnih mest ne bodo izbrisane in morda odražajo vaše brskalne navade. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Ime podjetja</translation>
 <translation id="7481312909269577407">Naprej</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index 755e028..31ef273 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sr">
+<translation id="1005230401424685968">ГГГГ</translation>
 <translation id="1016495303386450659">Ставка је ажурирана</translation>
 <translation id="1047726139967079566">Обележи ову страницу...</translation>
 <translation id="1049743911850919806">Без архивирања</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Подаци аутоматског попуњавања</translation>
 <translation id="3609785682760573515">Синхронизовање...</translation>
 <translation id="3638472932233958418">Унап. учитај веб-странице</translation>
+<translation id="3670030362669914947">Број</translation>
 <translation id="3691593122358196899">Обележивач је додат у <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Картице Без архивирања</translation>
 <translation id="3775743491439407556">Синхронизација не ради</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Нисам <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Држава/земља</translation>
 <translation id="7456847797759667638">Отвори локацију...</translation>
+<translation id="7460314822154045102">Користи Камеру</translation>
 <translation id="7464701184726199289">Ово ће обрисати синхронизоване податке са свих уређаја. Нећемо избрисати сачувана подешавања сајтова и она могу да одражавају ваше навике при прегледању. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Назив компаније</translation>
 <translation id="7481312909269577407">Проследи</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
index 57819b3..c17c59c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sv">
+<translation id="1005230401424685968">ÅÅÅÅ</translation>
 <translation id="1016495303386450659">Bokmärket har uppdaterats</translation>
 <translation id="1047726139967079566">Skapa bokmärke för den här sidan...</translation>
 <translation id="1049743911850919806">Inkognito</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Autofyll uppgifter</translation>
 <translation id="3609785682760573515">Synkroniserar ...</translation>
 <translation id="3638472932233958418">Läs in webbsidor i förväg</translation>
+<translation id="3670030362669914947">Nummer</translation>
 <translation id="3691593122358196899">Bokmärkt i <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Inkognitoflikar</translation>
 <translation id="3775743491439407556">Det går inte att synkronisera</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Inte <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Delstat/county</translation>
 <translation id="7456847797759667638">Öppna plats...</translation>
+<translation id="7460314822154045102">Använda Kamera</translation>
 <translation id="7464701184726199289">Inställningarna rensar synkroniserad data från alla enheter. Sparade webbplatsinställningar raderas inte och kan visa dina surfvanor. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Företagets namn</translation>
 <translation id="7481312909269577407">Framåt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
index d9273aa..e76c408a2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sw">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">Umesasisha kipengee</translation>
 <translation id="1047726139967079566">Alamisha Ukurasa Huu...</translation>
 <translation id="1049743911850919806">Kichupo fiche</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Jaza Data Kiotomatiki</translation>
 <translation id="3609785682760573515">Inasawazisha...</translation>
 <translation id="3638472932233958418">Pakia Kurasa za wavuti Mapema</translation>
+<translation id="3670030362669914947">Nambari</translation>
 <translation id="3691593122358196899">Imetiwa alamisho kwenye <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Vichupo Fiche</translation>
 <translation id="3775743491439407556">Kipengele cha Kusawazisha Hakifanyi Kazi</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Wewe si <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Jimbo / Mkoa</translation>
 <translation id="7456847797759667638">Fungua Mahali...</translation>
+<translation id="7460314822154045102">Tumia Kamera</translation>
 <translation id="7464701184726199289">Hatua hii itafuta data iliyosawazishwa kwenye vifaa vyote. Mipangilio ya tovuti iliyohifadhiwa haitafutwa na inaweza kuonyesha mtindo wako wa kuvinjari. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Jina la Kampuni</translation>
 <translation id="7481312909269577407">Mbele</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index 07e468c4..cd10c4d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="te">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">అంశం నవీకరించబడింది</translation>
 <translation id="1047726139967079566">ఈ పేజీని బుక్‌మార్క్ చేయండి...</translation>
 <translation id="1049743911850919806">అజ్ఞాత</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">స్వీయపూర్తి డేటా</translation>
 <translation id="3609785682760573515">సమకాలీకరిస్తోంది...</translation>
 <translation id="3638472932233958418">వెబ్‌పేజీలను ముందే లోడ్ చేయి</translation>
+<translation id="3670030362669914947">నంబర్</translation>
 <translation id="3691593122358196899"><ph name="FOLDER_TITLE" />కి బుక్‌మార్క్ చేయబడింది</translation>
 <translation id="3771033907050503522">అజ్ఞాత ట్యాబ్‌లు</translation>
 <translation id="3775743491439407556">సింక్ పని చేయడం లేదు</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> కాదు</translation>
 <translation id="7454057999980797137">రాష్ట్రం / దేశం</translation>
 <translation id="7456847797759667638">స్థానాన్ని తెరువు...</translation>
+<translation id="7460314822154045102">కెమెరాను ఉపయోగించు</translation>
 <translation id="7464701184726199289">ఇది అన్ని పరికరాల నుండి సింక్ చేయబడిన డేటాను తీసివేస్తుంది. సేవ్ చేసిన సైట్ సెట్టింగ్‌లు తొలగించబడవు, ఇవి మీ బ్రౌజింగ్ అలవాట్లను ప్రదర్శించవచ్చు. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">కంపెనీ పేరు</translation>
 <translation id="7481312909269577407">ఫార్వర్డ్</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 5187e740..65f8b15 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="th">
+<translation id="1005230401424685968">ปปปป</translation>
 <translation id="1016495303386450659">อัปเดตรายการแล้ว</translation>
 <translation id="1047726139967079566">บุ๊กมาร์กหน้านี้...</translation>
 <translation id="1049743911850919806">โหมดไม่ระบุตัวตน</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">ป้อนข้อมูลอัตโนมัติ</translation>
 <translation id="3609785682760573515">กำลังซิงค์...</translation>
 <translation id="3638472932233958418">โหลดหน้าเว็บล่วงหน้า</translation>
+<translation id="3670030362669914947">หมายเลข</translation>
 <translation id="3691593122358196899">เพิ่มบุ๊กมาร์กไปยัง <ph name="FOLDER_TITLE" /> แล้ว</translation>
 <translation id="3771033907050503522">แท็บที่ไม่ระบุตัวตน</translation>
 <translation id="3775743491439407556">การซิงค์ไม่ทำงาน</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">ไม่ใช่ <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">เขต/แขวง</translation>
 <translation id="7456847797759667638">เปิดตำแหน่ง...</translation>
+<translation id="7460314822154045102">ใช้กล้องถ่ายรูป</translation>
 <translation id="7464701184726199289">การดำเนินการนี้จะล้างข้อมูลที่ซิงค์จากอุปกรณ์ทั้งหมด การตั้งค่าเว็บไซต์ที่บันทึกไว้จะไม่ถูกลบและอาจส่งผลกับลักษณะการท่องเว็บของคุณ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">ชื่อบริษัท</translation>
 <translation id="7481312909269577407">ส่งต่อ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 7356419..3a1a81bf 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="tr">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">Öğe güncellendi</translation>
 <translation id="1047726139967079566">Bu Sayfaya Yer İşareti Koy...</translation>
 <translation id="1049743911850919806">Gizli mod</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Verileri Otomatik Doldur</translation>
 <translation id="3609785682760573515">Senkronize ediliyor...</translation>
 <translation id="3638472932233958418">Web Sayfalarını Önceden Yükle</translation>
+<translation id="3670030362669914947">Numara</translation>
 <translation id="3691593122358196899">Yer işareti <ph name="FOLDER_TITLE" /> klasörüne eklendi</translation>
 <translation id="3771033907050503522">Gizli Sekmeler</translation>
 <translation id="3775743491439407556">Senkronizasyon Çalışmıyor</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790"><ph name="EMAIL" /> değilim</translation>
 <translation id="7454057999980797137">Eyalet / İlçe</translation>
 <translation id="7456847797759667638">Konumu Aç...</translation>
+<translation id="7460314822154045102">Kamerayı Kullan</translation>
 <translation id="7464701184726199289">Bu işlem, senkronize edilen verileri tüm cihazlardan siler. Kayıtlı site ayarları silinmez ve web'e göz atma alışkanlıklarınızı yansıtabilir. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Şirket Adı</translation>
 <translation id="7481312909269577407">İleri</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
index 8a952a4..7289b63 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="uk">
+<translation id="1005230401424685968">РРРР</translation>
 <translation id="1016495303386450659">Закладку оновлено</translation>
 <translation id="1047726139967079566">Додати цю сторінку до закладок...</translation>
 <translation id="1049743911850919806">Анонімний перегляд</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Дані автозаповнення</translation>
 <translation id="3609785682760573515">Синхронізація…</translation>
 <translation id="3638472932233958418">Попер.завантаж.стор.</translation>
+<translation id="3670030362669914947">Номер</translation>
 <translation id="3691593122358196899">Закладку збережено в папці "<ph name="FOLDER_TITLE" />"</translation>
 <translation id="3771033907050503522">Анонімні вкладки</translation>
 <translation id="3775743491439407556">Синхронізація не працює</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Не <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Область</translation>
 <translation id="7456847797759667638">Відкрити розташування...</translation>
+<translation id="7460314822154045102">Відкрити камеру</translation>
 <translation id="7464701184726199289">Синхронізовані дані буде видалено з усіх пристроїв. Збережені налаштування, які можуть стосуватися ваших зацікавлень в Інтернеті, не буде видалено. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Назва компанії</translation>
 <translation id="7481312909269577407">Переслати</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 55e8d87..ab7503ad 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="vi">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">Đã cập nhật mục</translation>
 <translation id="1047726139967079566">Đánh dấu Trang Này...</translation>
 <translation id="1049743911850919806">Ẩn danh</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">Dữ liệu tự động điền</translation>
 <translation id="3609785682760573515">Đang đồng bộ hóa...</translation>
 <translation id="3638472932233958418">Tải trước trang web</translation>
+<translation id="3670030362669914947">Số</translation>
 <translation id="3691593122358196899">Đã đánh dấu trang vào <ph name="FOLDER_TITLE" /></translation>
 <translation id="3771033907050503522">Tab ẩn danh</translation>
 <translation id="3775743491439407556">Tính năng đồng bộ hóa hiện không hoạt động</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">Không phải là <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">Tiểu bang/quận</translation>
 <translation id="7456847797759667638">Mở Vị trí...</translation>
+<translation id="7460314822154045102">Sử dụng máy ảnh</translation>
 <translation id="7464701184726199289">Thao tác này sẽ xóa dữ liệu được đồng bộ hóa khỏi tất cả thiết bị. Cài đặt trang web đã lưu sẽ không bị xóa và có thể phản ánh thói quen duyệt web của bạn. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">Tên công ty</translation>
 <translation id="7481312909269577407">Chuyển tiếp</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 df2deed..00c65ae 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">书签已更新</translation>
 <translation id="1047726139967079566">为此页添加书签...</translation>
 <translation id="1049743911850919806">无痕</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">自动填充数据</translation>
 <translation id="3609785682760573515">正在同步…</translation>
 <translation id="3638472932233958418">预先加载网页</translation>
+<translation id="3670030362669914947">卡号</translation>
 <translation id="3691593122358196899">已将书签添加到“<ph name="FOLDER_TITLE" />”</translation>
 <translation id="3771033907050503522">隐身标签页</translation>
 <translation id="3775743491439407556">同步功能无法正常运行</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">不是 <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">省/区/县</translation>
 <translation id="7456847797759667638">打开位置...</translation>
+<translation id="7460314822154045102">使用相机</translation>
 <translation id="7464701184726199289">这将清除所有设备上的已同步数据。已保存的网站设置将不会遭到删除,并且可能会反映您的浏览习惯。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">公司名称</translation>
 <translation id="7481312909269577407">前进</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
index e557a24..f1014fd68 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -1,6 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-TW">
+<translation id="1005230401424685968">YYYY</translation>
 <translation id="1016495303386450659">項目已更新</translation>
 <translation id="1047726139967079566">把此頁加入書籤...</translation>
 <translation id="1049743911850919806">無痕模式</translation>
@@ -194,6 +195,7 @@
 <translation id="3607167657931203000">自動填入資料</translation>
 <translation id="3609785682760573515">同步處理中...</translation>
 <translation id="3638472932233958418">預先載入網頁</translation>
+<translation id="3670030362669914947">號碼</translation>
 <translation id="3691593122358196899">已將書籤加入「<ph name="FOLDER_TITLE" />」</translation>
 <translation id="3771033907050503522">無痕式分頁</translation>
 <translation id="3775743491439407556">同步功能無法正常運作</translation>
@@ -449,6 +451,7 @@
 <translation id="744343212394640790">不是 <ph name="EMAIL" /></translation>
 <translation id="7454057999980797137">州/縣</translation>
 <translation id="7456847797759667638">開啟位置...</translation>
+<translation id="7460314822154045102">使用相機</translation>
 <translation id="7464701184726199289">系統會將保持同步的資料從所有裝置上刪除。已儲存的網站設定不會遭到刪除,而且可能會反映您的瀏覽習慣。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="7472734401283673885">公司名稱</translation>
 <translation id="7481312909269577407">往前</translation>
diff --git a/ios/chrome/browser/app_launcher/BUILD.gn b/ios/chrome/browser/app_launcher/BUILD.gn
index 02f73a9..5e22fe48 100644
--- a/ios/chrome/browser/app_launcher/BUILD.gn
+++ b/ios/chrome/browser/app_launcher/BUILD.gn
@@ -21,8 +21,11 @@
     "//components/reading_list/core:core",
     "//ios/chrome/browser",
     "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/overlays",
+    "//ios/chrome/browser/overlays/public/web_content_area",
     "//ios/chrome/browser/reading_list",
     "//ios/chrome/browser/u2f",
+    "//ios/chrome/browser/ui/dialogs:feature_flags",
     "//ios/web/common",
     "//ios/web/public",
     "//url",
diff --git a/ios/chrome/browser/app_launcher/app_launcher_abuse_detector.h b/ios/chrome/browser/app_launcher/app_launcher_abuse_detector.h
index ab62c49..dc8f96e 100644
--- a/ios/chrome/browser/app_launcher/app_launcher_abuse_detector.h
+++ b/ios/chrome/browser/app_launcher/app_launcher_abuse_detector.h
@@ -16,6 +16,8 @@
   // application or launch it.
   ExternalAppLaunchPolicyPrompt,
   // Block launching the application for this session.
+  // TODO(crbug.com/989316): Remove this policy once non-modal dialogs are used
+  // by default.
   ExternalAppLaunchPolicyBlock,
 };
 
diff --git a/ios/chrome/browser/app_launcher/app_launcher_tab_helper.mm b/ios/chrome/browser/app_launcher/app_launcher_tab_helper.mm
index 2ca5b88..be84fcc 100644
--- a/ios/chrome/browser/app_launcher/app_launcher_tab_helper.mm
+++ b/ios/chrome/browser/app_launcher/app_launcher_tab_helper.mm
@@ -17,6 +17,7 @@
 #import "ios/chrome/browser/chrome_url_util.h"
 #include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
 #import "ios/chrome/browser/u2f/u2f_tab_helper.h"
+#import "ios/chrome/browser/ui/dialogs/dialog_features.h"
 #import "ios/web/common/url_scheme_util.h"
 #import "ios/web/public/navigation/navigation_item.h"
 #import "ios/web/public/navigation/navigation_manager.h"
@@ -148,10 +149,13 @@
                              launchAppWithURL:copied_url
                                linkTransition:YES];
             } else {
-              // TODO(crbug.com/674649): Once non modal dialogs are implemented,
-              // update this to always prompt instead of blocking the app.
-              [abuse_detector_ blockLaunchingAppURL:copied_url
-                                  fromSourcePageURL:copied_source_page_url];
+              if (!base::FeatureList::IsEnabled(dialogs::kNonModalDialogs)) {
+                // Only block app launches if the app launch alert is being
+                // displayed modally since DOS attacks are not possible when the
+                // app launch alert is presented non-modally.
+                [abuse_detector_ blockLaunchingAppURL:copied_url
+                                    fromSourcePageURL:copied_source_page_url];
+              }
             }
             is_prompt_active_ = false;
           }];
diff --git a/ios/chrome/browser/autofill/BUILD.gn b/ios/chrome/browser/autofill/BUILD.gn
index 24a16bf..7fa25ad 100644
--- a/ios/chrome/browser/autofill/BUILD.gn
+++ b/ios/chrome/browser/autofill/BUILD.gn
@@ -514,6 +514,7 @@
     "//ios/chrome/app/strings",
     "//ios/chrome/browser/autofill:autofill_shared",
     "//ios/chrome/browser/ui/util",
+    "//ios/chrome/test:eg_test_support",
     "//ios/chrome/test/app:test_support",
     "//ios/chrome/test/earl_grey:test_support",
     "//ios/testing/earl_grey:earl_grey_support",
diff --git a/ios/chrome/browser/autofill/form_input_egtest.mm b/ios/chrome/browser/autofill/form_input_egtest.mm
index a50389ab1..f707aa2 100644
--- a/ios/chrome/browser/autofill/form_input_egtest.mm
+++ b/ios/chrome/browser/autofill/form_input_egtest.mm
@@ -16,6 +16,7 @@
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#import "ios/chrome/test/scoped_eg_synchronization_disabler.h"
 #import "ios/web/public/deprecated/crw_js_injection_receiver.h"
 #import "ios/web/public/test/earl_grey/web_view_actions.h"
 #import "ios/web/public/test/earl_grey/web_view_matchers.h"
@@ -27,6 +28,9 @@
 #error "This file requires ARC support."
 #endif
 
+using base::test::ios::kWaitForUIElementTimeout;
+using base::test::ios::WaitUntilConditionOrTimeout;
+
 using chrome_test_util::WebViewMatcher;
 
 namespace {
@@ -55,8 +59,7 @@
   ConditionBlock condition = ^{
     return base::SysNSStringToUTF8(GetFocusedElementId()) == element_id;
   };
-  GREYAssert(base::test::ios::WaitUntilConditionOrTimeout(10, condition),
-             description);
+  GREYAssert(WaitUntilConditionOrTimeout(10, condition), description);
 }
 
 }  // namespace
@@ -68,12 +71,6 @@
 @implementation FormInputTestCase
 
 - (void)tearDown {
-  // |testFindDefaultFormAssistControls| disables synchronization.
-  // This makes sure it is enabled if that test has failed and did not enable it
-  // back.
-  [[GREYConfiguration sharedInstance]
-          setValue:@YES
-      forConfigKey:kGREYConfigKeySynchronizationEnabled];
   [super tearDown];
 }
 
@@ -96,61 +93,57 @@
   [ChromeEarlGrey waitForWebStateContainingText:"hello!"];
 
   // Opening the keyboard from a webview blocks EarlGrey's synchronization.
-  [[GREYConfiguration sharedInstance]
-          setValue:@NO
-      forConfigKey:kGREYConfigKeySynchronizationEnabled];
+  {
+    ScopedSynchronizationDisabler disabler;
 
-  // Brings up the keyboard by tapping on one of the form's field.
-  [[EarlGrey selectElementWithMatcher:WebViewMatcher()]
-      performAction:web::WebViewTapElement(
-                        chrome_test_util::GetCurrentWebState(),
-                        [ElementSelector
-                            selectorWithElementID:kFormElementId1])];
+    // Brings up the keyboard by tapping on one of the form's field.
+    [[EarlGrey selectElementWithMatcher:WebViewMatcher()]
+        performAction:web::WebViewTapElement(
+                          chrome_test_util::GetCurrentWebState(),
+                          [ElementSelector
+                              selectorWithElementID:kFormElementId1])];
 
-  id<GREYMatcher> nextButtonMatcher =
-      chrome_test_util::ButtonWithAccessibilityLabelId(
-          IDS_IOS_AUTOFILL_ACCNAME_NEXT_FIELD);
-  id<GREYMatcher> previousButtonMatcher =
-      chrome_test_util::ButtonWithAccessibilityLabelId(
-          IDS_IOS_AUTOFILL_ACCNAME_PREVIOUS_FIELD);
-  id<GREYMatcher> closeButtonMatcher =
-      chrome_test_util::ButtonWithAccessibilityLabelId(
-          IDS_IOS_AUTOFILL_ACCNAME_HIDE_KEYBOARD);
+    id<GREYMatcher> nextButtonMatcher =
+        chrome_test_util::ButtonWithAccessibilityLabelId(
+            IDS_IOS_AUTOFILL_ACCNAME_NEXT_FIELD);
+    id<GREYMatcher> previousButtonMatcher =
+        chrome_test_util::ButtonWithAccessibilityLabelId(
+            IDS_IOS_AUTOFILL_ACCNAME_PREVIOUS_FIELD);
+    id<GREYMatcher> closeButtonMatcher =
+        chrome_test_util::ButtonWithAccessibilityLabelId(
+            IDS_IOS_AUTOFILL_ACCNAME_HIDE_KEYBOARD);
 
-  // Wait until the keyboard's "Next" button appeared.
-  NSString* description = @"Wait for the keyboard's \"Next\" button to appear.";
-  ConditionBlock condition = ^{
-    NSError* error = nil;
+    // Wait until the keyboard's "Next" button appeared.
+    NSString* description =
+        @"Wait for the keyboard's \"Next\" button to appear.";
+    ConditionBlock condition = ^{
+      NSError* error = nil;
+      [[EarlGrey selectElementWithMatcher:nextButtonMatcher]
+          assertWithMatcher:grey_notNil()
+                      error:&error];
+      return (error == nil);
+    };
+    GREYAssert(WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, condition),
+               description);
+    base::test::ios::SpinRunLoopWithMinDelay(base::TimeDelta::FromSeconds(1));
+
+    // Verifies that the taped element is focused.
+    AssertElementIsFocused(kFormElementId1);
+
+    // Tap the "Next" button.
     [[EarlGrey selectElementWithMatcher:nextButtonMatcher]
-        assertWithMatcher:grey_notNil()
-                    error:&error];
-    return (error == nil);
-  };
-  GREYAssert(base::test::ios::WaitUntilConditionOrTimeout(
-                 base::test::ios::kWaitForUIElementTimeout, condition),
-             description);
-  base::test::ios::SpinRunLoopWithMinDelay(base::TimeDelta::FromSeconds(1));
+        performAction:grey_tap()];
+    AssertElementIsFocused(kFormElementId2);
 
-  // Verifies that the taped element is focused.
-  AssertElementIsFocused(kFormElementId1);
+    // Tap the "Previous" button.
+    [[EarlGrey selectElementWithMatcher:previousButtonMatcher]
+        performAction:grey_tap()];
+    AssertElementIsFocused(kFormElementId1);
 
-  // Tap the "Next" button.
-  [[EarlGrey selectElementWithMatcher:nextButtonMatcher]
-      performAction:grey_tap()];
-  AssertElementIsFocused(kFormElementId2);
-
-  // Tap the "Previous" button.
-  [[EarlGrey selectElementWithMatcher:previousButtonMatcher]
-      performAction:grey_tap()];
-  AssertElementIsFocused(kFormElementId1);
-
-  // Tap the "Close" button.
-  [[EarlGrey selectElementWithMatcher:closeButtonMatcher]
-      performAction:grey_tap()];
-
-  [[GREYConfiguration sharedInstance]
-          setValue:@YES
-      forConfigKey:kGREYConfigKeySynchronizationEnabled];
+    // Tap the "Close" button.
+    [[EarlGrey selectElementWithMatcher:closeButtonMatcher]
+        performAction:grey_tap()];
+  }
 }
 
 // Tests that trying to programmatically dismiss the keyboard when it isn't
diff --git a/ios/chrome/browser/download/BUILD.gn b/ios/chrome/browser/download/BUILD.gn
index 362b636..023419d 100644
--- a/ios/chrome/browser/download/BUILD.gn
+++ b/ios/chrome/browser/download/BUILD.gn
@@ -22,12 +22,10 @@
     "pass_kit_tab_helper.h",
     "pass_kit_tab_helper.mm",
     "pass_kit_tab_helper_delegate.h",
-    "usdz_mime_type.cc",
-    "usdz_mime_type.h",
   ]
 
   public_deps = [
-    ":pass_kit_mime_type",
+    ":mime_types",
   ]
 
   deps = [
@@ -64,10 +62,12 @@
   configs += [ "//build/config/compiler:enable_arc" ]
 }
 
-source_set("pass_kit_mime_type") {
+source_set("mime_types") {
   sources = [
     "pass_kit_mime_type.cc",
     "pass_kit_mime_type.h",
+    "usdz_mime_type.cc",
+    "usdz_mime_type.h",
   ]
 
   deps = [
diff --git a/ios/chrome/browser/snapshots/snapshot_generator.mm b/ios/chrome/browser/snapshots/snapshot_generator.mm
index 114eded..405d813 100644
--- a/ios/chrome/browser/snapshots/snapshot_generator.mm
+++ b/ios/chrome/browser/snapshots/snapshot_generator.mm
@@ -154,7 +154,7 @@
   __weak SnapshotGenerator* weakSelf = self;
   self.webState->TakeSnapshot(
       gfx::RectF(snapshotFrameInWebView),
-      base::BindOnce(^(const gfx::Image& image) {
+      base::BindRepeating(^(const gfx::Image& image) {
         UIImage* snapshot = nil;
         if (!image.IsEmpty()) {
           snapshot = [weakSelf
diff --git a/ios/chrome/browser/tabs/tab_model.mm b/ios/chrome/browser/tabs/tab_model.mm
index 86a9904..944c089 100644
--- a/ios/chrome/browser/tabs/tab_model.mm
+++ b/ios/chrome/browser/tabs/tab_model.mm
@@ -511,7 +511,8 @@
 - (void)saveSessionImmediately:(BOOL)immediately {
   // Do nothing if there are tabs in the model but no selected tab. This is
   // a transitional state.
-  if (!_webStateList->GetActiveWebState() || !_browserState)
+  if ((!_webStateList->GetActiveWebState() && _webStateList->count()) ||
+      !_browserState)
     return;
   NSString* statePath =
       base::SysUTF8ToNSString(_browserState->GetStatePath().AsUTF8Unsafe());
diff --git a/ios/chrome/browser/ui/app_launcher/BUILD.gn b/ios/chrome/browser/ui/app_launcher/BUILD.gn
index 9c62d706..0d0f6015 100644
--- a/ios/chrome/browser/ui/app_launcher/BUILD.gn
+++ b/ios/chrome/browser/ui/app_launcher/BUILD.gn
@@ -19,6 +19,9 @@
     "//ios/chrome/browser",
     "//ios/chrome/browser/app_launcher",
     "//ios/chrome/browser/app_launcher:feature_flags",
+    "//ios/chrome/browser/overlays",
+    "//ios/chrome/browser/overlays/public/web_content_area",
+    "//ios/chrome/browser/ui/dialogs:feature_flags",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/mailto",
     "//net",
@@ -38,6 +41,7 @@
     "//base",
     "//base/test:test_support",
     "//ios/chrome/app/strings:ios_strings_grit",
+    "//ios/chrome/browser/app_launcher",
     "//ios/chrome/browser/app_launcher:feature_flags",
     "//ios/chrome/test:test_support",
     "//ios/web/public/test/fakes",
diff --git a/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator.mm b/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator.mm
index cd3d9421..51622ba 100644
--- a/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator.mm
+++ b/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator.mm
@@ -6,12 +6,19 @@
 
 #import <UIKit/UIKit.h>
 
+#include "base/bind.h"
 #include "base/logging.h"
 #include "base/metrics/histogram_macros.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/app_launcher/app_launcher_flags.h"
+#import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h"
+#import "ios/chrome/browser/overlays/public/overlay_request.h"
+#import "ios/chrome/browser/overlays/public/overlay_request_queue.h"
+#import "ios/chrome/browser/overlays/public/overlay_response.h"
+#import "ios/chrome/browser/overlays/public/web_content_area/app_launcher_alert_overlay.h"
 #include "ios/chrome/browser/procedural_block_types.h"
 #import "ios/chrome/browser/ui/app_launcher/app_launcher_util.h"
+#import "ios/chrome/browser/ui/dialogs/dialog_features.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #include "ios/public/provider/chrome/browser/mailto/mailto_handler_provider.h"
@@ -33,6 +40,21 @@
   UMA_HISTOGRAM_BOOLEAN("Tab.ExternalApplicationOpened", user_accepted);
 }
 
+// Callback for the app launcher alert overlay.
+void AppLauncherOverlayCallback(ProceduralBlockWithBool app_launch_completion,
+                                OverlayResponse* response) {
+  DCHECK(app_launch_completion);
+  if (!response) {
+    app_launch_completion(NO);
+    return;
+  }
+
+  AppLauncherAlertOverlayResponseInfo* info =
+      response->GetInfo<AppLauncherAlertOverlayResponseInfo>();
+  bool allow_navigation = info ? info->allow_navigation() : false;
+  app_launch_completion(allow_navigation);
+}
+
 }  // namespace
 
 @interface AppLauncherCoordinator ()
@@ -60,6 +82,7 @@
            acceptActionTitle:(NSString*)acceptActionTitle
            rejectActionTitle:(NSString*)rejectActionTitle
            completionHandler:(ProceduralBlockWithBool)completionHandler {
+  DCHECK(!base::FeatureList::IsEnabled(dialogs::kNonModalDialogs));
   UIAlertController* alertController =
       [UIAlertController alertControllerWithTitle:nil
                                           message:message
@@ -86,23 +109,37 @@
 
 // Shows an alert that the app will open in another application. If the user
 // accepts, the |URL| is launched.
-- (void)showAlertAndLaunchAppURL:(const GURL&)URL {
+- (void)showAlertAndLaunchAppURL:(const GURL&)URL
+                        webState:(web::WebState*)webState {
   NSString* prompt = l10n_util::GetNSString(IDS_IOS_OPEN_IN_ANOTHER_APP);
   NSString* openLabel =
       l10n_util::GetNSString(IDS_IOS_APP_LAUNCHER_OPEN_APP_BUTTON_LABEL);
   NSString* cancelLabel = l10n_util::GetNSString(IDS_CANCEL);
   NSURL* copiedURL = net::NSURLWithGURL(URL);
-  [self showAlertWithMessage:prompt
-           acceptActionTitle:openLabel
-           rejectActionTitle:cancelLabel
-           completionHandler:^(BOOL userAccepted) {
-             RecordUserAcceptedAppLaunchMetric(userAccepted);
-             if (userAccepted) {
-               [[UIApplication sharedApplication] openURL:copiedURL
-                                                  options:@{}
-                                        completionHandler:nil];
-             }
-           }];
+  ProceduralBlockWithBool completion = ^(BOOL userAccepted) {
+    RecordUserAcceptedAppLaunchMetric(userAccepted);
+    if (userAccepted) {
+      [[UIApplication sharedApplication] openURL:copiedURL
+                                         options:@{}
+                               completionHandler:nil];
+    }
+  };
+
+  if (base::FeatureList::IsEnabled(dialogs::kNonModalDialogs)) {
+    std::unique_ptr<OverlayRequest> request =
+        OverlayRequest::CreateWithConfig<AppLauncherAlertOverlayRequestConfig>(
+            /* is_repeated_request= */ false);
+    request->set_callback(
+        base::BindOnce(&AppLauncherOverlayCallback, completion));
+    OverlayRequestQueue::FromWebState(webState,
+                                      OverlayModality::kWebContentArea)
+        ->AddRequest(std::move(request));
+  } else {
+    [self showAlertWithMessage:prompt
+             acceptActionTitle:openLabel
+             rejectActionTitle:cancelLabel
+             completionHandler:completion];
+  }
 }
 
 #pragma mark - AppLauncherTabHelperDelegate
@@ -115,8 +152,9 @@
       UIApplicationStateActive) {
     return NO;
   }
+  web::WebState* webState = tabHelper->web_state();
   if (UrlHasAppStoreScheme(URL)) {
-    [self showAlertAndLaunchAppURL:URL];
+    [self showAlertAndLaunchAppURL:URL webState:webState];
     return YES;
   }
 
@@ -136,7 +174,7 @@
                                          options:@{}
                                completionHandler:nil];
     } else {
-      [self showAlertAndLaunchAppURL:URL];
+      [self showAlertAndLaunchAppURL:URL webState:webState];
     }
     return YES;
   }
@@ -161,14 +199,26 @@
       l10n_util::GetNSString(IDS_IOS_OPEN_REPEATEDLY_ANOTHER_APP_ALLOW);
   NSString* blockLaunchTitle =
       l10n_util::GetNSString(IDS_IOS_OPEN_REPEATEDLY_ANOTHER_APP_BLOCK);
-  [self showAlertWithMessage:message
-           acceptActionTitle:allowLaunchTitle
-           rejectActionTitle:blockLaunchTitle
-           completionHandler:^(BOOL userAllowed) {
-             UMA_HISTOGRAM_BOOLEAN("IOS.RepeatedExternalAppPromptResponse",
-                                   userAllowed);
-             completionHandler(userAllowed);
-           }];
+  ProceduralBlockWithBool completion = ^(BOOL userAllowed) {
+    UMA_HISTOGRAM_BOOLEAN("IOS.RepeatedExternalAppPromptResponse", userAllowed);
+    completionHandler(userAllowed);
+  };
+
+  if (base::FeatureList::IsEnabled(dialogs::kNonModalDialogs)) {
+    std::unique_ptr<OverlayRequest> request =
+        OverlayRequest::CreateWithConfig<AppLauncherAlertOverlayRequestConfig>(
+            /* is_repeated_request= */ true);
+    request->set_callback(
+        base::BindOnce(&AppLauncherOverlayCallback, completion));
+    OverlayRequestQueue::FromWebState(tabHelper->web_state(),
+                                      OverlayModality::kWebContentArea)
+        ->AddRequest(std::move(request));
+  } else {
+    [self showAlertWithMessage:message
+             acceptActionTitle:allowLaunchTitle
+             rejectActionTitle:blockLaunchTitle
+             completionHandler:completion];
+  }
 }
 
 @end
diff --git a/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm b/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm
index 2f66cca6..c7ad9a8 100644
--- a/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm
@@ -9,6 +9,7 @@
 #include "base/mac/foundation_util.h"
 #include "base/test/scoped_feature_list.h"
 #include "ios/chrome/browser/app_launcher/app_launcher_flags.h"
+#import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/scoped_key_window.h"
 #import "ios/web/public/test/fakes/test_web_state.h"
@@ -33,10 +34,15 @@
         initWithBaseViewController:base_view_controller_];
     application_ = OCMClassMock([UIApplication class]);
     OCMStub([application_ sharedApplication]).andReturn(application_);
+    AppLauncherTabHelper::CreateForWebState(&web_state_, nil, nil);
   }
-
   ~AppLauncherCoordinatorTest() override { [application_ stopMocking]; }
 
+  AppLauncherTabHelper* tab_helper() {
+    return AppLauncherTabHelper::FromWebState(&web_state_);
+  }
+
+  web::TestWebState web_state_;
   UIViewController* base_view_controller_ = nil;
   ScopedKeyWindow scoped_key_window_;
   AppLauncherCoordinator* coordinator_ = nil;
@@ -46,7 +52,7 @@
 
 // Tests that an itunes URL shows an alert.
 TEST_F(AppLauncherCoordinatorTest, ItmsUrlShowsAlert) {
-  BOOL app_exists = [coordinator_ appLauncherTabHelper:nullptr
+  BOOL app_exists = [coordinator_ appLauncherTabHelper:tab_helper()
                                       launchAppWithURL:GURL("itms://1234")
                                         linkTransition:NO];
   EXPECT_TRUE(app_exists);
@@ -68,7 +74,7 @@
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
   OCMExpect([application_ openURL:[NSURL URLWithString:@"some-app://1234"]]);
 #pragma clang diagnostic pop
-  [coordinator_ appLauncherTabHelper:nullptr
+  [coordinator_ appLauncherTabHelper:tab_helper()
                     launchAppWithURL:GURL("some-app://1234")
                       linkTransition:NO];
   [application_ verify];
@@ -83,7 +89,7 @@
   OCMExpect([application_ openURL:[NSURL URLWithString:@"some-app://1234"]
                           options:@{}
                 completionHandler:nil]);
-  [coordinator_ appLauncherTabHelper:nullptr
+  [coordinator_ appLauncherTabHelper:tab_helper()
                     launchAppWithURL:GURL("some-app://1234")
                       linkTransition:YES];
   [application_ verify];
@@ -95,7 +101,7 @@
   // Make sure that the new AppLauncherRefresh logic is enabled.
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kAppLauncherRefresh);
-  [coordinator_ appLauncherTabHelper:nullptr
+  [coordinator_ appLauncherTabHelper:tab_helper()
                     launchAppWithURL:GURL("some-app://1234")
                       linkTransition:NO];
   ASSERT_TRUE([base_view_controller_.presentedViewController
@@ -121,7 +127,7 @@
       .andReturn(NO);
 #pragma clang diagnostic pop
   BOOL app_exists =
-      [coordinator_ appLauncherTabHelper:nullptr
+      [coordinator_ appLauncherTabHelper:tab_helper()
                         launchAppWithURL:GURL("no-app-installed://1234")
                           linkTransition:NO];
   EXPECT_FALSE(app_exists);
diff --git a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm
index d594a85..9e7c27b 100644
--- a/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm
+++ b/ios/chrome/browser/ui/authentication/signin_earlgrey_utils.mm
@@ -6,6 +6,7 @@
 
 #import <EarlGrey/EarlGrey.h>
 
+#import "base/test/ios/wait_util.h"
 #import "ios/chrome/browser/ui/authentication/signin_earlgrey_utils_app_interface.h"
 #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity.h"
 
@@ -45,6 +46,14 @@
   // Required to avoid any problem since the following test is not dependant
   // to UI, and the previous action has to be totally finished before going
   // through the assert.
+  GREYAssert(base::test::ios::WaitUntilConditionOrTimeout(
+                 base::test::ios::kWaitForActionTimeout,
+                 ^bool {
+                   NSString* primaryAccountGaiaID =
+                       [SignInEarlGreyUtilsAppInterface primaryAccountGaiaID];
+                   return primaryAccountGaiaID.length > 0;
+                 }),
+             @"Sign in did not complete.");
   [[GREYUIThreadExecutor sharedInstance] drainUntilIdle];
 
   NSString* primaryAccountGaiaID =
diff --git a/ios/chrome/browser/ui/download/BUILD.gn b/ios/chrome/browser/ui/download/BUILD.gn
index 8d0351f..1bef19c 100644
--- a/ios/chrome/browser/ui/download/BUILD.gn
+++ b/ios/chrome/browser/ui/download/BUILD.gn
@@ -148,12 +148,14 @@
   testonly = true
 
   sources = [
+    "ar_quick_look_egtest.mm",
     "pass_kit_egtest.mm",
   ]
 
   deps = [
     "//ios/chrome/app/strings:ios_strings_grit",
-    "//ios/chrome/browser/download:pass_kit_mime_type",
+    "//ios/chrome/browser/download:features",
+    "//ios/chrome/browser/download:mime_types",
     "//ios/chrome/browser/download:test_support",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
     "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/download/ar_quick_look_egtest.mm b/ios/chrome/browser/ui/download/ar_quick_look_egtest.mm
index 16efc9f..4edb8e2cb 100644
--- a/ios/chrome/browser/ui/download/ar_quick_look_egtest.mm
+++ b/ios/chrome/browser/ui/download/ar_quick_look_egtest.mm
@@ -2,27 +2,31 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import <EarlGrey/EarlGrey.h>
-#import <QuickLook/QuickLook.h>
-
 #include <memory>
 
 #include "base/bind.h"
 #import "base/test/ios/wait_util.h"
-#import "ios/chrome/app/main_controller.h"
 #include "ios/chrome/browser/download/download_test_util.h"
 #include "ios/chrome/browser/download/features.h"
 #include "ios/chrome/browser/download/usdz_mime_type.h"
-#import "ios/chrome/browser/ui/browser_view/browser_view_controller.h"
-#include "ios/chrome/browser/ui/util/ui_util.h"
-#import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
 #include "net/http/http_status_code.h"
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 
+#if defined(CHROME_EARL_GREY_1)
+#import <QuickLook/QuickLook.h>
+
+// EG1 test relies on view controller presentation as the signal that Quick Look
+// Dialog is shown.
+#import "ios/chrome/app/main_controller.h"  // nogncheck
+#import "ios/chrome/browser/ui/browser_view/browser_view_controller.h"  // nogncheck
+#import "ios/chrome/test/app/chrome_test_util.h"  // nogncheck
+#endif
+
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
@@ -30,7 +34,6 @@
 using base::test::ios::WaitUntilConditionOrTimeout;
 using base::test::ios::kWaitForDownloadTimeout;
 using base::test::ios::kWaitForUIElementTimeout;
-using chrome_test_util::GetMainController;
 
 namespace {
 
@@ -93,10 +96,12 @@
   [ChromeEarlGrey tapWebStateElementWithID:@"good"];
 
   // QLPreviewController UI is rendered out of host process so EarlGrey matcher
-  // can not find QLPreviewController UI. Instead this test relies on view
-  // controller presentation as the signal that QLPreviewController UI is shown.
+  // can not find QLPreviewController UI.
+#if defined(CHROME_EARL_GREY_1)
+  // EG1 test relies on view controller presentation as the signal that
+  // QLPreviewController UI is shown.
   id<BrowserInterface> interface =
-      GetMainController().interfaceProvider.mainInterface;
+      chrome_test_util::GetMainController().interfaceProvider.mainInterface;
   UIViewController* viewController = interface.viewController;
   bool shown = WaitUntilConditionOrTimeout(kWaitForDownloadTimeout, ^{
     UIViewController* presentedController =
@@ -104,6 +109,16 @@
     return [presentedController class] == [QLPreviewController class];
   });
   GREYAssert(shown, @"QLPreviewController was not shown.");
+#elif defined(CHROME_EARL_GREY_2)
+  // EG2 test can use XCUIApplication API to check for QuickLook dialog UI
+  // presentation.
+  XCUIApplication* app = [[XCUIApplication alloc] init];
+  XCUIElement* goodTitle = app.otherElements[@"good"];
+  GREYAssert([goodTitle waitForExistenceWithTimeout:kWaitForDownloadTimeout],
+             @"AR preview dialog UI was not presented");
+#else
+#error Must define either CHROME_EARL_GREY_1 or CHROME_EARL_GREY_2.
+#endif
 }
 
 - (void)testDownloadUnauthorized {
@@ -118,10 +133,12 @@
   [ChromeEarlGrey tapWebStateElementWithID:@"unauthorized"];
 
   // QLPreviewController UI is rendered out of host process so EarlGrey matcher
-  // can not find QLPreviewController UI. Instead this test relies on view
-  // controller presentation as the signal that QLPreviewController UI is shown.
+  // can not find QLPreviewController UI.
+#if defined(CHROME_EARL_GREY_1)
+  // EG1 test relies on view controller presentation as the signal that
+  // QLPreviewController UI is shown.
   id<BrowserInterface> interface =
-      GetMainController().interfaceProvider.mainInterface;
+      chrome_test_util::GetMainController().interfaceProvider.mainInterface;
   UIViewController* viewController = interface.viewController;
   bool shown = WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, ^{
     UIViewController* presentedController =
@@ -129,6 +146,17 @@
     return [presentedController class] == [QLPreviewController class];
   });
   GREYAssertFalse(shown, @"QLPreviewController should not have shown.");
+#elif defined(CHROME_EARL_GREY_2)
+  // EG2 test can use XCUIApplication API to check for QuickLook dialog UI
+  // presentation.
+  XCUIApplication* app = [[XCUIApplication alloc] init];
+  XCUIElement* goodTitle = app.otherElements[@"good"];
+  GREYAssertFalse(
+      [goodTitle waitForExistenceWithTimeout:kWaitForDownloadTimeout],
+      @"AR preview dialog UI was presented");
+#else
+#error Must define either CHROME_EARL_GREY_1 or CHROME_EARL_GREY_2.
+#endif
 }
 
 - (void)testDownloadForbidden {
@@ -143,10 +171,12 @@
   [ChromeEarlGrey tapWebStateElementWithID:@"forbidden"];
 
   // QLPreviewController UI is rendered out of host process so EarlGrey matcher
-  // can not find QLPreviewController UI. Instead this test relies on view
-  // controller presentation as the signal that QLPreviewController UI is shown.
+  // can not find QLPreviewController UI.
+#if defined(CHROME_EARL_GREY_1)
+  // EG1 test relies on view controller presentation as the signal that
+  // QLPreviewController UI is shown.
   id<BrowserInterface> interface =
-      GetMainController().interfaceProvider.mainInterface;
+      chrome_test_util::GetMainController().interfaceProvider.mainInterface;
   UIViewController* viewController = interface.viewController;
   bool shown = WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, ^{
     UIViewController* presentedController =
@@ -154,6 +184,17 @@
     return [presentedController class] == [QLPreviewController class];
   });
   GREYAssertFalse(shown, @"QLPreviewController should not have shown.");
+#elif defined(CHROME_EARL_GREY_2)
+  // EG2 test can use XCUIApplication API to check for QuickLook dialog UI
+  // presentation.
+  XCUIApplication* app = [[XCUIApplication alloc] init];
+  XCUIElement* goodTitle = app.otherElements[@"good"];
+  GREYAssertFalse(
+      [goodTitle waitForExistenceWithTimeout:kWaitForDownloadTimeout],
+      @"AR preview dialog UI was presented");
+#else
+#error Must define either CHROME_EARL_GREY_1 or CHROME_EARL_GREY_2.
+#endif
 }
 
 - (void)testDownloadChangingMimeType {
@@ -168,10 +209,12 @@
   [ChromeEarlGrey tapWebStateElementWithID:@"changing-mime-type"];
 
   // QLPreviewController UI is rendered out of host process so EarlGrey matcher
-  // can not find QLPreviewController UI. Instead this test relies on view
-  // controller presentation as the signal that QLPreviewController UI is shown.
+  // can not find QLPreviewController UI.
+#if defined(CHROME_EARL_GREY_1)
+  // EG1 test relies on view controller presentation as the signal that
+  // QLPreviewController UI is shown.
   id<BrowserInterface> interface =
-      GetMainController().interfaceProvider.mainInterface;
+      chrome_test_util::GetMainController().interfaceProvider.mainInterface;
   UIViewController* viewController = interface.viewController;
   bool shown = WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, ^{
     UIViewController* presentedController =
@@ -179,6 +222,17 @@
     return [presentedController class] == [QLPreviewController class];
   });
   GREYAssertFalse(shown, @"QLPreviewController should not have shown.");
+#elif defined(CHROME_EARL_GREY_2)
+  // EG2 test can use XCUIApplication API to check for QuickLook dialog UI
+  // presentation.
+  XCUIApplication* app = [[XCUIApplication alloc] init];
+  XCUIElement* goodTitle = app.otherElements[@"good"];
+  GREYAssertFalse(
+      [goodTitle waitForExistenceWithTimeout:kWaitForDownloadTimeout],
+      @"AR preview dialog UI was presented");
+#else
+#error Must define either CHROME_EARL_GREY_1 or CHROME_EARL_GREY_2.
+#endif
 }
 
 @end
diff --git a/ios/chrome/browser/ui/download/pass_kit_egtest.mm b/ios/chrome/browser/ui/download/pass_kit_egtest.mm
index f28f333..8a0061b 100644
--- a/ios/chrome/browser/ui/download/pass_kit_egtest.mm
+++ b/ios/chrome/browser/ui/download/pass_kit_egtest.mm
@@ -121,6 +121,11 @@
   });
   GREYAssert(dialogShown, @"PassKit dialog was not shown");
 #elif defined(CHROME_EARL_GREY_2)
+  if (@available(iOS 13, *)) {
+    // TODO(crbug.com/989816):Enable the test when FB6895185 is fixed.
+    EARL_GREY_TEST_DISABLED(@"PassKit view is not fully rendered.");
+  }
+
   // EG2 test can use XCUIApplication API to check for PassKit dialog UI
   // presentation.
   XCUIApplication* app = [[XCUIApplication alloc] init];
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
index 31a2eec4..d232aa71 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
@@ -57,6 +57,11 @@
   if (!item)
     return false;
   *url = item->GetVirtualURL();
+  // Return |false| for about scheme pages.  This will result in the location
+  // bar showing the default page, "about:blank". See crbug.com/989497 for
+  // details on why.
+  if (url->SchemeIs(url::kAboutScheme))
+    return false;
   return true;
 }
 
diff --git a/ios/chrome/browser/ui/omnibox/BUILD.gn b/ios/chrome/browser/ui/omnibox/BUILD.gn
index 350a864..3597527 100644
--- a/ios/chrome/browser/ui/omnibox/BUILD.gn
+++ b/ios/chrome/browser/ui/omnibox/BUILD.gn
@@ -142,10 +142,13 @@
     "//ios/chrome/browser/ui/location_bar:constants",
     "//ios/chrome/browser/ui/omnibox/popup",
     "//ios/chrome/browser/ui/orchestrator:orchestrator",
+    "//ios/chrome/browser/ui/toolbar/buttons/resources:tab_toolbar_button_color",
+    "//ios/chrome/browser/ui/toolbar/buttons/resources:tab_toolbar_button_color_incognito",
     "//ios/chrome/browser/ui/toolbar/public",
     "//ios/chrome/browser/ui/toolbar/public:feature_flags",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/common",
+    "//ios/chrome/common/colors",
     "//ios/chrome/common/favicon",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/images",
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
index 2cf8c448..3f1def6 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
+++ b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
@@ -27,6 +27,7 @@
 #include "ios/chrome/browser/ui/util/rtl_geometry.h"
 #include "ios/chrome/browser/ui/util/ui_util.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #import "ios/chrome/common/material_timing.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
@@ -50,7 +51,7 @@
 
 // The default omnibox text color (used while editing).
 UIColor* TextColor() {
-  return [UIColor colorWithWhite:(51 / 255.0) alpha:1.0];
+  return [UIColor colorNamed:kTextPrimaryColor];
 }
 
 NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
@@ -369,7 +370,7 @@
   DCHECK(!_preEditStaticLabel);
   CGRect rect = [self preEditLabelRectForBounds:self.bounds];
   _preEditStaticLabel = [[UILabel alloc] initWithFrame:rect];
-  _preEditStaticLabel.backgroundColor = [UIColor clearColor];
+  _preEditStaticLabel.backgroundColor = UIColor.clearColor;
   _preEditStaticLabel.opaque = YES;
   _preEditStaticLabel.font = self.currentFont;
   _preEditStaticLabel.textColor = _displayedTextColor;
@@ -451,8 +452,7 @@
   // When editing, use the default text color for all text.
   if (self.editing) {
     // Hide the text when the |_selection| label is displayed.
-    UIColor* textColor =
-        _selection ? [UIColor clearColor] : _displayedTextColor;
+    UIColor* textColor = _selection ? UIColor.clearColor : _displayedTextColor;
     [mutableText addAttribute:NSForegroundColorAttributeName
                         value:textColor
                         range:entireString];
@@ -854,7 +854,7 @@
   [_selection setFont:self.currentFont];
   [_selection setTextColor:_displayedTextColor];
   [_selection setOpaque:NO];
-  [_selection setBackgroundColor:[UIColor clearColor]];
+  [_selection setBackgroundColor:UIColor.clearColor];
   _selection.lineBreakMode = NSLineBreakByClipping;
   [self addSubview:_selection];
   [self hideTextAndCursor];
@@ -926,7 +926,7 @@
 }
 
 - (BOOL)isColorHidden:(UIColor*)color {
-  return ([color isEqual:[UIColor clearColor]] ||
+  return ([color isEqual:UIColor.clearColor] ||
           CGColorGetAlpha(color.CGColor) < 0.05);
 }
 
@@ -944,8 +944,8 @@
 // Set the text field's text and cursor to clear so that they don't show up
 // behind any overlaid views.
 - (void)hideTextAndCursor {
-  [self setTintColor:[UIColor clearColor]];
-  [self setTextColor:[UIColor clearColor]];
+  [self setTintColor:UIColor.clearColor];
+  [self setTextColor:UIColor.clearColor];
 }
 
 - (NSArray*)fadeAnimationLayers {
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm b/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
index c98c9c3..26880d9 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
+++ b/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
@@ -17,6 +17,8 @@
 #include "ios/chrome/browser/ui/ui_feature_flags.h"
 #include "ios/chrome/browser/ui/util/ui_util.h"
 #include "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/common/colors/incognito_color_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -57,19 +59,21 @@
 #pragma mark - UIViewController
 
 - (void)loadView {
-  UIColor* textColor = self.incognito ? [UIColor whiteColor]
-                                      : [UIColor colorWithWhite:0 alpha:0.7];
-  UIColor* textFieldTintColor = self.incognito
-                                    ? [UIColor whiteColor]
-                                    : UIColorFromRGB(kLocationBarTintBlue);
+  UIColor* textColor = color::IncognitoDynamicColor(
+      self.incognito, [UIColor colorNamed:kTextPrimaryColor],
+      [UIColor colorNamed:kTextPrimaryDarkColor]);
+  UIColor* textFieldTintColor = color::IncognitoDynamicColor(
+      self.incognito, [UIColor colorNamed:kBlueColor],
+      [UIColor colorNamed:kBlueDarkColor]);
   UIColor* iconTintColor;
   if (base::FeatureList::IsEnabled(kNewOmniboxPopupLayout)) {
-    iconTintColor = self.incognito
-                        ? [UIColor.whiteColor colorWithAlphaComponent:0.7]
-                        : [UIColor.blackColor colorWithAlphaComponent:0.5];
+    iconTintColor = color::IncognitoDynamicColor(
+        self.incognito, [UIColor colorNamed:@"tab_toolbar_button_color"],
+        [UIColor colorNamed:@"tab_toolbar_button_color_incognito"]);
   } else {
-    iconTintColor = self.incognito ? [UIColor whiteColor]
-                                   : [UIColor colorWithWhite:0 alpha:0.7];
+    iconTintColor = color::IncognitoDynamicColor(
+        self.incognito, [UIColor colorNamed:@"tab_toolbar_button_color"],
+        [UIColor colorNamed:@"tab_toolbar_button_color_incognito"]);
   }
 
   self.view = [[OmniboxContainerView alloc]
@@ -188,9 +192,9 @@
 
 // Tint color for the textfield placeholder and the clear button.
 - (UIColor*)placeholderAndClearButtonColor {
-  return self.incognito
-             ? [UIColor colorWithWhite:1 alpha:0.5]
-             : [UIColor colorWithWhite:0 alpha:kOmniboxPlaceholderAlpha];
+  return color::IncognitoDynamicColor(
+      self.incognito, [UIColor colorNamed:kTextfieldPlaceholderColor],
+      [UIColor colorNamed:kTextfieldPlaceholderDarkColor]);
 }
 
 #pragma mark notification callbacks
diff --git a/ios/chrome/browser/ui/omnibox/popup/BUILD.gn b/ios/chrome/browser/ui/omnibox/popup/BUILD.gn
index 3bef1351..2f9fc91 100644
--- a/ios/chrome/browser/ui/omnibox/popup/BUILD.gn
+++ b/ios/chrome/browser/ui/omnibox/popup/BUILD.gn
@@ -84,6 +84,10 @@
   deps = [
     ":popup_accessibility_identifier_constants",
     "resources:omnibox_popup_tab_match",
+    "resources:omnibox_suggestion_answer_icon_color",
+    "resources:omnibox_suggestion_answer_icon_dark_color",
+    "resources:omnibox_suggestion_icon_color",
+    "resources:omnibox_suggestion_icon_dark_color",
     "//base",
     "//components/omnibox/common",
     "//ios/chrome/app/strings:ios_strings_grit",
@@ -98,6 +102,7 @@
     "//ios/chrome/browser/ui/toolbar/buttons",
     "//ios/chrome/browser/ui/toolbar/public",
     "//ios/chrome/browser/ui/util",
+    "//ios/chrome/common/colors",
     "//ios/chrome/common/ui_util",
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/images",
@@ -123,6 +128,7 @@
     "//ios/chrome/browser/ui/colors",
     "//ios/chrome/browser/ui/omnibox:omnibox_util",
     "//ios/chrome/browser/ui/util",
+    "//ios/chrome/common/colors",
     "//ios/third_party/material_components_ios",
   ]
   configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm b/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm
index cf11c29a..8df72d1 100644
--- a/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm
@@ -14,6 +14,8 @@
 #import "ios/chrome/browser/ui/omnibox/popup/omnibox_icon_formatter.h"
 #include "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/browser/ui/util/ui_util.h"
+#import "ios/chrome/common/colors/UIColor+cr_semantic_colors.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -23,11 +25,11 @@
 namespace {
 // The color of the main text of a suggest cell.
 UIColor* SuggestionTextColor() {
-  return [UIColor blackColor];
+  return [UIColor colorNamed:kTextPrimaryColor];
 }
 // The color of the detail text of a suggest cell.
 UIColor* SuggestionDetailTextColor() {
-  return [UIColor colorWithWhite:0 alpha:0.41];
+  return [UIColor colorNamed:kTextSecondaryColor];
 }
 // The color of the detail text of a suggest cell.
 UIColor* SuggestionDetailTextColorIncognito() {
@@ -39,11 +41,11 @@
   return [UIColor colorWithWhite:(161 / 255.0) alpha:1.0];
 }
 UIColor* SuggestionTextColorIncognito() {
-  return [UIColor whiteColor];
+  return UIColor.whiteColor;
 }
 
 UIColor* DimColorIncognito() {
-  return [UIColor whiteColor];
+  return UIColor.whiteColor;
 }
 
 // Temporary convenience accessor for this flag.
@@ -320,23 +322,18 @@
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:12],
         NSBaselineOffsetAttributeName : @10.0f,
-        NSForegroundColorAttributeName : [UIColor grayColor],
+        NSForegroundColorAttributeName :
+            [UIColor colorNamed:kTextSecondaryColor],
       };
     case SuggestionAnswer::DESCRIPTION_POSITIVE:
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:16],
-        NSForegroundColorAttributeName : [UIColor colorWithRed:11 / 255.0
-                                                         green:128 / 255.0
-                                                          blue:67 / 255.0
-                                                         alpha:1.0],
+        NSForegroundColorAttributeName : [UIColor colorNamed:kGreenColor],
       };
     case SuggestionAnswer::DESCRIPTION_NEGATIVE:
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:16],
-        NSForegroundColorAttributeName : [UIColor colorWithRed:197 / 255.0
-                                                         green:57 / 255.0
-                                                          blue:41 / 255.0
-                                                         alpha:1.0],
+        NSForegroundColorAttributeName : [UIColor colorNamed:kRedColor],
       };
     case SuggestionAnswer::PERSONALIZED_SUGGESTION:
       return @{
@@ -346,28 +343,33 @@
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:20],
 
-        NSForegroundColorAttributeName : [UIColor grayColor],
+        NSForegroundColorAttributeName :
+            [UIColor colorNamed:kTextSecondaryColor],
       };
     case SuggestionAnswer::ANSWER_TEXT_LARGE:
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:24],
-        NSForegroundColorAttributeName : [UIColor grayColor],
+        NSForegroundColorAttributeName :
+            [UIColor colorNamed:kTextSecondaryColor],
       };
     case SuggestionAnswer::SUGGESTION_SECONDARY_TEXT_SMALL:
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:12],
-        NSForegroundColorAttributeName : [UIColor grayColor],
+        NSForegroundColorAttributeName :
+            [UIColor colorNamed:kTextSecondaryColor],
       };
     case SuggestionAnswer::SUGGESTION_SECONDARY_TEXT_MEDIUM:
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:14],
-        NSForegroundColorAttributeName : [UIColor grayColor],
+        NSForegroundColorAttributeName :
+            [UIColor colorNamed:kTextSecondaryColor],
       };
     case SuggestionAnswer::SUGGESTION:
       // Fall through.
     default:
       return @{
         NSFontAttributeName : [UIFont systemFontOfSize:16],
+        NSForegroundColorAttributeName : [UIColor colorNamed:kTextPrimaryColor],
       };
   }
 }
@@ -388,8 +390,9 @@
                     UIFontDescriptorTraitTightLeading]
           : [UIFontDescriptor
                 preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
-  UIColor* defaultColor =
-      useDeemphasizedStyling ? UIColor.grayColor : UIColor.blackColor;
+  UIColor* defaultColor = useDeemphasizedStyling
+                              ? [UIColor colorNamed:kTextSecondaryColor]
+                              : [UIColor colorNamed:kTextPrimaryColor];
 
   switch (style) {
     case SuggestionAnswer::TextStyle::NORMAL:
@@ -415,7 +418,7 @@
           fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
       return @{
         NSFontAttributeName : [UIFont fontWithDescriptor:boldFontDescriptor
-                                                    size:0.0],
+                                                    size:0],
         NSForegroundColorAttributeName : defaultColor,
       };
     }
@@ -423,19 +426,13 @@
       return @{
         NSFontAttributeName : [UIFont fontWithDescriptor:defaultFontDescriptor
                                                     size:0],
-        NSForegroundColorAttributeName : [UIColor colorWithRed:11 / 255.0
-                                                         green:128 / 255.0
-                                                          blue:67 / 255.0
-                                                         alpha:1.0],
+        NSForegroundColorAttributeName : [UIColor colorNamed:kGreenColor],
       };
     case SuggestionAnswer::TextStyle::NEGATIVE:
       return @{
         NSFontAttributeName : [UIFont fontWithDescriptor:defaultFontDescriptor
                                                     size:0],
-        NSForegroundColorAttributeName : [UIColor colorWithRed:197 / 255.0
-                                                         green:57 / 255.0
-                                                          blue:41 / 255.0
-                                                         alpha:1.0],
+        NSForegroundColorAttributeName : [UIColor colorNamed:kRedColor],
       };
     case SuggestionAnswer::TextStyle::SUPERIOR: {
       // Calculate a slightly smaller font. The ratio here is somewhat
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm
index 8813b3f..09de7d6 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_presenter.mm
@@ -48,6 +48,19 @@
     UIView* containerView = [[UIView alloc] init];
     [containerView addSubview:viewController.view];
     _popupContainerView = containerView;
+#if defined(__IPHONE_13_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0)
+    if (@available(iOS 13, *)) {
+      UIUserInterfaceStyle userInterfaceStyle =
+          incognito ? UIUserInterfaceStyleDark
+                    : UIUserInterfaceStyleUnspecified;
+      // Both the container view and the popup view controller need
+      // overrideUserInterfaceStyle set because the overall popup background
+      // comes from the container, but overrideUserInterfaceStyle won't
+      // propagate from a view to any subviews in a different view controller.
+      _popupContainerView.overrideUserInterfaceStyle = userInterfaceStyle;
+      viewController.overrideUserInterfaceStyle = userInterfaceStyle;
+    }
+#endif
     _popupContainerView.backgroundColor = [configuration backgroundColor];
     _popupContainerView.translatesAutoresizingMaskIntoConstraints = NO;
     viewController.view.translatesAutoresizingMaskIntoConstraints = NO;
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm
index 3f0b524..fe8c33d3 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row.mm
@@ -13,6 +13,8 @@
 #include "ios/chrome/browser/ui/util/rtl_geometry.h"
 #include "ios/chrome/browser/ui/util/ui_util.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/common/colors/incognito_color_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -40,13 +42,7 @@
 
 @implementation OmniboxPopupRow
 
-@synthesize textTruncatingLabel = _textTruncatingLabel;
-@synthesize detailTruncatingLabel = _detailTruncatingLabel;
-@synthesize detailAnswerLabel = _detailAnswerLabel;
-@synthesize trailingButton = _trailingButton;
-@synthesize answerImageView = _answerImageView;
 @synthesize imageView = _imageView;
-@synthesize rowHeight = _rowHeight;
 
 - (instancetype)initWithStyle:(UITableViewCellStyle)style
               reuseIdentifier:(NSString*)reuseIdentifier {
@@ -58,7 +54,8 @@
               reuseIdentifier:@"OmniboxPopupRow"];
   if (self) {
     self.isAccessibilityElement = YES;
-    self.backgroundColor = [UIColor clearColor];
+    self.backgroundColor = UIColor.clearColor;
+
     _incognito = incognito;
 
     _textTruncatingLabel =
@@ -93,12 +90,11 @@
     _imageView.userInteractionEnabled = NO;
     _imageView.contentMode = UIViewContentModeCenter;
 
-      _imageView.layer.cornerRadius = kImageViewCornerRadiusUIRefresh;
-      _imageView.backgroundColor = incognito
-                                       ? [UIColor colorWithWhite:1 alpha:0.05]
-                                       : [UIColor colorWithWhite:0 alpha:0.03];
-      _imageView.tintColor = incognito ? [UIColor colorWithWhite:1 alpha:0.4]
-                                       : [UIColor colorWithWhite:0 alpha:0.33];
+    _imageView.layer.cornerRadius = kImageViewCornerRadiusUIRefresh;
+    _imageView.backgroundColor = UIColor.clearColor;
+    _imageView.tintColor = color::IncognitoDynamicColor(
+        _incognito, [UIColor colorNamed:@"omnibox_suggestion_icon_color"],
+        [UIColor colorNamed:@"omnibox_suggestion_icon_dark_color"]);
 
     _answerImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
     _answerImageView.userInteractionEnabled = NO;
@@ -189,7 +185,8 @@
   appendImage =
       [appendImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
   _trailingButton.tintColor =
-      _incognito ? [UIColor whiteColor] : UIColorFromRGB(kLocationBarTintBlue);
+      color::IncognitoDynamicColor(_incognito, [UIColor colorNamed:kBlueColor],
+                                   [UIColor colorNamed:kBlueDarkColor]);
 
   [_trailingButton setImage:appendImage forState:UIControlStateNormal];
 }
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm
index 912a41b..bdc2bf3 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_row_cell.mm
@@ -15,6 +15,8 @@
 #import "ios/chrome/browser/ui/toolbar/public/toolbar_constants.h"
 #import "ios/chrome/browser/ui/util/named_guide.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/common/colors/incognito_color_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -104,7 +106,7 @@
 
     _incognito = NO;
 
-    self.backgroundColor = [UIColor clearColor];
+    self.backgroundColor = UIColor.clearColor;
   }
   return self;
 }
@@ -363,9 +365,9 @@
 
   [self.trailingButton setImage:trailingButtonImage
                        forState:UIControlStateNormal];
-  self.trailingButton.tintColor = self.incognito
-                                      ? [UIColor whiteColor]
-                                      : UIColorFromRGB(kLocationBarTintBlue);
+  self.trailingButton.tintColor = color::IncognitoDynamicColor(
+      self.incognito, [UIColor colorNamed:kBlueColor],
+      [UIColor colorNamed:kBlueDarkColor]);
 }
 
 - (NSString*)accessibilityLabel {
diff --git a/ios/chrome/browser/ui/omnibox/popup/resources/BUILD.gn b/ios/chrome/browser/ui/omnibox/popup/resources/BUILD.gn
index 4bc134e..f2dbee1d 100644
--- a/ios/chrome/browser/ui/omnibox/popup/resources/BUILD.gn
+++ b/ios/chrome/browser/ui/omnibox/popup/resources/BUILD.gn
@@ -4,6 +4,30 @@
 
 import("//build/config/ios/asset_catalog.gni")
 
+colorset("omnibox_suggestion_answer_icon_color") {
+  sources = [
+    "omnibox_suggestion_answer_icon_color.colorset/Contents.json",
+  ]
+}
+
+colorset("omnibox_suggestion_answer_icon_dark_color") {
+  sources = [
+    "omnibox_suggestion_answer_icon_dark_color.colorset/Contents.json",
+  ]
+}
+
+colorset("omnibox_suggestion_icon_color") {
+  sources = [
+    "omnibox_suggestion_icon_color.colorset/Contents.json",
+  ]
+}
+
+colorset("omnibox_suggestion_icon_dark_color") {
+  sources = [
+    "omnibox_suggestion_icon_dark_color.colorset/Contents.json",
+  ]
+}
+
 imageset("omnibox_popup_tab_match") {
   sources = [
     "omnibox_popup_tab_match.imageset/Contents.json",
diff --git a/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_answer_icon_color.colorset/Contents.json b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_answer_icon_color.colorset/Contents.json
new file mode 100644
index 0000000..735f2b2
--- /dev/null
+++ b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_answer_icon_color.colorset/Contents.json
@@ -0,0 +1,38 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  },
+  "colors" : [
+    {
+      "idiom" : "universal",
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "red" : "0xFF",
+          "alpha" : "1.000",
+          "blue" : "0xFF",
+          "green" : "0xFF"
+        }
+      }
+    },
+    {
+      "idiom" : "universal",
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "red" : "0x16",
+          "alpha" : "1.000",
+          "blue" : "0xA6",
+          "green" : "0x4E"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_answer_icon_dark_color.colorset/Contents.json b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_answer_icon_dark_color.colorset/Contents.json
new file mode 100644
index 0000000..966e045
--- /dev/null
+++ b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_answer_icon_dark_color.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  },
+  "colors" : [
+    {
+      "idiom" : "universal",
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "red" : "0x16",
+          "alpha" : "1.000",
+          "blue" : "0xA6",
+          "green" : "0x4E"
+        }
+      }
+    }
+  ]
+}
diff --git a/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_icon_color.colorset/Contents.json b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_icon_color.colorset/Contents.json
new file mode 100644
index 0000000..2a2d4aa7
--- /dev/null
+++ b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_icon_color.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  },
+  "colors" : [
+    {
+      "idiom" : "universal",
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "red" : "0x80",
+          "alpha" : "1.000",
+          "blue" : "0x8A",
+          "green" : "0x86"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_icon_dark_color.colorset/Contents.json b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_icon_dark_color.colorset/Contents.json
new file mode 100644
index 0000000..2a2d4aa7
--- /dev/null
+++ b/ios/chrome/browser/ui/omnibox/popup/resources/omnibox_suggestion_icon_dark_color.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  },
+  "colors" : [
+    {
+      "idiom" : "universal",
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "red" : "0x80",
+          "alpha" : "1.000",
+          "blue" : "0x8A",
+          "green" : "0x86"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/ios/chrome/browser/ui/omnibox/popup/simple_omnibox_icon.mm b/ios/chrome/browser/ui/omnibox/popup/simple_omnibox_icon.mm
index 7e6e2a4..e00e011 100644
--- a/ios/chrome/browser/ui/omnibox/popup/simple_omnibox_icon.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/simple_omnibox_icon.mm
@@ -7,6 +7,8 @@
 #import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_suggestion_icon_util.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
+#import "ios/chrome/common/colors/incognito_color_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #include "ios/public/provider/chrome/browser/images/branded_image_provider.h"
 #import "url/gurl.h"
@@ -98,13 +100,18 @@
     case OmniboxIconTypeImage:
     case OmniboxIconTypeSuggestionIcon:
       if ([self hasCustomAnswerIcon]) {
-        return UIColor.whiteColor;
+        return color::IncognitoDynamicColor(
+            self.incognito,
+            [UIColor colorNamed:@"omnibox_suggestion_answer_icon_color"],
+            [UIColor colorNamed:@"omnibox_suggestion_answer_icon_dark_color"]);
       }
-      return self.incognito ? [UIColor.whiteColor colorWithAlphaComponent:0.52]
-                            : [UIColor.blackColor colorWithAlphaComponent:0.45];
+      return color::IncognitoDynamicColor(
+          self.incognito, [UIColor colorNamed:@"omnibox_suggestion_icon_color"],
+          [UIColor colorNamed:@"omnibox_suggestion_icon_dark_color"]);
     case OmniboxIconTypeFavicon:
-      return self.incognito ? [UIColor.whiteColor colorWithAlphaComponent:0.52]
-                            : [UIColor.blackColor colorWithAlphaComponent:0.31];
+      return color::IncognitoDynamicColor(
+          self.incognito, [UIColor colorNamed:@"omnibox_suggestion_icon_color"],
+          [UIColor colorNamed:@"omnibox_suggestion_icon_dark_color"]);
   }
 }
 
@@ -113,11 +120,13 @@
     case OmniboxIconTypeImage:
       return nil;
     case OmniboxIconTypeSuggestionIcon:
-      return [[UIImage imageNamed:@"background_solid"]
-          imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+      if ([self hasCustomAnswerIcon]) {
+        return [[UIImage imageNamed:@"background_solid"]
+            imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+      }
+      return nil;
     case OmniboxIconTypeFavicon:
-      return [[UIImage imageNamed:@"background_stroke"]
-          imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+      return nil;
   }
 }
 
@@ -127,23 +136,19 @@
       return nil;
     case OmniboxIconTypeSuggestionIcon:
       if ([self hasCustomAnswerIcon]) {
-        return [MDCPalette.cr_bluePalette tint500];
+        return color::IncognitoDynamicColor(
+            self.incognito, [UIColor colorNamed:kBlueColor],
+            [UIColor colorNamed:kBlueDarkColor]);
       }
-      return self.incognito ? [UIColor.whiteColor colorWithAlphaComponent:0.15]
-                            : [UIColor.blackColor colorWithAlphaComponent:0.08];
+      return nil;
     case OmniboxIconTypeFavicon:
-      return self.incognito ? [UIColor.whiteColor colorWithAlphaComponent:0.16]
-                            : [UIColor.blackColor colorWithAlphaComponent:0.13];
+      return nil;
   }
 }
 
 - (UIImage*)overlayImage {
   switch (self.iconType) {
     case OmniboxIconTypeImage:
-      return self.isAnswer ? nil
-                           : [[UIImage imageNamed:@"background_stroke"]
-                                 imageWithRenderingMode:
-                                     UIImageRenderingModeAlwaysTemplate];
     case OmniboxIconTypeSuggestionIcon:
     case OmniboxIconTypeFavicon:
       return nil;
@@ -151,7 +156,7 @@
 }
 
 - (UIColor*)overlayImageTintColor {
-  return [UIColor.blackColor colorWithAlphaComponent:0.1];
+  return nil;
 }
 
 @end
diff --git a/ios/chrome/browser/ui/popup_menu/cells/popup_menu_tools_item.mm b/ios/chrome/browser/ui/popup_menu/cells/popup_menu_tools_item.mm
index ad4a5f1..ac930d7 100644
--- a/ios/chrome/browser/ui/popup_menu/cells/popup_menu_tools_item.mm
+++ b/ios/chrome/browser/ui/popup_menu/cells/popup_menu_tools_item.mm
@@ -12,6 +12,7 @@
 #import "ios/chrome/browser/ui/reading_list/text_badge_view.h"
 #import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #import "ios/chrome/common/material_timing.h"
 #import "ios/chrome/common/ui_util/constraints_ui_util.h"
 
@@ -20,8 +21,6 @@
 #endif
 
 namespace {
-const int kEnabledDefaultColor = 0x1A73E8;
-const int kEnabledDestructiveColor = 0xEA4334;
 const CGFloat kImageLength = 28;
 const CGFloat kCellHeight = 44;
 const CGFloat kInnerMargin = 11;
@@ -117,7 +116,7 @@
   if (self) {
     UIView* selectedBackgroundView = [[UIView alloc] init];
     selectedBackgroundView.backgroundColor =
-        [UIColor colorWithWhite:0 alpha:kSelectedItemBackgroundAlpha];
+        [UIColor colorNamed:kTableViewRowHighlightColor];
     self.selectedBackgroundView = selectedBackgroundView;
 
     _titleLabel = [[UILabel alloc] init];
@@ -258,8 +257,8 @@
 
 - (UIColor*)contentColor {
   if (self.destructiveAction)
-    return UIColorFromRGB(kEnabledDestructiveColor);
-  return UIColorFromRGB(kEnabledDefaultColor);
+    return [UIColor colorNamed:kRedColor];
+  return [UIColor colorNamed:kBlueColor];
 }
 
 - (void)registerForContentSizeUpdates {
@@ -311,8 +310,8 @@
     self.titleLabel.textColor = self.contentColor;
     self.imageView.tintColor = self.contentColor;
   } else {
-    self.titleLabel.textColor = [[self class] disabledColor];
-    self.imageView.tintColor = [[self class] disabledColor];
+    self.titleLabel.textColor = [UIColor colorNamed:kDisabledTintColor];
+    self.imageView.tintColor = [UIColor colorNamed:kDisabledTintColor];
     self.accessibilityTraits |= UIAccessibilityTraitNotEnabled;
   }
 }
@@ -329,16 +328,4 @@
   return [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
 }
 
-// Returns the color of the disabled button's title.
-+ (UIColor*)disabledColor {
-  static UIColor* systemTintColorForDisabled = nil;
-  static dispatch_once_t onceToken;
-  dispatch_once(&onceToken, ^{
-    UIButton* button = [UIButton buttonWithType:UIButtonTypeSystem];
-    systemTintColorForDisabled =
-        [button titleColorForState:UIControlStateDisabled];
-  });
-  return systemTintColorForDisabled;
-}
-
 @end
diff --git a/ios/chrome/browser/ui/popup_menu/public/popup_menu_view_controller.mm b/ios/chrome/browser/ui/popup_menu/public/popup_menu_view_controller.mm
index 9ba8ac9..de1666f0 100644
--- a/ios/chrome/browser/ui/popup_menu/public/popup_menu_view_controller.mm
+++ b/ios/chrome/browser/ui/popup_menu/public/popup_menu_view_controller.mm
@@ -8,6 +8,7 @@
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_ui_constants.h"
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_view_controller_delegate.h"
 #import "ios/chrome/browser/ui/util/accessibility_close_menu_button.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui_util/constraints_ui_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -16,8 +17,6 @@
 
 namespace {
 const CGFloat kImageMargin = 196;
-const CGFloat kBackgroundGreyScale = 0.98;
-const CGFloat kBackgroundAlpha = 0.65;
 }  // namespace
 
 @interface PopupMenuViewController ()
@@ -65,23 +64,7 @@
 // Sets the content container view up.
 - (void)setUpContentContainer {
   _contentContainer = [[UIView alloc] init];
-
-  if (UIAccessibilityIsReduceTransparencyEnabled()) {
-    _contentContainer.backgroundColor =
-        [UIColor colorWithWhite:kBackgroundGreyScale alpha:1];
-  } else {
-    UIBlurEffect* blurEffect =
-        [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
-    UIVisualEffectView* blur =
-        [[UIVisualEffectView alloc] initWithEffect:blurEffect];
-    blur.translatesAutoresizingMaskIntoConstraints = NO;
-    blur.layer.cornerRadius = kPopupMenuCornerRadius;
-    blur.clipsToBounds = YES;
-    blur.backgroundColor = [UIColor colorWithWhite:kBackgroundGreyScale
-                                             alpha:kBackgroundAlpha];
-    [_contentContainer addSubview:blur];
-    AddSameConstraints(_contentContainer, blur);
-  }
+  _contentContainer.backgroundColor = [UIColor colorNamed:kBackgroundColor];
 
   UIImageView* shadow =
       [[UIImageView alloc] initWithImage:StretchableImageNamed(@"menu_shadow")];
diff --git a/ios/chrome/browser/ui/table_view/cells/BUILD.gn b/ios/chrome/browser/ui/table_view/cells/BUILD.gn
index 67305a9..a24bc9a 100644
--- a/ios/chrome/browser/ui/table_view/cells/BUILD.gn
+++ b/ios/chrome/browser/ui/table_view/cells/BUILD.gn
@@ -46,6 +46,7 @@
     "resources:table_view_cell_chevron",
     "resources:table_view_cell_edit_icon",
     "resources:table_view_cell_favicon_background",
+    "resources:table_view_favicon_background_color",
     "//base",
     "//base:i18n",
     "//ios/chrome/app/strings",
diff --git a/ios/chrome/browser/ui/table_view/cells/resources/BUILD.gn b/ios/chrome/browser/ui/table_view/cells/resources/BUILD.gn
index b98df7d1..5de516c 100644
--- a/ios/chrome/browser/ui/table_view/cells/resources/BUILD.gn
+++ b/ios/chrome/browser/ui/table_view/cells/resources/BUILD.gn
@@ -38,3 +38,9 @@
     "table_view_cell_edit_icon.imageset/table_view_cell_edit_icon@3x.png",
   ]
 }
+
+colorset("table_view_favicon_background_color") {
+  sources = [
+    "table_view_favicon_background_color.colorset/Contents.json",
+  ]
+}
diff --git a/ios/chrome/browser/ui/table_view/cells/resources/table_view_favicon_background_color.colorset/Contents.json b/ios/chrome/browser/ui/table_view/cells/resources/table_view_favicon_background_color.colorset/Contents.json
new file mode 100644
index 0000000..cdaf02a
--- /dev/null
+++ b/ios/chrome/browser/ui/table_view/cells/resources/table_view_favicon_background_color.colorset/Contents.json
@@ -0,0 +1,38 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  },
+  "colors" : [
+    {
+      "idiom" : "universal",
+      "color" : {
+        "color-space" : "display-p3",
+        "components" : {
+          "red" : "0xF1",
+          "alpha" : "1.000",
+          "blue" : "0xF4",
+          "green" : "0xF3"
+        }
+      }
+    },
+    {
+      "idiom" : "universal",
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "display-p3",
+        "components" : {
+          "red" : "0x33",
+          "alpha" : "1.000",
+          "blue" : "0x33",
+          "green" : "0x33"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm
index f50feeb..6d193d3f 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_url_item.mm
@@ -12,6 +12,7 @@
 #include "ios/chrome/browser/ui/util/ui_util.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
 #import "ios/chrome/common/colors/UIColor+cr_semantic_colors.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #import "ios/chrome/common/favicon/favicon_view.h"
 #import "ios/chrome/common/ui_util/constraints_ui_util.h"
 #include "url/gurl.h"
@@ -138,24 +139,19 @@
 @end
 
 @implementation TableViewURLCell
-@synthesize faviconView = _faviconView;
-@synthesize faviconContainerView = _faviconContainerView;
-@synthesize faviconBadgeView = _faviconBadgeView;
-@synthesize horizontalStack = _horizontalStack;
-@synthesize cellUniqueIdentifier = _cellUniqueIdentifier;
-@synthesize shouldGenerateAccessibilityLabel =
-    _shouldGenerateAccessibilityLabel;
-@synthesize metadataLabel = _metadataLabel;
-@synthesize titleLabel = _titleLabel;
-@synthesize URLLabel = _URLLabel;
 
 - (instancetype)initWithStyle:(UITableViewCellStyle)style
               reuseIdentifier:(NSString*)reuseIdentifier {
   self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
   if (self) {
-    _faviconContainerView = [[UIImageView alloc]
-        initWithImage:[UIImage
-                          imageNamed:@"table_view_cell_favicon_background"]];
+    UIImage* containerBackground =
+        [[UIImage imageNamed:@"table_view_cell_favicon_background"]
+            imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+    _faviconContainerView =
+        [[UIImageView alloc] initWithImage:containerBackground];
+    _faviconContainerView.tintColor =
+        [UIColor colorNamed:@"table_view_favicon_background_color"];
+
     _faviconView = [[FaviconView alloc] init];
     _faviconView.contentMode = UIViewContentModeScaleAspectFit;
     _faviconView.clipsToBounds = YES;
diff --git a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm
index c3bf57e..07d391f 100644
--- a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm
+++ b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm
@@ -16,6 +16,8 @@
 #import "ios/chrome/browser/ui/toolbar/public/toolbar_constants.h"
 #import "ios/chrome/browser/ui/util/rtl_geometry.h"
 #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
+#import "ios/chrome/common/colors/incognito_color_util.h"
+#import "ios/chrome/common/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui_util/constraints_ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
@@ -204,9 +206,9 @@
 - (UIButton*)cancelButton {
   UIButton* cancelButton = [UIButton buttonWithType:UIButtonTypeSystem];
   cancelButton.titleLabel.font = [UIFont systemFontOfSize:kLocationBarFontSize];
-  cancelButton.tintColor = self.style == NORMAL
-                               ? UIColorFromRGB(kLocationBarTintBlue)
-                               : [UIColor whiteColor];
+  cancelButton.tintColor = color::IncognitoDynamicColor(
+      self.style == INCOGNITO, [UIColor colorNamed:kBlueColor],
+      [UIColor colorNamed:kBlueDarkColor]);
   [cancelButton setTitle:l10n_util::GetNSString(IDS_CANCEL)
                 forState:UIControlStateNormal];
   [cancelButton setContentHuggingPriority:UILayoutPriorityRequired
diff --git a/ios/chrome/browser/web/window_open_by_dom_egtest.mm b/ios/chrome/browser/web/window_open_by_dom_egtest.mm
index afc54e0..d06d04c 100644
--- a/ios/chrome/browser/web/window_open_by_dom_egtest.mm
+++ b/ios/chrome/browser/web/window_open_by_dom_egtest.mm
@@ -249,8 +249,12 @@
   // Instead, it percent encodes '#hash' and considers 'blank%23hash' as the
   // resource identifier. Nevertheless, the '#' is significant in triggering the
   // edge case in the bug. TODO(crbug.com/885249): Change back to '#'.
-  const GURL URL("about:blank%23hash");
-  [[EarlGrey selectElementWithMatcher:OmniboxText("about:blank%23hash")]
+  // Since about scheme URLs are also trimmed to about:blank, check the url
+  // directly instead.
+  DCHECK_EQ(GURL("about:blank%23hash"),
+            chrome_test_util::GetCurrentWebState()->GetLastCommittedURL());
+  // And confirm the location bar only shows about:blank.
+  [[EarlGrey selectElementWithMatcher:OmniboxText("about:blank")]
       assertWithMatcher:grey_notNil()];
 }
 
diff --git a/ios/chrome/common/colors/resources/BUILD.gn b/ios/chrome/common/colors/resources/BUILD.gn
index 5eec532..941dde8 100644
--- a/ios/chrome/common/colors/resources/BUILD.gn
+++ b/ios/chrome/common/colors/resources/BUILD.gn
@@ -18,6 +18,8 @@
     ":red_dark_color",
     ":scrim_background_color",
     ":solid_button_text_color",
+    ":table_view_row_highlight_color",
+    ":table_view_row_highlight_dark_color",
     ":text_primary_color",
     ":text_primary_dark_color",
     ":text_secondary_color",
@@ -100,6 +102,18 @@
   ]
 }
 
+colorset("table_view_row_highlight_color") {
+  sources = [
+    "table_view_row_highlight_color.colorset/Contents.json",
+  ]
+}
+
+colorset("table_view_row_highlight_dark_color") {
+  sources = [
+    "table_view_row_highlight_dark_color.colorset/Contents.json",
+  ]
+}
+
 colorset("text_primary_color") {
   sources = [
     "text_primary_color.colorset/Contents.json",
diff --git a/ios/chrome/common/colors/resources/table_view_row_highlight_color.colorset/Contents.json b/ios/chrome/common/colors/resources/table_view_row_highlight_color.colorset/Contents.json
new file mode 100644
index 0000000..6032667
--- /dev/null
+++ b/ios/chrome/common/colors/resources/table_view_row_highlight_color.colorset/Contents.json
@@ -0,0 +1,38 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  },
+  "colors" : [
+    {
+      "idiom" : "universal",
+      "color" : {
+        "color-space" : "display-p3",
+        "components" : {
+          "red" : "0xF1",
+          "alpha" : "1.000",
+          "blue" : "0xF4",
+          "green" : "0xF3"
+        }
+      }
+    },
+    {
+      "idiom" : "universal",
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "display-p3",
+        "components" : {
+          "red" : "0xFF",
+          "alpha" : "0.050",
+          "blue" : "0xFF",
+          "green" : "0xFF"
+        }
+      }
+    }
+  ]
+}
diff --git a/ios/chrome/common/colors/resources/table_view_row_highlight_dark_color.colorset/Contents.json b/ios/chrome/common/colors/resources/table_view_row_highlight_dark_color.colorset/Contents.json
new file mode 100644
index 0000000..183981e
--- /dev/null
+++ b/ios/chrome/common/colors/resources/table_view_row_highlight_dark_color.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  },
+  "colors" : [
+    {
+      "idiom" : "universal",
+      "color" : {
+        "color-space" : "display-p3",
+        "components" : {
+          "red" : "0xFF",
+          "alpha" : "0.050",
+          "blue" : "0xFF",
+          "green" : "0xFF"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff --git a/ios/chrome/common/colors/semantic_color_names.h b/ios/chrome/common/colors/semantic_color_names.h
index dfa2b8f..a7916905 100644
--- a/ios/chrome/common/colors/semantic_color_names.h
+++ b/ios/chrome/common/colors/semantic_color_names.h
@@ -14,6 +14,7 @@
 extern NSString* const kMDCInkColor;
 extern NSString* const kScrimBackgroundColor;
 extern NSString* const kSolidButtonTextColor;
+extern NSString* const kTableViewRowHighlightColor;
 extern NSString* const kTextPrimaryColor;
 extern NSString* const kTextSecondaryColor;
 extern NSString* const kTextfieldBackgroundColor;
@@ -34,7 +35,9 @@
 // available in iOS 12, any views that should always be dark (e.g. incognito)
 // need to use colorsets that always use the dark variant.
 // TODO(crbug.com/981889): Clean up after iOS 12 support is dropped.
+
 extern NSString* const kBackgroundDarkColor;
+extern NSString* const kTableViewRowHighlightDarkColor;
 extern NSString* const kTextPrimaryDarkColor;
 extern NSString* const kTextfieldBackgroundDarkColor;
 extern NSString* const kTextfieldPlaceholderDarkColor;
diff --git a/ios/chrome/common/colors/semantic_color_names.mm b/ios/chrome/common/colors/semantic_color_names.mm
index 483f6ac..d5080121 100644
--- a/ios/chrome/common/colors/semantic_color_names.mm
+++ b/ios/chrome/common/colors/semantic_color_names.mm
@@ -14,6 +14,7 @@
 NSString* const kMDCInkColor = @"mdc_ink_color";
 NSString* const kScrimBackgroundColor = @"scrim_background_color";
 NSString* const kSolidButtonTextColor = @"solid_button_text_color";
+NSString* const kTableViewRowHighlightColor = @"table_view_row_highlight_color";
 NSString* const kTextPrimaryColor = @"text_primary_color";
 NSString* const kTextSecondaryColor = @"text_secondary_color";
 NSString* const kTextfieldBackgroundColor = @"textfield_background_color";
@@ -25,7 +26,10 @@
 NSString* const kRedColor = @"red_color";
 
 // Temporary for iOS 12
+
 NSString* const kBackgroundDarkColor = @"background_dark_color";
+NSString* const kTableViewRowHighlightDarkColor =
+    @"table_view_row_highlight_dark_color";
 NSString* const kTextPrimaryDarkColor = @"text_primary_dark_color";
 NSString* const kTextfieldBackgroundDarkColor =
     @"textfield_background_dark_color";
diff --git a/ios/chrome/test/earl_grey/chrome_test_case.mm b/ios/chrome/test/earl_grey/chrome_test_case.mm
index 63c5baf..b62a705 100644
--- a/ios/chrome/test/earl_grey/chrome_test_case.mm
+++ b/ios/chrome/test/earl_grey/chrome_test_case.mm
@@ -185,7 +185,12 @@
   [super setUp];
   [ChromeTestCase setUpHelper];
 }
-#endif  // CHROME_EARL_GREY_1
+#elif defined(CHROME_EARL_GREY_2)
++ (void)setUpForTestCase {
+  [super setUpForTestCase];
+  [ChromeTestCase setUpHelper];
+}
+#endif  // CHROME_EARL_GREY_2
 
 // Tear down called once for the class, to shutdown mock authentication and
 // the HTTP server.
diff --git a/ios/chrome/test/wpt/cwt_webdriver_app_interface.mm b/ios/chrome/test/wpt/cwt_webdriver_app_interface.mm
index 06f0d91..5c690638 100644
--- a/ios/chrome/test/wpt/cwt_webdriver_app_interface.mm
+++ b/ios/chrome/test/wpt/cwt_webdriver_app_interface.mm
@@ -245,7 +245,7 @@
     CGRect adjustedBounds = UIEdgeInsetsInsetRect(bounds, insets);
 
     webState->TakeSnapshot(gfx::RectF(adjustedBounds),
-                           base::BindOnce(^(const gfx::Image& image) {
+                           base::BindRepeating(^(const gfx::Image& image) {
                              snapshot = image.ToUIImage();
                            }));
   });
diff --git a/ios/testing/earl_grey/app_launch_manager.h b/ios/testing/earl_grey/app_launch_manager.h
index 3bf126c3..2d0d75e 100644
--- a/ios/testing/earl_grey/app_launch_manager.h
+++ b/ios/testing/earl_grey/app_launch_manager.h
@@ -18,8 +18,8 @@
 // Protocol that test cases can implement to be notified by AppLaunchManager.
 @protocol AppLaunchManagerObserver
 @optional
-// Observer method for when an app is (re)launched (due to not running, force
-// restart, or changing arguments).
+// Called when app gets relaunched (due to force restart, or changing the
+// arguments).
 - (void)appLaunchManagerDidRelaunchApp:(AppLaunchManager*)appLaunchManager;
 @end
 
diff --git a/ios/testing/earl_grey/app_launch_manager.mm b/ios/testing/earl_grey/app_launch_manager.mm
index a00816f..5687dd1 100644
--- a/ios/testing/earl_grey/app_launch_manager.mm
+++ b/ios/testing/earl_grey/app_launch_manager.mm
@@ -83,10 +83,11 @@
   application.launchArguments = arguments;
 
   [application launch];
+  if (self.runningApplication) {
+    [self.observers appLaunchManagerDidRelaunchApp:self];
+  }
   self.runningApplication = application;
   self.currentLaunchArgs = arguments;
-
-  [self.observers appLaunchManagerDidRelaunchApp:self];
 #endif
 }
 
diff --git a/ios/web/public/web_state/web_state.h b/ios/web/public/web_state/web_state.h
index 3d941f4..07f3a90 100644
--- a/ios/web/public/web_state/web_state.h
+++ b/ios/web/public/web_state/web_state.h
@@ -343,7 +343,7 @@
   virtual void SetHasOpener(bool has_opener) = 0;
 
   // Callback used to handle snapshots. The parameter is the snapshot image.
-  typedef base::OnceCallback<void(const gfx::Image&)> SnapshotCallback;
+  typedef base::RepeatingCallback<void(const gfx::Image&)> SnapshotCallback;
 
   // Returns whether TakeSnapshot() can be executed.  The API may be disabled if
   // the WKWebView IPC mechanism is blocked due to an outstanding JavaScript
diff --git a/ios/web/web_state/ui/crw_web_controller.h b/ios/web/web_state/ui/crw_web_controller.h
index 8c0f6fa08..cd13d1d 100644
--- a/ios/web/web_state/ui/crw_web_controller.h
+++ b/ios/web/web_state/ui/crw_web_controller.h
@@ -184,7 +184,7 @@
 // Takes snapshot of web view with |rect|. |rect| should be in self.view's
 // coordinate system.  |completion| is always called, but |snapshot| may be nil.
 // Prior to iOS 11, |completion| is called with a nil
-// snapshot.
+// snapshot. |completion| may be called more than once.
 - (void)takeSnapshotWithRect:(CGRect)rect
                   completion:(void (^)(UIImage* snapshot))completion;
 
diff --git a/ios/web/web_state/web_state_impl.mm b/ios/web/web_state/web_state_impl.mm
index 6903a68..0712d00 100644
--- a/ios/web/web_state/web_state_impl.mm
+++ b/ios/web/web_state/web_state_impl.mm
@@ -740,12 +740,13 @@
 void WebStateImpl::TakeSnapshot(const gfx::RectF& rect,
                                 SnapshotCallback callback) {
   DCHECK(CanTakeSnapshot());
+  // Move the callback to a __block pointer, which will be in scope as long
+  // as the callback is retained.
   __block SnapshotCallback shared_callback = std::move(callback);
-  [web_controller_
-      takeSnapshotWithRect:rect.ToCGRect()
-                completion:^(UIImage* snapshot) {
-                  std::move(shared_callback).Run(gfx::Image(snapshot));
-                }];
+  [web_controller_ takeSnapshotWithRect:rect.ToCGRect()
+                             completion:^(UIImage* snapshot) {
+                               shared_callback.Run(gfx::Image(snapshot));
+                             }];
 }
 
 void WebStateImpl::OnNavigationStarted(web::NavigationContextImpl* context) {
diff --git a/ios/web/web_state/web_state_unittest.mm b/ios/web/web_state/web_state_unittest.mm
index a200343..8b229f16 100644
--- a/ios/web/web_state/web_state_unittest.mm
+++ b/ios/web/web_state/web_state_unittest.mm
@@ -230,7 +230,7 @@
   CGRect rect = [web_state()->GetView() bounds];
   base::test::ios::SpinRunLoopWithMinDelay(base::TimeDelta::FromSecondsD(0.2));
   web_state()->TakeSnapshot(
-      gfx::RectF(rect), base::BindOnce(^(const gfx::Image& snapshot) {
+      gfx::RectF(rect), base::BindRepeating(^(const gfx::Image& snapshot) {
         ASSERT_FALSE(snapshot.IsEmpty());
         EXPECT_GT(snapshot.Width(), 0);
         EXPECT_GT(snapshot.Height(), 0);
diff --git a/ios/web_view/internal/web_view_web_main_parts.mm b/ios/web_view/internal/web_view_web_main_parts.mm
index c53b32b..95ceb08 100644
--- a/ios/web_view/internal/web_view_web_main_parts.mm
+++ b/ios/web_view/internal/web_view_web_main_parts.mm
@@ -52,7 +52,6 @@
   std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
   std::string enable_features = base::JoinString(
       {autofill::features::kAutofillEnableAccountWalletStorage.name,
-       autofill::features::kAutofillAlwaysShowServerCardsInSyncTransport.name,
        switches::kSyncSupportSecondaryAccount.name},
       ",");
   std::string disabled_features = base::JoinString(
diff --git a/media/audio/audio_input_ipc.h b/media/audio/audio_input_ipc.h
index 4abfcf0..b8defb6 100644
--- a/media/audio/audio_input_ipc.h
+++ b/media/audio/audio_input_ipc.h
@@ -22,7 +22,7 @@
 class MEDIA_EXPORT AudioInputIPCDelegate {
  public:
   // Called when an AudioInputController has been created.
-  // See media/mojo/interfaces/audio_data_pipe.mojom for documentation of
+  // See media/mojo/mojom/audio_data_pipe.mojom for documentation of
   // |handle| and |socket_handle|.
   virtual void OnStreamCreated(
       base::ReadOnlySharedMemoryRegion shared_memory_region,
diff --git a/media/audio/audio_output_ipc.h b/media/audio/audio_output_ipc.h
index 4c1600b..abe7053 100644
--- a/media/audio/audio_output_ipc.h
+++ b/media/audio/audio_output_ipc.h
@@ -32,7 +32,7 @@
                                   const std::string& matched_device_id) = 0;
 
   // Called when an audio stream has been created.
-  // See media/mojo/interfaces/audio_data_pipe.mojom for documentation of
+  // See media/mojo/mojom/audio_data_pipe.mojom for documentation of
   // |handle| and |socket_handle|. |playing_automatically| indicates if the
   // AudioOutputIPCDelegate is playing right away due to an earlier call to
   // Play();
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
index a389ebc35..682b656 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecUtil.java
@@ -202,7 +202,54 @@
       */
     @CalledByNative
     private static boolean canDecode(String mime, boolean isSecure) {
-        // TODO(crbug.com/846120): Investigate if FEATURE_SecurePlayback will work here.
+        // Not supported on blacklisted devices.
+        if (!isDecoderSupportedForDevice(mime)) {
+            Log.e(TAG, "Decoder for type %s is not supported on this device", mime);
+            return false;
+        }
+
+        // MediaCodecInfo.CodecCapabilities.FEATURE_SecurePlayback is available as of
+        // API 21 (LOLLIPOP), which is the same as NewMediaCodecList.
+        MediaCodecListHelper codecListHelper = new MediaCodecListHelper();
+        if (codecListHelper.hasNewMediaCodecList()) {
+            for (MediaCodecInfo info : codecListHelper) {
+                if (info.isEncoder()) continue;
+
+                try {
+                    CodecCapabilities caps = info.getCapabilitiesForType(mime);
+                    if (caps != null) {
+                        // There may be multiple entries in the list for the same family
+                        // (e.g. OMX.qcom.video.decoder.avc and OMX.qcom.video.decoder.avc.secure),
+                        // so return early if this one matches what we're looking for.
+
+                        // If a secure decoder is required, then FEATURE_SecurePlayback must be
+                        // supported.
+                        if (isSecure
+                                && caps.isFeatureSupported(
+                                        CodecCapabilities.FEATURE_SecurePlayback)) {
+                            return true;
+                        }
+
+                        // If a secure decoder is not required, then make sure that
+                        // FEATURE_SecurePlayback is not required. It may work for unsecure
+                        // content, but keep scanning for another codec that supports
+                        // unsecure content directly.
+                        if (!isSecure
+                                && !caps.isFeatureRequired(
+                                        CodecCapabilities.FEATURE_SecurePlayback)) {
+                            return true;
+                        }
+                    }
+                } catch (IllegalArgumentException e) {
+                    // Type is not supported.
+                }
+            }
+
+            // Unable to find a match for |mime|, so not supported.
+            return false;
+        }
+
+        // On older versions of Android attempt to create a decoder for the specified MIME type.
         // TODO(liberato): Should we insist on software here?
         CodecCreationInfo info = createDecoder(mime, isSecure ? CodecType.SECURE : CodecType.ANY);
         if (info == null || info.mediaCodec == null) return false;
diff --git a/media/base/fake_audio_worker_unittest.cc b/media/base/fake_audio_worker_unittest.cc
index be8a9863c..0de1edd 100644
--- a/media/base/fake_audio_worker_unittest.cc
+++ b/media/base/fake_audio_worker_unittest.cc
@@ -83,7 +83,7 @@
 
  protected:
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   AudioParameters params_;
   FakeAudioWorker fake_worker_;
   base::TimeDelta time_between_callbacks_;
diff --git a/media/base/video_codecs.h b/media/base/video_codecs.h
index 79c5daf..3814ad69 100644
--- a/media/base/video_codecs.h
+++ b/media/base/video_codecs.h
@@ -40,7 +40,7 @@
 };
 
 // Video codec profiles. Keep in sync with mojo::VideoCodecProfile (see
-// media/mojo/interfaces/media_types.mojom), gpu::VideoCodecProfile (see
+// media/mojo/mojom/media_types.mojom), gpu::VideoCodecProfile (see
 // gpu/config/gpu_info.h), and PP_VideoDecoder_Profile (translation is performed
 // in content/renderer/pepper/ppb_video_decoder_impl.cc).
 // NOTE: These values are histogrammed over time in UMA so the values must never
diff --git a/media/blink/BUILD.gn b/media/blink/BUILD.gn
index d75a490..a43733b 100644
--- a/media/blink/BUILD.gn
+++ b/media/blink/BUILD.gn
@@ -76,7 +76,7 @@
     "//gpu",
     "//media",
     "//media:shared_memory_support",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//net",
     "//services/network/public/cpp:cpp",
     "//services/service_manager/public/cpp:cpp",
@@ -102,7 +102,7 @@
     "//cc",
     "//gin",
     "//media:test_support",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//media/mojo/services",
     "//mojo/core/embedder",
     "//net",
diff --git a/media/blink/video_decode_stats_reporter.cc b/media/blink/video_decode_stats_reporter.cc
index 0dc4d74..e4fc8e0e 100644
--- a/media/blink/video_decode_stats_reporter.cc
+++ b/media/blink/video_decode_stats_reporter.cc
@@ -11,7 +11,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "media/capabilities/bucket_utility.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace media {
 
diff --git a/media/blink/video_decode_stats_reporter.h b/media/blink/video_decode_stats_reporter.h
index e07f648..463dd9d 100644
--- a/media/blink/video_decode_stats_reporter.h
+++ b/media/blink/video_decode_stats_reporter.h
@@ -20,7 +20,7 @@
 #include "media/base/pipeline_status.h"
 #include "media/base/video_codecs.h"
 #include "media/blink/media_blink_export.h"
-#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h"
+#include "media/mojo/mojom/video_decode_stats_recorder.mojom.h"
 
 namespace media {
 
diff --git a/media/blink/video_decode_stats_reporter_unittest.cc b/media/blink/video_decode_stats_reporter_unittest.cc
index cac5e78..e526228 100644
--- a/media/blink/video_decode_stats_reporter_unittest.cc
+++ b/media/blink/video_decode_stats_reporter_unittest.cc
@@ -19,8 +19,8 @@
 #include "media/base/video_types.h"
 #include "media/blink/video_decode_stats_reporter.h"
 #include "media/capabilities/bucket_utility.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
-#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
+#include "media/mojo/mojom/video_decode_stats_recorder.mojom.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/media/blink/watch_time_component.h b/media/blink/watch_time_component.h
index 522e3cf..be25696 100644
--- a/media/blink/watch_time_component.h
+++ b/media/blink/watch_time_component.h
@@ -13,7 +13,7 @@
 #include "media/base/timestamp_constants.h"
 #include "media/base/watch_time_keys.h"
 #include "media/blink/media_blink_export.h"
-#include "media/mojo/interfaces/watch_time_recorder.mojom.h"
+#include "media/mojo/mojom/watch_time_recorder.mojom.h"
 
 namespace media {
 
diff --git a/media/blink/watch_time_reporter.h b/media/blink/watch_time_reporter.h
index eb143af..122e94e 100644
--- a/media/blink/watch_time_reporter.h
+++ b/media/blink/watch_time_reporter.h
@@ -18,8 +18,8 @@
 #include "media/base/video_codecs.h"
 #include "media/blink/media_blink_export.h"
 #include "media/blink/watch_time_component.h"
-#include "media/mojo/interfaces/media_metrics_provider.mojom.h"
-#include "media/mojo/interfaces/watch_time_recorder.mojom.h"
+#include "media/mojo/mojom/media_metrics_provider.mojom.h"
+#include "media/mojo/mojom/watch_time_recorder.mojom.h"
 #include "third_party/blink/public/platform/web_media_player.h"
 #include "ui/gfx/geometry/size.h"
 #include "url/origin.h"
diff --git a/media/blink/watch_time_reporter_unittest.cc b/media/blink/watch_time_reporter_unittest.cc
index 5a1564f..0ad2ca1 100644
--- a/media/blink/watch_time_reporter_unittest.cc
+++ b/media/blink/watch_time_reporter_unittest.cc
@@ -14,8 +14,8 @@
 #include "media/base/mock_media_log.h"
 #include "media/base/watch_time_keys.h"
 #include "media/blink/watch_time_reporter.h"
-#include "media/mojo/interfaces/media_metrics_provider.mojom.h"
-#include "media/mojo/interfaces/watch_time_recorder.mojom.h"
+#include "media/mojo/mojom/media_metrics_provider.mojom.h"
+#include "media/mojo/mojom/watch_time_recorder.mojom.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/media/blink/webmediaplayer_params.h b/media/blink/webmediaplayer_params.h
index dda284c..c6632188 100644
--- a/media/blink/webmediaplayer_params.h
+++ b/media/blink/webmediaplayer_params.h
@@ -20,7 +20,7 @@
 #include "media/base/media_switches.h"
 #include "media/base/routing_token_callback.h"
 #include "media/blink/media_blink_export.h"
-#include "media/mojo/interfaces/media_metrics_provider.mojom.h"
+#include "media/mojo/mojom/media_metrics_provider.mojom.h"
 #include "third_party/blink/public/platform/web_media_player.h"
 #include "third_party/blink/public/platform/web_video_frame_submitter.h"
 
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn
index f6eb17e..ebc81e0 100644
--- a/media/capture/BUILD.gn
+++ b/media/capture/BUILD.gn
@@ -86,7 +86,7 @@
     "//media",
     "//media/capture/mojom:image_capture",
     "//media/capture/mojom:image_capture_types",
-    "//media/mojo/interfaces:interfaces",
+    "//media/mojo/mojom",
     "//media/parsers",
     "//third_party/libyuv",
     "//ui/gfx",
@@ -132,7 +132,7 @@
     "//media/capture/mojom:image_capture",
     "//media/capture/mojom:image_capture_types",
     "//media/capture/mojom:video_capture",
-    "//media/mojo/interfaces:interfaces",
+    "//media/mojo/mojom",
     "//services/service_manager/public/cpp",
     "//third_party/libyuv",
     "//ui/display",
diff --git a/media/capture/mojom/video_capture_types.typemap b/media/capture/mojom/video_capture_types.typemap
index 71466328..149d79fc 100644
--- a/media/capture/mojom/video_capture_types.typemap
+++ b/media/capture/mojom/video_capture_types.typemap
@@ -19,7 +19,7 @@
 deps = [
   "//media",
   "//media/capture:capture_base",
-  "//media/mojo/interfaces",
+  "//media/mojo/mojom",
   "//ui/gfx/geometry/mojom:mojom_traits",
 ]
 
diff --git a/media/capture/video/chromeos/camera_metadata_utils.cc b/media/capture/video/chromeos/camera_metadata_utils.cc
index cfd2fde..4b2fc0c9 100644
--- a/media/capture/video/chromeos/camera_metadata_utils.cc
+++ b/media/capture/video/chromeos/camera_metadata_utils.cc
@@ -121,6 +121,7 @@
     tags.insert(entry->tag);
     (*to)->entries->push_back(entry->Clone());
   }
+  SortCameraMetadata(to);
 }
 
 }  // namespace media
diff --git a/media/capture/video/chromeos/mojom/BUILD.gn b/media/capture/video/chromeos/mojom/BUILD.gn
index 1305281..9084ff8 100644
--- a/media/capture/video/chromeos/mojom/BUILD.gn
+++ b/media/capture/video/chromeos/mojom/BUILD.gn
@@ -17,7 +17,7 @@
   deps = [
     "//components/chromeos_camera/common",
     "//media/capture/mojom:image_capture",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
   ]
 
   # TODO(https://crbug.com/968369): Change to use new names.
diff --git a/media/cast/cast_config.h b/media/cast/cast_config.h
index 0e32a8f..f01e9a1 100644
--- a/media/cast/cast_config.h
+++ b/media/cast/cast_config.h
@@ -12,7 +12,7 @@
 
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/shared_memory.h"
+#include "base/memory/unsafe_shared_memory_region.h"
 #include "base/single_thread_task_runner.h"
 #include "base/time/time.h"
 
@@ -251,7 +251,7 @@
     ReceiveVideoEncodeAcceleratorCallback;
 typedef base::Callback<void(const ReceiveVideoEncodeAcceleratorCallback&)>
     CreateVideoEncodeAcceleratorCallback;
-typedef base::Callback<void(std::unique_ptr<base::SharedMemory>)>
+typedef base::Callback<void(base::UnsafeSharedMemoryRegion)>
     ReceiveVideoEncodeMemoryCallback;
 typedef base::Callback<void(size_t size,
                             const ReceiveVideoEncodeMemoryCallback&)>
diff --git a/media/cast/sender/external_video_encoder.cc b/media/cast/sender/external_video_encoder.cc
index b77c9a4..2773d30b 100644
--- a/media/cast/sender/external_video_encoder.cc
+++ b/media/cast/sender/external_video_encoder.cc
@@ -278,9 +278,11 @@
       NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
       return;
     }
-    base::SharedMemory* output_buffer =
-        output_buffers_[bitstream_buffer_id].get();
-    if (metadata.payload_size_bytes > output_buffer->mapped_size()) {
+    const char* output_buffer_memory = output_buffers_[bitstream_buffer_id]
+                                           .second.GetMemoryAsSpan<char>()
+                                           .data();
+    if (metadata.payload_size_bytes >
+        output_buffers_[bitstream_buffer_id].second.size()) {
       NOTREACHED();
       VLOG(1) << "BitstreamBufferReady(): invalid payload_size = "
               << metadata.payload_size_bytes;
@@ -296,8 +298,7 @@
       //
       // TODO(miu): Should |stream_header_| be an std::ostringstream for
       // performance reasons?
-      stream_header_.append(static_cast<const char*>(output_buffer->memory()),
-                            metadata.payload_size_bytes);
+      stream_header_.append(output_buffer_memory, metadata.payload_size_bytes);
     } else if (!in_progress_frame_encodes_.empty()) {
       const InProgressExternalVideoFrameEncode& request =
           in_progress_frame_encodes_.front();
@@ -318,9 +319,8 @@
         encoded_frame->data = stream_header_;
         stream_header_.clear();
       }
-      encoded_frame->data.append(
-          static_cast<const char*>(output_buffer->memory()),
-          metadata.payload_size_bytes);
+      encoded_frame->data.append(output_buffer_memory,
+                                 metadata.payload_size_bytes);
       DCHECK(!encoded_frame->data.empty()) << "BUG: Encoder must provide data.";
 
       // If FRAME_DURATION metadata was provided in the source VideoFrame,
@@ -416,9 +416,8 @@
       video_encode_accelerator_->UseOutputBitstreamBuffer(
           media::BitstreamBuffer(
               bitstream_buffer_id,
-              output_buffers_[bitstream_buffer_id]->handle(),
-              false /* read_only */,
-              output_buffers_[bitstream_buffer_id]->mapped_size()));
+              output_buffers_[bitstream_buffer_id].first.Duplicate(),
+              output_buffers_[bitstream_buffer_id].first.GetSize()));
     }
   }
 
@@ -438,24 +437,25 @@
   }
 
   // Note: This method can be called on any thread.
-  void OnCreateSharedMemory(std::unique_ptr<base::SharedMemory> memory) {
+  void OnCreateSharedMemory(base::UnsafeSharedMemoryRegion memory) {
     task_runner_->PostTask(
         FROM_HERE, base::BindOnce(&VEAClientImpl::OnReceivedSharedMemory, this,
                                   std::move(memory)));
   }
 
-  void OnCreateInputSharedMemory(std::unique_ptr<base::SharedMemory> memory) {
+  void OnCreateInputSharedMemory(base::UnsafeSharedMemoryRegion memory) {
     task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(&VEAClientImpl::OnReceivedInputSharedMemory, this,
-                       base::UnsafeSharedMemoryRegion::CreateFromHandle(
-                           memory->TakeHandle())));
+        FROM_HERE, base::BindOnce(&VEAClientImpl::OnReceivedInputSharedMemory,
+                                  this, std::move(memory)));
   }
 
-  void OnReceivedSharedMemory(std::unique_ptr<base::SharedMemory> memory) {
+  void OnReceivedSharedMemory(base::UnsafeSharedMemoryRegion memory) {
     DCHECK(task_runner_->RunsTasksInCurrentSequence());
 
-    output_buffers_.push_back(std::move(memory));
+    base::WritableSharedMemoryMapping mapping = memory.Map();
+    DCHECK(mapping.IsValid());
+    output_buffers_.push_back(
+        std::make_pair(std::move(memory), std::move(mapping)));
 
     // Wait until all requested buffers are received.
     if (output_buffers_.size() < kOutputBufferCount)
@@ -464,9 +464,9 @@
     // Immediately provide all output buffers to the VEA.
     for (size_t i = 0; i < output_buffers_.size(); ++i) {
       video_encode_accelerator_->UseOutputBitstreamBuffer(
-          media::BitstreamBuffer(
-              static_cast<int32_t>(i), output_buffers_[i]->handle(),
-              false /* read_only */, output_buffers_[i]->mapped_size()));
+          media::BitstreamBuffer(static_cast<int32_t>(i),
+                                 output_buffers_[i].first.Duplicate(),
+                                 output_buffers_[i].first.GetSize()));
     }
   }
 
@@ -574,7 +574,9 @@
   H264Parser h264_parser_;
 
   // Shared memory buffers for output with the VideoAccelerator.
-  std::vector<std::unique_ptr<base::SharedMemory>> output_buffers_;
+  std::vector<std::pair<base::UnsafeSharedMemoryRegion,
+                        base::WritableSharedMemoryMapping>>
+      output_buffers_;
 
   // Shared memory buffers for input video frames with the VideoAccelerator.
   // These buffers will be allocated only when copy is needed to match the
diff --git a/media/cast/sender/fake_video_encode_accelerator_factory.cc b/media/cast/sender/fake_video_encode_accelerator_factory.cc
index c766742..ed8a56f2 100644
--- a/media/cast/sender/fake_video_encode_accelerator_factory.cc
+++ b/media/cast/sender/fake_video_encode_accelerator_factory.cc
@@ -17,9 +17,7 @@
       will_init_succeed_(true),
       auto_respond_(false),
       vea_response_count_(0),
-      shm_response_count_(0),
-      last_response_vea_(nullptr),
-      last_response_shm_(nullptr) {}
+      shm_response_count_(0) {}
 
 FakeVideoEncodeAcceleratorFactory::~FakeVideoEncodeAcceleratorFactory() =
     default;
@@ -56,10 +54,9 @@
 void FakeVideoEncodeAcceleratorFactory::CreateSharedMemory(
     size_t size, const ReceiveVideoEncodeMemoryCallback& callback) {
   DCHECK(!callback.is_null());
-  DCHECK(!next_response_shm_);
+  DCHECK(!next_response_shm_.IsValid());
 
-  next_response_shm_.reset(new base::SharedMemory());
-  CHECK(next_response_shm_->CreateAndMapAnonymous(size));
+  next_response_shm_ = base::UnsafeSharedMemoryRegion::Create(size);
   shm_response_callback_ = callback;
   if (auto_respond_)
     RespondWithSharedMemory();
@@ -67,15 +64,13 @@
 
 void FakeVideoEncodeAcceleratorFactory::RespondWithVideoEncodeAccelerator() {
   DCHECK(next_response_vea_.get());
-  last_response_vea_ = next_response_vea_.get();
   ++vea_response_count_;
   std::move(vea_response_callback_)
       .Run(task_runner_, std::move(next_response_vea_));
 }
 
 void FakeVideoEncodeAcceleratorFactory::RespondWithSharedMemory() {
-  DCHECK(next_response_shm_.get());
-  last_response_shm_ = next_response_shm_.get();
+  DCHECK(next_response_shm_.IsValid());
   ++shm_response_count_;
   std::move(shm_response_callback_).Run(std::move(next_response_shm_));
 }
diff --git a/media/cast/sender/fake_video_encode_accelerator_factory.h b/media/cast/sender/fake_video_encode_accelerator_factory.h
index f7eee497..238ec163 100644
--- a/media/cast/sender/fake_video_encode_accelerator_factory.h
+++ b/media/cast/sender/fake_video_encode_accelerator_factory.h
@@ -12,7 +12,7 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/shared_memory.h"
+#include "base/memory/unsafe_shared_memory_region.h"
 #include "base/single_thread_task_runner.h"
 #include "media/cast/cast_config.h"
 #include "media/video/fake_video_encode_accelerator.h"
@@ -35,16 +35,6 @@
     return shm_response_count_;
   }
 
-  // These return the instance last responded.  It is up to the caller to
-  // determine whether the pointer is still valid, since this factory does not
-  // own these objects anymore.
-  media::FakeVideoEncodeAccelerator* last_response_vea() const {
-    return static_cast<media::FakeVideoEncodeAccelerator*>(last_response_vea_);
-  }
-  base::SharedMemory* last_response_shm() const {
-    return last_response_shm_;
-  }
-
   // Set whether the next created media::FakeVideoEncodeAccelerator will
   // initialize successfully.
   void SetInitializationWillSucceed(bool will_init_succeed);
@@ -69,7 +59,7 @@
   void RespondWithVideoEncodeAccelerator();
 
   // Runs the |callback| provided to the last call to
-  // CreateSharedMemory() with the new base::SharedMemory instance.
+  // CreateSharedMemory() with the new base::UnsafeSharedMemoryRegion instance.
   void RespondWithSharedMemory();
 
  private:
@@ -78,12 +68,10 @@
   bool auto_respond_;
   std::unique_ptr<media::VideoEncodeAccelerator> next_response_vea_;
   ReceiveVideoEncodeAcceleratorCallback vea_response_callback_;
-  std::unique_ptr<base::SharedMemory> next_response_shm_;
+  base::UnsafeSharedMemoryRegion next_response_shm_;
   ReceiveVideoEncodeMemoryCallback shm_response_callback_;
   int vea_response_count_;
   int shm_response_count_;
-  media::VideoEncodeAccelerator* last_response_vea_;
-  base::SharedMemory* last_response_shm_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeVideoEncodeAcceleratorFactory);
 };
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
index 46b3b9b5..eec3b7f 100644
--- a/media/gpu/BUILD.gn
+++ b/media/gpu/BUILD.gn
@@ -28,7 +28,7 @@
   # media-related content code should access //media/gpu.
   visibility = [
     "//chrome/gpu",
-    "//components/arc/common:media",
+    "//components/arc/mojom:media",
     "//components/arc/video_accelerator",
     "//components/mirroring/service:mirroring_service",
     "//components/viz/service/main",
diff --git a/media/gpu/android/codec_image.h b/media/gpu/android/codec_image.h
index fdbfc31..c761a4b 100644
--- a/media/gpu/android/codec_image.h
+++ b/media/gpu/android/codec_image.h
@@ -100,12 +100,18 @@
   bool was_tex_image_bound() const { return was_tex_image_bound_; }
 
   // Whether this image is backed by a texture owner.
+  // We want to check for texture_owner owned by
+  // |codec_buffer_wait_coordinator_| and hence only checking for
+  // |codec_buffer_wait_coordinator_| is enough here.
+  // TODO(vikassoni): Update the method name in future refactorings.
   bool is_texture_owner_backed() const {
-    return !!codec_buffer_wait_coordinator_->texture_owner();
+    return !!codec_buffer_wait_coordinator_;
   }
 
   scoped_refptr<TextureOwner> texture_owner() const {
-    return codec_buffer_wait_coordinator_->texture_owner();
+    return codec_buffer_wait_coordinator_
+               ? codec_buffer_wait_coordinator_->texture_owner()
+               : nullptr;
   }
 
   // Renders this image to the front buffer of its backing surface.
diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc
index 079ffbab..876cd5d 100644
--- a/media/gpu/android/video_frame_factory_impl.cc
+++ b/media/gpu/android/video_frame_factory_impl.cc
@@ -164,7 +164,9 @@
 
   image_provider_->RequestImage(
       std::move(image_ready_cb), spec,
-      codec_buffer_wait_coordinator_->texture_owner());
+      codec_buffer_wait_coordinator_
+          ? codec_buffer_wait_coordinator_->texture_owner()
+          : nullptr);
 }
 
 // static
diff --git a/media/gpu/test/video_player/video.cc b/media/gpu/test/video_player/video.cc
index bc2bc25..8167820c 100644
--- a/media/gpu/test/video_player/video.cc
+++ b/media/gpu/test/video_player/video.cc
@@ -103,6 +103,11 @@
   return resolution_;
 }
 
+base::TimeDelta Video::GetDuration() const {
+  return base::TimeDelta::FromSecondsD(static_cast<double>(num_frames_) /
+                                       static_cast<double>(frame_rate_));
+}
+
 const std::vector<std::string>& Video::FrameChecksums() const {
   return frame_checksums_;
 }
diff --git a/media/gpu/test/video_player/video.h b/media/gpu/test/video_player/video.h
index db2c118..2c678e5 100644
--- a/media/gpu/test/video_player/video.h
+++ b/media/gpu/test/video_player/video.h
@@ -10,6 +10,7 @@
 
 #include "base/files/file_path.h"
 #include "base/macros.h"
+#include "base/time/time.h"
 #include "media/base/video_codecs.h"
 #include "ui/gfx/geometry/size.h"
 
@@ -48,6 +49,8 @@
   uint32_t NumFragments() const;
   // Get the video resolution.
   gfx::Size Resolution() const;
+  // Get the video duration.
+  base::TimeDelta GetDuration() const;
 
   // Get the list of frame checksums.
   const std::vector<std::string>& FrameChecksums() const;
diff --git a/media/gpu/test/video_player/video_player.cc b/media/gpu/test/video_player/video_player.cc
index 8d4f9a9..deeffa22 100644
--- a/media/gpu/test/video_player/video_player.cc
+++ b/media/gpu/test/video_player/video_player.cc
@@ -74,6 +74,13 @@
   video_player_state_ = VideoPlayerState::kDestroyed;
 }
 
+void VideoPlayer::SetEventWaitTimeout(base::TimeDelta timeout) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DVLOGF(4);
+
+  event_timeout_ = timeout;
+}
+
 void VideoPlayer::Play() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DVLOGF(4);
@@ -129,9 +136,7 @@
   return decoder_client_->GetFrameRenderer();
 }
 
-bool VideoPlayer::WaitForEvent(VideoPlayerEvent event,
-                               size_t times,
-                               base::TimeDelta max_wait) {
+bool VideoPlayer::WaitForEvent(VideoPlayerEvent event, size_t times) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_GE(times, 1u);
   DVLOGF(4) << "Event ID: " << static_cast<size_t>(event);
@@ -153,11 +158,11 @@
     }
 
     // Check whether we've exceeded the maximum time we're allowed to wait.
-    if (time_waiting >= max_wait)
+    if (time_waiting >= event_timeout_)
       return false;
 
     const base::TimeTicks start_time = base::TimeTicks::Now();
-    event_cv_.TimedWait(max_wait);
+    event_cv_.TimedWait(event_timeout_ - time_waiting);
     time_waiting += base::TimeTicks::Now() - start_time;
   }
 }
diff --git a/media/gpu/test/video_player/video_player.h b/media/gpu/test/video_player/video_player.h
index 2e1ccb86..e6d6ef5 100644
--- a/media/gpu/test/video_player/video_player.h
+++ b/media/gpu/test/video_player/video_player.h
@@ -27,7 +27,8 @@
 struct VideoDecoderClientConfig;
 
 // Default timeout used when waiting for events.
-constexpr base::TimeDelta kDefaultTimeout = base::TimeDelta::FromSeconds(30);
+constexpr base::TimeDelta kDefaultEventWaitTimeout =
+    base::TimeDelta::FromSeconds(30);
 
 enum class VideoPlayerState : size_t {
   kUninitialized = 0,
@@ -71,6 +72,9 @@
   // Wait until the renderer has finished rendering all queued frames.
   void WaitForRenderer();
 
+  // Set the maximum time we will wait for an event to finish.
+  void SetEventWaitTimeout(base::TimeDelta timeout);
+
   // Play the video asynchronously.
   void Play();
   // Play the video asynchronously. Automatically pause decoding when the
@@ -94,9 +98,7 @@
   // occurred since last calling this function will be taken into account. All
   // events with different types will be consumed. Will return false if the
   // specified timeout is exceeded while waiting for the events.
-  bool WaitForEvent(VideoPlayerEvent event,
-                    size_t times = 1,
-                    base::TimeDelta max_wait = kDefaultTimeout);
+  bool WaitForEvent(VideoPlayerEvent event, size_t times = 1);
   // Helper function to wait for a FlushDone event.
   bool WaitForFlushDone();
   // Helper function to wait for a ResetDone event.
@@ -131,6 +133,8 @@
   VideoPlayerState video_player_state_;
   std::unique_ptr<VideoDecoderClient> decoder_client_;
 
+  // The timeout used when waiting for events.
+  base::TimeDelta event_timeout_ = kDefaultEventWaitTimeout;
   mutable base::Lock event_lock_;
   base::ConditionVariable event_cv_;
 
diff --git a/media/gpu/v4l2/v4l2_decode_surface.h b/media/gpu/v4l2/v4l2_decode_surface.h
index a6e8a56..a830cdd 100644
--- a/media/gpu/v4l2/v4l2_decode_surface.h
+++ b/media/gpu/v4l2/v4l2_decode_surface.h
@@ -132,6 +132,8 @@
 
   // The configuration store of the input buffer.
   uint32_t config_store_;
+
+  DISALLOW_COPY_AND_ASSIGN(V4L2ConfigStoreDecodeSurface);
 };
 
 // An implementation of V4L2DecodeSurface that uses requests to associate
@@ -156,6 +158,8 @@
   bool Submit() const override;
 
  private:
+  ~V4L2RequestDecodeSurface() override = default;
+
   // FD of the request to use.
   const int request_fd_;
 
@@ -167,6 +171,8 @@
                           std::move(output_buffer),
                           std::move(frame)),
         request_fd_(request_fd) {}
+
+  DISALLOW_COPY_AND_ASSIGN(V4L2RequestDecodeSurface);
 };
 
 }  // namespace media
diff --git a/media/gpu/v4l2/v4l2_device.cc b/media/gpu/v4l2/v4l2_device.cc
index 2d1f4c4..e557b88 100644
--- a/media/gpu/v4l2/v4l2_device.cc
+++ b/media/gpu/v4l2/v4l2_device.cc
@@ -219,6 +219,9 @@
   size_t size() const;
 
  private:
+  friend class base::RefCountedThreadSafe<V4L2BuffersList>;
+  ~V4L2BuffersList() = default;
+
   mutable base::Lock lock_;
   std::set<size_t> free_buffers_ GUARDED_BY(lock_);
   DISALLOW_COPY_AND_ASSIGN(V4L2BuffersList);
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
index 35947d1..e809953 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
@@ -155,6 +155,8 @@
       egl_display_(egl_display),
       bind_image_cb_(bind_image_cb),
       make_context_current_cb_(make_context_current_cb),
+      gl_image_format_fourcc_(0),
+      gl_image_planes_count_(0),
       weak_this_factory_(this) {
   weak_this_ = weak_this_factory_.GetWeakPtr();
 }
@@ -455,6 +457,9 @@
   if (output_format_fourcc_ == 0) {
     VLOGF(1) << "Could not find a usable output format";
     return false;
+  } else {
+    gl_image_format_fourcc_ = output_format_fourcc_;
+    gl_image_device_ = device_;
   }
 
   // Only set fourcc for output; resolution, etc., will come from the
@@ -468,6 +473,7 @@
 
   DCHECK_EQ(V4L2Device::GetNumPlanesOfV4L2PixFmt(output_format_fourcc_), static_cast<size_t>(format.fmt.pix_mp.num_planes));
   output_planes_count_ = format.fmt.pix_mp.num_planes;
+  gl_image_planes_count_ = output_planes_count_;
 
   return true;
 }
@@ -542,6 +548,8 @@
   DCHECK_EQ(coded_size_.width() % 16, 0);
   DCHECK_EQ(coded_size_.height() % 16, 0);
 
+  gl_image_size_ = coded_size_;
+
   if (!gfx::Rect(coded_size_).Contains(gfx::Rect(pic_size))) {
     VLOGF(1) << "Got invalid adjusted coded size: " << coded_size_.ToString();
     return false;
@@ -552,7 +560,7 @@
             << ", coded size=" << coded_size_.ToString();
 
   VideoPixelFormat pixel_format =
-      V4L2Device::V4L2PixFmtToVideoPixelFormat(output_format_fourcc_);
+      V4L2Device::V4L2PixFmtToVideoPixelFormat(gl_image_format_fourcc_);
   child_task_runner_->PostTask(
       FROM_HERE,
       base::BindOnce(
@@ -1281,6 +1289,8 @@
     }
   }
 
+  gl_image_size_ = coded_size_;
+
   const v4l2_memory memory =
       (output_mode_ == Config::OutputMode::ALLOCATE ? V4L2_MEMORY_MMAP
                                                     : V4L2_MEMORY_DMABUF);
@@ -1326,8 +1336,8 @@
 
     if (output_mode_ == Config::OutputMode::ALLOCATE) {
       std::vector<base::ScopedFD> passed_dmabuf_fds =
-          device_->GetDmabufsForV4L2Buffer(i, output_planes_count_,
-                                           V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
+          gl_image_device_->GetDmabufsForV4L2Buffer(
+              i, gl_image_planes_count_, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
       if (passed_dmabuf_fds.empty()) {
         NOTIFY_ERROR(PLATFORM_FAILURE);
         return;
@@ -1377,18 +1387,19 @@
   }
 
   scoped_refptr<gl::GLImage> gl_image =
-      device_->CreateGLImage(size, fourcc, passed_dmabuf_fds);
+      gl_image_device_->CreateGLImage(size, fourcc, passed_dmabuf_fds);
   if (!gl_image) {
     VLOGF(1) << "Could not create GLImage,"
              << " index=" << buffer_index << " texture_id=" << texture_id;
     NOTIFY_ERROR(PLATFORM_FAILURE);
     return;
   }
-  gl::ScopedTextureBinder bind_restore(device_->GetTextureTarget(), texture_id);
-  bool ret = gl_image->BindTexImage(device_->GetTextureTarget());
+  gl::ScopedTextureBinder bind_restore(gl_image_device_->GetTextureTarget(),
+                                       texture_id);
+  bool ret = gl_image->BindTexImage(gl_image_device_->GetTextureTarget());
   DCHECK(ret);
-  bind_image_cb_.Run(client_texture_id, device_->GetTextureTarget(), gl_image,
-                     true);
+  bind_image_cb_.Run(client_texture_id, gl_image_device_->GetTextureTarget(),
+                     gl_image, true);
   decoder_thread_task_runner_->PostTask(
       FROM_HERE,
       base::BindOnce(&V4L2SliceVideoDecodeAccelerator::AssignDmaBufs,
@@ -1452,7 +1463,7 @@
   for (auto& plane : gpu_memory_buffer_handle.native_pixmap_handle.planes) {
     dmabuf_fds.push_back(std::move(plane.fd));
   }
-  for (size_t i = dmabuf_fds.size() - 1; i >= output_planes_count_; i--) {
+  for (size_t i = dmabuf_fds.size() - 1; i >= gl_image_planes_count_; i--) {
     if (gpu_memory_buffer_handle.native_pixmap_handle.planes[i].offset == 0) {
       VLOGF(1) << "The dmabuf fd points to a new buffer, ";
       NOTIFY_ERROR(INVALID_ARGUMENT);
@@ -1471,7 +1482,7 @@
   }
 
   if (pixel_format !=
-      V4L2Device::V4L2PixFmtToVideoPixelFormat(output_format_fourcc_)) {
+      V4L2Device::V4L2PixFmtToVideoPixelFormat(gl_image_format_fourcc_)) {
     VLOGF(1) << "Unsupported import format: "
              << VideoPixelFormatToString(pixel_format);
     NOTIFY_ERROR(INVALID_ARGUMENT);
@@ -1523,10 +1534,11 @@
         base::BindOnce(&V4L2SliceVideoDecodeAccelerator::CreateGLImageFor,
                        weak_this_, index, picture_buffer_id,
                        std::move(passed_dmabuf_fds), iter->client_texture_id,
-                       iter->texture_id, coded_size_, output_format_fourcc_));
+                       iter->texture_id, gl_image_size_,
+                       gl_image_format_fourcc_));
   } else {
     // No need for a GLImage, start using this buffer now.
-    DCHECK_EQ(output_planes_count_, passed_dmabuf_fds.size());
+    DCHECK_EQ(gl_image_planes_count_, passed_dmabuf_fds.size());
     iter->dmabuf_fds = std::move(passed_dmabuf_fds);
 
     // Buffer is now ready to be used.
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h
index 1a4262eb..83900d9f 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h
+++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.h
@@ -452,6 +452,15 @@
   // Callback to set the correct gl context.
   MakeGLContextCurrentCallback make_context_current_cb_;
 
+  // The V4L2Device GLImage is created from.
+  scoped_refptr<V4L2Device> gl_image_device_;
+  // The format of GLImage.
+  uint32_t gl_image_format_fourcc_;
+  // The logical dimensions of GLImage buffer in pixels.
+  gfx::Size gl_image_size_;
+  // Number of planes for GLImage.
+  size_t gl_image_planes_count_;
+
   // The WeakPtrFactory for |weak_this_|.
   base::WeakPtrFactory<V4L2SliceVideoDecodeAccelerator> weak_this_factory_;
 
diff --git a/media/gpu/v4l2/v4l2_slice_video_decoder.cc b/media/gpu/v4l2/v4l2_slice_video_decoder.cc
index 8685be6..aa059e75 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decoder.cc
+++ b/media/gpu/v4l2/v4l2_slice_video_decoder.cc
@@ -68,6 +68,18 @@
 
 }  // namespace
 
+V4L2SliceVideoDecoder::DecodeRequest::DecodeRequest(
+    scoped_refptr<DecoderBuffer> buf,
+    DecodeCB cb,
+    int32_t id)
+    : buffer(std::move(buf)), decode_cb(std::move(cb)), bitstream_id(id) {}
+
+V4L2SliceVideoDecoder::DecodeRequest::DecodeRequest(DecodeRequest&&) = default;
+V4L2SliceVideoDecoder::DecodeRequest& V4L2SliceVideoDecoder::DecodeRequest::
+operator=(DecodeRequest&&) = default;
+
+V4L2SliceVideoDecoder::DecodeRequest::~DecodeRequest() = default;
+
 struct V4L2SliceVideoDecoder::OutputRequest {
   enum OutputRequestType {
     // The surface to be outputted.
@@ -426,8 +438,8 @@
 }
 
 base::Optional<struct v4l2_format>
-V4L2SliceVideoDecoder::SetFormatOnOutputQueue(uint32_t format_fourcc,
-                                              const gfx::Size& size) {
+V4L2SliceVideoDecoder::SetV4L2FormatOnOutputQueue(uint32_t format_fourcc,
+                                                  const gfx::Size& size) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
 
   struct v4l2_format format = {};
@@ -457,19 +469,26 @@
     if (!device_->CanCreateEGLImageFrom(format_fourcc))
       continue;
 
+    base::Optional<struct v4l2_format> format =
+        SetV4L2FormatOnOutputQueue(format_fourcc, size);
+    if (!format)
+      continue;
+
+    // S_FMT is successful. Next make sure VFPool can allocate video frames with
+    // width and height adjusted by a video driver.
+    gfx::Size adjusted_size(format->fmt.pix_mp.width,
+                            format->fmt.pix_mp.height);
+
     // Make sure VFPool can allocate video frames with width and height.
     auto frame_layout =
-        UpdateVideoFramePoolFormat(format_fourcc, size, visible_rect);
-    if (!frame_layout) {
-      continue;
-    }
+        UpdateVideoFramePoolFormat(format_fourcc, adjusted_size, visible_rect);
+    if (frame_layout) {
+      if (frame_layout->coded_size() != adjusted_size) {
+        VLOGF(1) << "The size adjusted by VFPool is different from one "
+                 << "adjusted by a video driver";
+        continue;
+      }
 
-    // Next S_FMT with the size adjusted by VFPool.
-    gfx::Size adjusted_size(frame_layout->planes()[0].stride,
-                            frame_layout->coded_size().height());
-    base::Optional<struct v4l2_format> format =
-        SetFormatOnOutputQueue(format_fourcc, adjusted_size);
-    if (format) {
       num_output_planes_ = format->fmt.pix_mp.num_planes;
       return frame_layout;
     }
diff --git a/media/gpu/v4l2/v4l2_slice_video_decoder.h b/media/gpu/v4l2/v4l2_slice_video_decoder.h
index a552e4b1..51542386 100644
--- a/media/gpu/v4l2/v4l2_slice_video_decoder.h
+++ b/media/gpu/v4l2/v4l2_slice_video_decoder.h
@@ -94,12 +94,13 @@
     // The identifier for the decoder buffer.
     int32_t bitstream_id;
 
-    DecodeRequest(scoped_refptr<DecoderBuffer> buf, DecodeCB cb, int32_t id)
-        : buffer(std::move(buf)), decode_cb(std::move(cb)), bitstream_id(id) {}
+    DecodeRequest(scoped_refptr<DecoderBuffer> buf, DecodeCB cb, int32_t id);
 
     // Allow move, but not copy
-    DecodeRequest(DecodeRequest&&) = default;
-    DecodeRequest& operator=(DecodeRequest&&) = default;
+    DecodeRequest(DecodeRequest&&);
+    DecodeRequest& operator=(DecodeRequest&&);
+
+    ~DecodeRequest();
 
     DISALLOW_COPY_AND_ASSIGN(DecodeRequest);
   };
@@ -143,7 +144,7 @@
   // Call VIDIOC_S_FMT with |format_fourcc| and |size|. Returns v4l2_format
   // returned by VIDIOC_S_FMT on success, otherwise returns base::nullopt.
   // This should be called only from SetupOutputFormat().
-  base::Optional<struct v4l2_format> SetFormatOnOutputQueue(
+  base::Optional<struct v4l2_format> SetV4L2FormatOnOutputQueue(
       uint32_t format_fourcc,
       const gfx::Size& size);
   // Setup format for output queue. This function sets output format on output
diff --git a/media/gpu/vaapi/vaapi_video_decoder.cc b/media/gpu/vaapi/vaapi_video_decoder.cc
index 55ec03e7..c990f906 100644
--- a/media/gpu/vaapi/vaapi_video_decoder.cc
+++ b/media/gpu/vaapi/vaapi_video_decoder.cc
@@ -124,7 +124,6 @@
   return kMaxDecodeRequests;
 }
 
-// TODO(dstaessens): Handle re-initialization.
 void VaapiVideoDecoder::Initialize(const VideoDecoderConfig& config,
                                    bool low_delay,
                                    CdmContext* cdm_context,
@@ -155,8 +154,10 @@
     return;
   }
 
-  decoder_thread_task_runner_ = decoder_thread_.task_runner();
-  frame_pool_->set_parent_task_runner(decoder_thread_task_runner_);
+  if (!decoder_thread_task_runner_) {
+    decoder_thread_task_runner_ = decoder_thread_.task_runner();
+    frame_pool_->set_parent_task_runner(decoder_thread_task_runner_);
+  }
 
   decoder_thread_task_runner_->PostTask(
       FROM_HERE,
diff --git a/media/gpu/video_decode_accelerator_perf_tests.cc b/media/gpu/video_decode_accelerator_perf_tests.cc
index 12c424c7..0b1a6ff 100644
--- a/media/gpu/video_decode_accelerator_perf_tests.cc
+++ b/media/gpu/video_decode_accelerator_perf_tests.cc
@@ -321,8 +321,13 @@
     if (!g_env->ImportSupported())
       config.allocation_mode = AllocationMode::kAllocate;
 
-    return VideoPlayer::Create(video, std::move(frame_renderer),
-                               std::move(frame_processors), config);
+    auto video_player = VideoPlayer::Create(
+        video, std::move(frame_renderer), std::move(frame_processors), config);
+
+    // Make sure the event timeout is at least as long as the video's duration.
+    video_player->SetEventWaitTimeout(
+        std::max(kDefaultEventWaitTimeout, g_env->Video()->GetDuration()));
+    return video_player;
   }
 
   PerformanceEvaluator* performance_evaluator_;
diff --git a/media/gpu/video_decode_accelerator_tests.cc b/media/gpu/video_decode_accelerator_tests.cc
index 261ada7..2f5a830 100644
--- a/media/gpu/video_decode_accelerator_tests.cc
+++ b/media/gpu/video_decode_accelerator_tests.cc
@@ -86,8 +86,15 @@
     // Use the new VD-based video decoders if requested.
     config.use_vd = g_env->UseVD();
 
-    return VideoPlayer::Create(video, std::move(frame_renderer),
-                               std::move(frame_processors), config);
+    auto video_player = VideoPlayer::Create(
+        video, std::move(frame_renderer), std::move(frame_processors), config);
+
+    // Increase event timeout when outputting video frames.
+    if (g_env->IsFramesOutputEnabled()) {
+      video_player->SetEventWaitTimeout(std::max(
+          kDefaultEventWaitTimeout, g_env->Video()->GetDuration() * 10));
+    }
+    return video_player;
   }
 };
 
diff --git a/media/mojo/BUILD.gn b/media/mojo/BUILD.gn
index 740d816..4401902c 100644
--- a/media/mojo/BUILD.gn
+++ b/media/mojo/BUILD.gn
@@ -69,8 +69,8 @@
     "//media/mojo/clients",
     "//media/mojo/common",
     "//media/mojo/common:mojo_shared_buffer_video_frame",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:test_interfaces",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:test_interfaces",
     "//media/mojo/services",
   ]
 }
@@ -82,7 +82,7 @@
     "//media/learning/mojo:unit_tests",
     "//media/mojo/clients:unit_tests",
     "//media/mojo/common:unit_tests",
-    "//media/mojo/interfaces:unit_tests",
+    "//media/mojo/mojom:unit_tests",
     "//media/mojo/services:unit_tests",
     "//media/mojo/test:unit_tests",
   ]
diff --git a/media/mojo/clients/BUILD.gn b/media/mojo/clients/BUILD.gn
index e5d488f1..cc317fbc 100644
--- a/media/mojo/clients/BUILD.gn
+++ b/media/mojo/clients/BUILD.gn
@@ -67,7 +67,7 @@
     "//base",
     "//media",
     "//media/mojo:buildflags",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/system",
     "//services/service_manager/public/mojom",
@@ -112,7 +112,7 @@
     sources += [ "mojo_android_overlay_unittest.cc" ]
 
     deps += [
-      "//media/mojo/interfaces:test_interfaces",
+      "//media/mojo/mojom:test_interfaces",
       "//ui/gfx:test_support",
       "//ui/gl",
     ]
diff --git a/media/mojo/clients/mojo_android_overlay.h b/media/mojo/clients/mojo_android_overlay.h
index 27065a5..05aceb14 100644
--- a/media/mojo/clients/mojo_android_overlay.h
+++ b/media/mojo/clients/mojo_android_overlay.h
@@ -8,7 +8,7 @@
 #include "base/macros.h"
 #include "base/unguessable_token.h"
 #include "media/base/android/android_overlay.h"
-#include "media/mojo/interfaces/android_overlay.mojom.h"
+#include "media/mojo/mojom/android_overlay.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace media {
diff --git a/media/mojo/clients/mojo_audio_decoder.h b/media/mojo/clients/mojo_audio_decoder.h
index 5095e79..5e88c808 100644
--- a/media/mojo/clients/mojo_audio_decoder.h
+++ b/media/mojo/clients/mojo_audio_decoder.h
@@ -10,8 +10,8 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "media/base/audio_decoder.h"
-#include "media/mojo/interfaces/audio_decoder.mojom.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/audio_decoder.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
diff --git a/media/mojo/clients/mojo_audio_decoder_unittest.cc b/media/mojo/clients/mojo_audio_decoder_unittest.cc
index f3da287..2aa1fd3 100644
--- a/media/mojo/clients/mojo_audio_decoder_unittest.cc
+++ b/media/mojo/clients/mojo_audio_decoder_unittest.cc
@@ -20,7 +20,7 @@
 #include "media/base/test_helpers.h"
 #include "media/base/waiting.h"
 #include "media/mojo/clients/mojo_audio_decoder.h"
-#include "media/mojo/interfaces/audio_decoder.mojom.h"
+#include "media/mojo/mojom/audio_decoder.mojom.h"
 #include "media/mojo/services/mojo_audio_decoder_service.h"
 #include "media/mojo/services/mojo_cdm_service_context.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
diff --git a/media/mojo/clients/mojo_cdm.cc b/media/mojo/clients/mojo_cdm.cc
index fd843c07..da2a4e4 100644
--- a/media/mojo/clients/mojo_cdm.cc
+++ b/media/mojo/clients/mojo_cdm.cc
@@ -19,8 +19,8 @@
 #include "media/base/cdm_promise.h"
 #include "media/mojo/clients/mojo_decryptor.h"
 #include "media/mojo/common/media_type_converters.h"
-#include "media/mojo/interfaces/decryptor.mojom.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/decryptor.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 #include "services/service_manager/public/cpp/connect.h"
 #include "services/service_manager/public/mojom/interface_provider.mojom.h"
 #include "url/origin.h"
diff --git a/media/mojo/clients/mojo_cdm.h b/media/mojo/clients/mojo_cdm.h
index 9c097cb..a9f8fec 100644
--- a/media/mojo/clients/mojo_cdm.h
+++ b/media/mojo/clients/mojo_cdm.h
@@ -20,7 +20,7 @@
 #include "media/base/cdm_promise_adapter.h"
 #include "media/base/cdm_session_tracker.h"
 #include "media/base/content_decryption_module.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
diff --git a/media/mojo/clients/mojo_cdm_factory.cc b/media/mojo/clients/mojo_cdm_factory.cc
index d1103f5..93db446 100644
--- a/media/mojo/clients/mojo_cdm_factory.cc
+++ b/media/mojo/clients/mojo_cdm_factory.cc
@@ -13,7 +13,7 @@
 #include "media/cdm/aes_decryptor.h"
 #include "media/mojo/buildflags.h"
 #include "media/mojo/clients/mojo_cdm.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "url/origin.h"
 
diff --git a/media/mojo/clients/mojo_cdm_unittest.cc b/media/mojo/clients/mojo_cdm_unittest.cc
index 72348ac..5ad59778 100644
--- a/media/mojo/clients/mojo_cdm_unittest.cc
+++ b/media/mojo/clients/mojo_cdm_unittest.cc
@@ -17,7 +17,7 @@
 #include "media/base/mock_filters.h"
 #include "media/cdm/default_cdm_factory.h"
 #include "media/mojo/clients/mojo_cdm.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
 #include "media/mojo/services/mojo_cdm_service.h"
 #include "media/mojo/services/mojo_cdm_service_context.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
diff --git a/media/mojo/clients/mojo_decoder_factory.cc b/media/mojo/clients/mojo_decoder_factory.cc
index a435f3f..74869f03 100644
--- a/media/mojo/clients/mojo_decoder_factory.cc
+++ b/media/mojo/clients/mojo_decoder_factory.cc
@@ -13,8 +13,8 @@
 #include "media/mojo/buildflags.h"
 #include "media/mojo/clients/mojo_audio_decoder.h"
 #include "media/mojo/clients/mojo_video_decoder.h"
-#include "media/mojo/interfaces/audio_decoder.mojom.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
+#include "media/mojo/mojom/audio_decoder.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 
 namespace media {
diff --git a/media/mojo/clients/mojo_decryptor.cc b/media/mojo/clients/mojo_decryptor.cc
index 24eedcb..eb06e81 100644
--- a/media/mojo/clients/mojo_decryptor.cc
+++ b/media/mojo/clients/mojo_decryptor.cc
@@ -17,7 +17,7 @@
 #include "media/mojo/common/media_type_converters.h"
 #include "media/mojo/common/mojo_decoder_buffer_converter.h"
 #include "media/mojo/common/mojo_shared_buffer_video_frame.h"
-#include "media/mojo/interfaces/decryptor.mojom.h"
+#include "media/mojo/mojom/decryptor.mojom.h"
 #include "mojo/public/cpp/bindings/callback_helpers.h"
 #include "services/service_manager/public/cpp/connect.h"
 
diff --git a/media/mojo/clients/mojo_decryptor.h b/media/mojo/clients/mojo_decryptor.h
index 20da1d9e..a8cf62bd 100644
--- a/media/mojo/clients/mojo_decryptor.h
+++ b/media/mojo/clients/mojo_decryptor.h
@@ -12,7 +12,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "media/base/decryptor.h"
-#include "media/mojo/interfaces/decryptor.mojom.h"
+#include "media/mojo/mojom/decryptor.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace media {
diff --git a/media/mojo/clients/mojo_decryptor_unittest.cc b/media/mojo/clients/mojo_decryptor_unittest.cc
index 9e0c010..0980b11 100644
--- a/media/mojo/clients/mojo_decryptor_unittest.cc
+++ b/media/mojo/clients/mojo_decryptor_unittest.cc
@@ -18,7 +18,7 @@
 #include "media/base/video_frame.h"
 #include "media/mojo/clients/mojo_decryptor.h"
 #include "media/mojo/common/mojo_shared_buffer_video_frame.h"
-#include "media/mojo/interfaces/decryptor.mojom.h"
+#include "media/mojo/mojom/decryptor.mojom.h"
 #include "media/mojo/services/mojo_decryptor_service.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/media/mojo/clients/mojo_demuxer_stream_impl.h b/media/mojo/clients/mojo_demuxer_stream_impl.h
index c30325b..e25d9d8 100644
--- a/media/mojo/clients/mojo_demuxer_stream_impl.h
+++ b/media/mojo/clients/mojo_demuxer_stream_impl.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "media/base/demuxer_stream.h"
-#include "media/mojo/interfaces/demuxer_stream.mojom.h"
+#include "media/mojo/mojom/demuxer_stream.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace media {
diff --git a/media/mojo/clients/mojo_media_log_service.h b/media/mojo/clients/mojo_media_log_service.h
index 80d2a3a..1f107b73 100644
--- a/media/mojo/clients/mojo_media_log_service.h
+++ b/media/mojo/clients/mojo_media_log_service.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "media/base/media_log.h"
-#include "media/mojo/interfaces/media_log.mojom.h"
+#include "media/mojo/mojom/media_log.mojom.h"
 
 namespace media {
 
diff --git a/media/mojo/clients/mojo_renderer.h b/media/mojo/clients/mojo_renderer.h
index 99af315..44e82fd 100644
--- a/media/mojo/clients/mojo_renderer.h
+++ b/media/mojo/clients/mojo_renderer.h
@@ -17,7 +17,7 @@
 #include "media/base/demuxer_stream.h"
 #include "media/base/renderer.h"
 #include "media/base/time_delta_interpolator.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 
 namespace base {
diff --git a/media/mojo/clients/mojo_renderer_factory.cc b/media/mojo/clients/mojo_renderer_factory.cc
index f0e95159bf..74b7ff9 100644
--- a/media/mojo/clients/mojo_renderer_factory.cc
+++ b/media/mojo/clients/mojo_renderer_factory.cc
@@ -9,7 +9,7 @@
 #include "base/single_thread_task_runner.h"
 #include "build/build_config.h"
 #include "media/mojo/clients/mojo_renderer.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "media/renderers/decrypting_renderer.h"
 #include "media/renderers/video_overlay_factory.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
diff --git a/media/mojo/clients/mojo_renderer_factory.h b/media/mojo/clients/mojo_renderer_factory.h
index f4f0855..6c4b145c 100644
--- a/media/mojo/clients/mojo_renderer_factory.h
+++ b/media/mojo/clients/mojo_renderer_factory.h
@@ -11,8 +11,8 @@
 #include "base/macros.h"
 #include "build/build_config.h"
 #include "media/base/renderer_factory.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
 
 namespace service_manager {
 class InterfaceProvider;
diff --git a/media/mojo/clients/mojo_renderer_unittest.cc b/media/mojo/clients/mojo_renderer_unittest.cc
index d4f1b515..b947a13 100644
--- a/media/mojo/clients/mojo_renderer_unittest.cc
+++ b/media/mojo/clients/mojo_renderer_unittest.cc
@@ -20,8 +20,8 @@
 #include "media/cdm/default_cdm_factory.h"
 #include "media/mojo/clients/mojo_renderer.h"
 #include "media/mojo/common/media_type_converters.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
 #include "media/mojo/services/mojo_cdm_service.h"
 #include "media/mojo/services/mojo_cdm_service_context.h"
 #include "media/mojo/services/mojo_renderer_service.h"
diff --git a/media/mojo/clients/mojo_video_decoder.cc b/media/mojo/clients/mojo_video_decoder.cc
index 1d615b6..15c76d59 100644
--- a/media/mojo/clients/mojo_video_decoder.cc
+++ b/media/mojo/clients/mojo_video_decoder.cc
@@ -24,7 +24,7 @@
 #include "media/base/video_frame.h"
 #include "media/mojo/common/media_type_converters.h"
 #include "media/mojo/common/mojo_decoder_buffer_converter.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "media/video/gpu_video_accelerator_factories.h"
 #include "media/video/video_decode_accelerator.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
diff --git a/media/mojo/clients/mojo_video_decoder.h b/media/mojo/clients/mojo_video_decoder.h
index 52bc2b8..6d60605 100644
--- a/media/mojo/clients/mojo_video_decoder.h
+++ b/media/mojo/clients/mojo_video_decoder.h
@@ -12,7 +12,7 @@
 #include "media/base/video_decoder.h"
 #include "media/base/video_frame.h"
 #include "media/mojo/clients/mojo_media_log_service.h"
-#include "media/mojo/interfaces/video_decoder.mojom.h"
+#include "media/mojo/mojom/video_decoder.mojom.h"
 #include "media/video/video_decode_accelerator.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "ui/gfx/color_space.h"
diff --git a/media/mojo/clients/mojo_video_encode_accelerator.h b/media/mojo/clients/mojo_video_encode_accelerator.h
index 6b62093..5730c53 100644
--- a/media/mojo/clients/mojo_video_encode_accelerator.h
+++ b/media/mojo/clients/mojo_video_encode_accelerator.h
@@ -11,7 +11,7 @@
 
 #include "base/sequence_checker.h"
 #include "gpu/config/gpu_info.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/video/video_encode_accelerator.h"
 
 namespace media {
diff --git a/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc b/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc
index de1dbab..43abea79 100644
--- a/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc
+++ b/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc
@@ -8,7 +8,7 @@
 #include "base/test/scoped_task_environment.h"
 #include "gpu/config/gpu_info.h"
 #include "media/mojo/clients/mojo_video_encode_accelerator.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/video/video_encode_accelerator.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/media/mojo/common/BUILD.gn b/media/mojo/common/BUILD.gn
index 5a69dc0..e3ea90c 100644
--- a/media/mojo/common/BUILD.gn
+++ b/media/mojo/common/BUILD.gn
@@ -21,7 +21,7 @@
     "//base",
     "//gpu/ipc/common:mojom_traits",
     "//media",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/system",
     "//ui/gfx/geometry",
@@ -29,7 +29,7 @@
   ]
 }
 
-# This is a separate target so that //media/mojo/interfaces can depend on it
+# This is a separate target so that //media/mojo/mojom can depend on it
 # without creating a cycle.
 source_set("mojo_shared_buffer_video_frame") {
   sources = [
diff --git a/media/mojo/common/OWNERS b/media/mojo/common/OWNERS
index 2de9f87..0c3dcdd 100644
--- a/media/mojo/common/OWNERS
+++ b/media/mojo/common/OWNERS
@@ -1,4 +1,4 @@
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *_mojom_traits*.*=set noparent
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
 per-file *_type_converter*.*=set noparent
 per-file *_type_converter*.*=file://ipc/SECURITY_OWNERS
diff --git a/media/mojo/common/media_type_converters.h b/media/mojo/common/media_type_converters.h
index 7d51275..db71a26 100644
--- a/media/mojo/common/media_type_converters.h
+++ b/media/mojo/common/media_type_converters.h
@@ -8,8 +8,8 @@
 #include <memory>
 
 #include "base/memory/ref_counted.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "mojo/public/cpp/bindings/type_converter.h"
 
 namespace media {
diff --git a/media/mojo/common/mojo_decoder_buffer_converter.h b/media/mojo/common/mojo_decoder_buffer_converter.h
index 2fb6bd3..9f780d8 100644
--- a/media/mojo/common/mojo_decoder_buffer_converter.h
+++ b/media/mojo/common/mojo_decoder_buffer_converter.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "media/base/demuxer_stream.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "mojo/public/cpp/system/simple_watcher.h"
 
diff --git a/media/mojo/interfaces/typemaps.gni b/media/mojo/interfaces/typemaps.gni
deleted file mode 100644
index d0c6945..0000000
--- a/media/mojo/interfaces/typemaps.gni
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2016 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.
-
-typemaps = [
-  "//media/mojo/interfaces/audio_decoder_config.typemap",
-  "//media/mojo/interfaces/audio_parameters.typemap",
-  "//media/mojo/interfaces/cdm_key_information.typemap",
-  "//media/mojo/interfaces/cdm_proxy.typemap",
-  "//media/mojo/interfaces/content_decryption_module.typemap",
-  "//media/mojo/interfaces/decryptor.typemap",
-  "//media/mojo/interfaces/demuxer_stream.typemap",
-  "//media/mojo/interfaces/encryption_scheme.typemap",
-  "//media/mojo/interfaces/hdr_metadata.typemap",
-  "//media/mojo/interfaces/media_drm_storage.typemap",
-  "//media/mojo/interfaces/media_types.typemap",
-  "//media/mojo/interfaces/pipeline_status.typemap",
-  "//media/mojo/interfaces/video_color_space.typemap",
-  "//media/mojo/interfaces/video_decoder.typemap",
-  "//media/mojo/interfaces/video_decoder_config.typemap",
-  "//media/mojo/interfaces/video_encode_accelerator.typemap",
-  "//media/mojo/interfaces/video_frame.typemap",
-]
diff --git a/media/mojo/interfaces/BUILD.gn b/media/mojo/mojom/BUILD.gn
similarity index 92%
rename from media/mojo/interfaces/BUILD.gn
rename to media/mojo/mojom/BUILD.gn
index 1df7a14..4fe1280 100644
--- a/media/mojo/interfaces/BUILD.gn
+++ b/media/mojo/mojom/BUILD.gn
@@ -5,7 +5,7 @@
 import("//media/media_options.gni")
 import("//mojo/public/tools/bindings/mojom.gni")
 
-mojom("interfaces") {
+mojom("mojom") {
   # TODO(crbug.com/676224): Conditionally add source files in this list when we
   # support EnabledIf attribute in mojom files.
   sources = [
@@ -114,7 +114,7 @@
     "traits_test_service.mojom",
   ]
   public_deps = [
-    ":interfaces",
+    ":mojom",
   ]
 }
 
@@ -122,11 +122,11 @@
   testonly = true
 
   sources = [
-    "audio_decoder_config_struct_traits_unittest.cc",
+    "audio_decoder_config_mojom_traits_unittest.cc",
     "cdm_key_information_mojom_traits_unittest.cc",
-    "encryption_scheme_struct_traits_unittest.cc",
-    "video_decoder_config_struct_traits_unittest.cc",
-    "video_frame_struct_traits_unittest.cc",
+    "encryption_scheme_mojom_traits_unittest.cc",
+    "video_decoder_config_mojom_traits_unittest.cc",
+    "video_frame_mojom_traits_unittest.cc",
   ]
 
   deps = [
diff --git a/media/mojo/interfaces/OWNERS b/media/mojo/mojom/OWNERS
similarity index 71%
rename from media/mojo/interfaces/OWNERS
rename to media/mojo/mojom/OWNERS
index 8e9e507b..ae29a36aa 100644
--- a/media/mojo/interfaces/OWNERS
+++ b/media/mojo/mojom/OWNERS
@@ -2,7 +2,5 @@
 per-file *.mojom=file://ipc/SECURITY_OWNERS
 per-file *_mojom_traits*.*=set noparent
 per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
-per-file *_struct_traits*.*=set noparent
-per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
 per-file *.typemap=set noparent
 per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/media/mojo/interfaces/android_overlay.mojom b/media/mojo/mojom/android_overlay.mojom
similarity index 98%
rename from media/mojo/interfaces/android_overlay.mojom
rename to media/mojo/mojom/android_overlay.mojom
index 7b2fb9f9..7e93634 100644
--- a/media/mojo/interfaces/android_overlay.mojom
+++ b/media/mojo/mojom/android_overlay.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 
diff --git a/media/mojo/interfaces/audio_data_pipe.mojom b/media/mojo/mojom/audio_data_pipe.mojom
similarity index 100%
rename from media/mojo/interfaces/audio_data_pipe.mojom
rename to media/mojo/mojom/audio_data_pipe.mojom
diff --git a/media/mojo/interfaces/audio_decoder.mojom b/media/mojo/mojom/audio_decoder.mojom
similarity index 97%
rename from media/mojo/interfaces/audio_decoder.mojom
rename to media/mojo/mojom/audio_decoder.mojom
index 6836240..204bf4e1 100644
--- a/media/mojo/interfaces/audio_decoder.mojom
+++ b/media/mojo/mojom/audio_decoder.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 interface AudioDecoder {
   // Initialize the decoder. This must be called before any other method.
diff --git a/media/mojo/interfaces/audio_decoder_config.typemap b/media/mojo/mojom/audio_decoder_config.typemap
similarity index 70%
rename from media/mojo/interfaces/audio_decoder_config.typemap
rename to media/mojo/mojom/audio_decoder_config.typemap
index d268ddc..99d2b85 100644
--- a/media/mojo/interfaces/audio_decoder_config.typemap
+++ b/media/mojo/mojom/audio_decoder_config.typemap
@@ -2,15 +2,15 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 
 public_headers = [ "//media/base/audio_decoder_config.h" ]
 
 traits_headers =
-    [ "//media/mojo/interfaces/audio_decoder_config_struct_traits.h" ]
+    [ "//media/mojo/mojom/audio_decoder_config_mojom_traits.h" ]
 
 sources = [
-  "//media/mojo/interfaces/audio_decoder_config_struct_traits.cc",
+  "//media/mojo/mojom/audio_decoder_config_mojom_traits.cc",
 ]
 
 public_deps = [
diff --git a/media/mojo/interfaces/audio_decoder_config_struct_traits.cc b/media/mojo/mojom/audio_decoder_config_mojom_traits.cc
similarity index 94%
rename from media/mojo/interfaces/audio_decoder_config_struct_traits.cc
rename to media/mojo/mojom/audio_decoder_config_mojom_traits.cc
index 844597df..0aaae3d 100644
--- a/media/mojo/interfaces/audio_decoder_config_struct_traits.cc
+++ b/media/mojo/mojom/audio_decoder_config_mojom_traits.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 "media/mojo/interfaces/audio_decoder_config_struct_traits.h"
+#include "media/mojo/mojom/audio_decoder_config_mojom_traits.h"
 
 #include "mojo/public/cpp/base/time_mojom_traits.h"
 
diff --git a/media/mojo/interfaces/audio_decoder_config_struct_traits.h b/media/mojo/mojom/audio_decoder_config_mojom_traits.h
similarity index 81%
rename from media/mojo/interfaces/audio_decoder_config_struct_traits.h
rename to media/mojo/mojom/audio_decoder_config_mojom_traits.h
index e265ba0..a786d24 100644
--- a/media/mojo/interfaces/audio_decoder_config_struct_traits.h
+++ b/media/mojo/mojom/audio_decoder_config_mojom_traits.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_AUDIO_DECODER_CONFIG_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_AUDIO_DECODER_CONFIG_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_AUDIO_DECODER_CONFIG_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_AUDIO_DECODER_CONFIG_MOJOM_TRAITS_H_
 
 #include "media/base/audio_decoder_config.h"
 #include "media/base/ipc/media_param_traits.h"
-#include "media/mojo/interfaces/encryption_scheme_struct_traits.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/encryption_scheme_mojom_traits.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace mojo {
 
@@ -57,4 +57,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_AUDIO_DECODER_CONFIG_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_AUDIO_DECODER_CONFIG_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/audio_decoder_config_struct_traits_unittest.cc b/media/mojo/mojom/audio_decoder_config_mojom_traits_unittest.cc
similarity index 96%
rename from media/mojo/interfaces/audio_decoder_config_struct_traits_unittest.cc
rename to media/mojo/mojom/audio_decoder_config_mojom_traits_unittest.cc
index 6bf0f8e..f04e0cb3 100644
--- a/media/mojo/interfaces/audio_decoder_config_struct_traits_unittest.cc
+++ b/media/mojo/mojom/audio_decoder_config_mojom_traits_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 "media/mojo/interfaces/audio_decoder_config_struct_traits.h"
+#include "media/mojo/mojom/audio_decoder_config_mojom_traits.h"
 
 #include <utility>
 
diff --git a/media/mojo/interfaces/audio_input_stream.mojom b/media/mojo/mojom/audio_input_stream.mojom
similarity index 93%
rename from media/mojo/interfaces/audio_input_stream.mojom
rename to media/mojo/mojom/audio_input_stream.mojom
index fd5df22c..f77ac9dd 100644
--- a/media/mojo/interfaces/audio_input_stream.mojom
+++ b/media/mojo/mojom/audio_input_stream.mojom
@@ -4,8 +4,8 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/audio_parameters.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 // An interface for controlling an audio input stream.
 // On error, the message pipe is closed.
diff --git a/media/mojo/interfaces/audio_logging.mojom b/media/mojo/mojom/audio_logging.mojom
similarity index 97%
rename from media/mojo/interfaces/audio_logging.mojom
rename to media/mojo/mojom/audio_logging.mojom
index 777fd31..cb1983a3 100644
--- a/media/mojo/interfaces/audio_logging.mojom
+++ b/media/mojo/mojom/audio_logging.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/audio_parameters.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
 
 // This interface is implemented by the browser process to log state information
 // about an active audio component.
diff --git a/media/mojo/interfaces/audio_output_stream.mojom b/media/mojo/mojom/audio_output_stream.mojom
similarity index 95%
rename from media/mojo/interfaces/audio_output_stream.mojom
rename to media/mojo/mojom/audio_output_stream.mojom
index 1253a92..24f3934 100644
--- a/media/mojo/interfaces/audio_output_stream.mojom
+++ b/media/mojo/mojom/audio_output_stream.mojom
@@ -5,9 +5,9 @@
 module media.mojom;
 
 import "mojo/public/mojom/base/unguessable_token.mojom";
-import "media/mojo/interfaces/audio_data_pipe.mojom";
-import "media/mojo/interfaces/audio_parameters.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/audio_data_pipe.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 // An interface for controlling an audio output stream.
 // To close the stream, just close the message pipe.
diff --git a/media/mojo/interfaces/audio_parameters.mojom b/media/mojo/mojom/audio_parameters.mojom
similarity index 100%
rename from media/mojo/interfaces/audio_parameters.mojom
rename to media/mojo/mojom/audio_parameters.mojom
diff --git a/media/mojo/interfaces/audio_parameters.typemap b/media/mojo/mojom/audio_parameters.typemap
similarity index 87%
rename from media/mojo/interfaces/audio_parameters.typemap
rename to media/mojo/mojom/audio_parameters.typemap
index c87c524..dbcfeb73 100644
--- a/media/mojo/interfaces/audio_parameters.typemap
+++ b/media/mojo/mojom/audio_parameters.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/audio_parameters.mojom"
+mojom = "//media/mojo/mojom/audio_parameters.mojom"
 public_headers = [ "//media/base/audio_parameters.h" ]
 traits_headers = [ "//media/base/ipc/media_param_traits.h" ]
 deps = [
diff --git a/media/mojo/interfaces/cast_application_media_info_manager.mojom b/media/mojo/mojom/cast_application_media_info_manager.mojom
similarity index 100%
rename from media/mojo/interfaces/cast_application_media_info_manager.mojom
rename to media/mojo/mojom/cast_application_media_info_manager.mojom
diff --git a/media/mojo/interfaces/cdm_key_information.typemap b/media/mojo/mojom/cdm_key_information.typemap
similarity index 69%
rename from media/mojo/interfaces/cdm_key_information.typemap
rename to media/mojo/mojom/cdm_key_information.typemap
index 89c2930..9b28f0f1 100644
--- a/media/mojo/interfaces/cdm_key_information.typemap
+++ b/media/mojo/mojom/cdm_key_information.typemap
@@ -2,15 +2,15 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/content_decryption_module.mojom"
+mojom = "//media/mojo/mojom/content_decryption_module.mojom"
 
 public_headers = [ "//media/base/cdm_key_information.h" ]
 
 traits_headers =
-    [ "//media/mojo/interfaces/cdm_key_information_mojom_traits.h" ]
+    [ "//media/mojo/mojom/cdm_key_information_mojom_traits.h" ]
 
 sources = [
-  "//media/mojo/interfaces/cdm_key_information_mojom_traits.cc",
+  "//media/mojo/mojom/cdm_key_information_mojom_traits.cc",
 ]
 
 public_deps = [
diff --git a/media/mojo/interfaces/cdm_key_information_mojom_traits.cc b/media/mojo/mojom/cdm_key_information_mojom_traits.cc
similarity index 97%
rename from media/mojo/interfaces/cdm_key_information_mojom_traits.cc
rename to media/mojo/mojom/cdm_key_information_mojom_traits.cc
index 7a3ce04..94a09fe 100644
--- a/media/mojo/interfaces/cdm_key_information_mojom_traits.cc
+++ b/media/mojo/mojom/cdm_key_information_mojom_traits.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 "media/mojo/interfaces/cdm_key_information_mojom_traits.h"
+#include "media/mojo/mojom/cdm_key_information_mojom_traits.h"
 
 #include "base/logging.h"
 
diff --git a/media/mojo/interfaces/cdm_key_information_mojom_traits.h b/media/mojo/mojom/cdm_key_information_mojom_traits.h
similarity index 82%
rename from media/mojo/interfaces/cdm_key_information_mojom_traits.h
rename to media/mojo/mojom/cdm_key_information_mojom_traits.h
index eb04722..f4a48fa 100644
--- a/media/mojo/interfaces/cdm_key_information_mojom_traits.h
+++ b/media/mojo/mojom/cdm_key_information_mojom_traits.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_CDM_KEY_INFORMATION_MOJOM_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_CDM_KEY_INFORMATION_MOJOM_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_CDM_KEY_INFORMATION_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_CDM_KEY_INFORMATION_MOJOM_TRAITS_H_
 
 #include "media/base/cdm_key_information.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
 
 namespace mojo {
 
@@ -44,4 +44,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_CDM_KEY_INFORMATION_MOJOM_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_CDM_KEY_INFORMATION_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/cdm_key_information_mojom_traits_unittest.cc b/media/mojo/mojom/cdm_key_information_mojom_traits_unittest.cc
similarity index 92%
rename from media/mojo/interfaces/cdm_key_information_mojom_traits_unittest.cc
rename to media/mojo/mojom/cdm_key_information_mojom_traits_unittest.cc
index 916b4c7..5103681 100644
--- a/media/mojo/interfaces/cdm_key_information_mojom_traits_unittest.cc
+++ b/media/mojo/mojom/cdm_key_information_mojom_traits_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 "media/mojo/interfaces/cdm_key_information_mojom_traits.h"
+#include "media/mojo/mojom/cdm_key_information_mojom_traits.h"
 
 #include "media/base/cdm_key_information.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/media/mojo/interfaces/cdm_proxy.mojom b/media/mojo/mojom/cdm_proxy.mojom
similarity index 100%
rename from media/mojo/interfaces/cdm_proxy.mojom
rename to media/mojo/mojom/cdm_proxy.mojom
diff --git a/media/mojo/interfaces/cdm_proxy.typemap b/media/mojo/mojom/cdm_proxy.typemap
similarity index 91%
rename from media/mojo/interfaces/cdm_proxy.typemap
rename to media/mojo/mojom/cdm_proxy.typemap
index 9b031100..07219b9 100644
--- a/media/mojo/interfaces/cdm_proxy.typemap
+++ b/media/mojo/mojom/cdm_proxy.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/cdm_proxy.mojom"
+mojom = "//media/mojo/mojom/cdm_proxy.mojom"
 
 public_headers = [ "//media/cdm/cdm_proxy.h" ]
 
diff --git a/media/mojo/interfaces/cdm_service.mojom b/media/mojo/mojom/cdm_service.mojom
similarity index 96%
rename from media/mojo/interfaces/cdm_service.mojom
rename to media/mojo/mojom/cdm_service.mojom
index 8067a56..5c631ab 100644
--- a/media/mojo/interfaces/cdm_service.mojom
+++ b/media/mojo/mojom/cdm_service.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/content_decryption_module.mojom";
+import "media/mojo/mojom/content_decryption_module.mojom";
 import "mojo/public/mojom/base/file_path.mojom";
 import "services/service_manager/public/mojom/interface_provider.mojom";
 
diff --git a/media/mojo/interfaces/cdm_storage.mojom b/media/mojo/mojom/cdm_storage.mojom
similarity index 100%
rename from media/mojo/interfaces/cdm_storage.mojom
rename to media/mojo/mojom/cdm_storage.mojom
diff --git a/media/mojo/interfaces/constants.mojom b/media/mojo/mojom/constants.mojom
similarity index 100%
rename from media/mojo/interfaces/constants.mojom
rename to media/mojo/mojom/constants.mojom
diff --git a/media/mojo/interfaces/content_decryption_module.mojom b/media/mojo/mojom/content_decryption_module.mojom
similarity index 98%
rename from media/mojo/interfaces/content_decryption_module.mojom
rename to media/mojo/mojom/content_decryption_module.mojom
index 61994ad3..925255e 100644
--- a/media/mojo/interfaces/content_decryption_module.mojom
+++ b/media/mojo/mojom/content_decryption_module.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/decryptor.mojom";
+import "media/mojo/mojom/decryptor.mojom";
 import "url/mojom/origin.mojom";
 import "url/mojom/url.mojom";
 
diff --git a/media/mojo/interfaces/content_decryption_module.typemap b/media/mojo/mojom/content_decryption_module.typemap
similarity index 92%
rename from media/mojo/interfaces/content_decryption_module.typemap
rename to media/mojo/mojom/content_decryption_module.typemap
index 45160097..6aa1c2e 100644
--- a/media/mojo/interfaces/content_decryption_module.typemap
+++ b/media/mojo/mojom/content_decryption_module.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/content_decryption_module.mojom"
+mojom = "//media/mojo/mojom/content_decryption_module.mojom"
 
 public_headers = [
   "//media/base/cdm_config.h",
diff --git a/media/mojo/interfaces/decryptor.mojom b/media/mojo/mojom/decryptor.mojom
similarity index 98%
rename from media/mojo/interfaces/decryptor.mojom
rename to media/mojo/mojom/decryptor.mojom
index 041ca55d..eec63fa 100644
--- a/media/mojo/interfaces/decryptor.mojom
+++ b/media/mojo/mojom/decryptor.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 // Interface for decrypting (and decoding) encrypted streams.
 // See media/base/decryptor.h for details.
diff --git a/media/mojo/interfaces/decryptor.typemap b/media/mojo/mojom/decryptor.typemap
similarity index 90%
rename from media/mojo/interfaces/decryptor.typemap
rename to media/mojo/mojom/decryptor.typemap
index 0d2977f..276475b 100644
--- a/media/mojo/interfaces/decryptor.typemap
+++ b/media/mojo/mojom/decryptor.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/decryptor.mojom"
+mojom = "//media/mojo/mojom/decryptor.mojom"
 
 public_headers = [ "//media/base/decryptor.h" ]
 
diff --git a/media/mojo/interfaces/demuxer_stream.mojom b/media/mojo/mojom/demuxer_stream.mojom
similarity index 97%
rename from media/mojo/interfaces/demuxer_stream.mojom
rename to media/mojo/mojom/demuxer_stream.mojom
index 3433ab3..59db5ea 100644
--- a/media/mojo/interfaces/demuxer_stream.mojom
+++ b/media/mojo/mojom/demuxer_stream.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 // DemuxerStream is modeled after media::DemuxerStream using mojo in order to
 // enable proxying between a media::Pipeline and media::Renderer living in two
diff --git a/media/mojo/interfaces/demuxer_stream.typemap b/media/mojo/mojom/demuxer_stream.typemap
similarity index 89%
rename from media/mojo/interfaces/demuxer_stream.typemap
rename to media/mojo/mojom/demuxer_stream.typemap
index 10cc17d..34345463 100644
--- a/media/mojo/interfaces/demuxer_stream.typemap
+++ b/media/mojo/mojom/demuxer_stream.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/demuxer_stream.mojom"
+mojom = "//media/mojo/mojom/demuxer_stream.mojom"
 
 public_headers = [ "//media/base/demuxer_stream.h" ]
 
diff --git a/media/mojo/interfaces/display_media_information.mojom b/media/mojo/mojom/display_media_information.mojom
similarity index 100%
rename from media/mojo/interfaces/display_media_information.mojom
rename to media/mojo/mojom/display_media_information.mojom
diff --git a/media/mojo/interfaces/encryption_scheme.typemap b/media/mojo/mojom/encryption_scheme.typemap
similarity index 72%
rename from media/mojo/interfaces/encryption_scheme.typemap
rename to media/mojo/mojom/encryption_scheme.typemap
index 5a77e92..6eed5f1 100644
--- a/media/mojo/interfaces/encryption_scheme.typemap
+++ b/media/mojo/mojom/encryption_scheme.typemap
@@ -2,17 +2,17 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 
 public_headers = [
   "//media/base/encryption_scheme.h",
   "//media/base/encryption_pattern.h",
 ]
 
-traits_headers = [ "//media/mojo/interfaces/encryption_scheme_struct_traits.h" ]
+traits_headers = [ "//media/mojo/mojom/encryption_scheme_mojom_traits.h" ]
 
 sources = [
-  "//media/mojo/interfaces/encryption_scheme_struct_traits.cc",
+  "//media/mojo/mojom/encryption_scheme_mojom_traits.cc",
 ]
 
 public_deps = [
diff --git a/media/mojo/interfaces/encryption_scheme_struct_traits.cc b/media/mojo/mojom/encryption_scheme_mojom_traits.cc
similarity index 93%
rename from media/mojo/interfaces/encryption_scheme_struct_traits.cc
rename to media/mojo/mojom/encryption_scheme_mojom_traits.cc
index fb27d49..a379269 100644
--- a/media/mojo/interfaces/encryption_scheme_struct_traits.cc
+++ b/media/mojo/mojom/encryption_scheme_mojom_traits.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 "media/mojo/interfaces/encryption_scheme_struct_traits.h"
+#include "media/mojo/mojom/encryption_scheme_mojom_traits.h"
 
 namespace mojo {
 
diff --git a/media/mojo/interfaces/encryption_scheme_struct_traits.h b/media/mojo/mojom/encryption_scheme_mojom_traits.h
similarity index 83%
rename from media/mojo/interfaces/encryption_scheme_struct_traits.h
rename to media/mojo/mojom/encryption_scheme_mojom_traits.h
index 58de9352..c5166e5 100644
--- a/media/mojo/interfaces/encryption_scheme_struct_traits.h
+++ b/media/mojo/mojom/encryption_scheme_mojom_traits.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_ENCRYPTION_SCHEME_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_ENCRYPTION_SCHEME_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_ENCRYPTION_SCHEME_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_ENCRYPTION_SCHEME_MOJOM_TRAITS_H_
 
 #include "media/base/encryption_pattern.h"
 #include "media/base/encryption_scheme.h"
 #include "media/base/ipc/media_param_traits.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace mojo {
 
@@ -46,4 +46,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_ENCRYPTION_SCHEME_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_ENCRYPTION_SCHEME_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/encryption_scheme_struct_traits_unittest.cc b/media/mojo/mojom/encryption_scheme_mojom_traits_unittest.cc
similarity index 92%
rename from media/mojo/interfaces/encryption_scheme_struct_traits_unittest.cc
rename to media/mojo/mojom/encryption_scheme_mojom_traits_unittest.cc
index 7d3e649a..99cce07 100644
--- a/media/mojo/interfaces/encryption_scheme_struct_traits_unittest.cc
+++ b/media/mojo/mojom/encryption_scheme_mojom_traits_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 "media/mojo/interfaces/encryption_scheme_struct_traits.h"
+#include "media/mojo/mojom/encryption_scheme_mojom_traits.h"
 
 #include <utility>
 
diff --git a/media/mojo/interfaces/hdr_metadata.typemap b/media/mojo/mojom/hdr_metadata.typemap
similarity index 72%
rename from media/mojo/interfaces/hdr_metadata.typemap
rename to media/mojo/mojom/hdr_metadata.typemap
index 6557c4b7..1467d15 100644
--- a/media/mojo/interfaces/hdr_metadata.typemap
+++ b/media/mojo/mojom/hdr_metadata.typemap
@@ -2,9 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 public_headers = [ "//media/base/hdr_metadata.h" ]
-traits_headers = [ "//media/mojo/interfaces/hdr_metadata_struct_traits.h" ]
+traits_headers = [ "//media/mojo/mojom/hdr_metadata_mojom_traits.h" ]
 type_mappings = [
   "media.mojom.MasteringMetadata=media::MasteringMetadata",
   "media.mojom.HDRMetadata=media::HDRMetadata",
diff --git a/media/mojo/interfaces/hdr_metadata_struct_traits.h b/media/mojo/mojom/hdr_metadata_mojom_traits.h
similarity index 90%
rename from media/mojo/interfaces/hdr_metadata_struct_traits.h
rename to media/mojo/mojom/hdr_metadata_mojom_traits.h
index 6ca3810e..8021460 100644
--- a/media/mojo/interfaces/hdr_metadata_struct_traits.h
+++ b/media/mojo/mojom/hdr_metadata_mojom_traits.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_HDR_METADATA_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_HDR_METADATA_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_HDR_METADATA_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_HDR_METADATA_MOJOM_TRAITS_H_
 
 #include "media/base/hdr_metadata.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace mojo {
 
@@ -75,4 +75,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_HDR_METADATA_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_HDR_METADATA_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/interface_factory.mojom b/media/mojo/mojom/interface_factory.mojom
similarity index 89%
rename from media/mojo/interfaces/interface_factory.mojom
rename to media/mojo/mojom/interface_factory.mojom
index 38b42f10..c9bdabe 100644
--- a/media/mojo/interfaces/interface_factory.mojom
+++ b/media/mojo/mojom/interface_factory.mojom
@@ -4,13 +4,13 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/audio_decoder.mojom";
-import "media/mojo/interfaces/cdm_proxy.mojom";
-import "media/mojo/interfaces/decryptor.mojom";
-import "media/mojo/interfaces/content_decryption_module.mojom";
-import "media/mojo/interfaces/renderer.mojom";
-import "media/mojo/interfaces/renderer_extensions.mojom";
-import "media/mojo/interfaces/video_decoder.mojom";
+import "media/mojo/mojom/audio_decoder.mojom";
+import "media/mojo/mojom/cdm_proxy.mojom";
+import "media/mojo/mojom/decryptor.mojom";
+import "media/mojo/mojom/content_decryption_module.mojom";
+import "media/mojo/mojom/renderer.mojom";
+import "media/mojo/mojom/renderer_extensions.mojom";
+import "media/mojo/mojom/video_decoder.mojom";
 import "mojo/public/mojom/base/token.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 
diff --git a/media/mojo/interfaces/key_system_support.mojom b/media/mojo/mojom/key_system_support.mojom
similarity index 93%
rename from media/mojo/interfaces/key_system_support.mojom
rename to media/mojo/mojom/key_system_support.mojom
index bf40634..99a807d 100644
--- a/media/mojo/interfaces/key_system_support.mojom
+++ b/media/mojo/mojom/key_system_support.mojom
@@ -4,8 +4,8 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/content_decryption_module.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/content_decryption_module.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 // TODO(xhwang): Use "set" instead of "array" if supported by mojom.
 // TODO(crbug.com/796725) Find a way to include profiles and levels for
diff --git a/media/mojo/interfaces/media_drm_storage.mojom b/media/mojo/mojom/media_drm_storage.mojom
similarity index 100%
rename from media/mojo/interfaces/media_drm_storage.mojom
rename to media/mojo/mojom/media_drm_storage.mojom
diff --git a/media/mojo/interfaces/media_drm_storage.typemap b/media/mojo/mojom/media_drm_storage.typemap
similarity index 87%
rename from media/mojo/interfaces/media_drm_storage.typemap
rename to media/mojo/mojom/media_drm_storage.typemap
index e47e2e71..27d60603 100644
--- a/media/mojo/interfaces/media_drm_storage.typemap
+++ b/media/mojo/mojom/media_drm_storage.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_drm_storage.mojom"
+mojom = "//media/mojo/mojom/media_drm_storage.mojom"
 
 os_whitelist = [ "android" ]
 
diff --git a/media/mojo/interfaces/media_log.mojom b/media/mojo/mojom/media_log.mojom
similarity index 82%
rename from media/mojo/interfaces/media_log.mojom
rename to media/mojo/mojom/media_log.mojom
index 05f3b64..20060936 100644
--- a/media/mojo/interfaces/media_log.mojom
+++ b/media/mojo/mojom/media_log.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 interface MediaLog {
   AddEvent(MediaLogEvent event);
diff --git a/media/mojo/interfaces/media_metrics_provider.mojom b/media/mojo/mojom/media_metrics_provider.mojom
similarity index 92%
rename from media/mojo/interfaces/media_metrics_provider.mojom
rename to media/mojo/mojom/media_metrics_provider.mojom
index 4cac429..93e6ecc 100644
--- a/media/mojo/interfaces/media_metrics_provider.mojom
+++ b/media/mojo/mojom/media_metrics_provider.mojom
@@ -4,9 +4,9 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
-import "media/mojo/interfaces/video_decode_stats_recorder.mojom";
-import "media/mojo/interfaces/watch_time_recorder.mojom";
+import "media/mojo/mojom/media_types.mojom";
+import "media/mojo/mojom/video_decode_stats_recorder.mojom";
+import "media/mojo/mojom/watch_time_recorder.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 
diff --git a/media/mojo/interfaces/media_service.mojom b/media/mojo/mojom/media_service.mojom
similarity index 93%
rename from media/mojo/interfaces/media_service.mojom
rename to media/mojo/mojom/media_service.mojom
index 7e4c2b6b..89de3b2 100644
--- a/media/mojo/interfaces/media_service.mojom
+++ b/media/mojo/mojom/media_service.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/interface_factory.mojom";
+import "media/mojo/mojom/interface_factory.mojom";
 import "services/service_manager/public/mojom/interface_provider.mojom";
 
 // A service to provide media InterfaceFactory, typically to the media pipeline
diff --git a/media/mojo/interfaces/media_types.mojom b/media/mojo/mojom/media_types.mojom
similarity index 100%
rename from media/mojo/interfaces/media_types.mojom
rename to media/mojo/mojom/media_types.mojom
diff --git a/media/mojo/interfaces/media_types.typemap b/media/mojo/mojom/media_types.typemap
similarity index 90%
rename from media/mojo/interfaces/media_types.typemap
rename to media/mojo/mojom/media_types.typemap
index 48ff4b0..227cfb2 100644
--- a/media/mojo/interfaces/media_types.typemap
+++ b/media/mojo/mojom/media_types.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 
 public_headers = [
   "//media/base/audio_codecs.h",
@@ -29,7 +29,7 @@
 
 traits_headers = [
   "//media/base/ipc/media_param_traits_macros.h",
-  "//media/mojo/interfaces/video_transformation_mojom_traits.h",
+  "//media/mojo/mojom/video_transformation_mojom_traits.h",
 ]
 
 public_deps = [
@@ -38,8 +38,8 @@
 ]
 
 sources = [
-  "//media/mojo/interfaces/video_transformation_mojom_traits.cc",
-  "//media/mojo/interfaces/video_transformation_mojom_traits.h",
+  "//media/mojo/mojom/video_transformation_mojom_traits.cc",
+  "//media/mojo/mojom/video_transformation_mojom_traits.h",
 ]
 
 type_mappings = [
diff --git a/media/mojo/interfaces/mirror_service_remoting.mojom b/media/mojo/mojom/mirror_service_remoting.mojom
similarity index 97%
rename from media/mojo/interfaces/mirror_service_remoting.mojom
rename to media/mojo/mojom/mirror_service_remoting.mojom
index c50fe0a..a5f41ef 100644
--- a/media/mojo/interfaces/mirror_service_remoting.mojom
+++ b/media/mojo/mojom/mirror_service_remoting.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/remoting_common.mojom";
+import "media/mojo/mojom/remoting_common.mojom";
 
 // Interface used by the source to start/stop remoting and send data to the
 // sink.
diff --git a/media/mojo/interfaces/output_protection.mojom b/media/mojo/mojom/output_protection.mojom
similarity index 100%
rename from media/mojo/interfaces/output_protection.mojom
rename to media/mojo/mojom/output_protection.mojom
diff --git a/media/mojo/interfaces/pipeline_status.typemap b/media/mojo/mojom/pipeline_status.typemap
similarity index 73%
rename from media/mojo/interfaces/pipeline_status.typemap
rename to media/mojo/mojom/pipeline_status.typemap
index cb730c3b..b8eea9d 100644
--- a/media/mojo/interfaces/pipeline_status.typemap
+++ b/media/mojo/mojom/pipeline_status.typemap
@@ -2,9 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 public_headers = [ "//media/base/pipeline_status.h" ]
-traits_headers = [ "//media/mojo/interfaces/pipeline_status_struct_traits.h" ]
+traits_headers = [ "//media/mojo/mojom/pipeline_status_mojom_traits.h" ]
 type_mappings = [
   "media.mojom.PipelineStatistics=media::PipelineStatistics",
   "media.mojom.PipelineDecoderInfo=media::PipelineDecoderInfo",
diff --git a/media/mojo/interfaces/pipeline_status_struct_traits.h b/media/mojo/mojom/pipeline_status_mojom_traits.h
similarity index 90%
rename from media/mojo/interfaces/pipeline_status_struct_traits.h
rename to media/mojo/mojom/pipeline_status_mojom_traits.h
index f5a0d69..12be78a 100644
--- a/media/mojo/interfaces/pipeline_status_struct_traits.h
+++ b/media/mojo/mojom/pipeline_status_mojom_traits.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_PIPELINE_STATUS_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_PIPELINE_STATUS_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_PIPELINE_STATUS_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_PIPELINE_STATUS_MOJOM_TRAITS_H_
 
 #include <string>
 
 #include "media/base/pipeline_status.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace mojo {
 
@@ -72,4 +72,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_PIPELINE_STATUS_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_PIPELINE_STATUS_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/platform_verification.mojom b/media/mojo/mojom/platform_verification.mojom
similarity index 100%
rename from media/mojo/interfaces/platform_verification.mojom
rename to media/mojo/mojom/platform_verification.mojom
diff --git a/media/mojo/interfaces/provision_fetcher.mojom b/media/mojo/mojom/provision_fetcher.mojom
similarity index 100%
rename from media/mojo/interfaces/provision_fetcher.mojom
rename to media/mojo/mojom/provision_fetcher.mojom
diff --git a/media/mojo/interfaces/remoting.mojom b/media/mojo/mojom/remoting.mojom
similarity index 98%
rename from media/mojo/interfaces/remoting.mojom
rename to media/mojo/mojom/remoting.mojom
index fd36afc7..8c4227b 100644
--- a/media/mojo/interfaces/remoting.mojom
+++ b/media/mojo/mojom/remoting.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/remoting_common.mojom";
+import "media/mojo/mojom/remoting_common.mojom";
 
 interface RemoterFactory {
   // Create a new Remoter associated with the given RemotingSource and bind it
diff --git a/media/mojo/interfaces/remoting_common.mojom b/media/mojo/mojom/remoting_common.mojom
similarity index 100%
rename from media/mojo/interfaces/remoting_common.mojom
rename to media/mojo/mojom/remoting_common.mojom
diff --git a/media/mojo/interfaces/renderer.mojom b/media/mojo/mojom/renderer.mojom
similarity index 96%
rename from media/mojo/interfaces/renderer.mojom
rename to media/mojo/mojom/renderer.mojom
index 730b29c..7bed48f 100644
--- a/media/mojo/interfaces/renderer.mojom
+++ b/media/mojo/mojom/renderer.mojom
@@ -4,8 +4,8 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/demuxer_stream.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/demuxer_stream.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
diff --git a/media/mojo/interfaces/renderer_extensions.mojom b/media/mojo/mojom/renderer_extensions.mojom
similarity index 97%
rename from media/mojo/interfaces/renderer_extensions.mojom
rename to media/mojo/mojom/renderer_extensions.mojom
index 4238531..2bd84f4 100644
--- a/media/mojo/interfaces/renderer_extensions.mojom
+++ b/media/mojo/mojom/renderer_extensions.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
diff --git a/media/mojo/interfaces/supported_video_decoder_config_struct_traits.cc b/media/mojo/mojom/supported_video_decoder_config_mojom_traits.cc
similarity index 90%
rename from media/mojo/interfaces/supported_video_decoder_config_struct_traits.cc
rename to media/mojo/mojom/supported_video_decoder_config_mojom_traits.cc
index 812d86a6..9565181 100644
--- a/media/mojo/interfaces/supported_video_decoder_config_struct_traits.cc
+++ b/media/mojo/mojom/supported_video_decoder_config_mojom_traits.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 "media/mojo/interfaces/supported_video_decoder_config_struct_traits.h"
+#include "media/mojo/mojom/supported_video_decoder_config_mojom_traits.h"
 
 namespace mojo {
 
diff --git a/media/mojo/interfaces/supported_video_decoder_config_struct_traits.h b/media/mojo/mojom/supported_video_decoder_config_mojom_traits.h
similarity index 80%
rename from media/mojo/interfaces/supported_video_decoder_config_struct_traits.h
rename to media/mojo/mojom/supported_video_decoder_config_mojom_traits.h
index fca5597..5ef4800 100644
--- a/media/mojo/interfaces/supported_video_decoder_config_struct_traits.h
+++ b/media/mojo/mojom/supported_video_decoder_config_mojom_traits.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_SUPPORTED_VIDEO_DECODER_CONFIG_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_SUPPORTED_VIDEO_DECODER_CONFIG_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_SUPPORTED_VIDEO_DECODER_CONFIG_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_SUPPORTED_VIDEO_DECODER_CONFIG_MOJOM_TRAITS_H_
 
 #include "media/base/ipc/media_param_traits.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
-#include "media/mojo/interfaces/video_decoder.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
+#include "media/mojo/mojom/video_decoder.mojom.h"
 #include "media/video/supported_video_decoder_config.h"
 #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
 
@@ -51,4 +51,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_SUPPORTED_VIDEO_DECODER_CONFIG_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_SUPPORTED_VIDEO_DECODER_CONFIG_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/traits_test_service.mojom b/media/mojo/mojom/traits_test_service.mojom
similarity index 84%
rename from media/mojo/interfaces/traits_test_service.mojom
rename to media/mojo/mojom/traits_test_service.mojom
index 2d58fa2e..734581a6 100644
--- a/media/mojo/interfaces/traits_test_service.mojom
+++ b/media/mojo/mojom/traits_test_service.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 
 interface TraitsTestService {
   [Sync]
diff --git a/media/mojo/mojom/typemaps.gni b/media/mojo/mojom/typemaps.gni
new file mode 100644
index 0000000..dd991288
--- /dev/null
+++ b/media/mojo/mojom/typemaps.gni
@@ -0,0 +1,23 @@
+# Copyright 2016 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.
+
+typemaps = [
+  "//media/mojo/mojom/audio_decoder_config.typemap",
+  "//media/mojo/mojom/audio_parameters.typemap",
+  "//media/mojo/mojom/cdm_key_information.typemap",
+  "//media/mojo/mojom/cdm_proxy.typemap",
+  "//media/mojo/mojom/content_decryption_module.typemap",
+  "//media/mojo/mojom/decryptor.typemap",
+  "//media/mojo/mojom/demuxer_stream.typemap",
+  "//media/mojo/mojom/encryption_scheme.typemap",
+  "//media/mojo/mojom/hdr_metadata.typemap",
+  "//media/mojo/mojom/media_drm_storage.typemap",
+  "//media/mojo/mojom/media_types.typemap",
+  "//media/mojo/mojom/pipeline_status.typemap",
+  "//media/mojo/mojom/video_color_space.typemap",
+  "//media/mojo/mojom/video_decoder.typemap",
+  "//media/mojo/mojom/video_decoder_config.typemap",
+  "//media/mojo/mojom/video_encode_accelerator.typemap",
+  "//media/mojo/mojom/video_frame.typemap",
+]
diff --git a/media/mojo/interfaces/video_color_space.typemap b/media/mojo/mojom/video_color_space.typemap
similarity index 82%
rename from media/mojo/interfaces/video_color_space.typemap
rename to media/mojo/mojom/video_color_space.typemap
index 70be1d9..f5d7f6e4 100644
--- a/media/mojo/interfaces/video_color_space.typemap
+++ b/media/mojo/mojom/video_color_space.typemap
@@ -2,12 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 public_headers = [
   "//media/base/video_color_space.h",
   "//ui/gfx/color_space.h",
 ]
-traits_headers = [ "//media/mojo/interfaces/video_color_space_struct_traits.h" ]
+traits_headers = [ "//media/mojo/mojom/video_color_space_mojom_traits.h" ]
 type_mappings = [
   "media.mojom.VideoColorSpace.PrimaryID=media::VideoColorSpace::PrimaryID",
   "media.mojom.VideoColorSpace.TransferID=media::VideoColorSpace::TransferID",
diff --git a/media/mojo/interfaces/video_color_space_struct_traits.h b/media/mojo/mojom/video_color_space_mojom_traits.h
similarity index 83%
rename from media/mojo/interfaces/video_color_space_struct_traits.h
rename to media/mojo/mojom/video_color_space_mojom_traits.h
index 6e6f732..dde2e55 100644
--- a/media/mojo/interfaces/video_color_space_struct_traits.h
+++ b/media/mojo/mojom/video_color_space_mojom_traits.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_VIDEO_COLOR_SPACE_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_VIDEO_COLOR_SPACE_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_VIDEO_COLOR_SPACE_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_VIDEO_COLOR_SPACE_MOJOM_TRAITS_H_
 
 #include "media/base/video_color_space.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace mojo {
 
@@ -44,4 +44,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_VIDEO_COLOR_SPACE_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_VIDEO_COLOR_SPACE_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/video_decode_perf_history.mojom b/media/mojo/mojom/video_decode_perf_history.mojom
similarity index 93%
rename from media/mojo/interfaces/video_decode_perf_history.mojom
rename to media/mojo/mojom/video_decode_perf_history.mojom
index 61c026e3..cd66b26 100644
--- a/media/mojo/interfaces/video_decode_perf_history.mojom
+++ b/media/mojo/mojom/video_decode_perf_history.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 
 // This service will query the history of playback stats to evaluate how
diff --git a/media/mojo/interfaces/video_decode_stats_recorder.mojom b/media/mojo/mojom/video_decode_stats_recorder.mojom
similarity index 93%
rename from media/mojo/interfaces/video_decode_stats_recorder.mojom
rename to media/mojo/mojom/video_decode_stats_recorder.mojom
index f1442d7..d725cfb 100644
--- a/media/mojo/interfaces/video_decode_stats_recorder.mojom
+++ b/media/mojo/mojom/video_decode_stats_recorder.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 import "url/mojom/origin.mojom";
 
diff --git a/media/mojo/interfaces/video_decoder.mojom b/media/mojo/mojom/video_decoder.mojom
similarity index 98%
rename from media/mojo/interfaces/video_decoder.mojom
rename to media/mojo/mojom/video_decoder.mojom
index 249197c..12b0e59 100644
--- a/media/mojo/interfaces/video_decoder.mojom
+++ b/media/mojo/mojom/video_decoder.mojom
@@ -5,8 +5,8 @@
 module media.mojom;
 
 import "gpu/ipc/common/sync_token.mojom";
-import "media/mojo/interfaces/media_log.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_log.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 import "ui/gfx/mojom/color_space.mojom";
diff --git a/media/mojo/interfaces/video_decoder.typemap b/media/mojo/mojom/video_decoder.typemap
similarity index 72%
rename from media/mojo/interfaces/video_decoder.typemap
rename to media/mojo/mojom/video_decoder.typemap
index c409de7..a38b8ff 100644
--- a/media/mojo/interfaces/video_decoder.typemap
+++ b/media/mojo/mojom/video_decoder.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/video_decoder.mojom"
+mojom = "//media/mojo/mojom/video_decoder.mojom"
 
 public_headers = [
   "//media/base/overlay_info.h",
@@ -11,12 +11,12 @@
 
 traits_headers = [
   "//media/base/ipc/media_param_traits_macros.h",
-  "//media/mojo/interfaces/supported_video_decoder_config_struct_traits.h",
+  "//media/mojo/mojom/supported_video_decoder_config_mojom_traits.h",
 ]
 
 sources = [
-  "supported_video_decoder_config_struct_traits.cc",
-  "supported_video_decoder_config_struct_traits.h",
+  "supported_video_decoder_config_mojom_traits.cc",
+  "supported_video_decoder_config_mojom_traits.h",
 ]
 
 deps = [
diff --git a/media/mojo/interfaces/video_decoder_config.typemap b/media/mojo/mojom/video_decoder_config.typemap
similarity index 74%
rename from media/mojo/interfaces/video_decoder_config.typemap
rename to media/mojo/mojom/video_decoder_config.typemap
index 473ffe1..fc768c6 100644
--- a/media/mojo/interfaces/video_decoder_config.typemap
+++ b/media/mojo/mojom/video_decoder_config.typemap
@@ -2,15 +2,15 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 
 public_headers = [ "//media/base/video_decoder_config.h" ]
 
 traits_headers =
-    [ "//media/mojo/interfaces/video_decoder_config_struct_traits.h" ]
+    [ "//media/mojo/mojom/video_decoder_config_mojom_traits.h" ]
 
 sources = [
-  "video_decoder_config_struct_traits.cc",
+  "video_decoder_config_mojom_traits.cc",
 ]
 
 public_deps = [
diff --git a/media/mojo/interfaces/video_decoder_config_struct_traits.cc b/media/mojo/mojom/video_decoder_config_mojom_traits.cc
similarity index 95%
rename from media/mojo/interfaces/video_decoder_config_struct_traits.cc
rename to media/mojo/mojom/video_decoder_config_mojom_traits.cc
index 0b9f4c62..beda61c6 100644
--- a/media/mojo/interfaces/video_decoder_config_struct_traits.cc
+++ b/media/mojo/mojom/video_decoder_config_mojom_traits.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 "media/mojo/interfaces/video_decoder_config_struct_traits.h"
+#include "media/mojo/mojom/video_decoder_config_mojom_traits.h"
 
 namespace mojo {
 
diff --git a/media/mojo/interfaces/video_decoder_config_struct_traits.h b/media/mojo/mojom/video_decoder_config_mojom_traits.h
similarity index 79%
rename from media/mojo/interfaces/video_decoder_config_struct_traits.h
rename to media/mojo/mojom/video_decoder_config_mojom_traits.h
index c5027b5..05fffca 100644
--- a/media/mojo/interfaces/video_decoder_config_struct_traits.h
+++ b/media/mojo/mojom/video_decoder_config_mojom_traits.h
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_VIDEO_DECODER_CONFIG_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_VIDEO_DECODER_CONFIG_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_VIDEO_DECODER_CONFIG_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_VIDEO_DECODER_CONFIG_MOJOM_TRAITS_H_
 
 #include "media/base/ipc/media_param_traits.h"
 #include "media/base/video_decoder_config.h"
-#include "media/mojo/interfaces/encryption_scheme_struct_traits.h"
-#include "media/mojo/interfaces/hdr_metadata_struct_traits.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
-#include "media/mojo/interfaces/video_color_space_struct_traits.h"
-#include "media/mojo/interfaces/video_transformation_mojom_traits.h"
+#include "media/mojo/mojom/encryption_scheme_mojom_traits.h"
+#include "media/mojo/mojom/hdr_metadata_mojom_traits.h"
+#include "media/mojo/mojom/media_types.mojom.h"
+#include "media/mojo/mojom/video_color_space_mojom_traits.h"
+#include "media/mojo/mojom/video_transformation_mojom_traits.h"
 #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
 
 namespace mojo {
@@ -76,4 +76,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_VIDEO_DECODER_CONFIG_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_VIDEO_DECODER_CONFIG_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/video_decoder_config_struct_traits_unittest.cc b/media/mojo/mojom/video_decoder_config_mojom_traits_unittest.cc
similarity index 98%
rename from media/mojo/interfaces/video_decoder_config_struct_traits_unittest.cc
rename to media/mojo/mojom/video_decoder_config_mojom_traits_unittest.cc
index 1ee3d5dc..002306a8e 100644
--- a/media/mojo/interfaces/video_decoder_config_struct_traits_unittest.cc
+++ b/media/mojo/mojom/video_decoder_config_mojom_traits_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 "media/mojo/interfaces/video_decoder_config_struct_traits.h"
+#include "media/mojo/mojom/video_decoder_config_mojom_traits.h"
 
 #include <utility>
 
diff --git a/media/mojo/interfaces/video_encode_accelerator.mojom b/media/mojo/mojom/video_encode_accelerator.mojom
similarity index 98%
rename from media/mojo/interfaces/video_encode_accelerator.mojom
rename to media/mojo/mojom/video_encode_accelerator.mojom
index 0d5f406..6aad693 100644
--- a/media/mojo/interfaces/video_encode_accelerator.mojom
+++ b/media/mojo/mojom/video_encode_accelerator.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 
diff --git a/media/mojo/interfaces/video_encode_accelerator.typemap b/media/mojo/mojom/video_encode_accelerator.typemap
similarity index 73%
rename from media/mojo/interfaces/video_encode_accelerator.typemap
rename to media/mojo/mojom/video_encode_accelerator.typemap
index e70aabf..6c801c9 100644
--- a/media/mojo/interfaces/video_encode_accelerator.typemap
+++ b/media/mojo/mojom/video_encode_accelerator.typemap
@@ -2,16 +2,16 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/video_encode_accelerator.mojom"
+mojom = "//media/mojo/mojom/video_encode_accelerator.mojom"
 
 public_headers = [ "//media/video/video_encode_accelerator.h" ]
 
 traits_headers =
-    [ "//media/mojo/interfaces/video_encode_accelerator_mojom_traits.h" ]
+    [ "//media/mojo/mojom/video_encode_accelerator_mojom_traits.h" ]
 
 sources = [
-  "//media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc",
-  "//media/mojo/interfaces/video_encode_accelerator_mojom_traits.h",
+  "//media/mojo/mojom/video_encode_accelerator_mojom_traits.cc",
+  "//media/mojo/mojom/video_encode_accelerator_mojom_traits.h",
 ]
 
 public_deps = [
diff --git a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc b/media/mojo/mojom/video_encode_accelerator_mojom_traits.cc
similarity index 98%
rename from media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc
rename to media/mojo/mojom/video_encode_accelerator_mojom_traits.cc
index efe9ef6..6e63765a 100644
--- a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc
+++ b/media/mojo/mojom/video_encode_accelerator_mojom_traits.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 "media/mojo/interfaces/video_encode_accelerator_mojom_traits.h"
+#include "media/mojo/mojom/video_encode_accelerator_mojom_traits.h"
 
 #include "base/logging.h"
 #include "base/optional.h"
diff --git a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.h b/media/mojo/mojom/video_encode_accelerator_mojom_traits.h
similarity index 94%
rename from media/mojo/interfaces/video_encode_accelerator_mojom_traits.h
rename to media/mojo/mojom/video_encode_accelerator_mojom_traits.h
index e7aa814..538730bc 100644
--- a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.h
+++ b/media/mojo/mojom/video_encode_accelerator_mojom_traits.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
 
 #include "media/base/ipc/media_param_traits.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/video/video_encode_accelerator.h"
 #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
 
@@ -172,4 +172,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_VIDEO_ENCODE_ACCELERATOR_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/video_frame.typemap b/media/mojo/mojom/video_frame.typemap
similarity index 85%
rename from media/mojo/interfaces/video_frame.typemap
rename to media/mojo/mojom/video_frame.typemap
index cff0f0d4..0723eeb 100644
--- a/media/mojo/interfaces/video_frame.typemap
+++ b/media/mojo/mojom/video_frame.typemap
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-mojom = "//media/mojo/interfaces/media_types.mojom"
+mojom = "//media/mojo/mojom/media_types.mojom"
 
 # Additional headers required by any code which would depend on the mojom
 # definition of media.mojom.VideoFrame now that the typemap is applied. Any
@@ -14,10 +14,10 @@
 
 # Headers which contain the relevant StructTraits specialization(s) for any
 # type mappings described by this file.
-traits_headers = [ "//media/mojo/interfaces/video_frame_struct_traits.h" ]
+traits_headers = [ "//media/mojo/mojom/video_frame_mojom_traits.h" ]
 
 sources = [
-  "video_frame_struct_traits.cc",
+  "video_frame_mojom_traits.cc",
 ]
 
 # Target dependencies exposed by the public_headers and traits_headers.
diff --git a/media/mojo/interfaces/video_frame_struct_traits.cc b/media/mojo/mojom/video_frame_mojom_traits.cc
similarity index 98%
rename from media/mojo/interfaces/video_frame_struct_traits.cc
rename to media/mojo/mojom/video_frame_mojom_traits.cc
index 2822ad3..46995e0 100644
--- a/media/mojo/interfaces/video_frame_struct_traits.cc
+++ b/media/mojo/mojom/video_frame_mojom_traits.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 "media/mojo/interfaces/video_frame_struct_traits.h"
+#include "media/mojo/mojom/video_frame_mojom_traits.h"
 
 #include <utility>
 #include <vector>
diff --git a/media/mojo/interfaces/video_frame_struct_traits.h b/media/mojo/mojom/video_frame_mojom_traits.h
similarity index 90%
rename from media/mojo/interfaces/video_frame_struct_traits.h
rename to media/mojo/mojom/video_frame_mojom_traits.h
index bc959f4..196243b 100644
--- a/media/mojo/interfaces/video_frame_struct_traits.h
+++ b/media/mojo/mojom/video_frame_mojom_traits.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 MEDIA_MOJO_INTERFACES_VIDEO_FRAME_STRUCT_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_VIDEO_FRAME_STRUCT_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_VIDEO_FRAME_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_VIDEO_FRAME_MOJOM_TRAITS_H_
 
 #include "base/memory/ref_counted.h"
 #include "base/optional.h"
@@ -12,7 +12,7 @@
 #include "gpu/ipc/common/vulkan_ycbcr_info_mojom_traits.h"
 #include "media/base/ipc/media_param_traits_macros.h"
 #include "media/base/video_frame.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "mojo/public/cpp/bindings/struct_traits.h"
 #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
 #include "ui/gfx/ipc/color/gfx_param_traits.h"
@@ -81,4 +81,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_VIDEO_FRAME_STRUCT_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_VIDEO_FRAME_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/video_frame_struct_traits_unittest.cc b/media/mojo/mojom/video_frame_mojom_traits_unittest.cc
similarity index 97%
rename from media/mojo/interfaces/video_frame_struct_traits_unittest.cc
rename to media/mojo/mojom/video_frame_mojom_traits_unittest.cc
index 03d560c..c3d1ba2 100644
--- a/media/mojo/interfaces/video_frame_struct_traits_unittest.cc
+++ b/media/mojo/mojom/video_frame_mojom_traits_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 "media/mojo/interfaces/video_frame_struct_traits.h"
+#include "media/mojo/mojom/video_frame_mojom_traits.h"
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
@@ -12,7 +12,7 @@
 #include "gpu/command_buffer/common/sync_token.h"
 #include "media/base/video_frame.h"
 #include "media/mojo/common/mojo_shared_buffer_video_frame.h"
-#include "media/mojo/interfaces/traits_test_service.mojom.h"
+#include "media/mojo/mojom/traits_test_service.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/system/buffer.h"
diff --git a/media/mojo/interfaces/video_transformation_mojom_traits.cc b/media/mojo/mojom/video_transformation_mojom_traits.cc
similarity index 88%
rename from media/mojo/interfaces/video_transformation_mojom_traits.cc
rename to media/mojo/mojom/video_transformation_mojom_traits.cc
index b8b51db..9aebac3 100644
--- a/media/mojo/interfaces/video_transformation_mojom_traits.cc
+++ b/media/mojo/mojom/video_transformation_mojom_traits.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 "media/mojo/interfaces/video_transformation_mojom_traits.h"
+#include "media/mojo/mojom/video_transformation_mojom_traits.h"
 
 namespace mojo {
 
diff --git a/media/mojo/interfaces/video_transformation_mojom_traits.h b/media/mojo/mojom/video_transformation_mojom_traits.h
similarity index 74%
rename from media/mojo/interfaces/video_transformation_mojom_traits.h
rename to media/mojo/mojom/video_transformation_mojom_traits.h
index fe9c630..f788f6f 100644
--- a/media/mojo/interfaces/video_transformation_mojom_traits.h
+++ b/media/mojo/mojom/video_transformation_mojom_traits.h
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MEDIA_MOJO_INTERFACES_VIDEO_TRANSFORMATION_MOJOM_TRAITS_H_
-#define MEDIA_MOJO_INTERFACES_VIDEO_TRANSFORMATION_MOJOM_TRAITS_H_
+#ifndef MEDIA_MOJO_MOJOM_VIDEO_TRANSFORMATION_MOJOM_TRAITS_H_
+#define MEDIA_MOJO_MOJOM_VIDEO_TRANSFORMATION_MOJOM_TRAITS_H_
 
 #include "media/base/ipc/media_param_traits.h"
 #include "media/base/video_transformation.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace mojo {
 
@@ -29,4 +29,4 @@
 
 }  // namespace mojo
 
-#endif  // MEDIA_MOJO_INTERFACES_VIDEO_TRANSFORMATION_MOJOM_TRAITS_H_
+#endif  // MEDIA_MOJO_MOJOM_VIDEO_TRANSFORMATION_MOJOM_TRAITS_H_
diff --git a/media/mojo/interfaces/watch_time_recorder.mojom b/media/mojo/mojom/watch_time_recorder.mojom
similarity index 98%
rename from media/mojo/interfaces/watch_time_recorder.mojom
rename to media/mojo/mojom/watch_time_recorder.mojom
index dde12df..82fd6caa 100644
--- a/media/mojo/interfaces/watch_time_recorder.mojom
+++ b/media/mojo/mojom/watch_time_recorder.mojom
@@ -4,7 +4,7 @@
 
 module media.mojom;
 
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 import "url/mojom/origin.mojom";
diff --git a/media/mojo/services/BUILD.gn b/media/mojo/services/BUILD.gn
index f6f8fc6..7f6c8ac 100644
--- a/media/mojo/services/BUILD.gn
+++ b/media/mojo/services/BUILD.gn
@@ -80,7 +80,7 @@
     "//media/gpu",
     "//media/gpu/ipc/common",
     "//media/mojo:buildflags",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/system",
     "//services/service_manager/public/cpp",
@@ -149,8 +149,8 @@
   ]
   deps = [
     "//base",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:constants",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:constants",
     "//services/service_manager/public/cpp",
   ]
 }
@@ -163,8 +163,8 @@
   deps = [
     "//base",
     "//media/mojo:buildflags",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:constants",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:constants",
     "//services/service_manager/public/cpp",
   ]
   if (is_chromecast) {
@@ -269,8 +269,8 @@
     "//media/cdm:cdm_paths",
     "//media/mojo/clients",
     "//media/mojo/common",
-    "//media/mojo/interfaces",
-    "//media/mojo/interfaces:constants",
+    "//media/mojo/mojom",
+    "//media/mojo/mojom:constants",
     "//mojo/core/test:run_all_unittests",
     "//services/service_manager/public/cpp",
     "//services/service_manager/public/cpp/test:test_support",
diff --git a/media/mojo/services/android_mojo_media_client.cc b/media/mojo/services/android_mojo_media_client.cc
index 80f2737..f0de6c3f5 100644
--- a/media/mojo/services/android_mojo_media_client.cc
+++ b/media/mojo/services/android_mojo_media_client.cc
@@ -13,8 +13,8 @@
 #include "media/base/audio_decoder.h"
 #include "media/base/cdm_factory.h"
 #include "media/filters/android/media_codec_audio_decoder.h"
-#include "media/mojo/interfaces/media_drm_storage.mojom.h"
-#include "media/mojo/interfaces/provision_fetcher.mojom.h"
+#include "media/mojo/mojom/media_drm_storage.mojom.h"
+#include "media/mojo/mojom/provision_fetcher.mojom.h"
 #include "media/mojo/services/android_mojo_util.h"
 #include "services/service_manager/public/cpp/connect.h"
 
diff --git a/media/mojo/services/cdm_manifest.cc b/media/mojo/services/cdm_manifest.cc
index 2ed9f338..05924c7 100644
--- a/media/mojo/services/cdm_manifest.cc
+++ b/media/mojo/services/cdm_manifest.cc
@@ -5,8 +5,8 @@
 #include "media/mojo/services/cdm_manifest.h"
 
 #include "base/no_destructor.h"
-#include "media/mojo/interfaces/cdm_service.mojom.h"
-#include "media/mojo/interfaces/constants.mojom.h"
+#include "media/mojo/mojom/cdm_service.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
 #include "services/service_manager/public/cpp/manifest_builder.h"
 
 namespace media {
diff --git a/media/mojo/services/cdm_service.h b/media/mojo/services/cdm_service.h
index d6d16d4d..dcd5dd7 100644
--- a/media/mojo/services/cdm_service.h
+++ b/media/mojo/services/cdm_service.h
@@ -10,8 +10,8 @@
 #include "base/macros.h"
 #include "build/build_config.h"
 #include "media/media_buildflags.h"
-#include "media/mojo/interfaces/cdm_service.mojom.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/cdm_service.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
 #include "media/mojo/services/deferred_destroy_strong_binding_set.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
diff --git a/media/mojo/services/cdm_service_unittest.cc b/media/mojo/services/cdm_service_unittest.cc
index 510e3ca..cae4028 100644
--- a/media/mojo/services/cdm_service_unittest.cc
+++ b/media/mojo/services/cdm_service_unittest.cc
@@ -11,7 +11,7 @@
 #include "build/build_config.h"
 #include "media/cdm/default_cdm_factory.h"
 #include "media/media_buildflags.h"
-#include "media/mojo/interfaces/constants.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
 #include "media/mojo/services/cdm_service.h"
 #include "media/mojo/services/media_interface_provider.h"
 #include "services/service_manager/public/cpp/test/test_connector_factory.h"
diff --git a/media/mojo/services/gpu_mojo_media_client.cc b/media/mojo/services/gpu_mojo_media_client.cc
index 7b4910f..51cce17c 100644
--- a/media/mojo/services/gpu_mojo_media_client.cc
+++ b/media/mojo/services/gpu_mojo_media_client.cc
@@ -21,7 +21,7 @@
 #include "media/gpu/gpu_video_decode_accelerator_helpers.h"
 #include "media/gpu/ipc/service/media_gpu_channel_manager.h"
 #include "media/gpu/ipc/service/vda_video_decoder.h"
-#include "media/mojo/interfaces/video_decoder.mojom.h"
+#include "media/mojo/mojom/video_decoder.mojom.h"
 #include "media/video/video_decode_accelerator.h"
 
 #if defined(OS_ANDROID)
@@ -34,8 +34,8 @@
 #include "media/gpu/android/maybe_render_early_manager.h"
 #include "media/gpu/android/media_codec_video_decoder.h"
 #include "media/gpu/android/video_frame_factory_impl.h"
-#include "media/mojo/interfaces/media_drm_storage.mojom.h"
-#include "media/mojo/interfaces/provision_fetcher.mojom.h"
+#include "media/mojo/mojom/media_drm_storage.mojom.h"
+#include "media/mojo/mojom/provision_fetcher.mojom.h"
 #include "media/mojo/services/mojo_media_drm_storage.h"
 #include "media/mojo/services/mojo_provision_fetcher.h"
 #include "services/service_manager/public/cpp/connect.h"
diff --git a/media/mojo/services/interface_factory_impl.cc b/media/mojo/services/interface_factory_impl.cc
index 77a4840..90a2bc3c 100644
--- a/media/mojo/services/interface_factory_impl.cc
+++ b/media/mojo/services/interface_factory_impl.cc
@@ -11,7 +11,7 @@
 #include "base/logging.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "media/mojo/interfaces/renderer_extensions.mojom.h"
+#include "media/mojo/mojom/renderer_extensions.mojom.h"
 #include "media/mojo/services/mojo_decryptor_service.h"
 #include "media/mojo/services/mojo_media_client.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
diff --git a/media/mojo/services/interface_factory_impl.h b/media/mojo/services/interface_factory_impl.h
index bffc86c..b1f93b6 100644
--- a/media/mojo/services/interface_factory_impl.h
+++ b/media/mojo/services/interface_factory_impl.h
@@ -12,13 +12,13 @@
 #include "build/build_config.h"
 #include "media/base/media_util.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/audio_decoder.mojom.h"
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
-#include "media/mojo/interfaces/decryptor.mojom.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
-#include "media/mojo/interfaces/video_decoder.mojom.h"
+#include "media/mojo/mojom/audio_decoder.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/decryptor.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
+#include "media/mojo/mojom/video_decoder.mojom.h"
 #include "media/mojo/services/deferred_destroy_strong_binding_set.h"
 #include "media/mojo/services/mojo_cdm_service_context.h"
 #include "mojo/public/cpp/bindings/strong_binding_set.h"
diff --git a/media/mojo/services/media_manifest.cc b/media/mojo/services/media_manifest.cc
index e5b8856..9bf1eb0 100644
--- a/media/mojo/services/media_manifest.cc
+++ b/media/mojo/services/media_manifest.cc
@@ -6,8 +6,8 @@
 
 #include "base/no_destructor.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/constants.mojom.h"
-#include "media/mojo/interfaces/media_service.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
+#include "media/mojo/mojom/media_service.mojom.h"
 #include "services/service_manager/public/cpp/manifest_builder.h"
 
 #if defined(IS_CHROMECAST)
diff --git a/media/mojo/services/media_metrics_provider.h b/media/mojo/services/media_metrics_provider.h
index 5199d51..a3e33e7 100644
--- a/media/mojo/services/media_metrics_provider.h
+++ b/media/mojo/services/media_metrics_provider.h
@@ -12,7 +12,7 @@
 #include "media/base/pipeline_status.h"
 #include "media/base/timestamp_constants.h"
 #include "media/learning/common/value.h"
-#include "media/mojo/interfaces/media_metrics_provider.mojom.h"
+#include "media/mojo/mojom/media_metrics_provider.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/mojo/services/video_decode_perf_history.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
diff --git a/media/mojo/services/media_service.h b/media/mojo/services/media_service.h
index 98972d5..b569239e 100644
--- a/media/mojo/services/media_service.h
+++ b/media/mojo/services/media_service.h
@@ -9,8 +9,8 @@
 
 #include "base/macros.h"
 #include "build/build_config.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
-#include "media/mojo/interfaces/media_service.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
+#include "media/mojo/mojom/media_service.mojom.h"
 #include "media/mojo/services/deferred_destroy_strong_binding_set.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
diff --git a/media/mojo/services/media_service_unittest.cc b/media/mojo/services/media_service_unittest.cc
index c6000a6..4ebc31b 100644
--- a/media/mojo/services/media_service_unittest.cc
+++ b/media/mojo/services/media_service_unittest.cc
@@ -21,13 +21,13 @@
 #include "media/mojo/clients/mojo_decryptor.h"
 #include "media/mojo/clients/mojo_demuxer_stream_impl.h"
 #include "media/mojo/common/media_type_converters.h"
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
-#include "media/mojo/interfaces/constants.mojom.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
-#include "media/mojo/interfaces/decryptor.mojom.h"
-#include "media/mojo/interfaces/interface_factory.mojom.h"
-#include "media/mojo/interfaces/media_service.mojom.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/decryptor.mojom.h"
+#include "media/mojo/mojom/interface_factory.mojom.h"
+#include "media/mojo/mojom/media_service.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
 #include "media/mojo/services/media_interface_provider.h"
 #include "media/mojo/services/media_manifest.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
@@ -42,7 +42,7 @@
 
 #if BUILDFLAG(ENABLE_LIBRARY_CDMS)
 #include "media/cdm/cdm_paths.h"  // nogncheck
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
 #endif
 
 namespace media {
diff --git a/media/mojo/services/mojo_audio_decoder_service.h b/media/mojo/services/mojo_audio_decoder_service.h
index dacbd8d..43f977c 100644
--- a/media/mojo/services/mojo_audio_decoder_service.h
+++ b/media/mojo/services/mojo_audio_decoder_service.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "media/base/audio_decoder.h"
-#include "media/mojo/interfaces/audio_decoder.mojom.h"
+#include "media/mojo/mojom/audio_decoder.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_audio_input_stream.h b/media/mojo/services/mojo_audio_input_stream.h
index 48490c6..ec2c3a86 100644
--- a/media/mojo/services/mojo_audio_input_stream.h
+++ b/media/mojo/services/mojo_audio_input_stream.h
@@ -10,8 +10,8 @@
 
 #include "base/sequence_checker.h"
 #include "media/audio/audio_input_delegate.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
diff --git a/media/mojo/services/mojo_audio_output_stream.cc b/media/mojo/services/mojo_audio_output_stream.cc
index 27cc7dc3..f3e4cde 100644
--- a/media/mojo/services/mojo_audio_output_stream.cc
+++ b/media/mojo/services/mojo_audio_output_stream.cc
@@ -11,7 +11,7 @@
 #include "base/callback_helpers.h"
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/sync_socket.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_audio_output_stream.h b/media/mojo/services/mojo_audio_output_stream.h
index 0bed32d7..c58814b 100644
--- a/media/mojo/services/mojo_audio_output_stream.h
+++ b/media/mojo/services/mojo_audio_output_stream.h
@@ -10,7 +10,7 @@
 
 #include "base/sequence_checker.h"
 #include "media/audio/audio_output_delegate.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
diff --git a/media/mojo/services/mojo_audio_output_stream_provider.cc b/media/mojo/services/mojo_audio_output_stream_provider.cc
index acfd83db..16795d5 100644
--- a/media/mojo/services/mojo_audio_output_stream_provider.cc
+++ b/media/mojo/services/mojo_audio_output_stream_provider.cc
@@ -8,7 +8,7 @@
 
 #include "base/bind.h"
 #include "build/build_config.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/message.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_audio_output_stream_provider.h b/media/mojo/services/mojo_audio_output_stream_provider.h
index f3053bb..63ff797 100644
--- a/media/mojo/services/mojo_audio_output_stream_provider.h
+++ b/media/mojo/services/mojo_audio_output_stream_provider.h
@@ -10,7 +10,7 @@
 
 #include "base/sequence_checker.h"
 #include "media/audio/audio_output_delegate.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/mojo/services/mojo_audio_output_stream.h"
 #include "mojo/public/cpp/bindings/binding.h"
diff --git a/media/mojo/services/mojo_audio_output_stream_unittest.cc b/media/mojo/services/mojo_audio_output_stream_unittest.cc
index bc447a3..8f76539 100644
--- a/media/mojo/services/mojo_audio_output_stream_unittest.cc
+++ b/media/mojo/services/mojo_audio_output_stream_unittest.cc
@@ -12,7 +12,7 @@
 #include "base/sync_socket.h"
 #include "base/test/scoped_task_environment.h"
 #include "media/audio/audio_output_controller.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/system/message_pipe.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/media/mojo/services/mojo_cdm_file_io.h b/media/mojo/services/mojo_cdm_file_io.h
index a6ad0b36..f7fd9fc 100644
--- a/media/mojo/services/mojo_cdm_file_io.h
+++ b/media/mojo/services/mojo_cdm_file_io.h
@@ -14,7 +14,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "media/cdm/api/content_decryption_module.h"
-#include "media/mojo/interfaces/cdm_storage.mojom.h"
+#include "media/mojo/mojom/cdm_storage.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_cdm_helper.h b/media/mojo/services/mojo_cdm_helper.h
index ff092d6..f895732 100644
--- a/media/mojo/services/mojo_cdm_helper.h
+++ b/media/mojo/services/mojo_cdm_helper.h
@@ -12,10 +12,10 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "media/cdm/cdm_auxiliary_helper.h"
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
-#include "media/mojo/interfaces/cdm_storage.mojom.h"
-#include "media/mojo/interfaces/output_protection.mojom.h"
-#include "media/mojo/interfaces/platform_verification.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/cdm_storage.mojom.h"
+#include "media/mojo/mojom/output_protection.mojom.h"
+#include "media/mojo/mojom/platform_verification.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/mojo/services/mojo_cdm_file_io.h"
 #include "media/mojo/services/mojo_cdm_proxy.h"
diff --git a/media/mojo/services/mojo_cdm_helper_unittest.cc b/media/mojo/services/mojo_cdm_helper_unittest.cc
index ed99b12..52914a0 100644
--- a/media/mojo/services/mojo_cdm_helper_unittest.cc
+++ b/media/mojo/services/mojo_cdm_helper_unittest.cc
@@ -9,7 +9,7 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
 #include "media/cdm/api/content_decryption_module.h"
-#include "media/mojo/interfaces/cdm_storage.mojom.h"
+#include "media/mojo/mojom/cdm_storage.mojom.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "services/service_manager/public/mojom/interface_provider.mojom.h"
diff --git a/media/mojo/services/mojo_cdm_promise.h b/media/mojo/services/mojo_cdm_promise.h
index 6ec9124..38b7978 100644
--- a/media/mojo/services/mojo_cdm_promise.h
+++ b/media/mojo/services/mojo_cdm_promise.h
@@ -10,7 +10,7 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "media/base/cdm_promise.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
 
 namespace media {
 
diff --git a/media/mojo/services/mojo_cdm_proxy.h b/media/mojo/services/mojo_cdm_proxy.h
index c5fa0d0..045a5b8 100644
--- a/media/mojo/services/mojo_cdm_proxy.h
+++ b/media/mojo/services/mojo_cdm_proxy.h
@@ -13,7 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "media/base/cdm_context.h"
 #include "media/cdm/api/content_decryption_module.h"
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 
diff --git a/media/mojo/services/mojo_cdm_proxy_service.h b/media/mojo/services/mojo_cdm_proxy_service.h
index 0c6ca6d..5e79734 100644
--- a/media/mojo/services/mojo_cdm_proxy_service.h
+++ b/media/mojo/services/mojo_cdm_proxy_service.h
@@ -14,7 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "media/base/cdm_context.h"
 #include "media/cdm/cdm_proxy.h"
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_cdm_proxy_unittest.cc b/media/mojo/services/mojo_cdm_proxy_unittest.cc
index 8089c564..4942113 100644
--- a/media/mojo/services/mojo_cdm_proxy_unittest.cc
+++ b/media/mojo/services/mojo_cdm_proxy_unittest.cc
@@ -14,7 +14,7 @@
 #include "base/test/test_message_loop.h"
 #include "media/base/mock_filters.h"
 #include "media/cdm/cdm_proxy_context.h"
-#include "media/mojo/interfaces/cdm_proxy.mojom.h"
+#include "media/mojo/mojom/cdm_proxy.mojom.h"
 #include "media/mojo/services/mojo_cdm_proxy.h"
 #include "media/mojo/services/mojo_cdm_proxy_service.h"
 #include "media/mojo/services/mojo_cdm_service_context.h"
diff --git a/media/mojo/services/mojo_cdm_service.h b/media/mojo/services/mojo_cdm_service.h
index 09e00de..c8de553 100644
--- a/media/mojo/services/mojo_cdm_service.h
+++ b/media/mojo/services/mojo_cdm_service.h
@@ -16,7 +16,7 @@
 #include "base/memory/weak_ptr.h"
 #include "media/base/content_decryption_module.h"
 #include "media/base/eme_constants.h"
-#include "media/mojo/interfaces/content_decryption_module.mojom.h"
+#include "media/mojo/mojom/content_decryption_module.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/mojo/services/mojo_cdm_promise.h"
 #include "media/mojo/services/mojo_cdm_service_context.h"
diff --git a/media/mojo/services/mojo_decryptor_service.cc b/media/mojo/services/mojo_decryptor_service.cc
index f143605..605d733 100644
--- a/media/mojo/services/mojo_decryptor_service.cc
+++ b/media/mojo/services/mojo_decryptor_service.cc
@@ -17,7 +17,7 @@
 #include "media/mojo/common/media_type_converters.h"
 #include "media/mojo/common/mojo_decoder_buffer_converter.h"
 #include "media/mojo/common/mojo_shared_buffer_video_frame.h"
-#include "media/mojo/interfaces/demuxer_stream.mojom.h"
+#include "media/mojo/mojom/demuxer_stream.mojom.h"
 #include "media/mojo/services/mojo_cdm_service_context.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 
diff --git a/media/mojo/services/mojo_decryptor_service.h b/media/mojo/services/mojo_decryptor_service.h
index 2fba437..b4fb2e7 100644
--- a/media/mojo/services/mojo_decryptor_service.h
+++ b/media/mojo/services/mojo_decryptor_service.h
@@ -15,7 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "media/base/cdm_context.h"
 #include "media/base/decryptor.h"
-#include "media/mojo/interfaces/decryptor.mojom.h"
+#include "media/mojo/mojom/decryptor.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_demuxer_stream_adapter.h b/media/mojo/services/mojo_demuxer_stream_adapter.h
index 759031f..0b46158 100644
--- a/media/mojo/services/mojo_demuxer_stream_adapter.h
+++ b/media/mojo/services/mojo_demuxer_stream_adapter.h
@@ -13,7 +13,7 @@
 #include "media/base/audio_decoder_config.h"
 #include "media/base/demuxer_stream.h"
 #include "media/base/video_decoder_config.h"
-#include "media/mojo/interfaces/demuxer_stream.mojom.h"
+#include "media/mojo/mojom/demuxer_stream.mojom.h"
 
 namespace media {
 
diff --git a/media/mojo/services/mojo_media_client.h b/media/mojo/services/mojo_media_client.h
index 3f2bfeb..f64674d1 100644
--- a/media/mojo/services/mojo_media_client.h
+++ b/media/mojo/services/mojo_media_client.h
@@ -15,7 +15,7 @@
 #include "media/base/overlay_info.h"
 #include "media/media_buildflags.h"
 #include "media/mojo/buildflags.h"
-#include "media/mojo/interfaces/video_decoder.mojom.h"
+#include "media/mojo/mojom/video_decoder.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/video/supported_video_decoder_config.h"
 
diff --git a/media/mojo/services/mojo_media_drm_storage.h b/media/mojo/services/mojo_media_drm_storage.h
index 4446b9b..3a6add6 100644
--- a/media/mojo/services/mojo_media_drm_storage.h
+++ b/media/mojo/services/mojo_media_drm_storage.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "media/base/android/media_drm_storage.h"
-#include "media/mojo/interfaces/media_drm_storage.mojom.h"
+#include "media/mojo/mojom/media_drm_storage.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_media_log.h b/media/mojo/services/mojo_media_log.h
index e4e8b2ae1..15835c3 100644
--- a/media/mojo/services/mojo_media_log.h
+++ b/media/mojo/services/mojo_media_log.h
@@ -12,7 +12,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequenced_task_runner.h"
 #include "media/base/media_log.h"
-#include "media/mojo/interfaces/media_log.mojom.h"
+#include "media/mojo/mojom/media_log.mojom.h"
 
 namespace media {
 
diff --git a/media/mojo/services/mojo_provision_fetcher.h b/media/mojo/services/mojo_provision_fetcher.h
index 6b069b31..a70d299 100644
--- a/media/mojo/services/mojo_provision_fetcher.h
+++ b/media/mojo/services/mojo_provision_fetcher.h
@@ -9,7 +9,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "media/base/provision_fetcher.h"
-#include "media/mojo/interfaces/provision_fetcher.mojom.h"
+#include "media/mojo/mojom/provision_fetcher.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 
 namespace media {
diff --git a/media/mojo/services/mojo_renderer_service.h b/media/mojo/services/mojo_renderer_service.h
index c0b16be..9fe3da9 100644
--- a/media/mojo/services/mojo_renderer_service.h
+++ b/media/mojo/services/mojo_renderer_service.h
@@ -19,7 +19,7 @@
 #include "media/base/media_resource.h"
 #include "media/base/pipeline_status.h"
 #include "media/base/renderer_client.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 
diff --git a/media/mojo/services/mojo_video_decoder_service.h b/media/mojo/services/mojo_video_decoder_service.h
index 5a97794af..1c1f26c 100644
--- a/media/mojo/services/mojo_video_decoder_service.h
+++ b/media/mojo/services/mojo_video_decoder_service.h
@@ -15,7 +15,7 @@
 #include "media/base/decode_status.h"
 #include "media/base/overlay_info.h"
 #include "media/base/video_decoder.h"
-#include "media/mojo/interfaces/video_decoder.mojom.h"
+#include "media/mojo/mojom/video_decoder.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/mojo/services/mojo_media_client.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
diff --git a/media/mojo/services/mojo_video_encode_accelerator_provider.h b/media/mojo/services/mojo_video_encode_accelerator_provider.h
index ee9c65b8..86533c48 100644
--- a/media/mojo/services/mojo_video_encode_accelerator_provider.h
+++ b/media/mojo/services/mojo_video_encode_accelerator_provider.h
@@ -7,7 +7,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/mojo/services/mojo_video_encode_accelerator_service.h"
 
diff --git a/media/mojo/services/mojo_video_encode_accelerator_service.h b/media/mojo/services/mojo_video_encode_accelerator_service.h
index 2ee86b1..7ac4c22 100644
--- a/media/mojo/services/mojo_video_encode_accelerator_service.h
+++ b/media/mojo/services/mojo_video_encode_accelerator_service.h
@@ -15,7 +15,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/video/video_encode_accelerator.h"
 
diff --git a/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc b/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc
index 1b4f101..35071bc 100644
--- a/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc
+++ b/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc
@@ -9,7 +9,7 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
 #include "gpu/config/gpu_preferences.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/mojo/services/mojo_video_encode_accelerator_service.h"
 #include "media/video/fake_video_encode_accelerator.h"
 #include "media/video/video_encode_accelerator.h"
diff --git a/media/mojo/services/test_helpers.h b/media/mojo/services/test_helpers.h
index eb5fb0c..17c3781 100644
--- a/media/mojo/services/test_helpers.h
+++ b/media/mojo/services/test_helpers.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 
 namespace media {
 
diff --git a/media/mojo/services/video_decode_perf_history.cc b/media/mojo/services/video_decode_perf_history.cc
index 3deeff9..cb3303c 100644
--- a/media/mojo/services/video_decode_perf_history.cc
+++ b/media/mojo/services/video_decode_perf_history.cc
@@ -16,7 +16,7 @@
 #include "media/base/media_switches.h"
 #include "media/base/video_codecs.h"
 #include "media/capabilities/learning_helper.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/metrics/public/cpp/ukm_recorder.h"
diff --git a/media/mojo/services/video_decode_perf_history.h b/media/mojo/services/video_decode_perf_history.h
index 1f43cad..717767d5 100644
--- a/media/mojo/services/video_decode_perf_history.h
+++ b/media/mojo/services/video_decode_perf_history.h
@@ -17,7 +17,7 @@
 #include "media/capabilities/video_decode_stats_db.h"
 #include "media/capabilities/video_decode_stats_db_provider.h"
 #include "media/learning/impl/feature_provider.h"
-#include "media/mojo/interfaces/video_decode_perf_history.mojom.h"
+#include "media/mojo/mojom/video_decode_perf_history.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
diff --git a/media/mojo/services/video_decode_perf_history_unittest.cc b/media/mojo/services/video_decode_perf_history_unittest.cc
index a3f8d29..30f1eff 100644
--- a/media/mojo/services/video_decode_perf_history_unittest.cc
+++ b/media/mojo/services/video_decode_perf_history_unittest.cc
@@ -18,7 +18,7 @@
 #include "media/base/key_systems.h"
 #include "media/base/media_switches.h"
 #include "media/capabilities/video_decode_stats_db.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "media/mojo/services/test_helpers.h"
 #include "media/mojo/services/video_decode_perf_history.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
diff --git a/media/mojo/services/video_decode_stats_recorder.h b/media/mojo/services/video_decode_stats_recorder.h
index ebef85ac..558e957bb 100644
--- a/media/mojo/services/video_decode_stats_recorder.h
+++ b/media/mojo/services/video_decode_stats_recorder.h
@@ -11,8 +11,8 @@
 #include "base/time/time.h"
 #include "media/base/video_codecs.h"
 #include "media/learning/common/value.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
-#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
+#include "media/mojo/mojom/video_decode_stats_recorder.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "media/mojo/services/video_decode_perf_history.h"
 #include "services/service_manager/public/cpp/bind_source_info.h"
diff --git a/media/mojo/services/video_decode_stats_recorder_unittest.cc b/media/mojo/services/video_decode_stats_recorder_unittest.cc
index ec70cd04..7c63a2d 100644
--- a/media/mojo/services/video_decode_stats_recorder_unittest.cc
+++ b/media/mojo/services/video_decode_stats_recorder_unittest.cc
@@ -8,7 +8,7 @@
 #include "base/memory/ptr_util.h"
 #include "media/base/video_codecs.h"
 #include "media/learning/common/value.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "media/mojo/services/test_helpers.h"
 #include "media/mojo/services/video_decode_stats_recorder.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/media/mojo/services/watch_time_recorder.h b/media/mojo/services/watch_time_recorder.h
index 7d72bea..9c843f2 100644
--- a/media/mojo/services/watch_time_recorder.h
+++ b/media/mojo/services/watch_time_recorder.h
@@ -14,7 +14,7 @@
 #include "media/base/audio_codecs.h"
 #include "media/base/pipeline_status.h"
 #include "media/base/video_codecs.h"
-#include "media/mojo/interfaces/watch_time_recorder.mojom.h"
+#include "media/mojo/mojom/watch_time_recorder.mojom.h"
 #include "media/mojo/services/media_mojo_export.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 
diff --git a/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc b/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc
index a8d9484..3c679e5 100644
--- a/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc
+++ b/media/mojo/test/mojo_video_encode_accelerator_integration_test.cc
@@ -13,7 +13,7 @@
 #include "gpu/config/gpu_preferences.h"
 #include "media/base/limits.h"
 #include "media/mojo/clients/mojo_video_encode_accelerator.h"
-#include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
+#include "media/mojo/mojom/video_encode_accelerator.mojom.h"
 #include "media/mojo/services/mojo_video_encode_accelerator_service.h"
 #include "media/video/fake_video_encode_accelerator.h"
 #include "media/video/video_encode_accelerator.h"
diff --git a/media/remoting/BUILD.gn b/media/remoting/BUILD.gn
index 6c626c4a..07d3724 100644
--- a/media/remoting/BUILD.gn
+++ b/media/remoting/BUILD.gn
@@ -49,7 +49,7 @@
     "//base",
     "//media",
     "//media/mojo/common",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom:remoting",
     "//mojo/public/cpp/bindings",
     "//ui/gfx",
     "//url",
@@ -82,7 +82,7 @@
     "//base/test:test_support",
     "//media:test_support",
     "//media/mojo/common",
-    "//media/mojo/interfaces:remoting",
+    "//media/mojo/mojom:remoting",
     "//testing/gmock",
     "//testing/gtest",
     "//url",
diff --git a/media/remoting/courier_renderer.h b/media/remoting/courier_renderer.h
index dd1e17ec..2b9cd94 100644
--- a/media/remoting/courier_renderer.h
+++ b/media/remoting/courier_renderer.h
@@ -19,7 +19,7 @@
 #include "base/timer/timer.h"
 #include "media/base/pipeline_status.h"
 #include "media/base/renderer.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "media/remoting/metrics.h"
 #include "media/remoting/rpc_broker.h"
 #include "mojo/public/cpp/system/data_pipe.h"
diff --git a/media/remoting/demuxer_stream_adapter.h b/media/remoting/demuxer_stream_adapter.h
index c7bf0e9..9ff686e 100644
--- a/media/remoting/demuxer_stream_adapter.h
+++ b/media/remoting/demuxer_stream_adapter.h
@@ -18,7 +18,7 @@
 #include "media/base/demuxer_stream.h"
 #include "media/base/video_decoder_config.h"
 #include "media/mojo/common/mojo_data_pipe_read_write.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "media/remoting/rpc_broker.h"
 #include "media/remoting/triggers.h"
 #include "mojo/public/cpp/system/data_pipe.h"
diff --git a/media/remoting/end2end_test_renderer.cc b/media/remoting/end2end_test_renderer.cc
index 8eed302..db4f1c1 100644
--- a/media/remoting/end2end_test_renderer.cc
+++ b/media/remoting/end2end_test_renderer.cc
@@ -11,7 +11,7 @@
 #include "base/callback.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "media/mojo/common/mojo_data_pipe_read_write.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "media/remoting/courier_renderer.h"
 #include "media/remoting/proto_utils.h"
 #include "media/remoting/receiver.h"
diff --git a/media/remoting/fake_remoter.h b/media/remoting/fake_remoter.h
index 14ab5273..31452fe1 100644
--- a/media/remoting/fake_remoter.h
+++ b/media/remoting/fake_remoter.h
@@ -7,7 +7,7 @@
 
 #include "media/base/decoder_buffer.h"
 #include "media/mojo/common/mojo_data_pipe_read_write.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
 namespace media {
diff --git a/media/remoting/renderer_controller.h b/media/remoting/renderer_controller.h
index cb39abe..c8ada1b 100644
--- a/media/remoting/renderer_controller.h
+++ b/media/remoting/renderer_controller.h
@@ -16,8 +16,8 @@
 #include "build/buildflag.h"
 #include "media/base/media_observer.h"
 #include "media/media_buildflags.h"
-#include "media/mojo/interfaces/remoting.mojom.h"
-#include "media/mojo/interfaces/remoting_common.mojom.h"
+#include "media/mojo/mojom/remoting.mojom.h"
+#include "media/mojo/mojom/remoting_common.mojom.h"
 #include "media/remoting/metrics.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
diff --git a/media/test/BUILD.gn b/media/test/BUILD.gn
index 9b58d43..8014803 100644
--- a/media/test/BUILD.gn
+++ b/media/test/BUILD.gn
@@ -125,8 +125,8 @@
       "//media:media_buildflags",
       "//media:test_support",
       "//media/mojo/clients",
-      "//media/mojo/interfaces",
-      "//media/mojo/interfaces:constants",
+      "//media/mojo/mojom",
+      "//media/mojo/mojom:constants",
       "//media/mojo/services",
       "//media/mojo/services:media_manifest",
       "//services/service_manager/public/cpp",
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc
index e7fef56..be371b36b 100644
--- a/media/test/pipeline_integration_test.cc
+++ b/media/test/pipeline_integration_test.cc
@@ -39,9 +39,9 @@
 
 #if defined(MOJO_RENDERER)
 #include "media/mojo/clients/mojo_renderer.h"
-#include "media/mojo/interfaces/constants.mojom.h"  // nogncheck
-#include "media/mojo/interfaces/interface_factory.mojom.h"
-#include "media/mojo/interfaces/renderer.mojom.h"
+#include "media/mojo/mojom/constants.mojom.h"  // nogncheck
+#include "media/mojo/mojom/interface_factory.mojom.h"
+#include "media/mojo/mojom/renderer.mojom.h"
 #include "media/mojo/services/media_manifest.h"                    // nogncheck
 #include "services/service_manager/public/cpp/manifest_builder.h"  // nogncheck
 #include "services/service_manager/public/cpp/test/test_service.h"  // nogncheck
diff --git a/mojo/core/channel.cc b/mojo/core/channel.cc
index 6aa38d2..38cbaea 100644
--- a/mojo/core/channel.cc
+++ b/mojo/core/channel.cc
@@ -447,17 +447,6 @@
   return std::move(handle_vector_);
 }
 
-std::vector<PlatformHandleInTransit>
-Channel::Message::TakeHandlesForTransport() {
-#if defined(OS_WIN)
-  // Not necessary on Windows.
-  NOTREACHED();
-  return std::vector<PlatformHandleInTransit>();
-#else
-  return std::move(handle_vector_);
-#endif
-}
-
 // Helper class for managing a Channel's read buffer allocations. This maintains
 // a single contiguous buffer with the layout:
 //
diff --git a/mojo/core/channel.h b/mojo/core/channel.h
index bf8e0282..53e356b 100644
--- a/mojo/core/channel.h
+++ b/mojo/core/channel.h
@@ -200,11 +200,6 @@
     void SetHandles(std::vector<PlatformHandle> new_handles);
     void SetHandles(std::vector<PlatformHandleInTransit> new_handles);
     std::vector<PlatformHandleInTransit> TakeHandles();
-    // Version of TakeHandles that returns a vector of platform handles suitable
-    // for transfer over an underlying OS mechanism. i.e. file descriptors over
-    // a unix domain socket. Any handle that cannot be transferred this way,
-    // such as Mach ports, will be removed.
-    std::vector<PlatformHandleInTransit> TakeHandlesForTransport();
 
     void SetVersionForTest(uint16_t version_number);
 
diff --git a/mojo/core/channel_fuchsia.cc b/mojo/core/channel_fuchsia.cc
index 826238e..3f4caa0 100644
--- a/mojo/core/channel_fuchsia.cc
+++ b/mojo/core/channel_fuchsia.cc
@@ -95,7 +95,7 @@
   MessageView(Channel::MessagePtr message, size_t offset)
       : message_(std::move(message)),
         offset_(offset),
-        handles_(message_->TakeHandlesForTransport()) {
+        handles_(message_->TakeHandles()) {
     DCHECK_GT(message_->data_num_bytes(), offset_);
   }
 
diff --git a/mojo/core/channel_posix.cc b/mojo/core/channel_posix.cc
index 24818bdf..f36ee02 100644
--- a/mojo/core/channel_posix.cc
+++ b/mojo/core/channel_posix.cc
@@ -43,7 +43,7 @@
   MessageView(Channel::MessagePtr message, size_t offset)
       : message_(std::move(message)),
         offset_(offset),
-        handles_(message_->TakeHandlesForTransport()) {
+        handles_(message_->TakeHandles()) {
     DCHECK(!message_->data_num_bytes() || message_->data_num_bytes() > offset_);
   }
 
diff --git a/mojo/core/message_pipe_dispatcher.cc b/mojo/core/message_pipe_dispatcher.cc
index 482a685..22ac04a 100644
--- a/mojo/core/message_pipe_dispatcher.cc
+++ b/mojo/core/message_pipe_dispatcher.cc
@@ -10,6 +10,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "base/trace_event/trace_event.h"
 #include "mojo/core/core.h"
 #include "mojo/core/node_controller.h"
 #include "mojo/core/ports/event.h"
@@ -378,6 +379,10 @@
   if (!port_transferred_) {
     base::AutoUnlock unlock(signal_lock_);
     node_controller_->ClosePort(port_);
+
+    TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"),
+                           "MessagePipe closing", pipe_id_ + endpoint_,
+                           TRACE_EVENT_FLAG_FLOW_OUT);
   }
 
   return MOJO_RESULT_OK;
@@ -421,6 +426,18 @@
   }
   rv.satisfiable_signals |=
       MOJO_HANDLE_SIGNAL_PEER_CLOSED | MOJO_HANDLE_SIGNAL_QUOTA_EXCEEDED;
+
+  const bool was_peer_closed =
+      last_known_satisfied_signals_ & MOJO_HANDLE_SIGNAL_PEER_CLOSED;
+  const bool is_peer_closed =
+      rv.satisfied_signals & MOJO_HANDLE_SIGNAL_PEER_CLOSED;
+  last_known_satisfied_signals_ = rv.satisfied_signals;
+  if (is_peer_closed && !was_peer_closed) {
+    TRACE_EVENT_WITH_FLOW0(
+        TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), "MessagePipe peer closed",
+        pipe_id_ + (1 - endpoint_), TRACE_EVENT_FLAG_FLOW_IN);
+  }
+
   return rv;
 }
 
diff --git a/mojo/core/message_pipe_dispatcher.h b/mojo/core/message_pipe_dispatcher.h
index 231cb021..5d2a5ba 100644
--- a/mojo/core/message_pipe_dispatcher.h
+++ b/mojo/core/message_pipe_dispatcher.h
@@ -101,6 +101,7 @@
   // BeginTransit() and Complete/CancelTransit().
   AtomicFlag in_transit_;
 
+  mutable MojoHandleSignals last_known_satisfied_signals_ = 0;
   bool port_transferred_ = false;
   AtomicFlag port_closed_;
   WatcherSet watchers_;
diff --git a/mojo/public/tools/bindings/chromium_bindings_configuration.gni b/mojo/public/tools/bindings/chromium_bindings_configuration.gni
index 1dae886..81d0ecb 100644
--- a/mojo/public/tools/bindings/chromium_bindings_configuration.gni
+++ b/mojo/public/tools/bindings/chromium_bindings_configuration.gni
@@ -12,7 +12,7 @@
   "//chromeos/components/multidevice/mojom/typemaps.gni",
   "//chromeos/services/network_config/public/mojom/typemaps.gni",
   "//chromeos/services/secure_channel/public/mojom/typemaps.gni",
-  "//components/arc/common/typemaps.gni",
+  "//components/arc/mojom/typemaps.gni",
   "//components/chromeos_camera/common/typemaps.gni",
   "//components/sync/mojom/typemaps.gni",
   "//components/typemaps.gni",
@@ -27,7 +27,7 @@
   "//ipc/typemaps.gni",
   "//media/capture/mojom/typemaps.gni",
   "//media/learning/mojo/public/cpp/typemaps.gni",
-  "//media/mojo/interfaces/typemaps.gni",
+  "//media/mojo/mojom/typemaps.gni",
   "//mojo/public/cpp/base/typemaps.gni",
   "//mojo/public/cpp/bindings/tests/chromium_typemaps.gni",
   "//sandbox/mac/mojom/typemaps.gni",
diff --git a/net/BUILD.gn b/net/BUILD.gn
index dffc34b9..408a234 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -1162,6 +1162,7 @@
       "spdy/platform/impl/spdy_flags_impl.h",
       "spdy/platform/impl/spdy_logging_impl.h",
       "spdy/platform/impl/spdy_macros_impl.h",
+      "spdy/platform/impl/spdy_map_util_impl.h",
       "spdy/platform/impl/spdy_mem_slice_impl.cc",
       "spdy/platform/impl/spdy_mem_slice_impl.h",
       "spdy/platform/impl/spdy_ptr_util_impl.h",
@@ -1514,6 +1515,8 @@
       "third_party/quiche/src/quic/core/legacy_quic_stream_id_manager.cc",
       "third_party/quiche/src/quic/core/legacy_quic_stream_id_manager.h",
       "third_party/quiche/src/quic/core/packet_number_indexed_queue.h",
+      "third_party/quiche/src/quic/core/qpack/qpack_blocking_manager.cc",
+      "third_party/quiche/src/quic/core/qpack/qpack_blocking_manager.h",
       "third_party/quiche/src/quic/core/qpack/qpack_constants.cc",
       "third_party/quiche/src/quic/core/qpack/qpack_constants.h",
       "third_party/quiche/src/quic/core/qpack/qpack_decoded_headers_accumulator.cc",
@@ -1710,6 +1713,7 @@
       "third_party/quiche/src/quic/platform/api/quic_text_utils.h",
       "third_party/quiche/src/quic/platform/api/quic_thread.h",
       "third_party/quiche/src/quic/platform/api/quic_uint128.h",
+      "third_party/quiche/src/spdy/core/fifo_write_scheduler.h",
       "third_party/quiche/src/spdy/core/hpack/hpack_constants.cc",
       "third_party/quiche/src/spdy/core/hpack/hpack_constants.h",
       "third_party/quiche/src/spdy/core/hpack/hpack_decoder_adapter.cc",
@@ -1728,6 +1732,7 @@
       "third_party/quiche/src/spdy/core/hpack/hpack_static_table.h",
       "third_party/quiche/src/spdy/core/http2_frame_decoder_adapter.cc",
       "third_party/quiche/src/spdy/core/http2_frame_decoder_adapter.h",
+      "third_party/quiche/src/spdy/core/http2_priority_write_scheduler.h",
       "third_party/quiche/src/spdy/core/priority_write_scheduler.h",
       "third_party/quiche/src/spdy/core/spdy_alt_svc_wire_format.cc",
       "third_party/quiche/src/spdy/core/spdy_alt_svc_wire_format.h",
@@ -1741,6 +1746,7 @@
       "third_party/quiche/src/spdy/core/spdy_header_block.cc",
       "third_party/quiche/src/spdy/core/spdy_header_block.h",
       "third_party/quiche/src/spdy/core/spdy_headers_handler_interface.h",
+      "third_party/quiche/src/spdy/core/spdy_intrusive_list.h",
       "third_party/quiche/src/spdy/core/spdy_pinnable_buffer_piece.cc",
       "third_party/quiche/src/spdy/core/spdy_pinnable_buffer_piece.h",
       "third_party/quiche/src/spdy/core/spdy_prefixed_buffer_reader.cc",
@@ -1760,6 +1766,7 @@
       "third_party/quiche/src/spdy/platform/api/spdy_flags.h",
       "third_party/quiche/src/spdy/platform/api/spdy_logging.h",
       "third_party/quiche/src/spdy/platform/api/spdy_macros.h",
+      "third_party/quiche/src/spdy/platform/api/spdy_map_util.h",
       "third_party/quiche/src/spdy/platform/api/spdy_mem_slice.h",
       "third_party/quiche/src/spdy/platform/api/spdy_ptr_util.h",
       "third_party/quiche/src/spdy/platform/api/spdy_string.h",
@@ -5511,6 +5518,7 @@
     "third_party/quiche/src/quic/core/http/spdy_utils_test.cc",
     "third_party/quiche/src/quic/core/legacy_quic_stream_id_manager_test.cc",
     "third_party/quiche/src/quic/core/packet_number_indexed_queue_test.cc",
+    "third_party/quiche/src/quic/core/qpack/qpack_blocking_manager_test.cc",
     "third_party/quiche/src/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc",
     "third_party/quiche/src/quic/core/qpack/qpack_decoder_stream_receiver_test.cc",
     "third_party/quiche/src/quic/core/qpack/qpack_decoder_stream_sender_test.cc",
@@ -5599,6 +5607,7 @@
     "third_party/quiche/src/spdy/core/array_output_buffer.cc",
     "third_party/quiche/src/spdy/core/array_output_buffer.h",
     "third_party/quiche/src/spdy/core/array_output_buffer_test.cc",
+    "third_party/quiche/src/spdy/core/fifo_write_scheduler_test.cc",
     "third_party/quiche/src/spdy/core/hpack/hpack_decoder_adapter_test.cc",
     "third_party/quiche/src/spdy/core/hpack/hpack_encoder_test.cc",
     "third_party/quiche/src/spdy/core/hpack/hpack_entry_test.cc",
@@ -5607,6 +5616,7 @@
     "third_party/quiche/src/spdy/core/hpack/hpack_output_stream_test.cc",
     "third_party/quiche/src/spdy/core/hpack/hpack_round_trip_test.cc",
     "third_party/quiche/src/spdy/core/hpack/hpack_static_table_test.cc",
+    "third_party/quiche/src/spdy/core/http2_priority_write_scheduler_test.cc",
     "third_party/quiche/src/spdy/core/mock_spdy_framer_visitor.cc",
     "third_party/quiche/src/spdy/core/mock_spdy_framer_visitor.h",
     "third_party/quiche/src/spdy/core/priority_write_scheduler_test.cc",
@@ -5618,6 +5628,7 @@
     "third_party/quiche/src/spdy/core/spdy_frame_reader_test.cc",
     "third_party/quiche/src/spdy/core/spdy_framer_test.cc",
     "third_party/quiche/src/spdy/core/spdy_header_block_test.cc",
+    "third_party/quiche/src/spdy/core/spdy_intrusive_list_test.cc",
     "third_party/quiche/src/spdy/core/spdy_no_op_visitor.cc",
     "third_party/quiche/src/spdy/core/spdy_no_op_visitor.h",
     "third_party/quiche/src/spdy/core/spdy_pinnable_buffer_piece_test.cc",
@@ -5681,6 +5692,8 @@
       "third_party/quiche/src/quic/quartc/quartc_fakes.h",
       "third_party/quiche/src/quic/quartc/quartc_interval_counter.h",
       "third_party/quiche/src/quic/quartc/quartc_interval_counter_test.cc",
+      "third_party/quiche/src/quic/quartc/quartc_multiplexer.cc",
+      "third_party/quiche/src/quic/quartc/quartc_multiplexer.h",
       "third_party/quiche/src/quic/quartc/quartc_packet_writer.cc",
       "third_party/quiche/src/quic/quartc/quartc_packet_writer.h",
       "third_party/quiche/src/quic/quartc/quartc_session.cc",
diff --git a/net/OWNERS b/net/OWNERS
index b2ff564..d38b5188 100644
--- a/net/OWNERS
+++ b/net/OWNERS
@@ -1,6 +1,5 @@
 agl@chromium.org
 asanka@chromium.org
-bnc@chromium.org
 davidben@chromium.org
 ericorth@chromium.org
 eroman@chromium.org
@@ -14,6 +13,9 @@
 rsleevi@chromium.org
 zhongyi@chromium.org
 
+# For QUICHE rolls only.
+bnc@chromium.org
+
 per-file BUILD.gn=file://net/nqe/OWNERS
 per-file BUILD.gn=file://net/websockets/OWNERS
 
diff --git a/net/base/network_change_notifier_fuchsia_unittest.cc b/net/base/network_change_notifier_fuchsia_unittest.cc
index 0e30c892b..de4e6a8 100644
--- a/net/base/network_change_notifier_fuchsia_unittest.cc
+++ b/net/base/network_change_notifier_fuchsia_unittest.cc
@@ -11,9 +11,8 @@
 #include <vector>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_pump_type.h"
 #include "base/run_loop.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/threading/sequence_bound.h"
 #include "base/threading/thread.h"
 #include "net/base/ip_address.h"
@@ -259,7 +258,9 @@
   }
 
  protected:
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::ThreadingMode::MAIN_THREAD_ONLY,
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   testing::StrictMock<MockConnectionTypeObserver> observer_;
   testing::StrictMock<MockIPAddressObserver> ip_observer_;
   fuchsia::netstack::NetstackPtr netstack_ptr_;
diff --git a/net/cert/x509_certificate.cc b/net/cert/x509_certificate.cc
index 6973f4a..f59ff53 100644
--- a/net/cert/x509_certificate.cc
+++ b/net/cert/x509_certificate.cc
@@ -327,7 +327,7 @@
   return results;
 }
 
-void X509Certificate::Persist(base::Pickle* pickle) {
+void X509Certificate::Persist(base::Pickle* pickle) const {
   DCHECK(cert_buffer_);
   // This would be an absolutely insane number of intermediates.
   if (intermediate_ca_certs_.size() > static_cast<size_t>(INT_MAX) - 1) {
@@ -424,7 +424,7 @@
 }
 
 bool X509Certificate::IsIssuedByEncoded(
-    const std::vector<std::string>& valid_issuers) {
+    const std::vector<std::string>& valid_issuers) const {
   std::vector<std::string> normalized_issuers;
   CertErrors errors;
   for (const auto& raw_issuer : valid_issuers) {
diff --git a/net/cert/x509_certificate.h b/net/cert/x509_certificate.h
index 5151baf9..f8214cc 100644
--- a/net/cert/x509_certificate.h
+++ b/net/cert/x509_certificate.h
@@ -145,7 +145,7 @@
   // The format is [int count], [data - this certificate],
   // [data - intermediate1], ... [data - intermediateN].
   // All certificates are stored in DER form.
-  void Persist(base::Pickle* pickle);
+  void Persist(base::Pickle* pickle) const;
 
   // The serial number, DER encoded, possibly including a leading 00 byte.
   const std::string& serial_number() const { return serial_number_; }
@@ -189,7 +189,7 @@
 
   // Do any of the given issuer names appear in this cert's chain of trust?
   // |valid_issuers| is a list of DER-encoded X.509 DistinguishedNames.
-  bool IsIssuedByEncoded(const std::vector<std::string>& valid_issuers);
+  bool IsIssuedByEncoded(const std::vector<std::string>& valid_issuers) const;
 
   // Verifies that |hostname| matches this certificate.
   // Does not verify that the certificate is valid, only that the certificate
diff --git a/net/disk_cache/disk_cache_fuzzer.cc b/net/disk_cache/disk_cache_fuzzer.cc
index bb68c4c4..b4d319a 100644
--- a/net/disk_cache/disk_cache_fuzzer.cc
+++ b/net/disk_cache/disk_cache_fuzzer.cc
@@ -87,7 +87,7 @@
     scoped_task_environment_ =
         std::make_unique<base::test::ScopedTaskEnvironment>(
             base::test::ScopedTaskEnvironment::MainThreadType::IO,
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW);
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME);
 
     // Disable noisy logging as per "libFuzzer in Chrome" documentation:
     // testing/libfuzzer/getting_started.md#Disable-noisy-error-message-logging.
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index eb38d764..72f9560 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -366,7 +366,7 @@
  protected:
   HttpNetworkTransactionTest()
       : WithScopedTaskEnvironment(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         dummy_connect_job_params_(
             nullptr /* client_socket_factory */,
             nullptr /* host_resolver */,
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc
index 8ddd8e2f..db9b4493 100644
--- a/net/http/http_proxy_connect_job_unittest.cc
+++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -57,7 +57,7 @@
  protected:
   HttpProxyConnectJobTest()
       : WithScopedTaskEnvironment(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         field_trial_list_(nullptr) {
     // Used a mock HostResolver that does not have a cache.
     session_deps_.host_resolver = std::make_unique<MockHostResolver>();
diff --git a/net/http/http_server_properties.cc b/net/http/http_server_properties.cc
index a06b883..dc2c93d 100644
--- a/net/http/http_server_properties.cc
+++ b/net/http/http_server_properties.cc
@@ -43,6 +43,7 @@
                              : base::DefaultTickClock::GetInstance()),
       clock_(clock ? clock : base::DefaultClock::GetInstance()),
       is_initialized_(pref_delegate.get() == nullptr),
+      queue_write_on_load_(false),
       properties_manager_(
           pref_delegate
               ? std::make_unique<HttpServerPropertiesManager>(
@@ -90,6 +91,9 @@
   if (properties_manager_) {
     // Stop waiting for initial settings.
     is_initialized_ = true;
+    // Leaving this as-is doesn't actually have any effect, if it's true, but
+    // seems best to be safe.
+    queue_write_on_load_ = false;
 
     // Stop the timer if it's running, since this will write to the properties
     // file immediately.
@@ -272,34 +276,34 @@
   return valid_alternative_service_infos;
 }
 
-bool HttpServerProperties::SetHttp2AlternativeService(
+void HttpServerProperties::SetHttp2AlternativeService(
     const url::SchemeHostPort& origin,
     const AlternativeService& alternative_service,
     base::Time expiration) {
   DCHECK_EQ(alternative_service.protocol, kProtoHTTP2);
 
-  return SetAlternativeServices(
+  SetAlternativeServices(
       origin,
       AlternativeServiceInfoVector(
           /*size=*/1, AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
                           alternative_service, expiration)));
 }
 
-bool HttpServerProperties::SetQuicAlternativeService(
+void HttpServerProperties::SetQuicAlternativeService(
     const url::SchemeHostPort& origin,
     const AlternativeService& alternative_service,
     base::Time expiration,
     const quic::ParsedQuicVersionVector& advertised_versions) {
   DCHECK(alternative_service.protocol == kProtoQUIC);
 
-  return SetAlternativeServices(
+  SetAlternativeServices(
       origin, AlternativeServiceInfoVector(
                   /*size=*/1,
                   AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
                       alternative_service, expiration, advertised_versions)));
 }
 
-bool HttpServerProperties::SetAlternativeServices(
+void HttpServerProperties::SetAlternativeServices(
     const url::SchemeHostPort& origin,
     const AlternativeServiceInfoVector& alternative_service_info_vector) {
   auto it = alternative_service_map_.Peek(origin);
@@ -307,11 +311,11 @@
   if (alternative_service_info_vector.empty()) {
     RemoveAltSvcCanonicalHost(origin);
     if (it == alternative_service_map_.end())
-      return false;
+      return;
 
     alternative_service_map_.Erase(it);
     MaybeQueueWriteProperties();
-    return true;
+    return;
   }
 
   bool need_update_pref = true;
@@ -376,8 +380,6 @@
 
   if (need_update_pref)
     MaybeQueueWriteProperties();
-
-  return need_update_pref;
 }
 
 void HttpServerProperties::MarkAlternativeServiceBroken(
@@ -422,11 +424,10 @@
     MaybeQueueWriteProperties();
 }
 
-bool HttpServerProperties::OnDefaultNetworkChanged() {
+void HttpServerProperties::OnDefaultNetworkChanged() {
   bool changed = broken_alternative_services_.OnDefaultNetworkChanged();
   if (changed)
     MaybeQueueWriteProperties();
-  return changed;
 }
 
 const AlternativeServiceMap& HttpServerProperties::alternative_service_map()
@@ -539,7 +540,7 @@
   return server_network_stats_map_;
 }
 
-bool HttpServerProperties::SetQuicServerInfo(
+void HttpServerProperties::SetQuicServerInfo(
     const quic::QuicServerId& server_id,
     const std::string& server_info) {
   auto it = quic_server_info_map_.Peek(server_id);
@@ -549,7 +550,6 @@
   UpdateCanonicalServerInfoMap(server_id);
   if (changed)
     MaybeQueueWriteProperties();
-  return changed;
 }
 
 const std::string* HttpServerProperties::GetQuicServerInfo(
@@ -757,8 +757,7 @@
     std::unique_ptr<BrokenAlternativeServiceList>
         broken_alternative_service_list,
     std::unique_ptr<RecentlyBrokenAlternativeServices>
-        recently_broken_alternative_services,
-    bool prefs_corrupt) {
+        recently_broken_alternative_services) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   DCHECK(!is_initialized_);
@@ -781,10 +780,12 @@
 
   is_initialized_ = true;
 
-  // TODO(mmenke): Corrupt prefs will be modified in the same way if they're
-  // loaded a second time, so this doesn't seem to get us anything. Remove it.
-  if (prefs_corrupt)
+  if (queue_write_on_load_) {
+    // Leaving this as true doesn't actually have any effect, but seems best to
+    // be safe.
+    queue_write_on_load_ = false;
     MaybeQueueWriteProperties();
+  }
 }
 
 void HttpServerProperties::OnSpdyServersLoaded(
@@ -912,8 +913,11 @@
 void HttpServerProperties::MaybeQueueWriteProperties() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-  if (prefs_update_timer_.IsRunning() || !properties_manager_ ||
-      !is_initialized_) {
+  if (prefs_update_timer_.IsRunning() || !properties_manager_)
+    return;
+
+  if (!is_initialized_) {
+    queue_write_on_load_ = true;
     return;
   }
 
diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h
index 43005e7..7657e4f8 100644
--- a/net/http/http_server_properties.h
+++ b/net/http/http_server_properties.h
@@ -215,18 +215,14 @@
   // Set a single HTTP/2 alternative service for |origin|.  Previous
   // alternative services for |origin| are discarded.
   // |alternative_service.host| may be empty.
-  // Return true if |alternative_service_map_| has changed significantly enough
-  // that it should be persisted to disk.
-  bool SetHttp2AlternativeService(const url::SchemeHostPort& origin,
+  void SetHttp2AlternativeService(const url::SchemeHostPort& origin,
                                   const AlternativeService& alternative_service,
                                   base::Time expiration);
 
   // Set a single QUIC alternative service for |origin|.  Previous alternative
   // services for |origin| are discarded.
   // |alternative_service.host| may be empty.
-  // Return true if |alternative_service_map_| has changed significantly enough
-  // that it should be persisted to disk.
-  bool SetQuicAlternativeService(
+  void SetQuicAlternativeService(
       const url::SchemeHostPort& origin,
       const AlternativeService& alternative_service,
       base::Time expiration,
@@ -236,9 +232,7 @@
   // |origin| are discarded.
   // Hostnames in |alternative_service_info_vector| may be empty.
   // |alternative_service_info_vector| may be empty.
-  // Return true if |alternative_service_map_| has changed significantly enough
-  // that it should be persisted to disk.
-  bool SetAlternativeServices(
+  void SetAlternativeServices(
       const url::SchemeHostPort& origin,
       const AlternativeServiceInfoVector& alternative_service_info_vector);
 
@@ -274,9 +268,7 @@
   // Called when the default network changes.
   // Clears all the alternative services that were marked broken until the
   // default network changed.
-  // Returns true if there is any broken alternative service affected by the
-  // default network change.
-  bool OnDefaultNetworkChanged();
+  void OnDefaultNetworkChanged();
 
   // Returns all alternative service mappings.
   // Returned alternative services may have empty hostnames.
@@ -304,8 +296,7 @@
   const ServerNetworkStatsMap& server_network_stats_map() const;
 
   // Save QuicServerInfo (in std::string form) for the given |server_id|.
-  // Returns true if the value has changed otherwise it returns false.
-  bool SetQuicServerInfo(const quic::QuicServerId& server_id,
+  void SetQuicServerInfo(const quic::QuicServerId& server_id,
                          const std::string& server_info);
 
   // Get QuicServerInfo (in std::string form) for the given |server_id|.
@@ -424,8 +415,7 @@
       std::unique_ptr<BrokenAlternativeServiceList>
           broken_alternative_service_list,
       std::unique_ptr<RecentlyBrokenAlternativeServices>
-          recently_broken_alternative_services,
-      bool prefs_corrupt);
+          recently_broken_alternative_services);
 
   // These methods are called by OnPrefsLoaded to handle merging properties
   // loaded from prefs with what has been learned while waiting for prefs to
@@ -460,6 +450,11 @@
   // |properties_manager_|. Always true if |properties_manager_| is nullptr.
   bool is_initialized_;
 
+  // Queue a write when resources finish loading. Set to true when
+  // MaybeQueueWriteProperties() is invoked while still waiting on
+  // initialization to complete.
+  bool queue_write_on_load_;
+
   // Used to load/save properties from/to preferences. May be nullptr.
   std::unique_ptr<HttpServerPropertiesManager> properties_manager_;
 
diff --git a/net/http/http_server_properties_manager.cc b/net/http/http_server_properties_manager.cc
index 62441f1e..4f42ecb 100644
--- a/net/http/http_server_properties_manager.cc
+++ b/net/http/http_server_properties_manager.cc
@@ -136,8 +136,7 @@
     std::unique_ptr<BrokenAlternativeServiceList>*
         broken_alternative_service_list,
     std::unique_ptr<RecentlyBrokenAlternativeServices>*
-        recently_broken_alternative_services,
-    bool* detected_corrupted_prefs) {
+        recently_broken_alternative_services) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   net_log_.EndEvent(NetLogEventType::HTTP_SERVER_PROPERTIES_INITIALIZATION);
@@ -195,20 +194,15 @@
     --it;
     if (!it->GetAsDictionary(&servers_dict)) {
       DVLOG(1) << "Malformed http_server_properties for servers dictionary.";
-      *detected_corrupted_prefs = true;
       continue;
     }
-    if (!AddServersData(*servers_dict, spdy_servers_map->get(),
-                        alternative_service_map->get(),
-                        server_network_stats_map->get())) {
-      *detected_corrupted_prefs = true;
-    }
+    AddServersData(*servers_dict, spdy_servers_map->get(),
+                   alternative_service_map->get(),
+                   server_network_stats_map->get());
   }
 
-  if (!AddToQuicServerInfoMap(*http_server_properties_dict,
-                              quic_server_info_map->get())) {
-    *detected_corrupted_prefs = true;
-  }
+  AddToQuicServerInfoMap(*http_server_properties_dict,
+                         quic_server_info_map->get());
 
   // Read list containing broken and recently-broken alternative services, if
   // it exists.
@@ -228,15 +222,11 @@
       const base::DictionaryValue* entry_dict;
       if (!it->GetAsDictionary(&entry_dict)) {
         DVLOG(1) << "Malformed broken alterantive service entry.";
-        *detected_corrupted_prefs = true;
         continue;
       }
-      if (!AddToBrokenAlternativeServices(
-              *entry_dict, broken_alternative_service_list->get(),
-              recently_broken_alternative_services->get())) {
-        *detected_corrupted_prefs = true;
-        continue;
-      }
+      AddToBrokenAlternativeServices(
+          *entry_dict, broken_alternative_service_list->get(),
+          recently_broken_alternative_services->get());
     }
   }
 
@@ -263,7 +253,7 @@
   }
 }
 
-bool HttpServerPropertiesManager::AddToBrokenAlternativeServices(
+void HttpServerPropertiesManager::AddToBrokenAlternativeServices(
     const base::DictionaryValue& broken_alt_svc_entry_dict,
     BrokenAlternativeServiceList* broken_alternative_service_list,
     RecentlyBrokenAlternativeServices* recently_broken_alternative_services) {
@@ -271,7 +261,7 @@
   if (!ParseAlternativeServiceDict(broken_alt_svc_entry_dict, false,
                                    "broken alternative services",
                                    &alt_service)) {
-    return false;
+    return;
   }
 
   // Each entry must contain either broken-count and/or broken-until fields.
@@ -285,11 +275,11 @@
             kBrokenCountKey, &broken_count)) {
       DVLOG(1) << "Recently broken alternative service has malformed "
                << "broken-count.";
-      return false;
+      return;
     }
     if (broken_count < 0) {
       DVLOG(1) << "Broken alternative service has negative broken-count.";
-      return false;
+      return;
     }
     recently_broken_alternative_services->Put(alt_service, broken_count);
     contains_broken_count_or_broken_until = true;
@@ -305,7 +295,7 @@
         !base::StringToInt64(expiration_string, &expiration_int64)) {
       DVLOG(1) << "Broken alternative service has malformed broken-until "
                << "string.";
-      return false;
+      return;
     }
 
     time_t expiration_time_t = static_cast<time_t>(expiration_int64);
@@ -321,13 +311,10 @@
   if (!contains_broken_count_or_broken_until) {
     DVLOG(1) << "Broken alternative service has neither broken-count nor "
              << "broken-until specified.";
-    return false;
   }
-
-  return true;
 }
 
-bool HttpServerPropertiesManager::AddServersData(
+void HttpServerPropertiesManager::AddServersData(
     const base::DictionaryValue& servers_dict,
     SpdyServersMap* spdy_servers_map,
     AlternativeServiceMap* alternative_service_map,
@@ -340,13 +327,13 @@
     url::SchemeHostPort spdy_server((GURL(spdy_server_url)));
     if (spdy_server.host().empty()) {
       DVLOG(1) << "Malformed http_server_properties for server: " << server_str;
-      return false;
+      return;
     }
 
     const base::DictionaryValue* server_pref_dict = nullptr;
     if (!it.value().GetAsDictionary(&server_pref_dict)) {
       DVLOG(1) << "Malformed http_server_properties server: " << server_str;
-      return false;
+      return;
     }
 
     // Get if server supports Spdy.
@@ -356,14 +343,11 @@
       spdy_servers_map->Put(spdy_server.Serialize(), supports_spdy);
     }
 
-    if (!AddToAlternativeServiceMap(spdy_server, *server_pref_dict,
-                                    alternative_service_map) ||
-        !AddToNetworkStatsMap(spdy_server, *server_pref_dict,
-                              network_stats_map)) {
-      return false;
+    if (AddToAlternativeServiceMap(spdy_server, *server_pref_dict,
+                                   alternative_service_map)) {
+      AddToNetworkStatsMap(spdy_server, *server_pref_dict, network_stats_map);
     }
   }
-  return true;
 }
 
 bool HttpServerPropertiesManager::ParseAlternativeServiceDict(
@@ -514,34 +498,32 @@
   return true;
 }
 
-bool HttpServerPropertiesManager::ReadSupportsQuic(
+void HttpServerPropertiesManager::ReadSupportsQuic(
     const base::DictionaryValue& http_server_properties_dict,
     IPAddress* last_quic_address) {
   const base::DictionaryValue* supports_quic_dict = nullptr;
   if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion(
           kSupportsQuicKey, &supports_quic_dict)) {
-    return true;
+    return;
   }
   bool used_quic = false;
   if (!supports_quic_dict->GetBooleanWithoutPathExpansion(kUsedQuicKey,
                                                           &used_quic)) {
     DVLOG(1) << "Malformed SupportsQuic";
-    return false;
+    return;
   }
   if (!used_quic)
-    return false;
+    return;
 
   std::string address;
   if (!supports_quic_dict->GetStringWithoutPathExpansion(kAddressKey,
                                                          &address) ||
       !last_quic_address->AssignFromIPLiteral(address)) {
     DVLOG(1) << "Malformed SupportsQuic";
-    return false;
   }
-  return true;
 }
 
-bool HttpServerPropertiesManager::AddToNetworkStatsMap(
+void HttpServerPropertiesManager::AddToNetworkStatsMap(
     const url::SchemeHostPort& server,
     const base::DictionaryValue& server_pref_dict,
     ServerNetworkStatsMap* network_stats_map) {
@@ -549,34 +531,32 @@
   const base::DictionaryValue* server_network_stats_dict = nullptr;
   if (!server_pref_dict.GetDictionaryWithoutPathExpansion(
           kNetworkStatsKey, &server_network_stats_dict)) {
-    return true;
+    return;
   }
   int srtt;
   if (!server_network_stats_dict->GetIntegerWithoutPathExpansion(kSrttKey,
                                                                  &srtt)) {
     DVLOG(1) << "Malformed ServerNetworkStats for server: "
              << server.Serialize();
-    return false;
+    return;
   }
   ServerNetworkStats server_network_stats;
   server_network_stats.srtt = base::TimeDelta::FromMicroseconds(srtt);
   // TODO(rtenneti): When QUIC starts using bandwidth_estimate, then persist
   // bandwidth_estimate.
   network_stats_map->Put(server, server_network_stats);
-  return true;
 }
 
-bool HttpServerPropertiesManager::AddToQuicServerInfoMap(
+void HttpServerPropertiesManager::AddToQuicServerInfoMap(
     const base::DictionaryValue& http_server_properties_dict,
     QuicServerInfoMap* quic_server_info_map) {
   const base::DictionaryValue* quic_servers_dict = nullptr;
   if (!http_server_properties_dict.GetDictionaryWithoutPathExpansion(
           kQuicServers, &quic_servers_dict)) {
     DVLOG(1) << "Malformed http_server_properties for quic_servers.";
-    return true;
+    return;
   }
 
-  bool detected_corrupted_prefs = false;
   for (base::DictionaryValue::Iterator it(*quic_servers_dict); !it.IsAtEnd();
        it.Advance()) {
     // Get quic_server_id.
@@ -587,7 +567,6 @@
     if (quic_server_id.host().empty()) {
       DVLOG(1) << "Malformed http_server_properties for quic server: "
                << quic_server_id_str;
-      detected_corrupted_prefs = true;
       continue;
     }
 
@@ -595,7 +574,6 @@
     if (!it.value().GetAsDictionary(&quic_server_pref_dict)) {
       DVLOG(1) << "Malformed http_server_properties quic server dict: "
                << quic_server_id_str;
-      detected_corrupted_prefs = true;
       continue;
     }
 
@@ -604,12 +582,10 @@
             kServerInfoKey, &quic_server_info)) {
       DVLOG(1) << "Malformed http_server_properties quic server info: "
                << quic_server_id_str;
-      detected_corrupted_prefs = true;
       continue;
     }
     quic_server_info_map->Put(quic_server_id, quic_server_info);
   }
-  return !detected_corrupted_prefs;
 }
 
 void HttpServerPropertiesManager::WriteToPrefs(
@@ -916,20 +892,18 @@
   std::unique_ptr<BrokenAlternativeServiceList> broken_alternative_service_list;
   std::unique_ptr<RecentlyBrokenAlternativeServices>
       recently_broken_alternative_services;
-  bool detected_corrupted_prefs = false;
 
   ReadPrefs(&spdy_servers_map, &alternative_service_map,
             &server_network_stats_map, &last_quic_address,
             &quic_server_info_map, &broken_alternative_service_list,
-            &recently_broken_alternative_services, &detected_corrupted_prefs);
+            &recently_broken_alternative_services);
 
   std::move(on_prefs_loaded_callback_)
       .Run(std::move(spdy_servers_map), std::move(alternative_service_map),
            std::move(server_network_stats_map), last_quic_address,
            std::move(quic_server_info_map),
            std::move(broken_alternative_service_list),
-           std::move(recently_broken_alternative_services),
-           detected_corrupted_prefs);
+           std::move(recently_broken_alternative_services));
 }
 
 }  // namespace net
diff --git a/net/http/http_server_properties_manager.h b/net/http/http_server_properties_manager.h
index c2a3f5a..11d3d86 100644
--- a/net/http/http_server_properties_manager.h
+++ b/net/http/http_server_properties_manager.h
@@ -39,8 +39,7 @@
   // Called when prefs are loaded. If prefs completely failed to load,
   // everything will be nullptr. Otherwise, everything will be populated, except
   // |broken_alternative_service_list| and
-  // |recently_broken_alternative_services|, which may be null. If prefs were
-  // present but some were corrupt, |prefs_corrupt| will be true.
+  // |recently_broken_alternative_services|, which may be null.
   using OnPrefsLoadedCallback = base::OnceCallback<void(
       std::unique_ptr<SpdyServersMap> spdy_servers_map,
       std::unique_ptr<AlternativeServiceMap> alternative_service_map,
@@ -50,8 +49,7 @@
       std::unique_ptr<BrokenAlternativeServiceList>
           broken_alternative_service_list,
       std::unique_ptr<RecentlyBrokenAlternativeServices>
-          recently_broken_alternative_services,
-      bool prefs_corrupt)>;
+          recently_broken_alternative_services)>;
 
   using GetCannonicalSuffix =
       base::RepeatingCallback<const std::string*(const std::string& host)>;
@@ -79,6 +77,8 @@
   // present, leaves all values alone. Otherwise, populates them all, with the
   // possible exception of the two broken alt services lists.
   //
+  // Corrupted data is ignored.
+  //
   // TODO(mmenke): Consider always populating fields, unconditionally, for a
   // simpler API.
   void ReadPrefs(
@@ -90,8 +90,7 @@
       std::unique_ptr<BrokenAlternativeServiceList>*
           broken_alternative_service_list,
       std::unique_ptr<RecentlyBrokenAlternativeServices>*
-          recently_broken_alternative_services,
-      bool* detected_corrupted_prefs);
+          recently_broken_alternative_services);
 
   void set_max_server_configs_stored_in_properties(
       size_t max_server_configs_stored_in_properties) {
@@ -128,7 +127,7 @@
                            DoNotLoadAltSvcForInsecureOrigins);
   FRIEND_TEST_ALL_PREFIXES(HttpServerPropertiesManagerTest,
                            DoNotLoadExpiredAlternativeService);
-  bool AddServersData(const base::DictionaryValue& server_dict,
+  void AddServersData(const base::DictionaryValue& server_dict,
                       SpdyServersMap* spdy_servers_map,
                       AlternativeServiceMap* alternative_service_map,
                       ServerNetworkStatsMap* network_stats_map);
@@ -153,14 +152,14 @@
       const url::SchemeHostPort& server,
       const base::DictionaryValue& server_dict,
       AlternativeServiceMap* alternative_service_map);
-  bool ReadSupportsQuic(const base::DictionaryValue& server_dict,
+  void ReadSupportsQuic(const base::DictionaryValue& server_dict,
                         IPAddress* last_quic_address);
-  bool AddToNetworkStatsMap(const url::SchemeHostPort& server,
+  void AddToNetworkStatsMap(const url::SchemeHostPort& server,
                             const base::DictionaryValue& server_dict,
                             ServerNetworkStatsMap* network_stats_map);
-  bool AddToQuicServerInfoMap(const base::DictionaryValue& server_dict,
+  void AddToQuicServerInfoMap(const base::DictionaryValue& server_dict,
                               QuicServerInfoMap* quic_server_info_map);
-  bool AddToBrokenAlternativeServices(
+  void AddToBrokenAlternativeServices(
       const base::DictionaryValue& broken_alt_svc_entry_dict,
       BrokenAlternativeServiceList* broken_alternative_service_list,
       RecentlyBrokenAlternativeServices* recently_broken_alternative_services);
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc
index 7d47e53..6d36b60f 100644
--- a/net/http/http_server_properties_manager_unittest.cc
+++ b/net/http/http_server_properties_manager_unittest.cc
@@ -100,8 +100,6 @@
 
 }  // namespace
 
-// TODO(mmenke): Move these tests in with the other HttpServerProperties
-// tests, and rename |http_server_props_manager_|.
 class HttpServerPropertiesManagerTest : public testing::Test,
                                         public WithScopedTaskEnvironment {
  protected:
@@ -115,11 +113,11 @@
         HttpNetworkSession::Params().quic_params.supported_versions;
     pref_delegate_ = new MockPrefDelegate;
 
-    http_server_props_manager_ = std::make_unique<HttpServerProperties>(
+    http_server_props_ = std::make_unique<HttpServerProperties>(
         base::WrapUnique(pref_delegate_), /*net_log=*/nullptr,
         GetMockTickClock());
 
-    EXPECT_FALSE(http_server_props_manager_->IsInitialized());
+    EXPECT_FALSE(http_server_props_->IsInitialized());
     EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
     EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   }
@@ -128,14 +126,14 @@
   // couple extra expectations about whether any tasks are posted, and if a pref
   // update is queued.
   //
-  // |expect_pref_update| should be true if |dict| has a set of corrupted prefs
-  // and should trigger a pref update to fix the cached prefs.
+  // |expect_pref_update| should be true if a pref update is expected to be
+  // queued in response to the load.
   void InitializePrefs(
       const base::DictionaryValue& dict = base::DictionaryValue(),
       bool expect_pref_update = false) {
-    EXPECT_FALSE(http_server_props_manager_->IsInitialized());
+    EXPECT_FALSE(http_server_props_->IsInitialized());
     pref_delegate_->InitializePrefs(dict);
-    EXPECT_TRUE(http_server_props_manager_->IsInitialized());
+    EXPECT_TRUE(http_server_props_->IsInitialized());
     if (!expect_pref_update) {
       EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
       EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -154,12 +152,12 @@
     // HttpServerProperties::
     //     ScheduleBrokenAlternateProtocolMappingsExpiration()).
     base::RunLoop().RunUntilIdle();
-    http_server_props_manager_.reset();
+    http_server_props_.reset();
   }
 
   bool HasAlternativeService(const url::SchemeHostPort& server) {
     const AlternativeServiceInfoVector alternative_service_info_vector =
-        http_server_props_manager_->GetAlternativeServiceInfos(server);
+        http_server_props_->GetAlternativeServiceInfos(server);
     return !alternative_service_info_vector.empty();
   }
 
@@ -171,7 +169,7 @@
   }
 
   MockPrefDelegate* pref_delegate_;  // Owned by HttpServerPropertiesManager.
-  std::unique_ptr<HttpServerProperties> http_server_props_manager_;
+  std::unique_ptr<HttpServerProperties> http_server_props_;
   base::Time one_day_from_now_;
   quic::ParsedQuicVersionVector advertised_versions_;
 
@@ -220,8 +218,8 @@
   http_server_properties_dict.SetWithoutPathExpansion(
       "quic_servers", std::move(quic_servers_dict));
 
-  // Set up the pref. Prefs should be overwritten, due to the bad data.
-  InitializePrefs(http_server_properties_dict, true /* expect_pref_update */);
+  // Set up the pref.
+  InitializePrefs(http_server_properties_dict);
 
   // Verify that nothing is set.
   HostPortPair google_host_port_pair =
@@ -229,13 +227,12 @@
   url::SchemeHostPort gooler_server("http", google_host_port_pair.host(),
                                     google_host_port_pair.port());
 
-  EXPECT_FALSE(
-      http_server_props_manager_->SupportsRequestPriority(gooler_server));
+  EXPECT_FALSE(http_server_props_->SupportsRequestPriority(gooler_server));
   EXPECT_FALSE(HasAlternativeService(gooler_server));
   const ServerNetworkStats* stats1 =
-      http_server_props_manager_->GetServerNetworkStats(gooler_server);
+      http_server_props_->GetServerNetworkStats(gooler_server);
   EXPECT_EQ(nullptr, stats1);
-  EXPECT_EQ(0u, http_server_props_manager_->quic_server_info_map().size());
+  EXPECT_EQ(0u, http_server_props_->quic_server_info_map().size());
 }
 
 TEST_F(HttpServerPropertiesManagerTest, BadCachedAltProtocolPort) {
@@ -263,8 +260,8 @@
     http_server_properties_dict.SetWithoutPathExpansion(
         "servers", std::move(servers_list));
 
-    // Set up the pref. Prefs should be overwritten, due to the bad data.
-    InitializePrefs(http_server_properties_dict, true /* expect_pref_update */);
+    // Set up the pref.
+    InitializePrefs(http_server_properties_dict);
 
     // Verify alternative service is not set.
     EXPECT_FALSE(HasAlternativeService(
@@ -276,12 +273,11 @@
 
   // Add mail.google.com:443 as a supporting spdy server.
   url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
-  EXPECT_FALSE(
-      http_server_props_manager_->SupportsRequestPriority(spdy_server));
-  http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+  EXPECT_FALSE(http_server_props_->SupportsRequestPriority(spdy_server));
+  http_server_props_->SetSupportsSpdy(spdy_server, true);
   // Setting the value to the same thing again should not trigger another pref
   // update.
-  http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+  http_server_props_->SetSupportsSpdy(spdy_server, true);
 
   // Run the task.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -291,11 +287,11 @@
 
   // Setting the value to the same thing again should not trigger another pref
   // update.
-  http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+  http_server_props_->SetSupportsSpdy(spdy_server, true);
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
 
-  EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
+  EXPECT_TRUE(http_server_props_->SupportsRequestPriority(spdy_server));
 }
 
 // Regression test for crbug.com/670519. Test that there is only one pref update
@@ -309,9 +305,8 @@
   // Post an update task. SetSupportsSpdy calls ScheduleUpdatePrefs with a delay
   // of 60ms.
   url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
-  EXPECT_FALSE(
-      http_server_props_manager_->SupportsRequestPriority(spdy_server));
-  http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+  EXPECT_FALSE(http_server_props_->SupportsRequestPriority(spdy_server));
+  http_server_props_->SetSupportsSpdy(spdy_server, true);
   // The pref update task should be scheduled.
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
 
@@ -322,7 +317,7 @@
   // Set another spdy server to trigger another call to
   // ScheduleUpdatePrefs. There should be no new update posted.
   url::SchemeHostPort spdy_server2("https", "drive.google.com", 443);
-  http_server_props_manager_->SetSupportsSpdy(spdy_server2, true);
+  http_server_props_->SetSupportsSpdy(spdy_server2, true);
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
 
   // Move forward the extra 20ms. The pref update should be executed.
@@ -331,14 +326,13 @@
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
   EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
 
-  EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
-  EXPECT_TRUE(
-      http_server_props_manager_->SupportsRequestPriority(spdy_server2));
+  EXPECT_TRUE(http_server_props_->SupportsRequestPriority(spdy_server));
+  EXPECT_TRUE(http_server_props_->SupportsRequestPriority(spdy_server2));
   // Set the third spdy server to trigger one more call to
   // ScheduleUpdatePrefs. A new update task should be posted now since the
   // previous one is completed.
   url::SchemeHostPort spdy_server3("https", "maps.google.com", 443);
-  http_server_props_manager_->SetSupportsSpdy(spdy_server3, true);
+  http_server_props_->SetSupportsSpdy(spdy_server3, true);
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
 
   // Run the task.
@@ -354,10 +348,10 @@
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
                                                443);
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
   // ExpectScheduleUpdatePrefs() should be called only once.
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
 
   // Run the task.
@@ -367,7 +361,7 @@
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
   AlternativeServiceInfoVector alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   ASSERT_EQ(1u, alternative_service_info_vector.size());
   EXPECT_EQ(alternative_service,
             alternative_service_info_vector[0].alternative_service());
@@ -389,11 +383,11 @@
   alternative_service_info_vector.push_back(
       AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
           alternative_service2, one_day_from_now_, advertised_versions_));
-  http_server_props_manager_->SetAlternativeServices(
-      spdy_server_mail, alternative_service_info_vector);
+  http_server_props_->SetAlternativeServices(spdy_server_mail,
+                                             alternative_service_info_vector);
   // ExpectScheduleUpdatePrefs() should be called only once.
-  http_server_props_manager_->SetAlternativeServices(
-      spdy_server_mail, alternative_service_info_vector);
+  http_server_props_->SetAlternativeServices(spdy_server_mail,
+                                             alternative_service_info_vector);
 
   // Run the task.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -401,7 +395,7 @@
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
   AlternativeServiceInfoVector alternative_service_info_vector2 =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   ASSERT_EQ(2u, alternative_service_info_vector2.size());
   EXPECT_EQ(alternative_service1,
             alternative_service_info_vector2[0].alternative_service());
@@ -416,8 +410,8 @@
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
                                                443);
-  http_server_props_manager_->SetAlternativeServices(
-      spdy_server_mail, AlternativeServiceInfoVector());
+  http_server_props_->SetAlternativeServices(spdy_server_mail,
+                                             AlternativeServiceInfoVector());
 
   EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -435,29 +429,29 @@
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
 
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service);
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->MarkAlternativeServiceBroken(alternative_service);
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   // In addition to the pref update task, there's now a task to mark the
   // alternative service as no longer broken.
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_->ConfirmAlternativeService(alternative_service);
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->ConfirmAlternativeService(alternative_service);
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -467,20 +461,20 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 }
 
 // Check the case that prefs are loaded only after setting alternative service
-// info. Prefs should not be written.
+// info. Prefs should not be written until after the load happens.
 TEST_F(HttpServerPropertiesManagerTest, LateLoadAlternativeServiceInfo) {
   url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80);
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
                                                443);
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
 
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -488,23 +482,21 @@
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
 
   AlternativeServiceInfoVector alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   ASSERT_EQ(1u, alternative_service_info_vector.size());
   EXPECT_EQ(alternative_service,
             alternative_service_info_vector[0].alternative_service());
 
   // Initializing prefs does not result in a task to write the prefs.
-  InitializePrefs();
-  EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
-  EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
+  InitializePrefs(base::DictionaryValue(), true /* expect_pref_update */);
   alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   EXPECT_EQ(1u, alternative_service_info_vector.size());
 
   // Updating the entry should result in a task to save prefs. Have to at least
   // double (or half) the lifetime, to ensure the change triggers a save to
   // prefs.
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service,
       one_day_from_now_ + base::TimeDelta::FromDays(2));
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -512,7 +504,7 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
   alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   EXPECT_EQ(1u, alternative_service_info_vector.size());
 }
 
@@ -523,7 +515,7 @@
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   const AlternativeService alternative_service(kProtoHTTP2, "mail.google.com",
                                                443);
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
 
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -532,14 +524,14 @@
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
 
   AlternativeServiceInfoVector alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   ASSERT_EQ(1u, alternative_service_info_vector.size());
   EXPECT_EQ(alternative_service,
             alternative_service_info_vector[0].alternative_service());
 
   // Clearing prefs should result in a task to write the prefs.
   bool callback_invoked_ = false;
-  http_server_props_manager_->Clear(base::BindOnce(
+  http_server_props_->Clear(base::BindOnce(
       [](bool* callback_invoked) {
         EXPECT_FALSE(*callback_invoked);
         *callback_invoked = true;
@@ -550,18 +542,18 @@
   std::move(pref_delegate_->GetSetPropertiesCallback()).Run();
   EXPECT_TRUE(callback_invoked_);
   alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   EXPECT_EQ(0u, alternative_service_info_vector.size());
 
   // Re-creating the entry should result in a task to save prefs.
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
   alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(spdy_server_mail);
+      http_server_props_->GetAlternativeServiceInfos(spdy_server_mail);
   EXPECT_EQ(1u, alternative_service_info_vector.size());
 }
 
@@ -576,31 +568,30 @@
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
 
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_
-      ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
-          alternative_service);
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
+      alternative_service);
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   // In addition to the pref update task, there's now a task to mark the
   // alternative service as no longer broken.
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_->ConfirmAlternativeService(alternative_service);
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->ConfirmAlternativeService(alternative_service);
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -610,9 +601,9 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 }
 
@@ -627,31 +618,30 @@
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
 
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_
-      ->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
-          alternative_service);
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->MarkAlternativeServiceBrokenUntilDefaultNetworkChanges(
+      alternative_service);
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   // In addition to the pref update task, there's now a task to mark the
   // alternative service as no longer broken.
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_->OnDefaultNetworkChanged();
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->OnDefaultNetworkChanged();
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -661,9 +651,9 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 }
 
@@ -677,29 +667,29 @@
   EXPECT_FALSE(HasAlternativeService(spdy_server_mail));
   alternative_service = AlternativeService(kProtoHTTP2, "mail.google.com", 443);
 
-  http_server_props_manager_->SetHttp2AlternativeService(
+  http_server_props_->SetHttp2AlternativeService(
       spdy_server_mail, alternative_service, one_day_from_now_);
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_FALSE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(1u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service);
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->MarkAlternativeServiceBroken(alternative_service);
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   // In addition to the pref update task, there's now a task to mark the
   // alternative service as no longer broken.
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
 
-  http_server_props_manager_->OnDefaultNetworkChanged();
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  http_server_props_->OnDefaultNetworkChanged();
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 
   EXPECT_EQ(2u, GetPendingMainThreadTaskCount());
@@ -709,9 +699,9 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      alternative_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(alternative_service));
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       alternative_service));
 }
 
@@ -719,12 +709,12 @@
   InitializePrefs();
 
   IPAddress address;
-  EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address));
+  EXPECT_FALSE(http_server_props_->GetSupportsQuic(&address));
 
   IPAddress actual_address(127, 0, 0, 1);
-  http_server_props_manager_->SetSupportsQuic(true, actual_address);
+  http_server_props_->SetSupportsQuic(true, actual_address);
   // Another task should not be scheduled.
-  http_server_props_manager_->SetSupportsQuic(true, actual_address);
+  http_server_props_->SetSupportsQuic(true, actual_address);
 
   // Run the task.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -732,11 +722,11 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
+  EXPECT_TRUE(http_server_props_->GetSupportsQuic(&address));
   EXPECT_EQ(actual_address, address);
 
   // Another task should not be scheduled.
-  http_server_props_manager_->SetSupportsQuic(true, actual_address);
+  http_server_props_->SetSupportsQuic(true, actual_address);
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
 }
@@ -746,13 +736,13 @@
 
   url::SchemeHostPort mail_server("http", "mail.google.com", 80);
   const ServerNetworkStats* stats =
-      http_server_props_manager_->GetServerNetworkStats(mail_server);
+      http_server_props_->GetServerNetworkStats(mail_server);
   EXPECT_EQ(nullptr, stats);
   ServerNetworkStats stats1;
   stats1.srtt = base::TimeDelta::FromMicroseconds(10);
-  http_server_props_manager_->SetServerNetworkStats(mail_server, stats1);
+  http_server_props_->SetServerNetworkStats(mail_server, stats1);
   // Another task should not be scheduled.
-  http_server_props_manager_->SetServerNetworkStats(mail_server, stats1);
+  http_server_props_->SetServerNetworkStats(mail_server, stats1);
 
   // Run the task.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -761,15 +751,15 @@
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
   // Another task should not be scheduled.
-  http_server_props_manager_->SetServerNetworkStats(mail_server, stats1);
+  http_server_props_->SetServerNetworkStats(mail_server, stats1);
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   EXPECT_EQ(GetPendingMainThreadTaskCount(), 0u);
 
   const ServerNetworkStats* stats2 =
-      http_server_props_manager_->GetServerNetworkStats(mail_server);
+      http_server_props_->GetServerNetworkStats(mail_server);
   EXPECT_EQ(10, stats2->srtt.ToInternalValue());
 
-  http_server_props_manager_->ClearServerNetworkStats(mail_server);
+  http_server_props_->ClearServerNetworkStats(mail_server);
 
   // Run the task.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -777,8 +767,7 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_EQ(nullptr,
-            http_server_props_manager_->GetServerNetworkStats(mail_server));
+  EXPECT_EQ(nullptr, http_server_props_->GetServerNetworkStats(mail_server));
 }
 
 TEST_F(HttpServerPropertiesManagerTest, QuicServerInfo) {
@@ -786,13 +775,11 @@
 
   quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
   EXPECT_EQ(nullptr,
-            http_server_props_manager_->GetQuicServerInfo(mail_quic_server_id));
+            http_server_props_->GetQuicServerInfo(mail_quic_server_id));
   std::string quic_server_info1("quic_server_info1");
-  http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
-                                                quic_server_info1);
+  http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
   // Another task should not be scheduled.
-  http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
-                                                quic_server_info1);
+  http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
 
   // Run the task.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -800,12 +787,11 @@
   FastForwardUntilNoTasksRemain();
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
-                                   mail_quic_server_id));
+  EXPECT_EQ(quic_server_info1,
+            *http_server_props_->GetQuicServerInfo(mail_quic_server_id));
 
   // Another task should not be scheduled.
-  http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
-                                                quic_server_info1);
+  http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
 }
@@ -829,19 +815,16 @@
   alt_svc_info_vector.push_back(
       AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
           broken_alternative_service, one_day_from_now_));
-  http_server_props_manager_->SetAlternativeServices(spdy_server,
-                                                     alt_svc_info_vector);
+  http_server_props_->SetAlternativeServices(spdy_server, alt_svc_info_vector);
 
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      broken_alternative_service);
-  http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
-  http_server_props_manager_->SetSupportsQuic(true, actual_address);
+  http_server_props_->MarkAlternativeServiceBroken(broken_alternative_service);
+  http_server_props_->SetSupportsSpdy(spdy_server, true);
+  http_server_props_->SetSupportsQuic(true, actual_address);
   ServerNetworkStats stats;
   stats.srtt = base::TimeDelta::FromMicroseconds(10);
-  http_server_props_manager_->SetServerNetworkStats(spdy_server, stats);
+  http_server_props_->SetServerNetworkStats(spdy_server, stats);
 
-  http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
-                                                quic_server_info1);
+  http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
 
   // Advance time by just enough so that the prefs update task is executed but
   // not the task to expire the brokenness of |broken_alternative_service|.
@@ -849,23 +832,23 @@
   EXPECT_NE(0u, GetPendingMainThreadTaskCount());
   EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
 
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
+  EXPECT_TRUE(http_server_props_->IsAlternativeServiceBroken(
       broken_alternative_service));
-  EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
+  EXPECT_TRUE(http_server_props_->SupportsRequestPriority(spdy_server));
   EXPECT_TRUE(HasAlternativeService(spdy_server));
   IPAddress address;
-  EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
+  EXPECT_TRUE(http_server_props_->GetSupportsQuic(&address));
   EXPECT_EQ(actual_address, address);
   const ServerNetworkStats* stats1 =
-      http_server_props_manager_->GetServerNetworkStats(spdy_server);
+      http_server_props_->GetServerNetworkStats(spdy_server);
   EXPECT_EQ(10, stats1->srtt.ToInternalValue());
-  EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo(
-                                   mail_quic_server_id));
+  EXPECT_EQ(quic_server_info1,
+            *http_server_props_->GetQuicServerInfo(mail_quic_server_id));
 
   // Clear http server data, which should instantly update prefs.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   bool callback_invoked_ = false;
-  http_server_props_manager_->Clear(base::BindOnce(
+  http_server_props_->Clear(base::BindOnce(
       [](bool* callback_invoked) {
         EXPECT_FALSE(*callback_invoked);
         *callback_invoked = true;
@@ -876,17 +859,16 @@
   std::move(pref_delegate_->GetSetPropertiesCallback()).Run();
   EXPECT_TRUE(callback_invoked_);
 
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+  EXPECT_FALSE(http_server_props_->IsAlternativeServiceBroken(
       broken_alternative_service));
-  EXPECT_FALSE(
-      http_server_props_manager_->SupportsRequestPriority(spdy_server));
+  EXPECT_FALSE(http_server_props_->SupportsRequestPriority(spdy_server));
   EXPECT_FALSE(HasAlternativeService(spdy_server));
-  EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address));
+  EXPECT_FALSE(http_server_props_->GetSupportsQuic(&address));
   const ServerNetworkStats* stats2 =
-      http_server_props_manager_->GetServerNetworkStats(spdy_server);
+      http_server_props_->GetServerNetworkStats(spdy_server);
   EXPECT_EQ(nullptr, stats2);
   EXPECT_EQ(nullptr,
-            http_server_props_manager_->GetQuicServerInfo(mail_quic_server_id));
+            http_server_props_->GetQuicServerInfo(mail_quic_server_id));
 }
 
 // https://crbug.com/444956: Add 200 alternative_service servers followed by
@@ -938,7 +920,7 @@
       server_gurl = GURL(StringPrintf("https://www.google.com:%d", i));
     url::SchemeHostPort server(server_gurl);
     AlternativeServiceInfoVector alternative_service_info_vector =
-        http_server_props_manager_->GetAlternativeServiceInfos(server);
+        http_server_props_->GetAlternativeServiceInfos(server);
     ASSERT_EQ(1u, alternative_service_info_vector.size());
     EXPECT_EQ(
         kProtoQUIC,
@@ -948,7 +930,7 @@
 
   // Verify SupportsQuic.
   IPAddress address;
-  ASSERT_TRUE(http_server_props_manager_->GetSupportsQuic(&address));
+  ASSERT_TRUE(http_server_props_->GetSupportsQuic(&address));
   EXPECT_EQ("127.0.0.1", address.ToString());
 }
 
@@ -974,40 +956,38 @@
   alternative_service_info_vector.push_back(
       AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
           www_alternative_service2, expiration2));
-  ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
-      server_www, alternative_service_info_vector));
+  http_server_props_->SetAlternativeServices(server_www,
+                                             alternative_service_info_vector);
 
   AlternativeService mail_alternative_service(kProtoHTTP2, "foo.google.com",
                                               444);
   base::Time expiration3 = base::Time::Max();
-  ASSERT_TRUE(http_server_props_manager_->SetHttp2AlternativeService(
-      server_mail, mail_alternative_service, expiration3));
+  http_server_props_->SetHttp2AlternativeService(
+      server_mail, mail_alternative_service, expiration3);
 
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      www_alternative_service2);
-  http_server_props_manager_->MarkAlternativeServiceRecentlyBroken(
+  http_server_props_->MarkAlternativeServiceBroken(www_alternative_service2);
+  http_server_props_->MarkAlternativeServiceRecentlyBroken(
       mail_alternative_service);
 
   // #3: Set SPDY server map
-  http_server_props_manager_->SetSupportsSpdy(server_www, false);
-  http_server_props_manager_->SetSupportsSpdy(server_mail, true);
-  http_server_props_manager_->SetSupportsSpdy(
+  http_server_props_->SetSupportsSpdy(server_www, false);
+  http_server_props_->SetSupportsSpdy(server_mail, true);
+  http_server_props_->SetSupportsSpdy(
       url::SchemeHostPort("http", "not_persisted.com", 80), false);
 
   // #4: Set ServerNetworkStats.
   ServerNetworkStats stats;
   stats.srtt = base::TimeDelta::FromInternalValue(42);
-  http_server_props_manager_->SetServerNetworkStats(server_mail, stats);
+  http_server_props_->SetServerNetworkStats(server_mail, stats);
 
   // #5: Set quic_server_info string.
   quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
   std::string quic_server_info1("quic_server_info1");
-  http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
-                                                quic_server_info1);
+  http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
 
   // #6: Set SupportsQuic.
   IPAddress actual_address(127, 0, 0, 1);
-  http_server_props_manager_->SetSupportsQuic(true, actual_address);
+  http_server_props_->SetSupportsQuic(true, actual_address);
 
   base::Time time_before_prefs_update = base::Time::Now();
 
@@ -1115,7 +1095,7 @@
 
   const url::SchemeHostPort server("https", "example.com", 443);
   AlternativeServiceMap alternative_service_map;
-  EXPECT_TRUE(http_server_props_manager_->properties_manager_for_testing()
+  EXPECT_TRUE(http_server_props_->properties_manager_for_testing()
                   ->AddToAlternativeServiceMap(server, *server_dict,
                                                &alternative_service_map));
 
@@ -1167,7 +1147,7 @@
 
   const url::SchemeHostPort server("http", "example.com", 80);
   AlternativeServiceMap alternative_service_map;
-  EXPECT_FALSE(http_server_props_manager_->properties_manager_for_testing()
+  EXPECT_FALSE(http_server_props_->properties_manager_for_testing()
                    ->AddToAlternativeServiceMap(server, *server_dict,
                                                 &alternative_service_map));
 
@@ -1189,8 +1169,7 @@
       AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
           broken_alternative_service, time_one_day_later));
   // #1: MarkAlternativeServiceBroken().
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      broken_alternative_service);
+  http_server_props_->MarkAlternativeServiceBroken(broken_alternative_service);
 
   const AlternativeService expired_alternative_service(
       kProtoHTTP2, "expired.example.com", 443);
@@ -1208,8 +1187,8 @@
 
   const url::SchemeHostPort server("https", "www.example.com", 443);
   // #2: SetAlternativeServices().
-  ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
-      server, alternative_service_info_vector));
+  http_server_props_->SetAlternativeServices(server,
+                                             alternative_service_info_vector);
 
   // |net_test_task_runner_| has a remaining pending task to expire
   // |broken_alternative_service| at |time_one_day_later|. Fast forward enough
@@ -1281,7 +1260,7 @@
 
   const url::SchemeHostPort server("https", "example.com", 443);
   AlternativeServiceMap alternative_service_map;
-  ASSERT_TRUE(http_server_props_manager_->properties_manager_for_testing()
+  ASSERT_TRUE(http_server_props_->properties_manager_for_testing()
                   ->AddToAlternativeServiceMap(server, server_pref_dict,
                                                &alternative_service_map));
 
@@ -1305,7 +1284,7 @@
   int pref_updates = 0;
   pref_delegate_->set_extra_update_prefs_callback(
       base::Bind([](int* updates) { (*updates)++; }, &pref_updates));
-  http_server_props_manager_.reset();
+  http_server_props_.reset();
   EXPECT_EQ(1, pref_updates);
 }
 
@@ -1337,30 +1316,28 @@
   alternative_service_info_vector.push_back(
       AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo(
           h2_alternative_service, expiration2));
-  ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
-      server_www, alternative_service_info_vector));
+  http_server_props_->SetAlternativeServices(server_www,
+                                             alternative_service_info_vector);
 
   // Set another QUIC alternative service with a single advertised QUIC version.
   AlternativeService mail_alternative_service(kProtoQUIC, "foo.google.com",
                                               444);
   base::Time expiration3 = base::Time::Max();
-  ASSERT_TRUE(http_server_props_manager_->SetQuicAlternativeService(
-      server_mail, mail_alternative_service, expiration3,
-      advertised_versions_));
+  http_server_props_->SetQuicAlternativeService(
+      server_mail, mail_alternative_service, expiration3, advertised_versions_);
   // #3: Set ServerNetworkStats.
   ServerNetworkStats stats;
   stats.srtt = base::TimeDelta::FromInternalValue(42);
-  http_server_props_manager_->SetServerNetworkStats(server_mail, stats);
+  http_server_props_->SetServerNetworkStats(server_mail, stats);
 
   // #4: Set quic_server_info string.
   quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
   std::string quic_server_info1("quic_server_info1");
-  http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
-                                                quic_server_info1);
+  http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
 
   // #5: Set SupportsQuic.
   IPAddress actual_address(127, 0, 0, 1);
-  http_server_props_manager_->SetSupportsQuic(true, actual_address);
+  http_server_props_->SetSupportsQuic(true, actual_address);
 
   // Update Prefs.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1406,7 +1383,7 @@
 
   const url::SchemeHostPort server("https", "example.com", 443);
   AlternativeServiceMap alternative_service_map;
-  EXPECT_TRUE(http_server_props_manager_->properties_manager_for_testing()
+  EXPECT_TRUE(http_server_props_->properties_manager_for_testing()
                   ->AddToAlternativeServiceMap(server, *server_dict,
                                                &alternative_service_map));
 
@@ -1461,18 +1438,17 @@
   alternative_service_info_vector.push_back(
       AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
           quic_alternative_service1, expiration1, advertised_versions_));
-  ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
-      server_www, alternative_service_info_vector));
+  http_server_props_->SetAlternativeServices(server_www,
+                                             alternative_service_info_vector);
 
   // Set quic_server_info string.
   quic::QuicServerId mail_quic_server_id("mail.google.com", 80, false);
   std::string quic_server_info1("quic_server_info1");
-  http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id,
-                                                quic_server_info1);
+  http_server_props_->SetQuicServerInfo(mail_quic_server_id, quic_server_info1);
 
   // Set SupportsQuic.
   IPAddress actual_address(127, 0, 0, 1);
-  http_server_props_manager_->SetSupportsQuic(true, actual_address);
+  http_server_props_->SetSupportsQuic(true, actual_address);
 
   // Update Prefs.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1509,8 +1485,8 @@
   alternative_service_info_vector_2.push_back(
       AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
           quic_alternative_service1, expiration1, advertised_versions));
-  ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices(
-      server_www, alternative_service_info_vector_2));
+  http_server_props_->SetAlternativeServices(server_www,
+                                             alternative_service_info_vector_2);
 
   // Update Prefs.
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1542,8 +1518,8 @@
   alternative_service_info_vector_3.push_back(
       AlternativeServiceInfo::CreateQuicAlternativeServiceInfo(
           quic_alternative_service1, expiration1, advertised_versions_2));
-  ASSERT_FALSE(http_server_props_manager_->SetAlternativeServices(
-      server_www, alternative_service_info_vector_3));
+  http_server_props_->SetAlternativeServices(server_www,
+                                             alternative_service_info_vector_3);
 
   // No Prefs update.
   EXPECT_EQ(0u, GetPendingMainThreadTaskCount());
@@ -1556,11 +1532,9 @@
   AlternativeService cached_recently_broken_service(kProtoQUIC,
                                                     "cached_rbroken", 443);
 
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      cached_broken_service);
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      cached_broken_service2);
-  http_server_props_manager_->MarkAlternativeServiceRecentlyBroken(
+  http_server_props_->MarkAlternativeServiceBroken(cached_broken_service);
+  http_server_props_->MarkAlternativeServiceBroken(cached_broken_service2);
+  http_server_props_->MarkAlternativeServiceRecentlyBroken(
       cached_recently_broken_service);
 
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
@@ -1619,16 +1593,22 @@
   ASSERT_TRUE(server_value->GetAsDictionary(&server_dict));
 
   // Don't use the test fixture's InitializePrefs() method, since there are
-  // pending tasks.
+  // pending tasks. Initializing prefs should queue a pref update task, since
+  // prefs have been modified.
   pref_delegate_->InitializePrefs(*server_dict);
-  EXPECT_TRUE(http_server_props_manager_->IsInitialized());
+  EXPECT_TRUE(http_server_props_->IsInitialized());
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
 
+  // Run until prefs are updated.
+  FastForwardBy(HttpServerProperties::GetUpdatePrefsDelayForTesting());
+  EXPECT_EQ(1, pref_delegate_->GetAndClearNumPrefUpdates());
+  EXPECT_NE(0u, GetPendingMainThreadTaskCount());
+
   //
   // Verify alternative service info for https://www.google.com
   //
   AlternativeServiceInfoVector alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(
+      http_server_props_->GetAlternativeServiceInfos(
           url::SchemeHostPort("https", "www.google.com", 80));
   ASSERT_EQ(2u, alternative_service_info_vector.size());
 
@@ -1657,7 +1637,7 @@
   // Verify alternative service info for https://mail.google.com
   //
   alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(
+      http_server_props_->GetAlternativeServiceInfos(
           url::SchemeHostPort("https", "mail.google.com", 80));
   ASSERT_EQ(1u, alternative_service_info_vector.size());
 
@@ -1675,37 +1655,39 @@
   // Verify broken alternative services.
   //
   AlternativeService prefs_broken_service(kProtoHTTP2, "www.google.com", 1234);
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service2));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      prefs_broken_service));
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
+
   // Verify brokenness expiration times.
   // |cached_broken_service|'s expiration time should've been overwritten by the
   // prefs to be approximately 1 day from now. |cached_broken_service2|'s
   // expiration time should still be 5 minutes due to being marked broken.
   // |prefs_broken_service|'s expiration time should be approximately 1 day from
   // now which comes from the prefs.
-  FastForwardBy(base::TimeDelta::FromMinutes(5));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service2));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      prefs_broken_service));
+  FastForwardBy(base::TimeDelta::FromMinutes(5) -
+                HttpServerProperties::GetUpdatePrefsDelayForTesting());
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
   FastForwardBy(base::TimeDelta::FromDays(1));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service2));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      prefs_broken_service));
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
 
   // Now that |prefs_broken_service|'s brokenness has expired, it should've
   // been removed from the alternative services info vectors of all servers.
   alternative_service_info_vector =
-      http_server_props_manager_->GetAlternativeServiceInfos(
+      http_server_props_->GetAlternativeServiceInfos(
           url::SchemeHostPort("https", "www.google.com", 80));
   ASSERT_EQ(1u, alternative_service_info_vector.size());
 
@@ -1721,71 +1703,68 @@
   // |cached_broken_service2| should have broken-count 1 from being marked
   // broken.
 
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       prefs_broken_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       cached_recently_broken_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       cached_broken_service));
-  EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken(
+  EXPECT_TRUE(http_server_props_->WasAlternativeServiceRecentlyBroken(
       cached_broken_service2));
   // Make sure |prefs_broken_service| has the right expiration delay when marked
   // broken. Since |prefs_broken_service| had no broken_count specified in the
   // prefs, a broken_count value of 1 should have been assumed by
-  // |http_server_props_manager_|.
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      prefs_broken_service);
+  // |http_server_props_|.
+  http_server_props_->MarkAlternativeServiceBroken(prefs_broken_service);
   EXPECT_EQ(0, pref_delegate_->GetAndClearNumPrefUpdates());
   EXPECT_NE(0u, GetPendingMainThreadTaskCount());
   FastForwardBy(base::TimeDelta::FromMinutes(10) -
                 base::TimeDelta::FromInternalValue(1));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      prefs_broken_service));
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
   FastForwardBy(base::TimeDelta::FromInternalValue(1));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      prefs_broken_service));
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(prefs_broken_service));
   // Make sure |cached_recently_broken_service| has the right expiration delay
   // when marked broken.
-  http_server_props_manager_->MarkAlternativeServiceBroken(
+  http_server_props_->MarkAlternativeServiceBroken(
       cached_recently_broken_service);
   EXPECT_NE(0u, GetPendingMainThreadTaskCount());
   FastForwardBy(base::TimeDelta::FromMinutes(40) -
                 base::TimeDelta::FromInternalValue(1));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
+  EXPECT_TRUE(http_server_props_->IsAlternativeServiceBroken(
       cached_recently_broken_service));
   FastForwardBy(base::TimeDelta::FromInternalValue(1));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
+  EXPECT_FALSE(http_server_props_->IsAlternativeServiceBroken(
       cached_recently_broken_service));
   // Make sure |cached_broken_service| has the right expiration delay when
   // marked broken.
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      cached_broken_service);
+  http_server_props_->MarkAlternativeServiceBroken(cached_broken_service);
   EXPECT_NE(0u, GetPendingMainThreadTaskCount());
   FastForwardBy(base::TimeDelta::FromMinutes(20) -
                 base::TimeDelta::FromInternalValue(1));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service));
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
   FastForwardBy(base::TimeDelta::FromInternalValue(1));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service));
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service));
   // Make sure |cached_broken_service2| has the right expiration delay when
   // marked broken.
-  http_server_props_manager_->MarkAlternativeServiceBroken(
-      cached_broken_service2);
+  http_server_props_->MarkAlternativeServiceBroken(cached_broken_service2);
   EXPECT_NE(0u, GetPendingMainThreadTaskCount());
   FastForwardBy(base::TimeDelta::FromMinutes(10) -
                 base::TimeDelta::FromInternalValue(1));
-  EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service2));
+  EXPECT_TRUE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
   FastForwardBy(base::TimeDelta::FromInternalValue(1));
-  EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken(
-      cached_broken_service2));
+  EXPECT_FALSE(
+      http_server_props_->IsAlternativeServiceBroken(cached_broken_service2));
 
   //
   // Verify ServerNetworkStats.
   //
   const ServerNetworkStats* server_network_stats =
-      http_server_props_manager_->GetServerNetworkStats(
+      http_server_props_->GetServerNetworkStats(
           url::SchemeHostPort("https", "mail.google.com", 80));
   EXPECT_TRUE(server_network_stats);
   EXPECT_EQ(server_network_stats->srtt, base::TimeDelta::FromInternalValue(42));
@@ -1793,16 +1772,15 @@
   //
   // Verify QUIC server info.
   //
-  const std::string* quic_server_info =
-      http_server_props_manager_->GetQuicServerInfo(
-          quic::QuicServerId("mail.google.com", 80, false));
+  const std::string* quic_server_info = http_server_props_->GetQuicServerInfo(
+      quic::QuicServerId("mail.google.com", 80, false));
   EXPECT_EQ("quic_server_info1", *quic_server_info);
 
   //
   // Verify supports QUIC.
   //
   IPAddress actual_address(127, 0, 0, 1);
-  EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&actual_address));
+  EXPECT_TRUE(http_server_props_->GetSupportsQuic(&actual_address));
   EXPECT_EQ(4, pref_delegate_->GetAndClearNumPrefUpdates());
 }
 
diff --git a/net/http/http_server_properties_unittest.cc b/net/http/http_server_properties_unittest.cc
index 1f997c9..300d254 100644
--- a/net/http/http_server_properties_unittest.cc
+++ b/net/http/http_server_properties_unittest.cc
@@ -85,17 +85,16 @@
     return !alternative_service_info_vector.empty();
   }
 
-  bool SetAlternativeService(const url::SchemeHostPort& origin,
+  void SetAlternativeService(const url::SchemeHostPort& origin,
                              const AlternativeService& alternative_service) {
     const base::Time expiration =
         test_clock_.Now() + base::TimeDelta::FromDays(1);
     if (alternative_service.protocol == kProtoQUIC) {
-      return impl_.SetQuicAlternativeService(
+      impl_.SetQuicAlternativeService(
           origin, alternative_service, expiration,
           HttpNetworkSession::Params().quic_params.supported_versions);
     } else {
-      return impl_.SetHttp2AlternativeService(origin, alternative_service,
-                                              expiration);
+      impl_.SetHttp2AlternativeService(origin, alternative_service, expiration);
     }
   }
 
@@ -948,7 +947,7 @@
   EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
 
   // Default network change clears alt svc broken until default network changes.
-  EXPECT_TRUE(impl_.OnDefaultNetworkChanged());
+  impl_.OnDefaultNetworkChanged();
   EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service));
   EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
 
@@ -963,7 +962,7 @@
 
   // Default network change doesn't affect alt svc that was simply marked broken
   // most recently.
-  EXPECT_FALSE(impl_.OnDefaultNetworkChanged());
+  impl_.OnDefaultNetworkChanged();
   EXPECT_TRUE(impl_.IsAlternativeServiceBroken(alternative_service));
   EXPECT_TRUE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
 
@@ -975,7 +974,7 @@
   // Default network change clears alt svc that was marked broken until default
   // network change most recently even if the alt svc was initially marked
   // broken.
-  EXPECT_TRUE(impl_.OnDefaultNetworkChanged());
+  impl_.OnDefaultNetworkChanged();
   EXPECT_FALSE(impl_.IsAlternativeServiceBroken(alternative_service));
   EXPECT_FALSE(impl_.WasAlternativeServiceRecentlyBroken(alternative_service));
 }
diff --git a/net/http/http_stream_factory_job_controller_unittest.cc b/net/http/http_stream_factory_job_controller_unittest.cc
index 8d77df78..b31dce6 100644
--- a/net/http/http_stream_factory_job_controller_unittest.cc
+++ b/net/http/http_stream_factory_job_controller_unittest.cc
@@ -2944,8 +2944,8 @@
   // that is supported.
   quic::ParsedQuicVersionVector supported_versions =
       session_->params().quic_params.supported_versions;
-  ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
-      server, alternative_service, expiration, supported_versions));
+  session_->http_server_properties()->SetQuicAlternativeService(
+      server, alternative_service, expiration, supported_versions);
 
   alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
       job_controller_, request_info, &request_delegate_,
@@ -2980,8 +2980,8 @@
   quic::ParsedQuicVersionVector mixed_quic_versions = {
       unsupported_version_1,
       session_->params().quic_params.supported_versions[0]};
-  ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
-      server, alternative_service, expiration, mixed_quic_versions));
+  session_->http_server_properties()->SetQuicAlternativeService(
+      server, alternative_service, expiration, mixed_quic_versions);
 
   alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
       job_controller_, request_info, &request_delegate_,
@@ -2997,9 +2997,9 @@
 
   // Set alternative service for the same server with two unsupported QUIC
   // versions: |unsupported_version_1|, |unsupported_version_2|.
-  ASSERT_TRUE(session_->http_server_properties()->SetQuicAlternativeService(
+  session_->http_server_properties()->SetQuicAlternativeService(
       server, alternative_service, expiration,
-      {unsupported_version_1, unsupported_version_2}));
+      {unsupported_version_1, unsupported_version_2});
 
   alt_svc_info = JobControllerPeer::GetAlternativeServiceInfoFor(
       job_controller_, request_info, &request_delegate_,
diff --git a/net/nqe/network_congestion_analyzer.cc b/net/nqe/network_congestion_analyzer.cc
index 60300ed..4a19aff 100644
--- a/net/nqe/network_congestion_analyzer.cc
+++ b/net/nqe/network_congestion_analyzer.cc
@@ -382,8 +382,13 @@
   base::Optional<size_t> mapping_score =
       ComputePeakDelayMappingSampleScore(truncated_count, peak_queueing_delay_);
   // Records the score that evaluates the mapping between the count of requests
-  // to the peak observed queueing delay.
-  if (mapping_score.has_value()) {
+  // to the peak observed queueing delay. Only records when there are at least
+  // 10 samples in the cache. The goal is to eliminate low-score samples because
+  // only few requests are in cache. For example, when there are only 5 samples
+  // in the cache, a mapping score can be 40 if the new mapping sample violates
+  // 3 of them.
+  if (count_peak_queueing_delay_mapping_sample_ >= 10 &&
+      mapping_score.has_value()) {
     UMA_HISTOGRAM_COUNTS_100(
         "NQE.CongestionAnalyzer.PeakQueueingDelayMappingScore",
         mapping_score.value());
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc
index 89a321d..a2174f3 100644
--- a/net/quic/quic_chromium_client_session_test.cc
+++ b/net/quic/quic_chromium_client_session_test.cc
@@ -222,8 +222,7 @@
     // These tests are only concerned with dynamic streams (that is, the number
     // of streams that they can create), so back out the static header stream.
     return quic::test::QuicSessionPeer::v99_streamid_manager(quic_session)
-               ->max_allowed_outgoing_bidirectional_streams() -
-           1;
+        ->max_allowed_outgoing_bidirectional_streams();
   }
 
   const quic::ParsedQuicVersion version_;
@@ -513,9 +512,9 @@
     // The open stream limit is set to 50 by
     // MockCryptoClientStream::SetConfigNegotiated() so when the 51st stream is
     // requested, a STREAMS_BLOCKED will be sent, indicating that it's blocked
-    // at the limit of 50. The +1 accounts for the header stream.
+    // at the limit of 50.
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        2, true, 50 + 1,
+                                        2, true, 50,
                                         /*unidirectional=*/false));
     quic_data.AddWrite(
         SYNCHRONOUS, client_maker_.MakeRstPacket(
@@ -523,9 +522,9 @@
                          quic::QUIC_STREAM_CANCELLED,
                          /*include_stop_sending_if_v99=*/false));
     // After the STREAMS_BLOCKED is sent, receive a MAX_STREAMS to increase
-    // the limit to 53.
+    // the limit to 52.
     quic_data.AddRead(
-        ASYNC, server_maker_.MakeMaxStreamsPacket(1, true, 53,
+        ASYNC, server_maker_.MakeMaxStreamsPacket(1, true, 52,
                                                   /*unidirectional=*/false));
   } else {
     quic_data.AddWrite(
@@ -589,12 +588,12 @@
     // The open stream limit is set to 50 by
     // MockCryptoClientStream::SetConfigNegotiated() so when the 51st stream is
     // requested, a STREAMS_BLOCKED will be sent, indicating that it's blocked
-    // at the limit of 50. The +1 accounts for the header streams.
+    // at the limit of 50.
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        2, true, 50 + 1,
+                                        2, true, 50,
                                         /*unidirectional=*/false));
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        3, true, 50 + 1,
+                                        3, true, 50,
                                         /*unidirectional=*/false));
   }
   quic_data.AddRead(ASYNC, ERR_IO_PENDING);
@@ -652,7 +651,7 @@
     // MockCryptoClientStream::SetConfigNegotiated() so when the 51st stream is
     // requested, a STREAMS_BLOCKED will be sent.
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        2, true, 51,
+                                        2, true, 50,
                                         /*unidirectional=*/false));
     // This node receives the RST_STREAM+STOP_SENDING, it responds
     // with only a RST_STREAM.
@@ -788,7 +787,7 @@
   quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeInitialSettingsPacket(1));
   if (version_.transport_version == quic::QUIC_VERSION_99) {
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        2, true, 51,
+                                        2, true, 50,
                                         /*unidirectional=*/false));
   }
   quic_data.AddRead(ASYNC, ERR_IO_PENDING);
@@ -835,9 +834,9 @@
   if (version_.transport_version == quic::QUIC_VERSION_99) {
     // Initial configuration is 50 dynamic streams. Taking into account
     // the static stream (headers), expect to block on when hitting the limit
-    // of 51 streams
+    // of 50 streams
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        2, true, 50 + 1,
+                                        2, true, 50,
                                         /*unidirectional=*/false));
     quic_data.AddWrite(
         SYNCHRONOUS, client_maker_.MakeRstPacket(
@@ -846,7 +845,7 @@
     // For the second CreateOutgoingStream that fails because of hitting the
     // stream count limit.
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        4, true, 50 + 1,
+                                        4, true, 50,
                                         /*unidirectional=*/false));
     quic_data.AddRead(
         ASYNC, server_maker_.MakeMaxStreamsPacket(1, true, 50 + 2,
@@ -1236,14 +1235,14 @@
   quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeInitialSettingsPacket(1));
   if (version_.transport_version == quic::QUIC_VERSION_99) {
     quic_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                        2, true, 51,
+                                        2, true, 50,
                                         /*unidirectional=*/false));
     quic_data.AddWrite(
         SYNCHRONOUS, client_maker_.MakeRstPacket(
                          3, true, GetNthClientInitiatedBidirectionalStreamId(0),
                          quic::QUIC_RST_ACKNOWLEDGEMENT));
     quic_data.AddRead(
-        ASYNC, server_maker_.MakeMaxStreamsPacket(1, true, 53,
+        ASYNC, server_maker_.MakeMaxStreamsPacket(1, true, 52,
                                                   /*unidirectional=*/false));
   } else {
     quic_data.AddWrite(
diff --git a/net/quic/quic_chromium_client_stream.cc b/net/quic/quic_chromium_client_stream.cc
index 97b6b66..5b2dbae 100644
--- a/net/quic/quic_chromium_client_stream.cc
+++ b/net/quic/quic_chromium_client_stream.cc
@@ -709,6 +709,10 @@
 }
 
 bool QuicChromiumClientStream::IsFirstStream() {
+  if (VersionUsesQpack(quic_version_)) {
+    return id() == quic::QuicUtils::GetFirstBidirectionalStreamId(
+                       quic_version_, quic::Perspective::IS_CLIENT);
+  }
   return id() == quic::QuicUtils::GetHeadersStreamId(quic_version_) +
                      quic::QuicUtils::StreamIdDelta(quic_version_);
 }
diff --git a/net/quic/quic_flags_list.h b/net/quic/quic_flags_list.h
index 161337d..92c3905 100644
--- a/net/quic/quic_flags_list.h
+++ b/net/quic/quic_flags_list.h
@@ -211,12 +211,6 @@
 // If true, set burst token to 2 in cwnd bootstrapping experiment.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_conservative_bursts, false)
 
-// When true, QuicFramer will not override connection IDs in headers and will
-// instead respect the source/destination direction as expected by IETF QUIC.
-QUIC_FLAG(bool,
-          FLAGS_quic_restart_flag_quic_do_not_override_connection_id,
-          true)
-
 // If true, export number of packets written per write operation histogram.")
 QUIC_FLAG(bool, FLAGS_quic_export_server_num_packets_per_write_histogram, false)
 
@@ -340,3 +334,26 @@
     bool,
     FLAGS_quic_restart_flag_quic_dispatcher_hands_chlo_extractor_one_version,
     false)
+
+// If true, will negotiate the ACK delay time.
+QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_negotiate_ack_delay_time, false)
+
+// When true, QuicDispatcher will always use QuicFramer::ParsePublicHeader
+QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_use_parse_public_header, false)
+
+// If true, QuicFramer::WriteClientVersionNegotiationProbePacket uses
+// length-prefixed connection IDs.
+QUIC_FLAG(bool, FLAGS_quic_prober_uses_length_prefixed_connection_ids, false)
+
+// If true and H2PR connection option is received, write_blocked_streams_ uses
+// HTTP2 (tree-style) priority write scheduler.
+QUIC_FLAG(bool,
+          FLAGS_quic_reloadable_flag_quic_use_http2_priority_write_scheduler,
+          false)
+
+// If true, close connection if there are too many (> 1000) buffered control
+// frames.
+QUIC_FLAG(
+    bool,
+    FLAGS_quic_reloadable_flag_quic_add_upper_limit_of_buffered_control_frames,
+    false)
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index c1e325a..0f88a99 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -6431,12 +6431,20 @@
           client_packet_number++, GetNthClientInitiatedBidirectionalStreamId(0),
           true, true, std::move(headers)));
 
+  const quic::QuicStreamOffset initial = server_maker_.stream_offset(
+      GetNthClientInitiatedBidirectionalStreamId(0));
   mock_quic_data.AddRead(
       ASYNC,
       ConstructServerPushPromisePacket(
           1, GetNthClientInitiatedBidirectionalStreamId(0),
           GetNthServerInitiatedUnidirectionalStreamId(0), false,
           GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_maker_));
+  quic::QuicStreamOffset push_promise_offset = 0;
+  if (VersionUsesQpack(version_.transport_version)) {
+    push_promise_offset = server_maker_.stream_offset(
+                              GetNthClientInitiatedBidirectionalStreamId(0)) -
+                          initial;
+  }
 
   if ((client_headers_include_h2_stream_dependency_ &&
        version_.transport_version >= quic::QUIC_VERSION_43) ||
@@ -6513,8 +6521,9 @@
             request->GetTotalSentBytes());
   EXPECT_EQ(network_delegate.total_network_bytes_received(),
             request->GetTotalReceivedBytes());
-  EXPECT_EQ(static_cast<int>(expected_raw_header_response_size),
-            request->raw_header_size());
+  EXPECT_EQ(
+      static_cast<int>(expected_raw_header_response_size + push_promise_offset),
+      request->raw_header_size());
 
   // Pump the message loop to allow all data to be consumed.
   base::RunLoop().RunUntilIdle();
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index bde2862d..58f3076f 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -1649,7 +1649,7 @@
   socket_data.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket());
   if (version_.transport_version == quic::QUIC_VERSION_99) {
     socket_data.AddWrite(SYNCHRONOUS, client_maker_.MakeStreamsBlockedPacket(
-                                          2, true, 51,
+                                          2, true, 50,
                                           /*unidirectional=*/false));
     socket_data.AddWrite(
         SYNCHRONOUS, client_maker_.MakeRstPacket(3, true, stream_id,
diff --git a/net/quic/quic_test_packet_maker.cc b/net/quic/quic_test_packet_maker.cc
index c2a246f..04ec5e9 100644
--- a/net/quic/quic_test_packet_maker.cc
+++ b/net/quic/quic_test_packet_maker.cc
@@ -356,7 +356,8 @@
     std::string type(1, 0x00);
 
     quic::SettingsFrame settings;
-    settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
+    settings.values[quic::SETTINGS_MAX_HEADER_LIST_SIZE] =
+        kQuicMaxHeaderListSize;
     std::unique_ptr<char[]> buffer1;
     quic::QuicByteCount frame_length1 =
         http_encoder_.SerializeSettingsFrame(settings, &buffer1);
@@ -808,7 +809,8 @@
     std::string type(1, 0x00);
 
     quic::SettingsFrame settings;
-    settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
+    settings.values[quic::SETTINGS_MAX_HEADER_LIST_SIZE] =
+        kQuicMaxHeaderListSize;
     std::unique_ptr<char[]> buffer1;
     quic::QuicByteCount frame_length1 =
         http_encoder_.SerializeSettingsFrame(settings, &buffer1);
@@ -902,7 +904,8 @@
     std::string type(1, 0x00);
 
     quic::SettingsFrame settings;
-    settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
+    settings.values[quic::SETTINGS_MAX_HEADER_LIST_SIZE] =
+        kQuicMaxHeaderListSize;
     std::unique_ptr<char[]> buffer1;
     quic::QuicByteCount frame_length1 =
         http_encoder_.SerializeSettingsFrame(settings, &buffer1);
@@ -973,7 +976,8 @@
     std::string type(1, 0x00);
 
     quic::SettingsFrame settings;
-    settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
+    settings.values[quic::SETTINGS_MAX_HEADER_LIST_SIZE] =
+        kQuicMaxHeaderListSize;
     std::unique_ptr<char[]> buffer1;
     quic::QuicByteCount frame_length1 =
         http_encoder_.SerializeSettingsFrame(settings, &buffer1);
@@ -1086,6 +1090,26 @@
     bool fin,
     spdy::SpdyHeaderBlock headers,
     size_t* spdy_headers_frame_length) {
+  if (quic::VersionUsesQpack(version_.transport_version)) {
+    std::string encoded_headers =
+        qpack_encoder_.EncodeHeaderList(stream_id, &headers);
+    quic::QuicFrames frames;
+    quic::PushPromiseFrame frame;
+    frame.push_id = promised_stream_id;
+    frame.headers = encoded_headers;
+    std::unique_ptr<char[]> buffer;
+    quic::QuicByteCount frame_length =
+        http_encoder_.SerializePushPromiseFrameWithOnlyPushId(frame, &buffer);
+    std::string push_promise_data(buffer.get(), frame_length);
+    quic::QuicStreamFrame promise_frame =
+        GenerateNextStreamFrame(stream_id, false, push_promise_data);
+    frames.push_back(quic::QuicFrame(promise_frame));
+    quic::QuicStreamFrame headers =
+        GenerateNextStreamFrame(stream_id, false, encoded_headers);
+    frames.push_back(quic::QuicFrame(headers));
+    InitializeHeader(packet_number, should_include_version);
+    return MakeMultipleFramesPacket(header_, frames, nullptr);
+  }
   InitializeHeader(packet_number, should_include_version);
   spdy::SpdySerializedFrame spdy_frame;
   spdy::SpdyPushPromiseIR promise_frame(stream_id, promised_stream_id,
@@ -1298,7 +1322,7 @@
   // first.
   std::string type(1, 0x00);
   quic::SettingsFrame settings;
-  settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
+  settings.values[quic::SETTINGS_MAX_HEADER_LIST_SIZE] = kQuicMaxHeaderListSize;
   std::unique_ptr<char[]> buffer;
   quic::QuicByteCount frame_length =
       http_encoder_.SerializeSettingsFrame(settings, &buffer);
@@ -1343,7 +1367,7 @@
   // first.
   std::string type(1, 0x00);
   quic::SettingsFrame settings;
-  settings.values[quic::kSettingsMaxHeaderListSize] = kQuicMaxHeaderListSize;
+  settings.values[quic::SETTINGS_MAX_HEADER_LIST_SIZE] = kQuicMaxHeaderListSize;
   std::unique_ptr<char[]> buffer;
   quic::QuicByteCount frame_length =
       http_encoder_.SerializeSettingsFrame(settings, &buffer);
@@ -1598,16 +1622,14 @@
 }
 
 quic::QuicConnectionId QuicTestPacketMaker::DestinationConnectionId() const {
-  if (perspective_ == quic::Perspective::IS_SERVER &&
-      GetQuicRestartFlag(quic_do_not_override_connection_id)) {
+  if (perspective_ == quic::Perspective::IS_SERVER) {
     return quic::EmptyQuicConnectionId();
   }
   return connection_id_;
 }
 
 quic::QuicConnectionId QuicTestPacketMaker::SourceConnectionId() const {
-  if (perspective_ == quic::Perspective::IS_CLIENT &&
-      GetQuicRestartFlag(quic_do_not_override_connection_id)) {
+  if (perspective_ == quic::Perspective::IS_CLIENT) {
     return quic::EmptyQuicConnectionId();
   }
   return connection_id_;
@@ -1616,9 +1638,7 @@
 quic::QuicConnectionIdIncluded QuicTestPacketMaker::HasDestinationConnectionId()
     const {
   if (!version_.SupportsClientConnectionIds() &&
-      perspective_ == quic::Perspective::IS_SERVER &&
-      (VersionHasIetfInvariantHeader(version_.transport_version) ||
-       GetQuicRestartFlag(quic_do_not_override_connection_id))) {
+      perspective_ == quic::Perspective::IS_SERVER) {
     return quic::CONNECTION_ID_ABSENT;
   }
   return quic::CONNECTION_ID_PRESENT;
@@ -1628,9 +1648,7 @@
     const {
   if (version_.SupportsClientConnectionIds() ||
       (perspective_ == quic::Perspective::IS_SERVER &&
-       encryption_level_ < quic::ENCRYPTION_FORWARD_SECURE &&
-       (VersionHasIetfInvariantHeader(version_.transport_version) ||
-        GetQuicRestartFlag(quic_do_not_override_connection_id)))) {
+       encryption_level_ < quic::ENCRYPTION_FORWARD_SECURE)) {
     return quic::CONNECTION_ID_PRESENT;
   }
   return quic::CONNECTION_ID_ABSENT;
diff --git a/net/quic/quic_transport_parameters_fuzzer.cc b/net/quic/quic_transport_parameters_fuzzer.cc
index 3fe7a56..ca038eb8 100644
--- a/net/quic/quic_transport_parameters_fuzzer.cc
+++ b/net/quic/quic_transport_parameters_fuzzer.cc
@@ -18,7 +18,9 @@
   quic::TransportParameters transport_parameters;
   std::vector<uint8_t> remaining_bytes =
       data_provider.ConsumeRemainingBytes<uint8_t>();
-  quic::ParseTransportParameters(remaining_bytes.data(), remaining_bytes.size(),
-                                 perspective, &transport_parameters);
+  quic::ParseTransportParameters(
+      quic::ParsedQuicVersion(quic::PROTOCOL_TLS1_3, quic::QUIC_VERSION_99),
+      perspective, remaining_bytes.data(), remaining_bytes.size(),
+      &transport_parameters);
   return 0;
 }
diff --git a/net/socket/client_socket_pool_manager_impl.cc b/net/socket/client_socket_pool_manager_impl.cc
index fdbbae8..e76c1980 100644
--- a/net/socket/client_socket_pool_manager_impl.cc
+++ b/net/socket/client_socket_pool_manager_impl.cc
@@ -32,13 +32,10 @@
   // connections.
   DCHECK(!common_connect_job_params_.websocket_endpoint_lock_manager);
   DCHECK(websocket_common_connect_job_params.websocket_endpoint_lock_manager);
-
-  CertDatabase::GetInstance()->AddObserver(this);
 }
 
 ClientSocketPoolManagerImpl::~ClientSocketPoolManagerImpl() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  CertDatabase::GetInstance()->RemoveObserver(this);
 }
 
 void ClientSocketPoolManagerImpl::FlushSocketPoolsWithError(int error) {
@@ -111,10 +108,6 @@
   return std::move(list);
 }
 
-void ClientSocketPoolManagerImpl::OnCertDBChanged() {
-  FlushSocketPoolsWithError(ERR_NETWORK_CHANGED);
-}
-
 void ClientSocketPoolManagerImpl::DumpMemoryStats(
     base::trace_event::ProcessMemoryDump* pmd,
     const std::string& parent_dump_absolute_name) const {
diff --git a/net/socket/client_socket_pool_manager_impl.h b/net/socket/client_socket_pool_manager_impl.h
index 973b2ecb7..21132763 100644
--- a/net/socket/client_socket_pool_manager_impl.h
+++ b/net/socket/client_socket_pool_manager_impl.h
@@ -15,7 +15,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
 #include "net/base/net_export.h"
-#include "net/cert/cert_database.h"
 #include "net/http/http_network_session.h"
 #include "net/socket/client_socket_pool_manager.h"
 #include "net/socket/connect_job.h"
@@ -32,8 +31,7 @@
 class ClientSocketPool;
 
 class NET_EXPORT_PRIVATE ClientSocketPoolManagerImpl
-    : public ClientSocketPoolManager,
-      public CertDatabase::Observer {
+    : public ClientSocketPoolManager {
  public:
   // |websocket_common_connect_job_params| is only used for direct WebSocket
   // connections (No proxy in use). It's never used if |pool_type| is not
@@ -52,9 +50,6 @@
   // Creates a Value summary of the state of the socket pools.
   std::unique_ptr<base::Value> SocketPoolInfoToValue() const override;
 
-  // CertDatabase::Observer methods:
-  void OnCertDBChanged() override;
-
   void DumpMemoryStats(
       base::trace_event::ProcessMemoryDump* pmd,
       const std::string& parent_dump_absolute_name) const override;
diff --git a/net/socket/socks_connect_job_unittest.cc b/net/socket/socks_connect_job_unittest.cc
index a9bfede..07e9fd658 100644
--- a/net/socket/socks_connect_job_unittest.cc
+++ b/net/socket/socks_connect_job_unittest.cc
@@ -47,7 +47,7 @@
 
   SOCKSConnectJobTest()
       : WithScopedTaskEnvironment(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         common_connect_job_params_(
             &client_socket_factory_,
             &host_resolver_,
diff --git a/net/socket/ssl_client_socket.cc b/net/socket/ssl_client_socket.cc
index 3b3fbb2e..a32006d6 100644
--- a/net/socket/ssl_client_socket.cc
+++ b/net/socket/ssl_client_socket.cc
@@ -9,6 +9,7 @@
 #include "base/logging.h"
 #include "net/socket/ssl_client_socket_impl.h"
 #include "net/socket/stream_socket.h"
+#include "net/ssl/ssl_client_session_cache.h"
 #include "net/ssl/ssl_key_logger.h"
 
 namespace net {
@@ -67,12 +68,14 @@
     config_ = ssl_config_service_->GetSSLContextConfig();
     ssl_config_service_->AddObserver(this);
   }
+  CertDatabase::GetInstance()->AddObserver(this);
 }
 
 SSLClientContext::~SSLClientContext() {
   if (ssl_config_service_) {
     ssl_config_service_->RemoveObserver(this);
   }
+  CertDatabase::GetInstance()->RemoveObserver(this);
 }
 
 std::unique_ptr<SSLClientSocket> SSLClientContext::CreateSSLClientSocket(
@@ -97,8 +100,19 @@
   // never change version or cipher negotiation based on client-offered
   // sessions, other servers do.
   config_ = ssl_config_service_->GetSSLContextConfig();
+  NotifySSLConfigChanged(false /* not a cert database change */);
+}
+
+void SSLClientContext::OnCertDBChanged() {
+  if (ssl_client_session_cache_) {
+    ssl_client_session_cache_->Flush();
+  }
+  NotifySSLConfigChanged(true /* cert database change */);
+}
+
+void SSLClientContext::NotifySSLConfigChanged(bool is_cert_database_change) {
   for (Observer& observer : observers_) {
-    observer.OnSSLConfigChanged();
+    observer.OnSSLConfigChanged(is_cert_database_change);
   }
 }
 
diff --git a/net/socket/ssl_client_socket.h b/net/socket/ssl_client_socket.h
index 562751e..4218fc5 100644
--- a/net/socket/ssl_client_socket.h
+++ b/net/socket/ssl_client_socket.h
@@ -14,6 +14,7 @@
 #include "base/macros.h"
 #include "base/observer_list.h"
 #include "net/base/net_export.h"
+#include "net/cert/cert_database.h"
 #include "net/socket/ssl_socket.h"
 #include "net/ssl/ssl_config_service.h"
 
@@ -80,13 +81,14 @@
 };
 
 // Shared state and configuration across multiple SSLClientSockets.
-class NET_EXPORT SSLClientContext : public SSLConfigService::Observer {
+class NET_EXPORT SSLClientContext : public SSLConfigService::Observer,
+                                    public CertDatabase::Observer {
  public:
   class NET_EXPORT Observer : public base::CheckedObserver {
    public:
     // Called when SSL configuration for all hosts changed. Newly-created
     // SSLClientSockets will pick up the new configuration.
-    virtual void OnSSLConfigChanged() = 0;
+    virtual void OnSSLConfigChanged(bool is_cert_database_change) = 0;
   };
 
   // Creates a new SSLClientContext with the specified parameters. The
@@ -135,7 +137,12 @@
   // SSLConfigService::Observer:
   void OnSSLContextConfigChanged() override;
 
+  // CertDatabase::Observer:
+  void OnCertDBChanged() override;
+
  private:
+  void NotifySSLConfigChanged(bool is_cert_database_change);
+
   SSLContextConfig config_;
 
   SSLConfigService* ssl_config_service_;
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc
index 9c805350..fbb9471 100644
--- a/net/socket/ssl_client_socket_impl.cc
+++ b/net/socket/ssl_client_socket_impl.cc
@@ -48,7 +48,6 @@
 #include "net/log/net_log_values.h"
 #include "net/ssl/ssl_cert_request_info.h"
 #include "net/ssl/ssl_cipher_suite_names.h"
-#include "net/ssl/ssl_client_session_cache.h"
 #include "net/ssl/ssl_connection_status_flags.h"
 #include "net/ssl/ssl_handshake_details.h"
 #include "net/ssl/ssl_info.h"
@@ -1669,25 +1668,17 @@
   ssl_info->UpdateCertificateTransparencyInfo(ct_verify_result_);
 }
 
-std::string SSLClientSocketImpl::GetSessionCacheKey(
+SSLClientSessionCache::Key SSLClientSocketImpl::GetSessionCacheKey(
     base::Optional<IPAddress> dest_ip_addr) const {
-  std::string ret;
-  if (dest_ip_addr) {
-    ret += dest_ip_addr->ToString();
-  }
-  ret.push_back('/');
-  ret += host_and_port_.ToString();
-  ret.push_back('/');
-  if (ssl_config_.privacy_mode == PRIVACY_MODE_ENABLED) {
-    ret.push_back('1');
-  } else {
-    ret.push_back('0');
-  }
+  SSLClientSessionCache::Key key;
+  key.server = host_and_port_;
+  key.dest_ip_addr = dest_ip_addr;
   if (base::FeatureList::IsEnabled(
           features::kPartitionSSLSessionsByNetworkIsolationKey)) {
-    ret += '/' + ssl_config_.network_isolation_key.ToString();
+    key.network_isolation_key = ssl_config_.network_isolation_key;
   }
-  return ret;
+  key.privacy_mode = ssl_config_.privacy_mode;
+  return key;
 }
 
 bool SSLClientSocketImpl::IsRenegotiationAllowed() const {
diff --git a/net/socket/ssl_client_socket_impl.h b/net/socket/ssl_client_socket_impl.h
index 88bbc58..a4ed759d 100644
--- a/net/socket/ssl_client_socket_impl.h
+++ b/net/socket/ssl_client_socket_impl.h
@@ -30,6 +30,7 @@
 #include "net/socket/stream_socket.h"
 #include "net/ssl/openssl_ssl_util.h"
 #include "net/ssl/ssl_client_cert_type.h"
+#include "net/ssl/ssl_client_session_cache.h"
 #include "net/ssl/ssl_config.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "third_party/boringssl/src/include/openssl/base.h"
@@ -162,8 +163,9 @@
   // the |ssl_info|.signed_certificate_timestamps list.
   void AddCTInfoToSSLInfo(SSLInfo* ssl_info) const;
 
-  // Returns a unique key string for the SSL session cache for this socket.
-  std::string GetSessionCacheKey(base::Optional<IPAddress> dest_ip_addr) const;
+  // Returns a session cache key for this socket.
+  SSLClientSessionCache::Key GetSessionCacheKey(
+      base::Optional<IPAddress> dest_ip_addr) const;
 
   // Returns true if renegotiations are allowed.
   bool IsRenegotiationAllowed() const;
diff --git a/net/socket/ssl_connect_job_unittest.cc b/net/socket/ssl_connect_job_unittest.cc
index b6bc4e4b..e346938c 100644
--- a/net/socket/ssl_connect_job_unittest.cc
+++ b/net/socket/ssl_connect_job_unittest.cc
@@ -78,7 +78,7 @@
  public:
   SSLConnectJobTest()
       : WithScopedTaskEnvironment(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         proxy_resolution_service_(ProxyResolutionService::CreateDirect()),
         ssl_config_service_(new SSLConfigServiceDefaults),
         http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()),
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc
index 58b6f40..50b5f29e 100644
--- a/net/socket/transport_client_socket_pool.cc
+++ b/net/socket/transport_client_socket_pool.cc
@@ -787,10 +787,12 @@
     ssl_client_context_->AddObserver(this);
 }
 
-void TransportClientSocketPool::OnSSLConfigChanged() {
+void TransportClientSocketPool::OnSSLConfigChanged(
+    bool is_cert_database_change) {
   // When the user changes the SSL config, flush all idle sockets so they won't
   // get re-used.
-  FlushWithError(ERR_NETWORK_CHANGED);
+  FlushWithError(is_cert_database_change ? ERR_CERT_DATABASE_CHANGED
+                                         : ERR_NETWORK_CHANGED);
 }
 
 bool TransportClientSocketPool::HasGroup(const GroupId& group_id) const {
diff --git a/net/socket/transport_client_socket_pool.h b/net/socket/transport_client_socket_pool.h
index e388acf..2a3882a 100644
--- a/net/socket/transport_client_socket_pool.h
+++ b/net/socket/transport_client_socket_pool.h
@@ -603,7 +603,7 @@
       bool connect_backup_jobs_enabled);
 
   // SSLClientContext::Observer methods.
-  void OnSSLConfigChanged() override;
+  void OnSSLConfigChanged(bool is_cert_database_change) override;
 
   base::TimeDelta ConnectRetryInterval() const {
     // TODO(mbelshe): Make this tuned dynamically based on measured RTT.
diff --git a/net/socket/transport_client_socket_pool_unittest.cc b/net/socket/transport_client_socket_pool_unittest.cc
index 0797e81..a28885fe 100644
--- a/net/socket/transport_client_socket_pool_unittest.cc
+++ b/net/socket/transport_client_socket_pool_unittest.cc
@@ -2151,7 +2151,7 @@
  protected:
   TransportClientSocketPoolMockNowSourceTest()
       : TransportClientSocketPoolTest(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW) {}
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME) {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TransportClientSocketPoolMockNowSourceTest);
diff --git a/net/socket/transport_connect_job_unittest.cc b/net/socket/transport_connect_job_unittest.cc
index 0489b27..e7300b0 100644
--- a/net/socket/transport_connect_job_unittest.cc
+++ b/net/socket/transport_connect_job_unittest.cc
@@ -35,7 +35,7 @@
  public:
   TransportConnectJobTest()
       : WithScopedTaskEnvironment(
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         client_socket_factory_(&net_log_),
         common_connect_job_params_(
             &client_socket_factory_,
diff --git a/net/spdy/platform/impl/spdy_map_util_impl.h b/net/spdy/platform/impl/spdy_map_util_impl.h
new file mode 100644
index 0000000..eadcac0
--- /dev/null
+++ b/net/spdy/platform/impl/spdy_map_util_impl.h
@@ -0,0 +1,19 @@
+// Copyright (c) 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_PLATFORM_IMPL_SPDY_MAP_UTIL_IMPL_H_
+#define NET_SPDY_PLATFORM_IMPL_SPDY_MAP_UTIL_IMPL_H_
+
+#include "base/stl_util.h"
+
+namespace spdy {
+
+template <class Collection, class Key>
+bool SpdyContainsKeyImpl(const Collection& collection, const Key& key) {
+  return base::Contains(collection, key);
+}
+
+}  // namespace spdy
+
+#endif  // NET_SPDY_PLATFORM_IMPL_SPDY_MAP_UTIL_IMPL_H_
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc
index 0556642..a4ed404 100644
--- a/net/spdy/spdy_session_pool.cc
+++ b/net/spdy/spdy_session_pool.cc
@@ -107,7 +107,6 @@
   NetworkChangeNotifier::AddIPAddressObserver(this);
   if (ssl_client_context_)
     ssl_client_context_->AddObserver(this);
-  CertDatabase::GetInstance()->AddObserver(this);
 }
 
 SpdySessionPool::~SpdySessionPool() {
@@ -133,7 +132,6 @@
   if (ssl_client_context_)
     ssl_client_context_->RemoveObserver(this);
   NetworkChangeNotifier::RemoveIPAddressObserver(this);
-  CertDatabase::GetInstance()->RemoveObserver(this);
 }
 
 base::WeakPtr<SpdySession>
@@ -471,12 +469,9 @@
   }
 }
 
-void SpdySessionPool::OnSSLConfigChanged() {
-  CloseCurrentSessions(ERR_NETWORK_CHANGED);
-}
-
-void SpdySessionPool::OnCertDBChanged() {
-  CloseCurrentSessions(ERR_CERT_DATABASE_CHANGED);
+void SpdySessionPool::OnSSLConfigChanged(bool is_cert_database_change) {
+  CloseCurrentSessions(is_cert_database_change ? ERR_CERT_DATABASE_CHANGED
+                                               : ERR_NETWORK_CHANGED);
 }
 
 void SpdySessionPool::RemoveRequestForSpdySession(SpdySessionRequest* request) {
diff --git a/net/spdy/spdy_session_pool.h b/net/spdy/spdy_session_pool.h
index 1a2b3fea..75417c59 100644
--- a/net/spdy/spdy_session_pool.h
+++ b/net/spdy/spdy_session_pool.h
@@ -25,7 +25,6 @@
 #include "net/base/net_export.h"
 #include "net/base/network_change_notifier.h"
 #include "net/base/proxy_server.h"
-#include "net/cert/cert_database.h"
 #include "net/log/net_log_source.h"
 #include "net/proxy_resolution/proxy_config.h"
 #include "net/socket/connect_job.h"
@@ -57,8 +56,7 @@
 // This is a very simple pool for open SpdySessions.
 class NET_EXPORT SpdySessionPool
     : public NetworkChangeNotifier::IPAddressObserver,
-      public SSLClientContext::Observer,
-      public CertDatabase::Observer {
+      public SSLClientContext::Observer {
  public:
   typedef base::TimeTicks (*TimeFunc)(void);
 
@@ -293,13 +291,7 @@
   // SSLClientContext::Observer methods:
 
   // We perform the same flushing as described above when SSL settings change.
-  void OnSSLConfigChanged() override;
-
-  // CertDatabase::Observer methods:
-
-  // We perform the same flushing as described above when certificate database
-  // is changed.
-  void OnCertDBChanged() override;
+  void OnSSLConfigChanged(bool is_cert_database_change) override;
 
   void DumpMemoryStats(base::trace_event::ProcessMemoryDump* pmd,
                        const std::string& parent_dump_absolute_name) const;
diff --git a/net/ssl/ssl_client_session_cache.cc b/net/ssl/ssl_client_session_cache.cc
index da21c11..10f1fb5 100644
--- a/net/ssl/ssl_client_session_cache.cc
+++ b/net/ssl/ssl_client_session_cache.cc
@@ -4,6 +4,7 @@
 
 #include "net/ssl/ssl_client_session_cache.h"
 
+#include <tuple>
 #include <utility>
 
 #include "base/containers/flat_set.h"
@@ -24,6 +25,27 @@
 
 }  // namespace
 
+SSLClientSessionCache::Key::Key() = default;
+SSLClientSessionCache::Key::Key(const Key& other) = default;
+SSLClientSessionCache::Key::Key(Key&& other) = default;
+SSLClientSessionCache::Key::~Key() = default;
+SSLClientSessionCache::Key& SSLClientSessionCache::Key::operator=(
+    const Key& other) = default;
+SSLClientSessionCache::Key& SSLClientSessionCache::Key::operator=(Key&& other) =
+    default;
+
+bool SSLClientSessionCache::Key::operator==(const Key& other) const {
+  return std::tie(server, dest_ip_addr, network_isolation_key, privacy_mode) ==
+         std::tie(other.server, other.dest_ip_addr, other.network_isolation_key,
+                  other.privacy_mode);
+}
+
+bool SSLClientSessionCache::Key::operator<(const Key& other) const {
+  return std::tie(server, dest_ip_addr, network_isolation_key, privacy_mode) <
+         std::tie(other.server, other.dest_ip_addr, other.network_isolation_key,
+                  other.privacy_mode);
+}
+
 SSLClientSessionCache::SSLClientSessionCache(const Config& config)
     : clock_(base::DefaultClock::GetInstance()),
       config_(config),
@@ -31,15 +53,9 @@
       lookups_since_flush_(0) {
   memory_pressure_listener_.reset(new base::MemoryPressureListener(base::Bind(
       &SSLClientSessionCache::OnMemoryPressure, base::Unretained(this))));
-  CertDatabase::GetInstance()->AddObserver(this);
 }
 
 SSLClientSessionCache::~SSLClientSessionCache() {
-  CertDatabase::GetInstance()->RemoveObserver(this);
-  Flush();
-}
-
-void SSLClientSessionCache::OnCertDBChanged() {
   Flush();
 }
 
@@ -48,7 +64,7 @@
 }
 
 bssl::UniquePtr<SSL_SESSION> SSLClientSessionCache::Lookup(
-    const std::string& cache_key) {
+    const Key& cache_key) {
   // Expire stale sessions.
   lookups_since_flush_++;
   if (lookups_since_flush_ >= config_.expiration_check_count) {
@@ -79,7 +95,7 @@
   return session;
 }
 
-void SSLClientSessionCache::Insert(const std::string& cache_key,
+void SSLClientSessionCache::Insert(const Key& cache_key,
                                    bssl::UniquePtr<SSL_SESSION> session) {
   if (IsTLS13(session.get())) {
     base::TimeDelta lifetime =
diff --git a/net/ssl/ssl_client_session_cache.h b/net/ssl/ssl_client_session_cache.h
index 858dd61c..d6af3e8 100644
--- a/net/ssl/ssl_client_session_cache.h
+++ b/net/ssl/ssl_client_session_cache.h
@@ -15,10 +15,14 @@
 #include "base/containers/mru_cache.h"
 #include "base/macros.h"
 #include "base/memory/memory_pressure_monitor.h"
+#include "base/optional.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_dump_provider.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/ip_address.h"
 #include "net/base/net_export.h"
-#include "net/cert/cert_database.h"
+#include "net/base/network_isolation_key.h"
+#include "net/base/privacy_mode.h"
 #include "third_party/boringssl/src/include/openssl/base.h"
 
 namespace base {
@@ -30,7 +34,7 @@
 
 namespace net {
 
-class NET_EXPORT SSLClientSessionCache : public CertDatabase::Observer {
+class NET_EXPORT SSLClientSessionCache {
  public:
   struct Config {
     // The maximum number of entries in the cache.
@@ -39,10 +43,25 @@
     size_t expiration_check_count = 256;
   };
 
-  explicit SSLClientSessionCache(const Config& config);
-  ~SSLClientSessionCache() override;
+  struct NET_EXPORT Key {
+    Key();
+    Key(const Key& other);
+    Key(Key&& other);
+    ~Key();
+    Key& operator=(const Key& other);
+    Key& operator=(Key&& other);
 
-  void OnCertDBChanged() override;
+    bool operator==(const Key& other) const;
+    bool operator<(const Key& other) const;
+
+    HostPortPair server;
+    base::Optional<IPAddress> dest_ip_addr;
+    NetworkIsolationKey network_isolation_key;
+    PrivacyMode privacy_mode = PRIVACY_MODE_DISABLED;
+  };
+
+  explicit SSLClientSessionCache(const Config& config);
+  ~SSLClientSessionCache();
 
   // Returns true if |entry| is expired as of |now|.
   static bool IsExpired(SSL_SESSION* session, time_t now);
@@ -51,13 +70,12 @@
 
   // Returns the session associated with |cache_key| and moves it to the front
   // of the MRU list. Returns nullptr if there is none.
-  bssl::UniquePtr<SSL_SESSION> Lookup(const std::string& cache_key);
+  bssl::UniquePtr<SSL_SESSION> Lookup(const Key& cache_key);
 
   // Inserts |session| into the cache at |cache_key|. If there is an existing
   // one, it is released. Every |expiration_check_count| calls, the cache is
   // checked for stale entries.
-  void Insert(const std::string& cache_key,
-              bssl::UniquePtr<SSL_SESSION> session);
+  void Insert(const Key& cache_key, bssl::UniquePtr<SSL_SESSION> session);
 
   // Removes all entries from the cache.
   void Flush();
@@ -99,7 +117,7 @@
 
   base::Clock* clock_;
   Config config_;
-  base::HashingMRUCache<std::string, Entry> cache_;
+  base::MRUCache<Key, Entry> cache_;
   size_t lookups_since_flush_;
   std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
 
diff --git a/net/ssl/ssl_client_session_cache_unittest.cc b/net/ssl/ssl_client_session_cache_unittest.cc
index 610c2f3..8f0075f 100644
--- a/net/ssl/ssl_client_session_cache_unittest.cc
+++ b/net/ssl/ssl_client_session_cache_unittest.cc
@@ -16,10 +16,10 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/boringssl/src/include/openssl/ssl.h"
 
+using testing::ByRef;
 using testing::Contains;
 using testing::Eq;
 using testing::Field;
-using testing::ByRef;
 
 namespace net {
 
@@ -34,6 +34,12 @@
   return clock;
 }
 
+SSLClientSessionCache::Key MakeTestKey(const std::string& str) {
+  SSLClientSessionCache::Key key;
+  key.server = HostPortPair(str, 443);
+  return key;
+}
+
 class SSLClientSessionCacheTest : public testing::Test {
  public:
   SSLClientSessionCacheTest() : ssl_ctx_(SSL_CTX_new(TLS_method())) {}
@@ -74,29 +80,29 @@
   bssl::UniquePtr<SSL_SESSION> session2 = NewSSLSession();
   bssl::UniquePtr<SSL_SESSION> session3 = NewSSLSession();
 
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 
-  cache.Insert("key1", bssl::UpRef(session1));
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(1u, cache.size());
 
-  cache.Insert("key2", bssl::UpRef(session2));
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session2));
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(2u, cache.size());
 
-  cache.Insert("key1", bssl::UpRef(session3));
-  EXPECT_EQ(session3.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session3));
+  EXPECT_EQ(session3.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(2u, cache.size());
 
   cache.Flush();
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key3").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key3")).get());
   EXPECT_EQ(0u, cache.size());
 }
 
@@ -109,48 +115,48 @@
   bssl::UniquePtr<SSL_SESSION> session2 = NewSSLSession(TLS1_3_VERSION);
   bssl::UniquePtr<SSL_SESSION> session3 = NewSSLSession(TLS1_3_VERSION);
 
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 
-  cache.Insert("key1", bssl::UpRef(session1));
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
 
-  cache.Insert("key1", bssl::UpRef(session1));
-  cache.Insert("key1", bssl::UpRef(session1));
-  cache.Insert("key2", bssl::UpRef(session2));
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session2));
 
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(1u, cache.size());
 
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
 
-  cache.Insert("key1", bssl::UpRef(session1));
-  cache.Insert("key1", bssl::UpRef(session3));
-  cache.Insert("key2", bssl::UpRef(session2));
-  EXPECT_EQ(session3.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session3));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session2));
+  EXPECT_EQ(session3.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 
   cache.Flush();
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key3").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key3")).get());
   EXPECT_EQ(0u, cache.size());
 
-  cache.Insert("key1", bssl::UpRef(session1));
-  cache.Insert("key1", bssl::UpRef(session2));
-  cache.Insert("key1", bssl::UpRef(session3));
-  EXPECT_EQ(session3.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session2));
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session3));
+  EXPECT_EQ(session3.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
 }
 
 // Test insertion and lookup operations with both single-use and reusable
@@ -162,34 +168,34 @@
   bssl::UniquePtr<SSL_SESSION> session_single = NewSSLSession(TLS1_3_VERSION);
   bssl::UniquePtr<SSL_SESSION> session_reuse = NewSSLSession(TLS1_2_VERSION);
 
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
   EXPECT_EQ(0u, cache.size());
 
-  cache.Insert("key1", bssl::UpRef(session_reuse));
-  EXPECT_EQ(session_reuse.get(), cache.Lookup("key1").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session_reuse));
+  EXPECT_EQ(session_reuse.get(), cache.Lookup(MakeTestKey("key1")).get());
   EXPECT_EQ(1u, cache.size());
 
-  cache.Insert("key1", bssl::UpRef(session_single));
-  EXPECT_EQ(session_single.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session_single));
+  EXPECT_EQ(session_single.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
   EXPECT_EQ(0u, cache.size());
 
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 
-  cache.Insert("key2", bssl::UpRef(session_single));
-  cache.Insert("key2", bssl::UpRef(session_single));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session_single));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session_single));
   EXPECT_EQ(1u, cache.size());
 
-  EXPECT_EQ(session_single.get(), cache.Lookup("key2").get());
-  EXPECT_EQ(session_single.get(), cache.Lookup("key2").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  EXPECT_EQ(session_single.get(), cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(session_single.get(), cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 
-  cache.Insert("key2", bssl::UpRef(session_single));
-  cache.Insert("key2", bssl::UpRef(session_reuse));
-  EXPECT_EQ(session_reuse.get(), cache.Lookup("key2").get());
-  EXPECT_EQ(session_reuse.get(), cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session_single));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session_reuse));
+  EXPECT_EQ(session_reuse.get(), cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(session_reuse.get(), cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(1u, cache.size());
 }
 
@@ -201,23 +207,23 @@
 
   bssl::UniquePtr<SSL_SESSION> session = NewSSLSession();
 
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 
-  cache.Insert("key1", bssl::UpRef(session));
-  EXPECT_EQ(session.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session));
+  EXPECT_EQ(session.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(1u, cache.size());
 
-  cache.Insert("key2", bssl::UpRef(session));
-  EXPECT_EQ(session.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session.get(), cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session));
+  EXPECT_EQ(session.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session.get(), cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(2u, cache.size());
 
   cache.Flush();
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(0u, cache.size());
 }
 
@@ -233,29 +239,29 @@
   bssl::UniquePtr<SSL_SESSION> session4 = NewSSLSession();
 
   // Insert three entries.
-  cache.Insert("key1", bssl::UpRef(session1));
-  cache.Insert("key2", bssl::UpRef(session2));
-  cache.Insert("key3", bssl::UpRef(session3));
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
-  EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session2));
+  cache.Insert(MakeTestKey("key3"), bssl::UpRef(session3));
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(session3.get(), cache.Lookup(MakeTestKey("key3")).get());
   EXPECT_EQ(3u, cache.size());
 
   // On insertion of a fourth, the first is removed.
-  cache.Insert("key4", bssl::UpRef(session4));
-  EXPECT_EQ(nullptr, cache.Lookup("key1").get());
-  EXPECT_EQ(session4.get(), cache.Lookup("key4").get());
-  EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+  cache.Insert(MakeTestKey("key4"), bssl::UpRef(session4));
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session4.get(), cache.Lookup(MakeTestKey("key4")).get());
+  EXPECT_EQ(session3.get(), cache.Lookup(MakeTestKey("key3")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
   EXPECT_EQ(3u, cache.size());
 
   // Despite being newest, the next to be removed is session4 as it was accessed
   // least. recently.
-  cache.Insert("key1", bssl::UpRef(session1));
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
-  EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
-  EXPECT_EQ(nullptr, cache.Lookup("key4").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(session3.get(), cache.Lookup(MakeTestKey("key3")).get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key4")).get());
   EXPECT_EQ(3u, cache.size());
 }
 
@@ -275,7 +281,7 @@
   for (size_t i = 0; i < kNumEntries - 1; i++) {
     bssl::UniquePtr<SSL_SESSION> session =
         MakeTestSession(clock->Now(), kTimeout);
-    cache.Insert(base::NumberToString(i), bssl::UpRef(session));
+    cache.Insert(MakeTestKey(base::NumberToString(i)), bssl::UpRef(session));
   }
   EXPECT_EQ(kNumEntries - 1, cache.size());
 
@@ -283,7 +289,7 @@
   clock->Advance(kTimeout * 2);
   bssl::UniquePtr<SSL_SESSION> session =
       MakeTestSession(clock->Now(), kTimeout);
-  cache.Insert("key", bssl::UpRef(session));
+  cache.Insert(MakeTestKey("key"), bssl::UpRef(session));
 
   // All entries are still in the cache.
   EXPECT_EQ(kNumEntries, cache.size());
@@ -291,18 +297,18 @@
   // Perform one fewer lookup than needed to trigger the expiration check. This
   // shall not expire any session.
   for (size_t i = 0; i < kExpirationCheckCount - 1; i++)
-    cache.Lookup("key");
+    cache.Lookup(MakeTestKey("key"));
 
   // All entries are still in the cache.
   EXPECT_EQ(kNumEntries, cache.size());
 
   // Perform one more lookup. This will expire all sessions but the last one.
-  cache.Lookup("key");
+  cache.Lookup(MakeTestKey("key"));
   EXPECT_EQ(1u, cache.size());
-  EXPECT_EQ(session.get(), cache.Lookup("key").get());
+  EXPECT_EQ(session.get(), cache.Lookup(MakeTestKey("key")).get());
   for (size_t i = 0; i < kNumEntries - 1; i++) {
     SCOPED_TRACE(i);
-    EXPECT_EQ(nullptr, cache.Lookup(base::NumberToString(i)));
+    EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey(base::NumberToString(i))));
   }
 }
 
@@ -323,8 +329,8 @@
   // Insert an entry into the session cache.
   bssl::UniquePtr<SSL_SESSION> session =
       MakeTestSession(clock->Now(), kTimeout);
-  cache.Insert("key", bssl::UpRef(session));
-  EXPECT_EQ(session.get(), cache.Lookup("key").get());
+  cache.Insert(MakeTestKey("key"), bssl::UpRef(session));
+  EXPECT_EQ(session.get(), cache.Lookup(MakeTestKey("key")).get());
   EXPECT_EQ(1u, cache.size());
 
   // Expire the session.
@@ -334,24 +340,24 @@
   EXPECT_EQ(1u, cache.size());
 
   // But it will not be returned on lookup and gets pruned at that point.
-  EXPECT_EQ(nullptr, cache.Lookup("key").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key")).get());
   EXPECT_EQ(0u, cache.size());
 
   // Re-inserting a session does not refresh the lifetime. The expiration
   // information in the session is used.
-  cache.Insert("key", bssl::UpRef(session));
-  EXPECT_EQ(nullptr, cache.Lookup("key").get());
+  cache.Insert(MakeTestKey("key"), bssl::UpRef(session));
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key")).get());
   EXPECT_EQ(0u, cache.size());
 
   // Re-insert a fresh copy of the session.
   session = MakeTestSession(clock->Now(), kTimeout);
-  cache.Insert("key", bssl::UpRef(session));
-  EXPECT_EQ(session.get(), cache.Lookup("key").get());
+  cache.Insert(MakeTestKey("key"), bssl::UpRef(session));
+  EXPECT_EQ(session.get(), cache.Lookup(MakeTestKey("key")).get());
   EXPECT_EQ(1u, cache.size());
 
   // Sessions also are treated as expired if the clock rewinds.
   clock->Advance(base::TimeDelta::FromSeconds(-2));
-  EXPECT_EQ(nullptr, cache.Lookup("key").get());
+  EXPECT_EQ(nullptr, cache.Lookup(MakeTestKey("key")).get());
   EXPECT_EQ(0u, cache.size());
 }
 
@@ -373,8 +379,8 @@
   // Insert an entry into the session cache.
   bssl::UniquePtr<SSL_SESSION> session1 =
       MakeTestSession(clock->Now(), kTimeout);
-  cache.Insert("key1", bssl::UpRef(session1));
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
   EXPECT_EQ(1u, cache.size());
 
   // Expire the session.
@@ -382,7 +388,7 @@
   // Add one more session.
   bssl::UniquePtr<SSL_SESSION> session2 =
       MakeTestSession(clock->Now(), kTimeout);
-  cache.Insert("key2", bssl::UpRef(session2));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session2));
   EXPECT_EQ(2u, cache.size());
 
   // Fire a notification that will flush expired sessions.
@@ -392,8 +398,8 @@
 
   // Expired session's cache should be flushed.
   // Lookup returns nullptr, when cache entry not found.
-  EXPECT_FALSE(cache.Lookup("key1"));
-  EXPECT_TRUE(cache.Lookup("key2"));
+  EXPECT_FALSE(cache.Lookup(MakeTestKey("key1")));
+  EXPECT_TRUE(cache.Lookup(MakeTestKey("key2")));
   EXPECT_EQ(1u, cache.size());
 
   // Fire notification that will flush everything.
@@ -424,12 +430,12 @@
   bssl::UniquePtr<SSL_SESSION> session3 = NewSSLSession();
 
   // Insert three entries.
-  cache.Insert("key1", bssl::UpRef(session1));
-  cache.Insert("key2", bssl::UpRef(session2));
-  cache.Insert("key3", bssl::UpRef(session3));
-  EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
-  EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
-  EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
+  cache.Insert(MakeTestKey("key1"), bssl::UpRef(session1));
+  cache.Insert(MakeTestKey("key2"), bssl::UpRef(session2));
+  cache.Insert(MakeTestKey("key3"), bssl::UpRef(session3));
+  EXPECT_EQ(session1.get(), cache.Lookup(MakeTestKey("key1")).get());
+  EXPECT_EQ(session2.get(), cache.Lookup(MakeTestKey("key2")).get());
+  EXPECT_EQ(session3.get(), cache.Lookup(MakeTestKey("key3")).get());
   EXPECT_EQ(3u, cache.size());
 
   base::trace_event::MemoryDumpArgs dump_args = {GetParam()};
diff --git a/pdf/pdfium/pdfium_page.cc b/pdf/pdfium/pdfium_page.cc
index e7f10cf..239e8883 100644
--- a/pdf/pdfium/pdfium_page.cc
+++ b/pdf/pdfium/pdfium_page.cc
@@ -27,8 +27,21 @@
 using printing::kPointsPerInch;
 using printing::kPixelsPerInch;
 
+namespace chrome_pdf {
+
 namespace {
 
+PDFiumPage::IsValidLinkFunction g_is_valid_link_func_for_testing = nullptr;
+
+// If the link cannot be converted to a pp::Var, then it is not possible to
+// pass it to JS. In this case, ignore the link like other PDF viewers.
+// See https://crbug.com/312882 for an example.
+// TODO(crbug.com/702993): Get rid of the PPAPI usage here, as well as
+// SetIsValidLinkFunctionForTesting() and related code.
+bool IsValidLink(const std::string& url) {
+  return pp::Var(url).is_string();
+}
+
 pp::FloatRect FloatPageRectToPixelRect(FPDF_PAGE page,
                                        const pp::FloatRect& input) {
   int output_width = FPDF_GetPageWidth(page);
@@ -81,8 +94,6 @@
 
 }  // namespace
 
-namespace chrome_pdf {
-
 PDFiumPage::LinkTarget::LinkTarget() : page(-1) {}
 
 PDFiumPage::LinkTarget::LinkTarget(const LinkTarget& other) = default;
@@ -104,6 +115,12 @@
   DCHECK_EQ(0, preventing_unload_count_);
 }
 
+// static
+void PDFiumPage::SetIsValidLinkFunctionForTesting(
+    IsValidLinkFunction function) {
+  g_is_valid_link_func_for_testing = function;
+}
+
 void PDFiumPage::Unload() {
   // Do not unload while in the middle of a load.
   if (preventing_unload_count_)
@@ -444,11 +461,10 @@
     Link link;
     link.url = base::UTF16ToUTF8(url);
 
-    // If the link cannot be converted to a pp::Var, then it is not possible to
-    // pass it to JS. In this case, ignore the link like other PDF viewers.
-    // See http://crbug.com/312882 for an example.
-    pp::Var link_var(link.url);
-    if (!link_var.is_string())
+    IsValidLinkFunction is_valid_link_func =
+        g_is_valid_link_func_for_testing ? g_is_valid_link_func_for_testing
+                                         : &IsValidLink;
+    if (!is_valid_link_func(link.url))
       continue;
 
     // Make sure all the characters in the URL are valid per RFC 1738.
diff --git a/pdf/pdfium/pdfium_page.h b/pdf/pdfium/pdfium_page.h
index 8a68b73..6fa27d09 100644
--- a/pdf/pdfium/pdfium_page.h
+++ b/pdf/pdfium/pdfium_page.h
@@ -29,6 +29,9 @@
   PDFiumPage(PDFiumPage&& that);
   ~PDFiumPage();
 
+  using IsValidLinkFunction = bool (*)(const std::string& url);
+  static void SetIsValidLinkFunctionForTesting(IsValidLinkFunction function);
+
   // Unloads the PDFium data for this page from memory.
   void Unload();
   // Gets the FPDF_PAGE for this page, loading and parsing it if necessary.
diff --git a/remoting/base/grpc_support/grpc_async_executor_unittest.cc b/remoting/base/grpc_support/grpc_async_executor_unittest.cc
index c24807c..469b46a4 100644
--- a/remoting/base/grpc_support/grpc_async_executor_unittest.cc
+++ b/remoting/base/grpc_support/grpc_async_executor_unittest.cc
@@ -633,7 +633,7 @@
   scoped_task_environment_.reset();
   scoped_task_environment_ =
       std::make_unique<base::test::ScopedTaskEnvironment>(
-          base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW);
+          base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME);
 
   MockOnceClosure on_channel_ready;
   MockMessageCallback on_incoming_message;
@@ -651,7 +651,7 @@
   scoped_task_environment_.reset();
   scoped_task_environment_ =
       std::make_unique<base::test::ScopedTaskEnvironment>(
-          base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW);
+          base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME);
 
   MockOnceClosure on_channel_ready;
   MockMessageCallback on_incoming_message;
diff --git a/remoting/host/ftl_signaling_connector_unittest.cc b/remoting/host/ftl_signaling_connector_unittest.cc
index de9007e..132348a4 100644
--- a/remoting/host/ftl_signaling_connector_unittest.cc
+++ b/remoting/host/ftl_signaling_connector_unittest.cc
@@ -46,7 +46,7 @@
   }
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   FakeSignalStrategy signal_strategy_{SignalingAddress(kLocalFtlId)};
   base::MockCallback<base::OnceClosure> auth_failed_callback_;
   std::unique_ptr<FtlSignalingConnector> signaling_connector_;
diff --git a/remoting/host/heartbeat_sender_unittest.cc b/remoting/host/heartbeat_sender_unittest.cc
index c04bec99..9ea014503 100644
--- a/remoting/host/heartbeat_sender_unittest.cc
+++ b/remoting/host/heartbeat_sender_unittest.cc
@@ -123,7 +123,7 @@
   }
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   MockHeartbeatClient* mock_client_;
 
   std::unique_ptr<FakeSignalStrategy> signal_strategy_;
diff --git a/remoting/host/remoting_register_support_host_request_unittest.cc b/remoting/host/remoting_register_support_host_request_unittest.cc
index f462f81..9e842b7 100644
--- a/remoting/host/remoting_register_support_host_request_unittest.cc
+++ b/remoting/host/remoting_register_support_host_request_unittest.cc
@@ -97,7 +97,7 @@
   };
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
 
   std::unique_ptr<RemotingRegisterSupportHostRequest> register_host_request_;
   MockRegisterSupportHostClient* register_host_client_ = nullptr;
diff --git a/remoting/resources/remoting_strings_de.xtb b/remoting/resources/remoting_strings_de.xtb
index 1863e7ca..b7ea5b7 100644
--- a/remoting/resources/remoting_strings_de.xtb
+++ b/remoting/resources/remoting_strings_de.xtb
@@ -70,11 +70,11 @@
 <translation id="2366718077645204424">Die Verbindung zum Host kann nicht hergestellt werden. Das von Ihnen verwendete Netzwerk ist möglicherweise nicht korrekt konfiguriert.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> Zuletzt online: <ph name="RELATIVE_TIMESTAMP" />.</translation>
 <translation id="2405928220797050937">Diese App wird nicht mehr unterstützt. Damit Ihnen immer die aktuellen Funktionen und Sicherheitsupdates zur Verfügung stehen, verwenden Sie bitte die Web-App <ph name="LINK_BEGIN" />Chrome Remote Desktop<ph name="LINK_END" />.</translation>
-<translation id="2431841749166974386">Bevor der Remotezugriff von <ph name="PRODUCT_NAME" /> auf dieses Gerät möglich ist, ist ein zusätzlicher Konfigurationsschritt erforderlich.
+<translation id="2431841749166974386">Bevor Sie auf dieses Gerät über <ph name="PRODUCT_NAME" /> remote zugreifen können, ist ein zusätzlicher Konfigurationsschritt erforderlich.
 
 Wenn Sie diese Funktion aktivieren möchten, wählen Sie "<ph name="BUTTON_NAME" />" aus. Daraufhin öffnet sich das Sicherheits- und Datenschutzfenster. Klicken Sie dort das Kästchen neben "<ph name="SERVICE_SCRIPT_NAME" />" an.
 
-Wenn "<ph name="SERVICE_SCRIPT_NAME" />" bereits vorhanden und ausgewählt ist, müssen Sie das Häkchen möglicherweise entfernen und das Kästchen wieder anklicken.</translation>
+Wenn "<ph name="SERVICE_SCRIPT_NAME" />" bereits vorhanden und ausgewählt ist, müssen Sie möglicherweise das Kästchen zweimal anklicken, um das Häkchen zu entfernen und wieder einzufügen.</translation>
 <translation id="2499160551253595098">Helfen Sie uns bei der Verbesserung von Chrome Remote Desktop, indem Sie zulassen, dass wir Nutzungsstatistiken und Absturzberichte erfassen.</translation>
 <translation id="2509394361235492552">Verbunden mit <ph name="HOSTNAME" /></translation>
 <translation id="2512228156274966424">HINWEIS: Sie können in Chrome Remote Desktop die Option zum Öffnen als Fenster einstellen, damit alle Tastenkombinationen verfügbar sind.</translation>
diff --git a/remoting/resources/remoting_strings_es-419.xtb b/remoting/resources/remoting_strings_es-419.xtb
index 2314c36..cca9dfc 100644
--- a/remoting/resources/remoting_strings_es-419.xtb
+++ b/remoting/resources/remoting_strings_es-419.xtb
@@ -70,9 +70,9 @@
 <translation id="2366718077645204424">No se puede establecer la conexión con el host. Probablemente esto se deba a la configuración de la red que usas.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> Última vez en línea <ph name="RELATIVE_TIMESTAMP" /></translation>
 <translation id="2405928220797050937">Esta app ya no es compatible. Para asegurarte de que recibes las actualizaciones de seguridad y las funciones más recientes, usa la <ph name="LINK_BEGIN" />app web de Escritorio remoto de Chrome<ph name="LINK_END" />.</translation>
-<translation id="2431841749166974386">Para poder controlar esta máquina de forma remota con <ph name="PRODUCT_NAME" />, se necesita un paso adicional de configuración.
+<translation id="2431841749166974386">Para poder controlar esta máquina de forma remota con <ph name="PRODUCT_NAME" />, se necesita un paso de configuración adicional.
 
-Para habilitar esta funcionalidad, selecciona "<ph name="BUTTON_NAME" />". Se mostrará el panel de preferencias de Seguridad y privacidad. Luego, marca la casilla correspondiente a "<ph name="SERVICE_SCRIPT_NAME" />".
+Para habilitar esta funcionalidad, selecciona "<ph name="BUTTON_NAME" />". Se mostrará el panel de preferencias de Seguridad y Privacidad. Luego, marca la casilla correspondiente a "<ph name="SERVICE_SCRIPT_NAME" />".
 
 Si ya se muestra la opción "<ph name="SERVICE_SCRIPT_NAME" />" y está marcada, es posible que debas quitarla y volver a agregarla.</translation>
 <translation id="2499160551253595098">Ayúdanos a mejorar la aplicación Escritorio remoto de Chrome permitiéndonos recopilar estadísticas de uso e informes sobre fallos.</translation>
diff --git a/remoting/resources/remoting_strings_fil.xtb b/remoting/resources/remoting_strings_fil.xtb
index ee4756c..252a7a0 100644
--- a/remoting/resources/remoting_strings_fil.xtb
+++ b/remoting/resources/remoting_strings_fil.xtb
@@ -70,11 +70,11 @@
 <translation id="2366718077645204424">Hindi maabot ang host. Malamang na dahil ito sa configuration ng network na iyong ginagamit.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Huling nakitang naka-online noong <ph name="RELATIVE_TIMESTAMP" />.</translation>
 <translation id="2405928220797050937">Hindi na sinusuportahan ang app na ito. Upang matiyak na makukuha mo ang mga pinakabagong feature at update sa seguridad, pakigamit ang <ph name="LINK_BEGIN" />web app na Remote na Desktop ng Chrome<ph name="LINK_END" />.</translation>
-<translation id="2431841749166974386">Kinakailangan ang karagdagang hakbang sa configuration bago mo makontrol nang malayuan ang machine na ito gamit ang <ph name="PRODUCT_NAME" />.
+<translation id="2431841749166974386">May karagdagang hakbang sa configuration na kinakailangan bago mo makontrol nang malayuan ang computer na ito gamit ang <ph name="PRODUCT_NAME" />.
 
-Para i-enable ang functionality na ito, piliin ang '<ph name="BUTTON_NAME" />' para ipakita ang pane ng mga kagustuhan ng Seguridad at Privacy, pagkatapos ay lagyan ng check ang kahon sa tabi ng '<ph name="SERVICE_SCRIPT_NAME" />'.
+Para i-enable ang functionality na ito, piliin ang '<ph name="BUTTON_NAME" />' para ipakita ang pane ng mga kagustuhan sa Seguridad at Privacy, pagkatapos ay lagyan ng check ang kahon sa tabi ng '<ph name="SERVICE_SCRIPT_NAME" />.'
 
-Kung mayroon nang '<ph name="SERVICE_SCRIPT_NAME" />' at may nakalagay nang check, puwede mong alisin ito at pagkatapos ay idagdag itong muli.</translation>
+Kung mayroon nang '<ph name="SERVICE_SCRIPT_NAME" />' at may nakalagay nang check, puwede mo itong alisin, at pagkatapos ay idagdag ito ulit.</translation>
 <translation id="2499160551253595098">Tumulong sa amin na pahusayin ang Remote na Desktop ng Chrome sa pamamagitan ng pagbibigay-daan sa amin na mangolekta ng mga statistics sa paggamit at mga ulat ng pag-crash.</translation>
 <translation id="2509394361235492552">Nakakonekta sa <ph name="HOSTNAME" /></translation>
 <translation id="2512228156274966424">TANDAAN: Upang matiyak na available ang lahat ng keyboard shortcut, maaari mong i-configure ang Remote na Desktop ng Chrome sa ‘Buksan bilang window’.</translation>
diff --git a/remoting/resources/remoting_strings_id.xtb b/remoting/resources/remoting_strings_id.xtb
index 7e351d2..7812916 100644
--- a/remoting/resources/remoting_strings_id.xtb
+++ b/remoting/resources/remoting_strings_id.xtb
@@ -70,7 +70,7 @@
 <translation id="2366718077645204424">Tidak dapat menjangkau inang. Ini mungkin karena konfigurasi jaringan yang Anda gunakan.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Terakhir terlihat online <ph name="RELATIVE_TIMESTAMP" />.</translation>
 <translation id="2405928220797050937">Aplikasi ini tidak lagi didukung. Untuk memastikan Anda mendapatkan update fitur dan keamanan terbaru, gunakan <ph name="LINK_BEGIN" />aplikasi web Chrome Desktop Jarak Jauh<ph name="LINK_END" />.</translation>
-<translation id="2431841749166974386">Langkah konfigurasi tambahan diperlukan sebelum Anda dapat mengontrol mesin ini dari jarak jauh menggunakan <ph name="PRODUCT_NAME" />.
+<translation id="2431841749166974386">Langkah konfigurasi tambahan diperlukan sebelum Anda dapat mengontrol perangkat ini dari jarak jauh menggunakan <ph name="PRODUCT_NAME" />.
 
 Untuk mengaktifkan fungsi ini, pilih <ph name="BUTTON_NAME" />' untuk menampilkan panel preferensi Keamanan dan Privasi, kemudian centang kotak di sebelah '<ph name="SERVICE_SCRIPT_NAME" />'.
 
diff --git a/remoting/resources/remoting_strings_it.xtb b/remoting/resources/remoting_strings_it.xtb
index 58a5ccf..4e2c308 100644
--- a/remoting/resources/remoting_strings_it.xtb
+++ b/remoting/resources/remoting_strings_it.xtb
@@ -70,9 +70,9 @@
 <translation id="2366718077645204424">Impossibile raggiungere l'host. Il problema potrebbe essere dovuto alla configurazione della rete in uso.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Visto l'ultima volta online <ph name="RELATIVE_TIMESTAMP" />.</translation>
 <translation id="2405928220797050937">Questa app non è più supportata. Per essere sicuro di ricevere le funzioni più recenti e gli ultimi aggiornamenti della sicurezza, usa l'<ph name="LINK_BEGIN" />app web Chrome Remote Desktop<ph name="LINK_END" />.</translation>
-<translation id="2431841749166974386">Per poter controllare da remoto questo computer con <ph name="PRODUCT_NAME" />, devi svolgere un passaggio di configurazione aggiuntivo.
+<translation id="2431841749166974386">Prima che tu possa controllare questo computer da remoto con <ph name="PRODUCT_NAME" />, è richiesto un passaggio di configurazione aggiuntivo.
 
-Per attivare questa funzionalità, seleziona "<ph name="BUTTON_NAME" />" per visualizzare il riquadro di preferenze Sicurezza e privacy, quindi seleziona la casella "<ph name="SERVICE_SCRIPT_NAME" />".
+Per attivare questa funzionalità, seleziona "<ph name="BUTTON_NAME" />" per visualizzare il riquadro delle preferenze di sicurezza e privacy, poi seleziona la casella accanto a "<ph name="SERVICE_SCRIPT_NAME" />".
 
 Se l'opzione "<ph name="SERVICE_SCRIPT_NAME" />" è già presente e selezionata, potresti doverla rimuovere e aggiungere di nuovo.</translation>
 <translation id="2499160551253595098">Aiutaci a migliorare Chrome Remote Desktop consentendo l'acquisizione di dati per statistiche di utilizzo e rapporti sugli arresti anomali.</translation>
diff --git a/remoting/resources/remoting_strings_iw.xtb b/remoting/resources/remoting_strings_iw.xtb
index 1d4e547..18d1ea7 100644
--- a/remoting/resources/remoting_strings_iw.xtb
+++ b/remoting/resources/remoting_strings_iw.xtb
@@ -70,9 +70,9 @@
 <translation id="2366718077645204424">לא ניתן להשיג את המארח. הסיבה לכך יכולה להיות תצורת הרשת שבה אתה משתמש.</translation>
 <translation id="2370754117186920852">המארח <ph name="OPTIONAL_OFFLINE_REASON" />  נראה לאחרונה במצב מקוון <ph name="RELATIVE_TIMESTAMP" />.</translation>
 <translation id="2405928220797050937">‏האפליקציה הזו כבר לא נתמכת. כדי לוודא שיש לך גישה לתכונות ולעדכוני האבטחה העדכניים ביותר, יש להשתמש ב<ph name="LINK_BEGIN" />אפליקציית האינטרנט Chrome Remote Desktop<ph name="LINK_END" />.</translation>
-<translation id="2431841749166974386">ש לבצע שלב הגדרה נוסף כדי לשלוט במחשב מרחוק באמצעות <ph name="PRODUCT_NAME" />.
+<translation id="2431841749166974386">יש לבצע שלב הגדרה נוסף כדי לשלוט במחשב מרחוק באמצעות <ph name="PRODUCT_NAME" />.
 
-כדי להפעיל את הפונקציונליות הזו, בוחרים '<ph name="BUTTON_NAME" />' כדי להציג את חלונית העדפות האבטחה והפרטיות, ואז מסמנים את התיבה לצד '<ph name="SERVICE_SCRIPT_NAME" />'.
+להפעלת הפונקציונליות הזו, בוחרים '<ph name="BUTTON_NAME" />' כדי להציג את חלונית העדפות האבטחה והפרטיות, ואז מסמנים את התיבה לצד '<ph name="SERVICE_SCRIPT_NAME" />'.
 
 אם '<ph name="SERVICE_SCRIPT_NAME" />' כבר מוצג ומסומן, ייתכן שצריך להסיר אותו ואז להוסיף אותו מחדש.</translation>
 <translation id="2499160551253595098">‏רוצה לעזור לנו לשפר את Chrome Remote Desktop? אנחנו זקוקים לאישורך כדי לאסוף סטטיסטיקות שימוש ודוחות קריסה.</translation>
diff --git a/remoting/resources/remoting_strings_ja.xtb b/remoting/resources/remoting_strings_ja.xtb
index c9bf24b..b0694c3 100644
--- a/remoting/resources/remoting_strings_ja.xtb
+++ b/remoting/resources/remoting_strings_ja.xtb
@@ -70,7 +70,7 @@
 <translation id="2366718077645204424">ホストにアクセスできません。お使いのネットワークの設定が原因であることが考えられます。</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />最終オンライン: <ph name="RELATIVE_TIMESTAMP" />。</translation>
 <translation id="2405928220797050937">このアプリのサポートは終了しました。最新の機能とセキュリティ アップデートを反映した <ph name="LINK_BEGIN" />Chrome リモート デスクトップ ウェブアプリ<ph name="LINK_END" />をご利用ください。</translation>
-<translation id="2431841749166974386"><ph name="PRODUCT_NAME" /> を使用してこのパソコンをリモートで管理するには、追加の設定手順を行う必要があります。
+<translation id="2431841749166974386"><ph name="PRODUCT_NAME" /> を使用してこのパソコンをリモートで管理するには、追加の設定が必要です。
 
 この機能を有効にするには、[<ph name="BUTTON_NAME" />] を選択して [セキュリティとプライバシー] 設定パネルを開き、[<ph name="SERVICE_SCRIPT_NAME" />] の横にあるチェックボックスをオンにします。
 
diff --git a/remoting/resources/remoting_strings_pt-BR.xtb b/remoting/resources/remoting_strings_pt-BR.xtb
index 5680bf1b..5fd5d5f 100644
--- a/remoting/resources/remoting_strings_pt-BR.xtb
+++ b/remoting/resources/remoting_strings_pt-BR.xtb
@@ -74,7 +74,7 @@
 
 Se quiser ativar essa função, selecione "<ph name="BUTTON_NAME" />" para exibir o painel de preferências de Segurança e Privacidade, depois marque a caixa ao lado de "<ph name="SERVICE_SCRIPT_NAME" />".
 
-Se "<ph name="SERVICE_SCRIPT_NAME" />"' já estiver presente e selecionado, pode ser necessário remover esse script e adicioná-lo novamente.</translation>
+Se "<ph name="SERVICE_SCRIPT_NAME" />"' já estiver presente e selecionado, poderá ser necessário remover esse script e adicioná-lo novamente.</translation>
 <translation id="2499160551253595098">Ajude-nos a melhorar a Área de trabalho remota do Google Chrome por meio da coleta de estatísticas de uso e de relatórios de falhas.</translation>
 <translation id="2509394361235492552">Conectado a <ph name="HOSTNAME" /></translation>
 <translation id="2512228156274966424">OBSERVAÇÃO: para garantir que todos os atalhos do teclado estejam disponíveis, você pode configurar a Área de trabalho remota do Google Chrome para "Abrir como janela".</translation>
diff --git a/remoting/resources/remoting_strings_ro.xtb b/remoting/resources/remoting_strings_ro.xtb
index 95e28c0..4317f82 100644
--- a/remoting/resources/remoting_strings_ro.xtb
+++ b/remoting/resources/remoting_strings_ro.xtb
@@ -72,7 +72,7 @@
 <translation id="2405928220797050937">Această aplicație nu mai este acceptată. Pentru a te asigura că beneficiezi de cele mai recente funcții și actualizări de securitate, folosește <ph name="LINK_BEGIN" />aplicația web Desktop la distanță Chrome<ph name="LINK_END" />.</translation>
 <translation id="2431841749166974386">Este necesar încă un pas de configurare înainte să poți controla acest dispozitiv de la distanță folosind <ph name="PRODUCT_NAME" />.
 
-Pentru a activa această funcție, selectează „<ph name="BUTTON_NAME" />” pentru a afișa panoul de preferințe pentru securitate și confidențialitate, apoi bifează căsuța de lângă „<ph name="SERVICE_SCRIPT_NAME" />”.
+Pentru a activa această funcție, selectează „<ph name="BUTTON_NAME" />” ca să afișezi panoul de preferințe pentru securitate și confidențialitate, apoi bifează căsuța de lângă „<ph name="SERVICE_SCRIPT_NAME" />”.
 
 Dacă „<ph name="SERVICE_SCRIPT_NAME" />” este deja disponibil și bifat, poate fi necesar să-l elimini și să-l adaugi din nou.</translation>
 <translation id="2499160551253595098">Ajutați-ne să îmbunătățim Desktop la distanță Chrome, permițându-ne să colectăm statistici de utilizare și rapoarte de blocare.</translation>
diff --git a/remoting/resources/remoting_strings_ta.xtb b/remoting/resources/remoting_strings_ta.xtb
index 623f814..df1d544 100644
--- a/remoting/resources/remoting_strings_ta.xtb
+++ b/remoting/resources/remoting_strings_ta.xtb
@@ -72,7 +72,7 @@
 <translation id="2405928220797050937">இந்த ஆப்ஸ் இனி ஆதரிக்கப்படாது. சமீபத்திய அம்சங்களையும் பாதுகாப்புப் புதுப்பிப்புகளையும் பெற, <ph name="LINK_BEGIN" />Chrome தொலைநிலை டெஸ்க்டாப் இணையப் பயன்பாட்டைப்<ph name="LINK_END" /> பயன்படுத்தவும்.</translation>
 <translation id="2431841749166974386"><ph name="PRODUCT_NAME" /> மூலம் இந்தச் சாதனத்தைத் தொலைநிலையிலிருந்து நிர்வகிப்பதற்கு முன்பு கூடுதல் உள்ளமைவுச் செயல்பாடு ஒன்றைச் செய்ய வேண்டும்.
 
-இந்தச் செயல்பாட்டை இயக்குவதற்கு ’பாதுகாப்பும் தனியுரிமையும்’ விருப்பத்தேர்வுகள் பலகத்தைக் காட்டும் '<ph name="BUTTON_NAME" />'ஐத் தேர்ந்தெடுத்து '<ph name="SERVICE_SCRIPT_NAME" />'க்கு அடுத்துள்ள பெட்டியைத் தேர்வுசெய்யவும்.
+இந்தச் செயல்பாட்டை இயக்குவதற்கு ’பாதுகாப்பும் தனியுரிமையும்’ விருப்பத்தேர்வுகளைக் காட்டும் '<ph name="BUTTON_NAME" />'ஐத் தேர்ந்தெடுத்து '<ph name="SERVICE_SCRIPT_NAME" />'க்கு அடுத்துள்ள பெட்டியைத் தேர்வுசெய்யவும்.
 
 ஏற்கெனவே '<ph name="SERVICE_SCRIPT_NAME" />' தேர்ந்தெடுக்கப்பட்டிருந்தால் நீங்கள் அதை அகற்றிவிட்டு மீண்டும் சேர்க்க வேண்டும்.</translation>
 <translation id="2499160551253595098">பயன்பாட்டு புள்ளிவிவரங்களையும் சிதைவு அறிக்கைகளையும் சேகரிக்க எங்களை அனுமதித்து Chrome தொலைநிலை டெஸ்க்டாப்பை மேம்படுத்த உதவவும்.</translation>
diff --git a/remoting/resources/remoting_strings_vi.xtb b/remoting/resources/remoting_strings_vi.xtb
index 02cc36d2..c0fbcc1 100644
--- a/remoting/resources/remoting_strings_vi.xtb
+++ b/remoting/resources/remoting_strings_vi.xtb
@@ -70,11 +70,11 @@
 <translation id="2366718077645204424">Không thể kết nối với máy chủ. Điều này có thể do cấu hình của mạng bạn đang sử dụng.</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />  Nhìn thấy trực tuyến lần cuối <ph name="RELATIVE_TIMESTAMP" />.</translation>
 <translation id="2405928220797050937">Ứng dụng này không được hỗ trợ nữa. Để đảm bảo bạn sẽ nhận được các tính năng và bản cập nhật bảo mật mới nhất, hãy sử dụng <ph name="LINK_BEGIN" />ứng dụng web Chrome Remote Desktop<ph name="LINK_END" />.</translation>
-<translation id="2431841749166974386">Bạn cần thực hiện bước cấu hình bổ sung để có thể điều khiển máy này từ xa bằng <ph name="PRODUCT_NAME" />.
+<translation id="2431841749166974386">Bạn cần thực hiện một bước cấu hình bổ sung để có thể điều khiển máy này từ xa bằng <ph name="PRODUCT_NAME" />.
 
-Để bật chức năng này, hãy chọn '<ph name="BUTTON_NAME" />' để hiển thị ngăn tùy chọn Bảo mật và Quyền riêng tư. Sau đó, chọn hộp bên cạnh '<ph name="SERVICE_SCRIPT_NAME" />'.
+Để bật chức năng này, hãy chọn '<ph name="BUTTON_NAME" />' để hiển thị ngăn tùy chọn Bảo mật và quyền riêng tư. Sau đó, chọn hộp bên cạnh '<ph name="SERVICE_SCRIPT_NAME" />'.
 
-Nếu '<ph name="SERVICE_SCRIPT_NAME" />' đã có và được chọn, thì bạn có thể phải xóa đi và thêm lại.</translation>
+Nếu '<ph name="SERVICE_SCRIPT_NAME" />' đã tồn tại và được chọn, thì bạn có thể phải xóa đi và thêm lại.</translation>
 <translation id="2499160551253595098">Giúp chúng tôi cải tiến Chrome Remote Desktop bằng cách cho phép chúng tôi thu thập số liệu thống kê sử dụng và báo cáo sự cố.</translation>
 <translation id="2509394361235492552">Đã kết nối với <ph name="HOSTNAME" /></translation>
 <translation id="2512228156274966424">LƯU Ý: Nhằm đảm bảo rằng tất cả các phím tắt đều khả dụng, bạn có thể định cấu hình Chrome Remote Desktop để ‘Mở dưới dạng cửa sổ’.</translation>
diff --git a/remoting/resources/remoting_strings_zh-CN.xtb b/remoting/resources/remoting_strings_zh-CN.xtb
index 537104d6..2c7a7a8 100644
--- a/remoting/resources/remoting_strings_zh-CN.xtb
+++ b/remoting/resources/remoting_strings_zh-CN.xtb
@@ -70,11 +70,11 @@
 <translation id="2366718077645204424">无法连接到主机,这可能是由您所使用网络的配置导致的。</translation>
 <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" />上次在线时间:<ph name="RELATIVE_TIMESTAMP" />。</translation>
 <translation id="2405928220797050937">此应用已不再受支持。为确保您能获得最新的功能和安全更新,请使用新版<ph name="LINK_BEGIN" />“Chrome 远程桌面”网络应用<ph name="LINK_END" />。</translation>
-<translation id="2431841749166974386">要使用 <ph name="PRODUCT_NAME" />远程控制此机器,您必须执行一个额外的配置步骤。
+<translation id="2431841749166974386">要使用<ph name="PRODUCT_NAME" />远程控制此机器,您必须执行一个额外的配置步骤。
 
 要启用此功能,请选择“<ph name="BUTTON_NAME" />“以显示“安全性与隐私”偏好设置窗格,然后勾选”<ph name="SERVICE_SCRIPT_NAME" />“旁边的方框。
 
-如果”<ph name="SERVICE_SCRIPT_NAME" />“已经出现并勾选,您可能需要先将其移除,然后再次添加。</translation>
+如果”<ph name="SERVICE_SCRIPT_NAME" />“已经显示并勾选,您可能需要先将其移除,然后再次添加。</translation>
 <translation id="2499160551253595098">允许我们收集使用情况统计信息和崩溃报告,以帮助改进 Chrome 远程桌面。</translation>
 <translation id="2509394361235492552">已连接到“<ph name="HOSTNAME" />”</translation>
 <translation id="2512228156274966424">注意:为确保所有键盘快捷键都能正常使用,请将 Chrome 远程桌面配置为“在窗口中打开”。</translation>
diff --git a/remoting/signaling/ftl_message_reception_channel_unittest.cc b/remoting/signaling/ftl_message_reception_channel_unittest.cc
index a32d8c3..a04d94e 100644
--- a/remoting/signaling/ftl_message_reception_channel_unittest.cc
+++ b/remoting/signaling/ftl_message_reception_channel_unittest.cc
@@ -108,7 +108,7 @@
   int GetRetryFailureCount() const;
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   std::unique_ptr<FtlMessageReceptionChannel> channel_;
   base::MockCallback<FtlMessageReceptionChannel::StreamOpener>
       mock_stream_opener_;
diff --git a/remoting/signaling/ftl_registration_manager_unittest.cc b/remoting/signaling/ftl_registration_manager_unittest.cc
index 9d3584d..d7dee37 100644
--- a/remoting/signaling/ftl_registration_manager_unittest.cc
+++ b/remoting/signaling/ftl_registration_manager_unittest.cc
@@ -83,7 +83,7 @@
   }
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   FakeOAuthTokenGetter token_getter{OAuthTokenGetter::SUCCESS, "fake_email",
                                     "access_token"};
   FtlRegistrationManager registration_manager_{
diff --git a/remoting/signaling/ftl_signal_strategy_unittest.cc b/remoting/signaling/ftl_signal_strategy_unittest.cc
index c83bdda..d1c8725 100644
--- a/remoting/signaling/ftl_signal_strategy_unittest.cc
+++ b/remoting/signaling/ftl_signal_strategy_unittest.cc
@@ -237,7 +237,7 @@
                     const ftl::ChromotingMessage&));
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
 
   MockOAuthTokenGetter* token_getter_ = nullptr;
   FakeRegistrationManager* registration_manager_ = nullptr;
diff --git a/remoting/signaling/message_tracker_unittest.cc b/remoting/signaling/message_tracker_unittest.cc
index 81d6e5cc..c6d7bb1d 100644
--- a/remoting/signaling/message_tracker_unittest.cc
+++ b/remoting/signaling/message_tracker_unittest.cc
@@ -15,7 +15,7 @@
   static constexpr base::TimeDelta GetCleanupInterval();
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
   MessageTracker message_tracker_;
 };
 
diff --git a/remoting/signaling/remoting_log_to_server_unittest.cc b/remoting/signaling/remoting_log_to_server_unittest.cc
index 69780de..bafb5e7 100644
--- a/remoting/signaling/remoting_log_to_server_unittest.cc
+++ b/remoting/signaling/remoting_log_to_server_unittest.cc
@@ -43,7 +43,7 @@
       RemotingLogToServer::CreateLogEntryResponseCallback;
 
   base::test::ScopedTaskEnvironment scoped_task_environment_{
-      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW};
+      base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME};
 
   base::MockCallback<RemotingLogToServer::CreateLogEntryCallback>
       mock_create_log_entry_;
diff --git a/services/audio/input_stream.h b/services/audio/input_stream.h
index 3deb3729..8461290 100644
--- a/services/audio/input_stream.h
+++ b/services/audio/input_stream.h
@@ -11,9 +11,9 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/sync_socket.h"
 #include "base/unguessable_token.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/services/audio/log_adapter.h b/services/audio/log_adapter.h
index c56c255..fa77c45 100644
--- a/services/audio/log_adapter.h
+++ b/services/audio/log_adapter.h
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "media/audio/audio_logging.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/remote.h"
 
 namespace media {
diff --git a/services/audio/log_factory_adapter.h b/services/audio/log_factory_adapter.h
index a9094162..b39e3ef 100644
--- a/services/audio/log_factory_adapter.h
+++ b/services/audio/log_factory_adapter.h
@@ -10,7 +10,7 @@
 #include "base/containers/queue.h"
 #include "media/audio/audio_logging.h"
 #include "media/audio/fake_audio_log_factory.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/audio/public/mojom/log_factory_manager.mojom.h"
diff --git a/services/audio/log_factory_manager_unittest.cc b/services/audio/log_factory_manager_unittest.cc
index 8f21bee4..6a910a0 100644
--- a/services/audio/log_factory_manager_unittest.cc
+++ b/services/audio/log_factory_manager_unittest.cc
@@ -11,7 +11,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/test/scoped_task_environment.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
diff --git a/services/audio/loopback_stream.h b/services/audio/loopback_stream.h
index 65ad41c..aa15bbe 100644
--- a/services/audio/loopback_stream.h
+++ b/services/audio/loopback_stream.h
@@ -23,8 +23,8 @@
 #include "base/timer/timer.h"
 #include "base/unguessable_token.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/services/audio/output_stream.h b/services/audio/output_stream.h
index 451bc9e..5f3bfa9 100644
--- a/services/audio/output_stream.h
+++ b/services/audio/output_stream.h
@@ -15,9 +15,9 @@
 #include "base/strings/string_piece.h"
 #include "base/sync_socket.h"
 #include "base/timer/timer.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/services/audio/public/cpp/fake_stream_factory.h b/services/audio/public/cpp/fake_stream_factory.h
index 85a2542..e829ec61 100644
--- a/services/audio/public/cpp/fake_stream_factory.h
+++ b/services/audio/public/cpp/fake_stream_factory.h
@@ -9,8 +9,8 @@
 
 #include "base/optional.h"
 #include "base/run_loop.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
diff --git a/services/audio/public/cpp/input_ipc.cc b/services/audio/public/cpp/input_ipc.cc
index b903668..7881b27 100644
--- a/services/audio/public/cpp/input_ipc.cc
+++ b/services/audio/public/cpp/input_ipc.cc
@@ -8,7 +8,7 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
diff --git a/services/audio/public/cpp/input_ipc.h b/services/audio/public/cpp/input_ipc.h
index 0c8a992..0d5b148 100644
--- a/services/audio/public/cpp/input_ipc.h
+++ b/services/audio/public/cpp/input_ipc.h
@@ -14,8 +14,8 @@
 #include "base/sequence_checker.h"
 #include "base/time/time.h"
 #include "media/audio/audio_input_ipc.h"
-#include "media/mojo/interfaces/audio_input_stream.mojom.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_input_stream.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
diff --git a/services/audio/public/cpp/input_ipc_unittest.cc b/services/audio/public/cpp/input_ipc_unittest.cc
index 981c47eb..c7b68e9e 100644
--- a/services/audio/public/cpp/input_ipc_unittest.cc
+++ b/services/audio/public/cpp/input_ipc_unittest.cc
@@ -9,7 +9,7 @@
 
 #include "base/bind.h"
 #include "base/test/scoped_task_environment.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/system/buffer.h"
diff --git a/services/audio/public/cpp/output_device.cc b/services/audio/public/cpp/output_device.cc
index a1fea4a..f0c2c1cb 100644
--- a/services/audio/public/cpp/output_device.cc
+++ b/services/audio/public/cpp/output_device.cc
@@ -10,8 +10,8 @@
 #include "base/optional.h"
 #include "base/threading/thread_restrictions.h"
 #include "media/audio/audio_output_device_thread_callback.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/mojom/constants.mojom.h"
diff --git a/services/audio/public/cpp/output_device.h b/services/audio/public/cpp/output_device.h
index a0d4539..9cff1f1b 100644
--- a/services/audio/public/cpp/output_device.h
+++ b/services/audio/public/cpp/output_device.h
@@ -9,7 +9,7 @@
 #include <string>
 
 #include "media/base/audio_renderer_sink.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/audio/public/mojom/audio_processing.mojom.h"
 #include "services/audio/public/mojom/stream_factory.mojom.h"
diff --git a/services/audio/public/cpp/output_device_unittest.cc b/services/audio/public/cpp/output_device_unittest.cc
index 18c11f0e..f271969 100644
--- a/services/audio/public/cpp/output_device_unittest.cc
+++ b/services/audio/public/cpp/output_device_unittest.cc
@@ -12,7 +12,7 @@
 #include "build/build_config.h"
 #include "media/audio/audio_sync_reader.h"
 #include "media/base/audio_renderer_sink.h"
-#include "media/mojo/interfaces/audio_data_pipe.mojom.h"
+#include "media/mojo/mojom/audio_data_pipe.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "services/audio/public/cpp/fake_stream_factory.h"
diff --git a/services/audio/public/cpp/sounds/audio_stream_handler.cc b/services/audio/public/cpp/sounds/audio_stream_handler.cc
index d8f3bf2..7215d91 100644
--- a/services/audio/public/cpp/sounds/audio_stream_handler.cc
+++ b/services/audio/public/cpp/sounds/audio_stream_handler.cc
@@ -18,7 +18,7 @@
 #include "base/time/time.h"
 #include "media/audio/wav_audio_handler.h"
 #include "media/base/channel_layout.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "services/audio/public/cpp/output_device.h"
 
 namespace audio {
diff --git a/services/audio/public/mojom/BUILD.gn b/services/audio/public/mojom/BUILD.gn
index bb9dc0f6..78ae7f1 100644
--- a/services/audio/public/mojom/BUILD.gn
+++ b/services/audio/public/mojom/BUILD.gn
@@ -18,7 +18,7 @@
 
   public_deps = [
     ":constants",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/mojom/base",
   ]
 }
diff --git a/services/audio/public/mojom/log_factory_manager.mojom b/services/audio/public/mojom/log_factory_manager.mojom
index 8a441e4..f21d18f 100644
--- a/services/audio/public/mojom/log_factory_manager.mojom
+++ b/services/audio/public/mojom/log_factory_manager.mojom
@@ -4,7 +4,7 @@
 
 module audio.mojom;
 
-import "media/mojo/interfaces/audio_logging.mojom";
+import "media/mojo/mojom/audio_logging.mojom";
 
 // This interface is exposed by the audio service to allow trusted clients
 // (like the browser process) to set a factory for creating audio logs.
diff --git a/services/audio/public/mojom/stream_factory.mojom b/services/audio/public/mojom/stream_factory.mojom
index 54144e4..8ccce2e 100644
--- a/services/audio/public/mojom/stream_factory.mojom
+++ b/services/audio/public/mojom/stream_factory.mojom
@@ -4,11 +4,11 @@
 
 module audio.mojom;
 
-import "media/mojo/interfaces/audio_data_pipe.mojom";
-import "media/mojo/interfaces/audio_input_stream.mojom";
-import "media/mojo/interfaces/audio_logging.mojom";
-import "media/mojo/interfaces/audio_output_stream.mojom";
-import "media/mojo/interfaces/audio_parameters.mojom";
+import "media/mojo/mojom/audio_data_pipe.mojom";
+import "media/mojo/mojom/audio_input_stream.mojom";
+import "media/mojo/mojom/audio_logging.mojom";
+import "media/mojo/mojom/audio_output_stream.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "services/audio/public/mojom/audio_processing.mojom";
 
diff --git a/services/audio/public/mojom/system_info.mojom b/services/audio/public/mojom/system_info.mojom
index 54bedfe..f4f37a4 100644
--- a/services/audio/public/mojom/system_info.mojom
+++ b/services/audio/public/mojom/system_info.mojom
@@ -4,7 +4,7 @@
 
 module audio.mojom;
 
-import "media/mojo/interfaces/audio_parameters.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
 import "services/audio/public/mojom/audio_device_description.mojom";
 
 // Provides information about audio system.
diff --git a/services/audio/stream_factory.h b/services/audio/stream_factory.h
index f8b6b14d7..2480950 100644
--- a/services/audio/stream_factory.h
+++ b/services/audio/stream_factory.h
@@ -16,8 +16,8 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/threading/thread.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
-#include "media/mojo/interfaces/audio_output_stream.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_output_stream.mojom.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "services/audio/loopback_coordinator.h"
 #include "services/audio/public/mojom/stream_factory.mojom.h"
diff --git a/services/audio/test/mock_log.h b/services/audio/test/mock_log.h
index 4ab1eac6..00d9512 100644
--- a/services/audio/test/mock_log.h
+++ b/services/audio/test/mock_log.h
@@ -9,7 +9,7 @@
 
 #include "base/bind.h"
 #include "media/base/audio_parameters.h"
-#include "media/mojo/interfaces/audio_logging.mojom.h"
+#include "media/mojo/mojom/audio_logging.mojom.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc
index d440ea6..dfdd19c 100644
--- a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc
+++ b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc
@@ -15,45 +15,42 @@
     "Cannot connect to the remote parser service";
 }  // namespace
 
-SafeBundledExchangesParser::SafeBundledExchangesParser() = default;
+SafeBundledExchangesParser::SafeBundledExchangesParser(
+    service_manager::Connector* connector) {
+  if (connector) {
+    connector->Connect(mojom::kServiceName,
+                       factory_.BindNewPipeAndPassReceiver());
+  }
+}
+
 SafeBundledExchangesParser::~SafeBundledExchangesParser() = default;
 
-void SafeBundledExchangesParser::OpenFile(service_manager::Connector* connector,
-                                          base::File file) {
+base::File::Error SafeBundledExchangesParser::OpenFile(base::File file) {
   DCHECK(disconnected_);
-  if (factory_for_testing_) {
-    factory_for_testing_->GetParserForFile(parser_.BindNewPipeAndPassReceiver(),
-                                           std::move(file));
-  } else {
-    mojo::Remote<mojom::BundledExchangesParserFactory> factory;
-    connector->Connect(mojom::kServiceName,
-                       factory.BindNewPipeAndPassReceiver());
+  DCHECK(factory_.is_connected());
 
-    factory->GetParserForFile(parser_.BindNewPipeAndPassReceiver(),
-                              std::move(file));
-  }
+  if (!file.IsValid())
+    return file.error_details();
+
+  factory_->GetParserForFile(parser_.BindNewPipeAndPassReceiver(),
+                             std::move(file));
   parser_.set_disconnect_handler(base::BindOnce(
       &SafeBundledExchangesParser::OnDisconnect, base::Unretained(this)));
+
   disconnected_ = false;
+
+  return base::File::FILE_OK;
 }
 
 void SafeBundledExchangesParser::OpenDataSource(
-    service_manager::Connector* connector,
     mojo::PendingRemote<mojom::BundleDataSource> data_source) {
   DCHECK(disconnected_);
-  if (factory_for_testing_) {
-    factory_for_testing_->GetParserForDataSource(
-        parser_.BindNewPipeAndPassReceiver(), std::move(data_source));
-  } else {
-    mojo::Remote<mojom::BundledExchangesParserFactory> factory;
-    connector->Connect(mojom::kServiceName,
-                       factory.BindNewPipeAndPassReceiver());
-
-    factory->GetParserForDataSource(parser_.BindNewPipeAndPassReceiver(),
-                                    std::move(data_source));
-  }
+  DCHECK(factory_.is_connected());
+  factory_->GetParserForDataSource(parser_.BindNewPipeAndPassReceiver(),
+                                   std::move(data_source));
   parser_.set_disconnect_handler(base::BindOnce(
       &SafeBundledExchangesParser::OnDisconnect, base::Unretained(this)));
+
   disconnected_ = false;
 }
 
@@ -122,8 +119,8 @@
 }
 
 void SafeBundledExchangesParser::SetBundledExchangesParserFactoryForTesting(
-    std::unique_ptr<mojom::BundledExchangesParserFactory> factory) {
-  factory_for_testing_ = std::move(factory);
+    mojo::Remote<mojom::BundledExchangesParserFactory> factory) {
+  factory_ = std::move(factory);
 }
 
 }  // namespace data_decoder
diff --git a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h
index 6d21cd0..758bf6f 100644
--- a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h
+++ b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h
@@ -25,20 +25,18 @@
 // mojom::BundledExchangesParser service.
 class SafeBundledExchangesParser {
  public:
-  SafeBundledExchangesParser();
+  // |connector| can be null if SetBundledExchangesParserForTesting() will be
+  // called before calling Open*().
+  explicit SafeBundledExchangesParser(service_manager::Connector* connector);
   // Remaining callbacks on flight will be dropped.
   ~SafeBundledExchangesParser();
 
   // Binds |this| instance to the given |file| for subsequent parse calls.
-  // |connector| can be null if SetBundledExchangesParserForTesting() was
-  // called.
-  void OpenFile(service_manager::Connector* connector, base::File file);
+  base::File::Error OpenFile(base::File file);
 
   // Binds |this| instance to the given |data_source| for subsequent parse
-  // calls. |connector| can be null if SetBundledExchangesParserForTesting()
-  // was called.
-  void OpenDataSource(service_manager::Connector* connector,
-                      mojo::PendingRemote<mojom::BundleDataSource> data_source);
+  // calls.
+  void OpenDataSource(mojo::PendingRemote<mojom::BundleDataSource> data_source);
 
   // Parses metadata. See mojom::BundledExchangesParser::ParseMetadata for
   // details. This method fails when it's called before the previous call
@@ -56,7 +54,7 @@
   // Sets alternative BundledExchangesParserFactory that will be used to create
   // BundledExchangesParser for testing purpose.
   void SetBundledExchangesParserFactoryForTesting(
-      std::unique_ptr<mojom::BundledExchangesParserFactory> factory);
+      mojo::Remote<mojom::BundledExchangesParserFactory> factory);
 
  private:
   void OnDisconnect();
@@ -66,14 +64,13 @@
                         mojom::BundleResponsePtr response,
                         mojom::BundleResponseParseErrorPtr error);
 
+  mojo::Remote<mojom::BundledExchangesParserFactory> factory_;
   mojo::Remote<mojom::BundledExchangesParser> parser_;
   mojom::BundledExchangesParser::ParseMetadataCallback metadata_callback_;
   base::flat_map<size_t, mojom::BundledExchangesParser::ParseResponseCallback>
       response_callbacks_;
   size_t response_callback_next_id_ = 0;
   bool disconnected_ = true;
-  std::unique_ptr<mojom::BundledExchangesParserFactory> factory_for_testing_ =
-      nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(SafeBundledExchangesParser);
 };
diff --git a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc
index 4774490..fc275b2 100644
--- a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc
+++ b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "services/data_decoder/public/cpp/test_data_decoder_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -65,7 +66,10 @@
   };
 
   MockFactory() {}
-  MockParser* GetCreatedParser() { return parser_.get(); }
+  MockParser* GetCreatedParser() {
+    base::RunLoop().RunUntilIdle();
+    return parser_.get();
+  }
   void DeleteParser() { parser_.reset(); }
 
  private:
@@ -107,17 +111,26 @@
  public:
   service_manager::Connector* GetConnector() { return service_.connector(); }
 
+  MockFactory* InitializeMockFactory(SafeBundledExchangesParser* parser) {
+    std::unique_ptr<MockFactory> factory = std::make_unique<MockFactory>();
+    MockFactory* raw_factory = factory.get();
+    mojo::Remote<mojom::BundledExchangesParserFactory> remote;
+    mojo::MakeSelfOwnedReceiver(std::move(factory),
+                                remote.BindNewPipeAndPassReceiver());
+    parser->SetBundledExchangesParserFactoryForTesting(std::move(remote));
+    return raw_factory;
+  }
+
  private:
   base::test::ScopedTaskEnvironment task_environment_;
   TestDataDecoderService service_;
 };
 
 TEST_F(SafeBundledExchangesParserTest, ParseGoldenFile) {
-  SafeBundledExchangesParser parser;
+  SafeBundledExchangesParser parser(GetConnector());
   base::File test_file =
       OpenTestFile(base::FilePath(FILE_PATH_LITERAL("hello.wbn")));
-
-  parser.OpenFile(GetConnector(), std::move(test_file));
+  ASSERT_EQ(base::File::FILE_OK, parser.OpenFile(std::move(test_file)));
 
   mojom::BundleMetadataPtr metadata_result;
   {
@@ -172,8 +185,13 @@
   EXPECT_EQ(index[3]->request_url, "https://test.example.org/script.js");
 }
 
+TEST_F(SafeBundledExchangesParserTest, OpenInvalidFile) {
+  SafeBundledExchangesParser parser(GetConnector());
+  EXPECT_EQ(base::File::FILE_ERROR_FAILED, parser.OpenFile(base::File()));
+}
+
 TEST_F(SafeBundledExchangesParserTest, CallWithoutOpen) {
-  SafeBundledExchangesParser parser;
+  SafeBundledExchangesParser parser(GetConnector());
   bool metadata_parsed = false;
   parser.ParseMetadata(base::BindOnce(
       [](bool* metadata_parsed, mojom::BundleMetadataPtr metadata,
@@ -204,13 +222,13 @@
 }
 
 TEST_F(SafeBundledExchangesParserTest, UseMockFactory) {
-  SafeBundledExchangesParser parser;
-  std::unique_ptr<MockFactory> factory = std::make_unique<MockFactory>();
-  MockFactory* raw_factory = factory.get();
-  parser.SetBundledExchangesParserFactoryForTesting(std::move(factory));
+  SafeBundledExchangesParser parser(GetConnector());
+  MockFactory* raw_factory = InitializeMockFactory(&parser);
 
   EXPECT_FALSE(raw_factory->GetCreatedParser());
-  parser.OpenFile(GetConnector(), base::File());
+  base::File test_file =
+      OpenTestFile(base::FilePath(FILE_PATH_LITERAL("hello.wbn")));
+  ASSERT_EQ(base::File::FILE_OK, parser.OpenFile(std::move(test_file)));
   ASSERT_TRUE(raw_factory->GetCreatedParser());
   EXPECT_FALSE(raw_factory->GetCreatedParser()->IsParseMetadataCalled());
   EXPECT_FALSE(raw_factory->GetCreatedParser()->IsParseResponseCalled());
@@ -227,15 +245,13 @@
 }
 
 TEST_F(SafeBundledExchangesParserTest, ConnectionError) {
-  SafeBundledExchangesParser parser;
-  std::unique_ptr<MockFactory> factory = std::make_unique<MockFactory>();
-  MockFactory* raw_factory = factory.get();
-  parser.SetBundledExchangesParserFactoryForTesting(std::move(factory));
+  SafeBundledExchangesParser parser(GetConnector());
+  MockFactory* raw_factory = InitializeMockFactory(&parser);
 
   mojo::PendingRemote<mojom::BundleDataSource> remote_data_source;
   auto data_source = std::make_unique<MockDataSource>(
       remote_data_source.InitWithNewPipeAndPassReceiver());
-  parser.OpenDataSource(GetConnector(), std::move(remote_data_source));
+  parser.OpenDataSource(std::move(remote_data_source));
   ASSERT_TRUE(raw_factory->GetCreatedParser());
 
   base::RunLoop run_loop;
diff --git a/services/device/nfc/android/java/src/org/chromium/device/nfc/NfcImpl.java b/services/device/nfc/android/java/src/org/chromium/device/nfc/NfcImpl.java
index 0d1a26c..bab5e852 100644
--- a/services/device/nfc/android/java/src/org/chromium/device/nfc/NfcImpl.java
+++ b/services/device/nfc/android/java/src/org/chromium/device/nfc/NfcImpl.java
@@ -164,7 +164,7 @@
     /**
      * Sets NfcClient. NfcClient interface is used to notify mojo NFC service client when NFC
      * device is in proximity and has NdefMessage that matches NfcReaderOptions criteria.
-     * @see Nfc#watch(NfcReaderOptions options, WatchResponse callback)
+     * @see Nfc#watch(NfcReaderOptions options, int id, WatchResponse callback)
      *
      * @param client @see NfcClient
      */
@@ -237,20 +237,25 @@
 
     /**
      * Watch method allows to set filtering criteria for NdefMessages that are found when NFC device
-     * is within proximity. On success, watch ID is returned to caller through WatchResponse
-     * callback. When NdefMessage that matches NfcReaderOptions is found, it is passed to NfcClient
-     * interface together with corresponding watch ID.
+     * is within proximity. When NdefMessage that matches NfcReaderOptions is found, it is passed to
+     * NfcClient interface together with corresponding watch ID.
      * @see NfcClient#onWatch(int[] id, String serial_number, NdefMessage message)
      *
      * @param options used to filter NdefMessages, @see NfcReaderOptions.
-     * @param callback that is used to notify caller when watch() is completed and return watch ID.
+     * @param callback that is used to notify caller when watch() is completed.
      */
     @Override
-    public void watch(NfcReaderOptions options, WatchResponse callback) {
+    public void watch(NfcReaderOptions options, int id, WatchResponse callback) {
         if (!checkIfReady(callback)) return;
-        int watcherId = ++mWatcherId;
-        mWatchers.put(watcherId, options);
-        callback.call(watcherId, null);
+        // We received a duplicate |id| here that should never happen, in such a case we should
+        // report a bad message to Mojo but unfortunately Mojo bindings for Java does not support
+        // this feature yet. So, we just passes back a generic error instead.
+        if (mWatchers.indexOfKey(id) >= 0) {
+            callback.call(createError(NfcErrorType.NOT_READABLE));
+            return;
+        }
+        mWatchers.put(id, options);
+        callback.call(null);
         enableReaderModeIfNeeded();
         processPendingWatchOperations();
     }
@@ -393,7 +398,7 @@
         NfcError error = checkIfReady();
         if (error == null) return true;
 
-        callback.call(0, error);
+        callback.call(error);
         return false;
     }
 
diff --git a/services/device/nfc/android/junit/src/org/chromium/device/nfc/NFCTest.java b/services/device/nfc/android/junit/src/org/chromium/device/nfc/NFCTest.java
index 155adaf..9b41ca5 100644
--- a/services/device/nfc/android/junit/src/org/chromium/device/nfc/NFCTest.java
+++ b/services/device/nfc/android/junit/src/org/chromium/device/nfc/NFCTest.java
@@ -5,7 +5,6 @@
 package org.chromium.device.nfc;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.mockito.ArgumentMatchers.any;
@@ -72,6 +71,7 @@
 @Config(manifest = Config.NONE)
 public class NFCTest {
     private TestNfcDelegate mDelegate;
+    private int mNextWatchId;
     @Mock
     private Context mContext;
     @Mock
@@ -87,8 +87,6 @@
     @Captor
     private ArgumentCaptor<NfcError> mErrorCaptor;
     @Captor
-    private ArgumentCaptor<Integer> mWatchCaptor;
-    @Captor
     private ArgumentCaptor<int[]> mOnWatchCallbackCaptor;
 
     // Constants used for the test.
@@ -204,8 +202,8 @@
         TestNfcImpl nfc = new TestNfcImpl(mContext, mDelegate);
         mDelegate.invokeCallback();
         WatchResponse mockCallback = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockCallback);
-        verify(mockCallback).call(anyInt(), mErrorCaptor.capture());
+        nfc.watch(createNfcReaderOptions(), mNextWatchId, mockCallback);
+        verify(mockCallback).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
     }
 
@@ -387,7 +385,7 @@
         mDelegate.invokeCallback();
         nfc.setClient(mNfcClient);
         WatchResponse mockCallback = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockCallback);
+        nfc.watch(createNfcReaderOptions(), mNextWatchId, mockCallback);
         nfc.suspendNfcOperations();
         verify(mNfcAdapter, times(1)).disableReaderMode(mActivity);
         nfc.resumeNfcOperations();
@@ -398,14 +396,14 @@
 
         nfc.processPendingOperationsForTesting(mNfcTagHandler);
         // Check that watch request was completed successfully.
-        verify(mockCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        verify(mockCallback).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
 
         // Check that client was notified and watch with correct id was triggered.
         verify(mNfcClient, times(1))
                 .onWatch(mOnWatchCallbackCaptor.capture(), nullable(String.class),
                         any(NdefMessage.class));
-        assertEquals(mWatchCaptor.getValue().intValue(), mOnWatchCallbackCaptor.getValue()[0]);
+        assertEquals(mNextWatchId, mOnWatchCallbackCaptor.getValue()[0]);
     }
 
     /**
@@ -526,21 +524,19 @@
         TestNfcImpl nfc = new TestNfcImpl(mContext, mDelegate);
         mDelegate.invokeCallback();
         nfc.setClient(mNfcClient);
+        int watchId1 = mNextWatchId++;
         WatchResponse mockWatchCallback1 = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback1);
+        nfc.watch(createNfcReaderOptions(), watchId1, mockWatchCallback1);
 
         // Check that watch requests were completed successfully.
-        verify(mockWatchCallback1).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        verify(mockWatchCallback1).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
-        int watchId1 = mWatchCaptor.getValue().intValue();
 
+        int watchId2 = mNextWatchId++;
         WatchResponse mockWatchCallback2 = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback2);
-        verify(mockWatchCallback2).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(createNfcReaderOptions(), watchId2, mockWatchCallback2);
+        verify(mockWatchCallback2).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
-        int watchId2 = mWatchCaptor.getValue().intValue();
-        // Check that each watch operation is associated with unique id.
-        assertNotEquals(watchId1, watchId2);
 
         // Mocks 'NFC tag found' event.
         nfc.processPendingOperationsForTesting(mNfcTagHandler);
@@ -567,21 +563,21 @@
         NfcReaderOptions options1 = createNfcReaderOptions();
         options1.compatibility = NdefCompatibility.NFC_FORUM;
         options1.url = TEST_URL;
+        int watchId1 = mNextWatchId++;
         WatchResponse mockWatchCallback1 = mock(WatchResponse.class);
-        nfc.watch(options1, mockWatchCallback1);
-        verify(mockWatchCallback1).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(options1, watchId1, mockWatchCallback1);
+        verify(mockWatchCallback1).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
-        int watchId1 = mWatchCaptor.getValue().intValue();
 
         // Should match by media type.
         NfcReaderOptions options2 = createNfcReaderOptions();
         options2.compatibility = NdefCompatibility.ANY;
         options2.mediaType = TEXT_MIME;
+        int watchId2 = mNextWatchId++;
         WatchResponse mockWatchCallback2 = mock(WatchResponse.class);
-        nfc.watch(options2, mockWatchCallback2);
-        verify(mockWatchCallback2).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(options2, watchId2, mockWatchCallback2);
+        verify(mockWatchCallback2).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
-        int watchId2 = mWatchCaptor.getValue().intValue();
 
         // Should match by record type.
         NfcReaderOptions options3 = createNfcReaderOptions();
@@ -589,21 +585,21 @@
         NdefRecordTypeFilter typeFilter = new NdefRecordTypeFilter();
         typeFilter.recordType = NdefRecordType.URL;
         options3.recordFilter = typeFilter;
+        int watchId3 = mNextWatchId++;
         WatchResponse mockWatchCallback3 = mock(WatchResponse.class);
-        nfc.watch(options3, mockWatchCallback3);
-        verify(mockWatchCallback3).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(options3, watchId3, mockWatchCallback3);
+        verify(mockWatchCallback3).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
-        int watchId3 = mWatchCaptor.getValue().intValue();
 
         // Should not match
         NfcReaderOptions options4 = createNfcReaderOptions();
         options4.compatibility = NdefCompatibility.NFC_FORUM;
         options4.url = DOMAIN;
+        int watchId4 = mNextWatchId++;
         WatchResponse mockWatchCallback4 = mock(WatchResponse.class);
-        nfc.watch(options4, mockWatchCallback4);
-        verify(mockWatchCallback4).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(options4, watchId4, mockWatchCallback4);
+        verify(mockWatchCallback4).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
-        int watchId4 = mWatchCaptor.getValue().intValue();
 
         nfc.processPendingOperationsForTesting(mNfcTagHandler);
 
@@ -626,13 +622,13 @@
         TestNfcImpl nfc = new TestNfcImpl(mContext, mDelegate);
         mDelegate.invokeCallback();
         WatchResponse mockWatchCallback = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback);
+        nfc.watch(createNfcReaderOptions(), mNextWatchId, mockWatchCallback);
 
-        verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        verify(mockWatchCallback).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
 
         CancelWatchResponse mockCancelWatchCallback = mock(CancelWatchResponse.class);
-        nfc.cancelWatch(mWatchCaptor.getValue().intValue(), mockCancelWatchCallback);
+        nfc.cancelWatch(mNextWatchId, mockCancelWatchCallback);
 
         // Check that cancel request was successfuly completed.
         verify(mockCancelWatchCallback).call(mErrorCaptor.capture());
@@ -654,12 +650,12 @@
         mDelegate.invokeCallback();
         WatchResponse mockWatchCallback1 = mock(WatchResponse.class);
         WatchResponse mockWatchCallback2 = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback1);
-        verify(mockWatchCallback1).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(createNfcReaderOptions(), mNextWatchId++, mockWatchCallback1);
+        verify(mockWatchCallback1).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
 
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback2);
-        verify(mockWatchCallback2).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(createNfcReaderOptions(), mNextWatchId++, mockWatchCallback2);
+        verify(mockWatchCallback2).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
 
         CancelAllWatchesResponse mockCallback = mock(CancelAllWatchesResponse.class);
@@ -679,13 +675,13 @@
         TestNfcImpl nfc = new TestNfcImpl(mContext, mDelegate);
         mDelegate.invokeCallback();
         WatchResponse mockWatchCallback = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback);
+        nfc.watch(createNfcReaderOptions(), mNextWatchId, mockWatchCallback);
 
-        verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        verify(mockWatchCallback).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
 
         CancelWatchResponse mockCancelWatchCallback = mock(CancelWatchResponse.class);
-        nfc.cancelWatch(mWatchCaptor.getValue().intValue() + 1, mockCancelWatchCallback);
+        nfc.cancelWatch(mNextWatchId + 1, mockCancelWatchCallback);
 
         verify(mockCancelWatchCallback).call(mErrorCaptor.capture());
         assertEquals(NfcErrorType.NOT_FOUND, mErrorCaptor.getValue().errorType);
@@ -717,7 +713,7 @@
         mDelegate.invokeCallback();
         nfc.setClient(mNfcClient);
         WatchResponse mockWatchCallback = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback);
+        nfc.watch(createNfcReaderOptions(), mNextWatchId, mockWatchCallback);
 
         // Force read operation to fail
         doThrow(IllegalStateException.class).when(mNfcTagHandler).read();
@@ -928,7 +924,7 @@
         TestNfcImpl nfc = new TestNfcImpl(mContext, mDelegate);
         mDelegate.invokeCallback();
         WatchResponse mockWatchCallback = mock(WatchResponse.class);
-        nfc.watch(createNfcReaderOptions(), mockWatchCallback);
+        nfc.watch(createNfcReaderOptions(), mNextWatchId, mockWatchCallback);
 
         PushResponse mockPushCallback = mock(PushResponse.class);
         // Should be cancelled with TIMER_EXPIRED.
@@ -997,40 +993,40 @@
         nfc.setClient(mNfcClient);
 
         // Should match.
+        int watchId1 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = TEST_URL;
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId1, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId1 = mWatchCaptor.getValue().intValue();
 
         // Should not match.
+        int watchId2 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.VENDOR;
             options.url = TEST_URL;
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId2, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId2 = mWatchCaptor.getValue().intValue();
 
         // Should match.
+        int watchId3 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.ANY;
             options.url = TEST_URL;
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId3, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId3 = mWatchCaptor.getValue().intValue();
 
         doReturn(NdefCompatibility.NFC_FORUM).when(mNfcTagHandler).compatibility();
         nfc.processPendingOperationsForTesting(mNfcTagHandler);
@@ -1057,40 +1053,40 @@
         nfc.setClient(mNfcClient);
 
         // Should not match.
+        int watchId1 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = TEST_URL;
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId1, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId1 = mWatchCaptor.getValue().intValue();
 
         // Should match.
+        int watchId2 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.VENDOR;
             options.url = TEST_URL;
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId2, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId2 = mWatchCaptor.getValue().intValue();
 
         // Should match.
+        int watchId3 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.ANY;
             options.url = TEST_URL;
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId3, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId3 = mWatchCaptor.getValue().intValue();
 
         doReturn(NdefCompatibility.VENDOR).when(mNfcTagHandler).compatibility();
         nfc.processPendingOperationsForTesting(mNfcTagHandler);
@@ -1116,52 +1112,52 @@
         nfc.setClient(mNfcClient);
 
         // Should match.
+        int watchId1 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = "https://test.com/*";
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId1, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId1 = mWatchCaptor.getValue().intValue();
 
         // Should match.
+        int watchId2 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = "https://test.com/contact/42";
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId2, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId2 = mWatchCaptor.getValue().intValue();
 
         // Should match.
+        int watchId3 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = "https://subdomain.test.com/*";
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId3, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId3 = mWatchCaptor.getValue().intValue();
 
         // Should match.
+        int watchId4 = mNextWatchId++;
         {
             NfcReaderOptions options = createNfcReaderOptions();
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = "https://subdomain.test.com/contact";
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, watchId4, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
-        int watchId4 = mWatchCaptor.getValue().intValue();
 
         // Should not match.
         {
@@ -1169,8 +1165,8 @@
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = "https://www.test.com/*";
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, mNextWatchId++, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
 
@@ -1180,8 +1176,8 @@
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = "http://test.com/*";
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, mNextWatchId++, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
 
@@ -1191,8 +1187,8 @@
             options.compatibility = NdefCompatibility.NFC_FORUM;
             options.url = "invalid pattern url";
             WatchResponse mockWatchCallback = mock(WatchResponse.class);
-            nfc.watch(options, mockWatchCallback);
-            verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+            nfc.watch(options, mNextWatchId++, mockWatchCallback);
+            verify(mockWatchCallback).call(mErrorCaptor.capture());
             assertNull(mErrorCaptor.getValue());
         }
 
@@ -1231,8 +1227,8 @@
         options.compatibility = NdefCompatibility.NFC_FORUM;
         options.url = "https://test.com/*";
         WatchResponse mockWatchCallback = mock(WatchResponse.class);
-        nfc.watch(options, mockWatchCallback);
-        verify(mockWatchCallback).call(mWatchCaptor.capture(), mErrorCaptor.capture());
+        nfc.watch(options, mNextWatchId, mockWatchCallback);
+        verify(mockWatchCallback).call(mErrorCaptor.capture());
         assertNull(mErrorCaptor.getValue());
 
         doReturn(createUrlWebNFCNdefMessage("http://subdomain.test.com/contact/42"))
diff --git a/services/device/public/mojom/BUILD.gn b/services/device/public/mojom/BUILD.gn
index 82b3b7f..5a7910f1 100644
--- a/services/device/public/mojom/BUILD.gn
+++ b/services/device/public/mojom/BUILD.gn
@@ -131,7 +131,7 @@
 
   visibility_blink = [
     ":*",
-    "//components/arc/common:common_blink",
+    "//components/arc/mojom:mojom_blink",
     "//third_party/blink/public/mojom/usb:usb_blink",
     "//third_party/blink/renderer/modules/webusb",
     "//chrome/browser/ui/webui/usb_internals:mojo_bindings_blink",
diff --git a/services/device/public/mojom/nfc.mojom b/services/device/public/mojom/nfc.mojom
index 10c772d..69a0476 100644
--- a/services/device/public/mojom/nfc.mojom
+++ b/services/device/public/mojom/nfc.mojom
@@ -124,8 +124,9 @@
   CancelPush(NFCPushTarget target) => (NFCError? error);
 
   // Starts watching for nearby NFC devices with data that matches
-  // NFCReaderOptions filtering criteria. On success, watch id is returned.
-  Watch(NFCReaderOptions options) => (uint32 id, NFCError? error);
+  // NFCReaderOptions filtering criteria. |id| identifies each watch request on
+  // the current Mojo connection.
+  Watch(NFCReaderOptions options, uint32 id) => (NFCError? error);
 
   // Cancels watch operation with provided id.
   CancelWatch (uint32 id) => (NFCError? error);
diff --git a/services/preferences/public/cpp/BUILD.gn b/services/preferences/public/cpp/BUILD.gn
index 2548a45..bdd7491 100644
--- a/services/preferences/public/cpp/BUILD.gn
+++ b/services/preferences/public/cpp/BUILD.gn
@@ -47,18 +47,6 @@
   ]
 }
 
-source_set("local_state_manifest") {
-  sources = [
-    "local_state_manifest.cc",
-    "local_state_manifest.h",
-  ]
-  deps = [
-    "//base",
-    "//services/preferences/public/mojom",
-    "//services/service_manager/public/cpp",
-  ]
-}
-
 source_set("service_main") {
   deps = [
     "//base",
diff --git a/services/preferences/public/cpp/local_state_manifest.cc b/services/preferences/public/cpp/local_state_manifest.cc
deleted file mode 100644
index 554679e..0000000
--- a/services/preferences/public/cpp/local_state_manifest.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "services/preferences/public/cpp/local_state_manifest.h"
-
-#include "base/no_destructor.h"
-#include "services/preferences/public/mojom/preferences.mojom.h"
-#include "services/service_manager/public/cpp/manifest_builder.h"
-
-namespace prefs {
-
-const service_manager::Manifest& GetLocalStateManifest() {
-  static base::NoDestructor<service_manager::Manifest> manifest{
-      service_manager::ManifestBuilder()
-          .WithServiceName(mojom::kLocalStateServiceName)
-          .WithDisplayName("Local state preferences")
-          .WithOptions(
-              service_manager::ManifestOptionsBuilder()
-                  .WithExecutionMode(service_manager::Manifest::ExecutionMode::
-                                         kOutOfProcessBuiltin)
-                  .WithSandboxType("utility")
-                  .Build())
-          .ExposeCapability("pref_client",
-                            service_manager::Manifest::InterfaceList<
-                                mojom::PrefStoreConnector>())
-          .Build()};
-  return *manifest;
-}
-
-}  // namespace prefs
diff --git a/services/preferences/public/cpp/local_state_manifest.h b/services/preferences/public/cpp/local_state_manifest.h
deleted file mode 100644
index 315874c9..0000000
--- a/services/preferences/public/cpp/local_state_manifest.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SERVICES_PREFERENCES_PUBLIC_CPP_LOCAL_STATE_MANIFEST_H_
-#define SERVICES_PREFERENCES_PUBLIC_CPP_LOCAL_STATE_MANIFEST_H_
-
-#include "services/service_manager/public/cpp/manifest.h"
-
-namespace prefs {
-
-const service_manager::Manifest& GetLocalStateManifest();
-
-}  // namespace prefs
-
-#endif  // SERVICES_PREFERENCES_PUBLIC_CPP_LOCAL_STATE_MANIFEST_H_
diff --git a/services/preferences/public/mojom/preferences.mojom b/services/preferences/public/mojom/preferences.mojom
index 3231dd0..0fc7fed2 100644
--- a/services/preferences/public/mojom/preferences.mojom
+++ b/services/preferences/public/mojom/preferences.mojom
@@ -10,7 +10,6 @@
 import "services/preferences/public/mojom/tracked_preference_validation_delegate.mojom";
 
 const string kServiceName = "preferences";
-const string kLocalStateServiceName = "local_state";
 
 // The know pref store types.
 //
diff --git a/services/video_capture/public/cpp/mock_producer.h b/services/video_capture/public/cpp/mock_producer.h
index cf506da..df35c93b 100644
--- a/services/video_capture/public/cpp/mock_producer.h
+++ b/services/video_capture/public/cpp/mock_producer.h
@@ -6,7 +6,7 @@
 #define SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_PRODUCER_H_
 
 #include "media/capture/mojom/video_capture_types.mojom.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/video_capture/public/mojom/producer.mojom.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/services/video_capture/public/cpp/mock_receiver.h b/services/video_capture/public/cpp/mock_receiver.h
index 4212a74..f08c6ed 100644
--- a/services/video_capture/public/cpp/mock_receiver.h
+++ b/services/video_capture/public/cpp/mock_receiver.h
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "media/capture/mojom/video_capture_types.mojom.h"
-#include "media/mojo/interfaces/media_types.mojom.h"
+#include "media/mojo/mojom/media_types.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "services/video_capture/public/mojom/receiver.mojom.h"
 #include "services/video_capture/public/mojom/scoped_access_permission.mojom.h"
diff --git a/services/video_capture/public/mojom/BUILD.gn b/services/video_capture/public/mojom/BUILD.gn
index 519d5b84..74cabff 100644
--- a/services/video_capture/public/mojom/BUILD.gn
+++ b/services/video_capture/public/mojom/BUILD.gn
@@ -22,7 +22,7 @@
   deps = [
     "//media/capture/mojom:image_capture",
     "//media/capture/mojom:video_capture",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//ui/gfx/geometry/mojom",
   ]
 
diff --git a/services/viz/privileged/mojom/compositing/BUILD.gn b/services/viz/privileged/mojom/compositing/BUILD.gn
index 3b386a3..75e2ff88 100644
--- a/services/viz/privileged/mojom/compositing/BUILD.gn
+++ b/services/viz/privileged/mojom/compositing/BUILD.gn
@@ -20,7 +20,7 @@
   public_deps = [
     "//gpu/ipc/common:interfaces",
     "//media/capture/mojom:video_capture",
-    "//media/mojo/interfaces:interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/mojom/base",
     "//services/viz/public/mojom",
     "//skia/public/mojom",
diff --git a/services/viz/privileged/mojom/compositing/frame_sink_video_capture.mojom b/services/viz/privileged/mojom/compositing/frame_sink_video_capture.mojom
index 0144fbeb..4e64279 100644
--- a/services/viz/privileged/mojom/compositing/frame_sink_video_capture.mojom
+++ b/services/viz/privileged/mojom/compositing/frame_sink_video_capture.mojom
@@ -5,7 +5,7 @@
 module viz.mojom;
 
 import "media/capture/mojom/video_capture_types.mojom";
-import "media/mojo/interfaces/media_types.mojom";
+import "media/mojo/mojom/media_types.mojom";
 import "mojo/public/mojom/base/time.mojom";
 import "mojo/public/mojom/base/shared_memory.mojom";
 import "services/viz/public/mojom/compositing/frame_sink_id.mojom";
diff --git a/services/viz/privileged/mojom/gl/BUILD.gn b/services/viz/privileged/mojom/gl/BUILD.gn
index 99e0a72..cea0dd64 100644
--- a/services/viz/privileged/mojom/gl/BUILD.gn
+++ b/services/viz/privileged/mojom/gl/BUILD.gn
@@ -13,14 +13,14 @@
 
   public_deps = [
     "//gpu/ipc/common:interfaces",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//ui/gfx/geometry/mojom",
     "//ui/gfx/mojom",
     "//url/mojom:url_mojom_gurl",
   ]
   if (is_chromeos) {
     public_deps += [
-      "//components/arc/common:media",
+      "//components/arc/mojom:media",
       "//components/chromeos_camera/common",
     ]
   }
diff --git a/services/viz/privileged/mojom/gl/gpu_service.mojom b/services/viz/privileged/mojom/gl/gpu_service.mojom
index 13628ae..4448c1e 100644
--- a/services/viz/privileged/mojom/gl/gpu_service.mojom
+++ b/services/viz/privileged/mojom/gl/gpu_service.mojom
@@ -5,13 +5,13 @@
 module viz.mojom;
 
 [EnableIf=is_chromeos]
-import "components/arc/common/protected_buffer_manager.mojom";
+import "components/arc/mojom/protected_buffer_manager.mojom";
 [EnableIf=is_chromeos]
-import "components/arc/common/video_decode_accelerator.mojom";
+import "components/arc/mojom/video_decode_accelerator.mojom";
 [EnableIf=is_chromeos]
-import "components/arc/common/video_encode_accelerator.mojom";
+import "components/arc/mojom/video_encode_accelerator.mojom";
 [EnableIf=is_chromeos]
-import "components/arc/common/video_protected_buffer_allocator.mojom";
+import "components/arc/mojom/video_protected_buffer_allocator.mojom";
 [EnableIf=is_chromeos]
 import "components/chromeos_camera/common/mjpeg_decode_accelerator.mojom";
 [EnableIf=is_chromeos]
@@ -21,7 +21,7 @@
 import "gpu/ipc/common/memory_stats.mojom";
 import "gpu/ipc/common/surface_handle.mojom";
 import "gpu/ipc/common/sync_token.mojom";
-import "media/mojo/interfaces/video_encode_accelerator.mojom";
+import "media/mojo/mojom/video_encode_accelerator.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 import "ui/gfx/mojom/buffer_types.mojom";
 
diff --git a/services/viz/public/mojom/BUILD.gn b/services/viz/public/mojom/BUILD.gn
index d2563382..0b0218d 100644
--- a/services/viz/public/mojom/BUILD.gn
+++ b/services/viz/public/mojom/BUILD.gn
@@ -41,7 +41,7 @@
 
   public_deps = [
     "//gpu/ipc/common:interfaces",
-    "//media/mojo/interfaces",
+    "//media/mojo/mojom",
     "//mojo/public/mojom/base",
     "//skia/public/mojom",
     "//ui/gfx/geometry/mojom",
diff --git a/services/viz/public/mojom/gpu.mojom b/services/viz/public/mojom/gpu.mojom
index c9262b9..33cd024d 100644
--- a/services/viz/public/mojom/gpu.mojom
+++ b/services/viz/public/mojom/gpu.mojom
@@ -9,7 +9,7 @@
 import "gpu/ipc/common/sync_token.mojom";
 [EnableIf=is_chromeos]
 import "components/chromeos_camera/common/mjpeg_decode_accelerator.mojom";
-import "media/mojo/interfaces/video_encode_accelerator.mojom";
+import "media/mojo/mojom/video_encode_accelerator.mojom";
 import "ui/gfx/geometry/mojom/geometry.mojom";
 import "ui/gfx/mojom/buffer_types.mojom";
 
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index 232a157..94e9588a 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -215,10 +215,6 @@
 #define SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS
 #endif
 
-#ifndef SK_SUPPORT_LEGACY_BICUBIC_FILTERING
-#define SK_SUPPORT_LEGACY_BICUBIC_FILTERING
-#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/storage/browser/fileapi/copy_or_move_operation_delegate_unittest.cc b/storage/browser/fileapi/copy_or_move_operation_delegate_unittest.cc
index b6df0806..1f151700 100644
--- a/storage/browser/fileapi/copy_or_move_operation_delegate_unittest.cc
+++ b/storage/browser/fileapi/copy_or_move_operation_delegate_unittest.cc
@@ -17,7 +17,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
@@ -738,7 +737,8 @@
   base::WriteFile(source_path, kTestData,
                   base::size(kTestData) - 1);  // Exclude trailing '\0'.
 
-  base::MessageLoopForIO message_loop;
+  base::test::ScopedTaskEnvironment scoped_task_environment(
+      base::test::ScopedTaskEnvironment::MainThreadType::IO);
   base::Thread file_thread("file_thread");
   ASSERT_TRUE(file_thread.Start());
   ScopedThreadStopper thread_stopper(&file_thread);
@@ -795,7 +795,8 @@
   base::WriteFile(source_path, kTestData,
                   base::size(kTestData) - 1);  // Exclude trailing '\0'.
 
-  base::MessageLoopForIO message_loop;
+  base::test::ScopedTaskEnvironment scoped_task_environment(
+      base::test::ScopedTaskEnvironment::MainThreadType::IO);
   base::Thread file_thread("file_thread");
   ASSERT_TRUE(file_thread.Start());
   ScopedThreadStopper thread_stopper(&file_thread);
@@ -848,7 +849,8 @@
   base::WriteFile(source_path, kTestData,
                   base::size(kTestData) - 1);  // Exclude trailing '\0'.
 
-  base::MessageLoopForIO message_loop;
+  base::test::ScopedTaskEnvironment scoped_task_environment(
+      base::test::ScopedTaskEnvironment::MainThreadType::IO);
   base::Thread file_thread("file_thread");
   ASSERT_TRUE(file_thread.Start());
   ScopedThreadStopper thread_stopper(&file_thread);
diff --git a/storage/browser/fileapi/dragged_file_util_unittest.cc b/storage/browser/fileapi/dragged_file_util_unittest.cc
index 85ce3f4..bb35747 100644
--- a/storage/browser/fileapi/dragged_file_util_unittest.cc
+++ b/storage/browser/fileapi/dragged_file_util_unittest.cc
@@ -16,8 +16,8 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/stl_util.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "components/services/filesystem/public/mojom/types.mojom.h"
@@ -281,7 +281,8 @@
 
   base::ScopedTempDir data_dir_;
   base::ScopedTempDir partition_dir_;
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   std::string filesystem_id_;
   scoped_refptr<FileSystemContext> file_system_context_;
   std::map<base::FilePath, base::FilePath> toplevel_root_map_;
diff --git a/storage/browser/fileapi/file_system_file_stream_reader_unittest.cc b/storage/browser/fileapi/file_system_file_stream_reader_unittest.cc
index 6fe5ee6..c3855bf 100644
--- a/storage/browser/fileapi/file_system_file_stream_reader_unittest.cc
+++ b/storage/browser/fileapi/file_system_file_stream_reader_unittest.cc
@@ -14,9 +14,9 @@
 #include "base/bind.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/stl_util.h"
+#include "base/test/scoped_task_environment.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 #include "net/base/test_completion_callback.h"
@@ -116,7 +116,8 @@
         base::FilePath().AppendASCII(file_name));
   }
 
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   base::ScopedTempDir temp_dir_;
   scoped_refptr<FileSystemContext> file_system_context_;
   base::Time test_file_modification_time_;
diff --git a/storage/browser/fileapi/local_file_stream_reader_unittest.cc b/storage/browser/fileapi/local_file_stream_reader_unittest.cc
index baf8ec9..01f7ea5 100644
--- a/storage/browser/fileapi/local_file_stream_reader_unittest.cc
+++ b/storage/browser/fileapi/local_file_stream_reader_unittest.cc
@@ -18,10 +18,10 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/location.h"
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/stl_util.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/threading/thread.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
@@ -105,7 +105,8 @@
   }
 
  private:
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   base::Thread file_thread_;
   base::ScopedTempDir dir_;
   base::Time test_file_modification_time_;
diff --git a/storage/browser/fileapi/local_file_stream_writer_unittest.cc b/storage/browser/fileapi/local_file_stream_writer_unittest.cc
index 3ae26b9..ccf3da6 100644
--- a/storage/browser/fileapi/local_file_stream_writer_unittest.cc
+++ b/storage/browser/fileapi/local_file_stream_writer_unittest.cc
@@ -14,9 +14,9 @@
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
+#include "base/test/scoped_task_environment.h"
 #include "base/threading/thread.h"
 #include "net/base/io_buffer.h"
 #include "net/base/test_completion_callback.h"
@@ -73,7 +73,8 @@
   }
 
  private:
-  base::MessageLoopForIO message_loop_;
+  base::test::ScopedTaskEnvironment scoped_task_environment_{
+      base::test::ScopedTaskEnvironment::MainThreadType::IO};
   base::Thread file_thread_;
   base::ScopedTempDir temp_dir_;
 };
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index e2c7173..7c4635b9 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -92,5 +92,3735 @@
         }
       }
     ]
+  },
+  "android-pie-x86-fyi-rel": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "android_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "android_browsertests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "android_webview_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "android_webview_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "angle_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "angle_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "base_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "base_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "base_util_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "base_util_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "blink_common_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "blink_common_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "blink_heap_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "blink_heap_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "blink_platform_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "blink_platform_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "webkit_unit_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "name": "webkit_unit_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 2
+        },
+        "test": "blink_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "boringssl_crypto_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "boringssl_crypto_tests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "boringssl_ssl_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "boringssl_ssl_tests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "breakpad_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "breakpad_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "cacheinvalidation_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "cacheinvalidation_unittests"
+      },
+      {
+        "args": [
+          "--gtest_filter=-*UsingRealWebcam*",
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "capture_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "capture_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "cast_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "cast_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "cc_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "cc_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "chrome_public_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 20
+        },
+        "test": "chrome_public_test_apk"
+      },
+      {
+        "args": [
+          "--disable-features=NetworkServiceInProcess",
+          "--gtest_filter=-org.chromium.chrome.browser.FeaturesAnnotationsTest#testFeaturesSetExistingFlags",
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "network_service_out_of_process_chrome_public_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "name": "network_service_out_of_process_chrome_public_test_apk",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 20
+        },
+        "test": "chrome_public_test_apk"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "components_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "components_browsertests"
+      },
+      {
+        "args": [
+          "--disable-features=NetworkServiceInProcess",
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "network_service_out_of_process_components_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "name": "network_service_out_of_process_components_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "components_browsertests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "components_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "components_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "content_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 9
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
+          "--disable-features=NetworkServiceInProcess",
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "network_service_out_of_process_content_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "name": "network_service_out_of_process_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 5
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
+          "--disable-perfetto",
+          "--gtest_filter=TracingControllerTest.*:BackgroundTracingManagerBrowserTest.*",
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "nonperfetto_content_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "name": "nonperfetto_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "content_browsertests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "content_shell_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 3
+        },
+        "test": "content_shell_test_apk"
+      },
+      {
+        "args": [
+          "--disable-features=NetworkServiceInProcess",
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "network_service_out_of_process_content_shell_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "name": "network_service_out_of_process_content_shell_test_apk",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 5
+        },
+        "test": "content_shell_test_apk"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "content_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 3
+        },
+        "test": "content_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "crypto_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "crypto_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "device_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "device_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "display_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "display_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "events_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "events_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gcm_unit_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gcm_unit_tests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gfx_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gfx_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gin_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gin_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gl_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gl_tests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gl_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gl_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "google_apis_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "google_apis_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gpu_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gpu_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gwp_asan_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "gwp_asan_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ipc_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "ipc_tests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "jingle_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "jingle_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "latency_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "latency_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "libjingle_xmpp_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "libjingle_xmpp_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "media_blink_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "media_blink_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "media_service_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "media_service_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "media_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "media_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "midi_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "midi_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "mojo_test_apk"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "mojo_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "net_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 3
+        },
+        "test": "net_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "perfetto_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "perfetto_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "sandbox_linux_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "sandbox_linux_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "services_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "services_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "shell_dialogs_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "shell_dialogs_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "skia_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "skia_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "sql_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "sql_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "storage_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "storage_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_android_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "ui_android_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_base_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "ui_base_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_touch_selection_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "ui_touch_selection_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "unit_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 10
+        },
+        "test": "unit_tests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "url_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "url_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "viz_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "viz_unittests"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "webview_instrumentation_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 7
+        },
+        "test": "webview_instrumentation_test_apk"
+      },
+      {
+        "args": [
+          "--enable-features=NetworkService,NetworkServiceInProcess",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_webview_instrumentation_test_apk.filter",
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "network_service_webview_instrumentation_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "name": "network_service_webview_instrumentation_test_apk",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ],
+          "shards": 20
+        },
+        "test": "webview_instrumentation_test_apk"
+      },
+      {
+        "args": [
+          "--gs-results-bucket=chromium-result-details",
+          "--recover-devices",
+          "--avd-name=20190716T160000Z_android_28_google_apis_x86",
+          "--emulator-home=../../.android"
+        ],
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "wtf_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "cipd_packages": [
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86",
+              "location": ".android",
+              "revision": "J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/emulator",
+              "location": "third_party/android_sdk/public",
+              "revision": "xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC"
+            },
+            {
+              "cipd_package": "chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86",
+              "location": "third_party/android_sdk/public",
+              "revision": "LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C"
+            }
+          ],
+          "dimension_sets": [
+            {
+              "cpu": "x86-64",
+              "device_os": null,
+              "device_type": null,
+              "os": "Ubuntu-16.04"
+            }
+          ],
+          "output_links": [
+            {
+              "link": [
+                "https://luci-logdog.appspot.com/v/?s",
+                "=android%2Fswarming%2Flogcats%2F",
+                "${TASK_ID}%2F%2B%2Funified_logcats"
+              ],
+              "name": "shard #${SHARD_INDEX} logcats"
+            }
+          ]
+        },
+        "test": "wtf_unittests"
+      }
+    ]
   }
 }
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index e14a468..e89f930 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -695,7 +695,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
@@ -11279,7 +11279,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
@@ -12796,7 +12796,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
@@ -14331,7 +14331,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
@@ -15713,7 +15713,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
@@ -17082,7 +17082,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
@@ -18481,7 +18481,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
@@ -19881,7 +19881,7 @@
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
             {
-              "os": "Ubuntu-14.04"
+              "os": "Ubuntu-16.04"
             }
           ]
         },
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 2967037..4d3002b 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -1390,35 +1390,6 @@
       }
     ]
   },
-  "WebKit Linux root_layer_scrolls Dummy Builder": {
-    "isolated_scripts": [
-      {
-        "args": [
-          "--num-retries=3",
-          "--additional-driver-flag=--root-layer-scrolls"
-        ],
-        "isolate_name": "blink_web_tests_exparchive",
-        "merge": {
-          "args": [
-            "--verbose"
-          ],
-          "script": "//third_party/blink/tools/merge_web_test_results.py"
-        },
-        "name": "webkit_layout_tests",
-        "results_handler": "layout tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "os": "Ubuntu-14.04"
-            }
-          ],
-          "hard_timeout": 900,
-          "shards": 12
-        }
-      }
-    ]
-  },
   "Win 10 Fast Ring": {
     "gtest_tests": [
       {
@@ -9006,7 +8977,7 @@
     "gtest_tests": [
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9024,7 +8995,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9042,7 +9013,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9060,7 +9031,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9078,7 +9049,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9096,7 +9067,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9114,7 +9085,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9133,7 +9104,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9151,7 +9122,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9169,7 +9140,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9188,7 +9159,7 @@
       {
         "args": [
           "--gtest_filter=-*UsingRealWebcam*",
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9206,7 +9177,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9224,7 +9195,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9242,7 +9213,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9260,7 +9231,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9281,7 +9252,7 @@
         "args": [
           "--disable-perfetto",
           "--gtest_filter=TracingControllerTest.*:BackgroundTracingManagerBrowserTest.*",
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9300,7 +9271,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9318,7 +9289,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9336,7 +9307,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9354,7 +9325,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9372,7 +9343,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9390,7 +9361,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9408,7 +9379,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9426,7 +9397,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9444,7 +9415,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9462,7 +9433,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9480,7 +9451,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9498,7 +9469,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9516,7 +9487,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9534,7 +9505,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9552,7 +9523,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9570,7 +9541,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9588,7 +9559,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9606,7 +9577,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9624,7 +9595,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9642,7 +9613,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9660,7 +9631,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9678,7 +9649,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9696,7 +9667,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9714,7 +9685,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9732,7 +9703,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9750,7 +9721,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9768,7 +9739,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9786,7 +9757,7 @@
       },
       {
         "args": [
-          "--enable-blink-features=HeapConcurrentMarking"
+          "--enable-features=BlinkHeapConcurrentMarking"
         ],
         "merge": {
           "args": [],
@@ -9808,7 +9779,7 @@
         "args": [
           "--num-retries=3",
           "--release",
-          "--additional-driver-flag=--enable-blink-features=HeapConcurrentMarking"
+          "--additional-driver-flag=--enable-features=BlinkHeapConcurrentMarking"
         ],
         "isolate_name": "blink_web_tests_exparchive",
         "merge": {
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index aafbcdf..77458f2 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -1369,7 +1369,7 @@
       }
     ]
   },
-  "ANGLE GPU Win10 Release (Intel HD 630)": {
+  "ANGLE GPU Win10 x64 Release (Intel HD 630)": {
     "gtest_tests": [
       {
         "args": [
@@ -1657,7 +1657,7 @@
         "args": [
           "info_collection",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -1690,7 +1690,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d11 --use-cmd-decoder=validating",
@@ -1722,7 +1722,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -1754,7 +1754,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
@@ -1784,7 +1784,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
@@ -1814,7 +1814,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -1844,7 +1844,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
@@ -1872,7 +1872,7 @@
       }
     ]
   },
-  "ANGLE GPU Win10 Release (NVIDIA)": {
+  "ANGLE GPU Win10 x64 Release (NVIDIA)": {
     "gtest_tests": [
       {
         "args": [
@@ -2184,7 +2184,7 @@
         "args": [
           "info_collection",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -2275,7 +2275,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough",
@@ -2307,7 +2307,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -2339,7 +2339,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d11 --use-cmd-decoder=validating"
@@ -2369,7 +2369,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
@@ -2399,7 +2399,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d9 --use-cmd-decoder=validating"
@@ -2429,7 +2429,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
@@ -2459,7 +2459,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -2489,7 +2489,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
@@ -7098,527 +7098,6 @@
       }
     ]
   },
-  "Dawn GPU Linux Release (Intel HD 630)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-ubuntu-stable",
-              "os": "linux-intel-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--enable-backend-validation"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_validation_layers_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-ubuntu-stable",
-              "os": "linux-intel-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--use-wire"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_wire_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-ubuntu-stable",
-              "os": "linux-intel-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      }
-    ]
-  },
-  "Dawn GPU Linux Release (NVIDIA)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-ubuntu-stable",
-              "os": "linux-nvidia-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--enable-backend-validation"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_validation_layers_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-ubuntu-stable",
-              "os": "linux-nvidia-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--use-wire"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_wire_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-ubuntu-stable",
-              "os": "linux-nvidia-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      }
-    ]
-  },
-  "Dawn GPU Mac Release (Intel)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "os": "mac-intel-stable"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--enable-backend-validation"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_validation_layers_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "os": "mac-intel-stable"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--use-wire"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_wire_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "os": "mac-intel-stable"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      }
-    ]
-  },
-  "Dawn GPU Mac Retina Release (AMD)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "mac-amd-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--enable-backend-validation"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_validation_layers_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "mac-amd-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--use-wire"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_wire_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "mac-amd-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      }
-    ]
-  },
-  "Dawn GPU Mac Retina Release (NVIDIA)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "10de:0fe9",
-              "hidpi": "1",
-              "os": "mac-nvidia-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--enable-backend-validation"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_validation_layers_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "10de:0fe9",
-              "hidpi": "1",
-              "os": "mac-nvidia-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--use-wire"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_wire_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "10de:0fe9",
-              "hidpi": "1",
-              "os": "mac-nvidia-stable",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      }
-    ]
-  },
-  "Dawn GPU Win10 Release (Intel HD 630)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--enable-backend-validation"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_validation_layers_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--use-wire"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_wire_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      }
-    ]
-  },
-  "Dawn GPU Win10 Release (NVIDIA)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--enable-backend-validation"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_validation_layers_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0",
-          "--use-wire"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "dawn_end2end_wire_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "dawn_end2end_tests"
-      }
-    ]
-  },
   "GPU FYI Fuchsia Builder": {
     "additional_compile_targets": [
       "angle_end2end_tests",
@@ -12395,6 +11874,49 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "os": "Mac-10.14.4",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "optional_dimensions": {
+            "300": [
+              {
+                "os": "Mac-10.14.3"
+              }
+            ],
+            "600": [
+              {
+                "os": "Mac-10.14.5"
+              }
+            ]
+          },
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -13206,6 +12728,49 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.14.4",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "optional_dimensions": {
+            "300": [
+              {
+                "os": "Mac-10.14.3"
+              }
+            ],
+            "600": [
+              {
+                "os": "Mac-10.14.5"
+              }
+            ]
+          },
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -14017,6 +13582,49 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "10de:0fe9",
+              "os": "Mac-10.14.4",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "optional_dimensions": {
+            "300": [
+              {
+                "os": "Mac-10.14.3"
+              }
+            ],
+            "600": [
+              {
+                "os": "Mac-10.14.5"
+              }
+            ]
+          },
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -15057,6 +14665,37 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac-10.13.6",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -15627,6 +15266,38 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "Mac-10.13.6",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -16198,6 +15869,38 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "10de:0fe9",
+              "hidpi": "1",
+              "os": "Mac-10.13.6",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -16810,6 +16513,41 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "mac-intel-stable"
+            },
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "mac-amd-stable",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
           "--is-asan"
         ],
@@ -17371,6 +17109,35 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "mac-intel-stable"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -18958,6 +18725,37 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "1002:6821",
+              "hidpi": "1",
+              "os": "mac-amd-stable",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -19529,6 +19327,37 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "10de:0fe9",
+              "hidpi": "1",
+              "os": "mac-nvidia-stable",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -20216,6 +20045,37 @@
           "--browser=release",
           "--passthrough",
           "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "1002:679e",
+              "os": "Mac-10.12.6",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "expiration": 21600,
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -21302,7 +21162,7 @@
       }
     ]
   },
-  "Optional Win10 Release (Intel HD 630)": {
+  "Optional Win10 x64 Release (Intel HD 630)": {
     "gtest_tests": [
       {
         "args": [
@@ -21576,7 +21436,7 @@
         "args": [
           "info_collection",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -21609,7 +21469,7 @@
         "args": [
           "power",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -21638,7 +21498,7 @@
         "args": [
           "trace_test",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -21667,7 +21527,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -21699,7 +21559,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
@@ -21729,7 +21589,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
@@ -21759,7 +21619,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -21789,7 +21649,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
@@ -21817,7 +21677,7 @@
       }
     ]
   },
-  "Optional Win10 Release (NVIDIA)": {
+  "Optional Win10 x64 Release (NVIDIA)": {
     "gtest_tests": [
       {
         "args": [
@@ -22232,7 +22092,7 @@
         "args": [
           "info_collection",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -22312,7 +22172,7 @@
         "args": [
           "trace_test",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -22388,7 +22248,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -22429,7 +22289,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d11 --use-cmd-decoder=validating"
@@ -22468,7 +22328,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
@@ -22507,7 +22367,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d9 --use-cmd-decoder=validating"
@@ -22546,7 +22406,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
@@ -22585,7 +22445,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -22624,7 +22484,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=release",
+          "--browser=release_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
@@ -22661,7 +22521,7 @@
       }
     ]
   },
-  "Win10 FYI Debug (NVIDIA)": {
+  "Win10 FYI x64 Debug (NVIDIA)": {
     "gtest_tests": [
       {
         "args": [
@@ -23023,7 +22883,7 @@
         "args": [
           "context_lost",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -23052,7 +22912,7 @@
         "args": [
           "depth_capture",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -23081,7 +22941,7 @@
         "args": [
           "gpu_process",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -23110,7 +22970,7 @@
         "args": [
           "hardware_accelerated_feature",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -23139,7 +22999,7 @@
         "args": [
           "info_collection",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -23172,7 +23032,7 @@
         "args": [
           "maps",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -23208,7 +23068,7 @@
         "args": [
           "pixel",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -23253,7 +23113,7 @@
         "args": [
           "screenshot_sync",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
@@ -23283,7 +23143,7 @@
         "args": [
           "trace_test",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -23312,7 +23172,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d11 --use-cmd-decoder=validating"
@@ -23342,7 +23202,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
@@ -23372,7 +23232,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d9 --use-cmd-decoder=validating"
@@ -23402,7 +23262,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
@@ -23432,7 +23292,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
@@ -23462,7 +23322,7 @@
         "args": [
           "webgl_conformance",
           "--show-stdout",
-          "--browser=debug",
+          "--browser=debug_x64",
           "--passthrough",
           "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
@@ -23490,2891 +23350,6 @@
       }
     ]
   },
-  "Win10 FYI Release (Intel HD 630)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_end2end_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "angle_gles1_conformance_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "angle_unittests"
-      },
-      {
-        "args": [
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "angle_white_box_tests"
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-bot-mode",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "browser_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-cmd-decoder=validating"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gl_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-cmd-decoder=passthrough"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gl_tests_passthrough",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gl_tests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gl_unittests"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gles2_conform_test"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=d3d9"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gles2_conform_d3d9_test",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gles2_conform_test"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=gl",
-          "--disable-gpu-sandbox"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gles2_conform_gl_test",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gles2_conform_test"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gpu_unittests"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "swiftshader_unittests"
-      },
-      {
-        "args": [
-          "--use-angle=d3d11",
-          "--use-test-data-path",
-          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "video_decode_accelerator_d3d11_unittest",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "video_decode_accelerator_unittest"
-      },
-      {
-        "args": [
-          "--use-angle=d3d9",
-          "--use-test-data-path",
-          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "video_decode_accelerator_d3d9_unittest",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "video_decode_accelerator_unittest"
-      },
-      {
-        "args": [
-          "--ignore-runtime-requirements=*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "xr_browser_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "xr_browser_tests"
-      }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "--gtest-benchmark-name=angle_perftests",
-          "-v",
-          "--one-frame-only"
-        ],
-        "isolate_name": "angle_perftests",
-        "merge": {
-          "args": [
-            "--smoke-test-mode"
-          ],
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "angle_perftests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "context_lost_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "depth_capture",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "depth_capture_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "gpu_process_launch_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "hardware_accelerated_feature_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--expected-vendor-id",
-          "8086",
-          "--expected-device-id",
-          "5912"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "info_collection_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--dont-restore-color-profile-after-test",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "maps_pixel_test",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--dont-restore-color-profile-after-test",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "pixel_skia_gold_test",
-        "precommit_args": [
-          "--review-patch-issue",
-          "${patch_issue}",
-          "--review-patch-set",
-          "${patch_set}",
-          "--buildbucket-build-id",
-          "${buildbucket_build_id}"
-        ],
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
-        }
-      },
-      {
-        "args": [
-          "power",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "power_measurement_test",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "../../tools/perf/run_benchmark",
-          "--benchmarks=rendering.desktop"
-        ],
-        "experiment_percentage": 100,
-        "isolate_name": "rendering_representative_perf_tests",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "rendering_representative_perf_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--dont-restore-color-profile-after-test"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "screenshot_sync_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "trace_test",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d11 --use-cmd-decoder=validating",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_d3d11_validating_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 20
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_gl_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 20
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 20
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_d3d9_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_gl_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_vulkan_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        }
-      }
-    ]
-  },
-  "Win10 FYI Release (NVIDIA)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_end2end_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "angle_gles1_conformance_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "angle_unittests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-retry-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "angle_white_box_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--enable-gpu",
-          "--test-launcher-bot-mode",
-          "--test-launcher-jobs=1",
-          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "tab_capture_end2end_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "browser_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-cmd-decoder=validating"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gl_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-cmd-decoder=passthrough"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gl_tests_passthrough",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gl_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gl_unittests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=d3d9"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gles2_conform_d3d9_test",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests",
-          "--use-angle=gl",
-          "--disable-gpu-sandbox"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "gles2_conform_gl_test",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gles2_conform_test",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "gpu_unittests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "swiftshader_unittests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-angle=d3d11",
-          "--use-test-data-path",
-          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "video_decode_accelerator_d3d11_unittest",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "video_decode_accelerator_unittest",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-angle=d3d9",
-          "--use-test-data-path",
-          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "video_decode_accelerator_d3d9_unittest",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "video_decode_accelerator_unittest",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--use-angle=gl",
-          "--use-test-data-path",
-          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "video_decode_accelerator_gl_unittest",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "video_decode_accelerator_unittest",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--ignore-runtime-requirements=*"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "xr_browser_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "xr_browser_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      }
-    ],
-    "isolated_scripts": [
-      {
-        "args": [
-          "--gtest-benchmark-name=angle_perftests",
-          "-v",
-          "--one-frame-only"
-        ],
-        "isolate_name": "angle_perftests",
-        "merge": {
-          "args": [
-            "--smoke-test-mode"
-          ],
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "angle_perftests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "context_lost_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "depth_capture",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "depth_capture_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "gpu_process_launch_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "hardware_accelerated_feature_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--expected-vendor-id",
-          "10de",
-          "--expected-device-id",
-          "1cb3"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "info_collection_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--dont-restore-color-profile-after-test",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "maps_pixel_test",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--gtest-benchmark-name=passthrough_command_buffer_perftests",
-          "-v",
-          "--use-cmd-decoder=passthrough",
-          "--use-angle=gl-null",
-          "--fast-run"
-        ],
-        "isolate_name": "command_buffer_perftests",
-        "merge": {
-          "args": [
-            "--smoke-test-mode"
-          ],
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "passthrough_command_buffer_perftests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--dont-restore-color-profile-after-test",
-          "--os-type",
-          "win",
-          "--build-revision",
-          "${got_revision}",
-          "--test-machine-name",
-          "${buildername}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "pixel_skia_gold_test",
-        "precommit_args": [
-          "--review-patch-issue",
-          "${patch_issue}",
-          "--review-patch-set",
-          "${patch_set}",
-          "--buildbucket-build-id",
-          "${buildbucket_build_id}"
-        ],
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "../../tools/perf/run_benchmark",
-          "--benchmarks=rendering.desktop"
-        ],
-        "experiment_percentage": 100,
-        "isolate_name": "rendering_representative_perf_tests",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "rendering_representative_perf_tests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--dont-restore-color-profile-after-test"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "screenshot_sync_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "trace_test",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--gtest-benchmark-name=validating_command_buffer_perftests",
-          "-v",
-          "--use-cmd-decoder=validating",
-          "--use-stub",
-          "--fast-run"
-        ],
-        "isolate_name": "command_buffer_perftests",
-        "merge": {
-          "args": [
-            "--smoke-test-mode"
-          ],
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "validating_command_buffer_perftests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_gl_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 20
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
-          "--webgl-conformance-version=2.0.1",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl2_conformance_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 20
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d11 --use-cmd-decoder=validating"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_d3d11_validating_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_d3d9_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d9 --use-cmd-decoder=validating"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_d3d9_validating_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_gl_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_vulkan_passthrough_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "idempotent": false,
-          "shards": 2
-        },
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      }
-    ]
-  },
-  "Win10 FYI Release XR Perf (NVIDIA)": {
-    "isolated_scripts": [
-      {
-        "args": [
-          "--benchmarks=xr.webxr.static",
-          "-v",
-          "--upload-results",
-          "--output-format=histograms",
-          "--browser=release"
-        ],
-        "experiment_percentage": 100,
-        "isolate_name": "vr_perf_tests",
-        "merge": {
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "name": "xr.webxr.static",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        }
-      }
-    ]
-  },
-  "Win10 FYI dEQP Release (Intel HD 630)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-d3d11"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles2_d3d11_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "intel-hd-630-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_deqp_gles2_tests"
-      }
-    ]
-  },
-  "Win10 FYI dEQP Release (NVIDIA)": {
-    "gtest_tests": [
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-d3d11"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_egl_d3d11_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_deqp_egl_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-gl"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_egl_gl_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_deqp_egl_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--deqp-egl-display-type=angle-vulkan",
-          "--test-launcher-batch-limit=400"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_egl_vulkan_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_deqp_egl_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-d3d11"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles2_d3d11_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_deqp_gles2_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-gl"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles2_gl_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_deqp_gles2_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--deqp-egl-display-type=angle-vulkan",
-          "--test-launcher-batch-limit=400"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles2_vulkan_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 4
-        },
-        "test": "angle_deqp_gles2_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-d3d11"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles31_d3d11_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 10
-        },
-        "test": "angle_deqp_gles31_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-gl"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles31_gl_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 10
-        },
-        "test": "angle_deqp_gles31_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--deqp-egl-display-type=angle-vulkan",
-          "--test-launcher-batch-limit=400"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles31_vulkan_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 10
-        },
-        "test": "angle_deqp_gles31_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-d3d11"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles3_d3d11_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 12
-        },
-        "test": "angle_deqp_gles3_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--test-launcher-batch-limit=400",
-          "--deqp-egl-display-type=angle-gl"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles3_gl_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 12
-        },
-        "test": "angle_deqp_gles3_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--deqp-egl-display-type=angle-vulkan",
-          "--test-launcher-batch-limit=400"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_gles3_vulkan_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 12
-        },
-        "test": "angle_deqp_gles3_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--deqp-egl-display-type=angle-vulkan",
-          "--test-launcher-batch-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_khr_gles2_vulkan_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ]
-        },
-        "test": "angle_deqp_khr_gles2_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--deqp-egl-display-type=angle-vulkan",
-          "--test-launcher-batch-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_khr_gles31_vulkan_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 2
-        },
-        "test": "angle_deqp_khr_gles31_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      },
-      {
-        "args": [
-          "--deqp-egl-display-type=angle-vulkan",
-          "--test-launcher-batch-limit=0"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "angle_deqp_khr_gles3_vulkan_tests",
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "containment_type": "AUTO",
-          "dimension_sets": [
-            {
-              "gpu": "nvidia-quadro-p400-win10-stable",
-              "os": "Windows-10",
-              "pool": "Chrome-GPU"
-            }
-          ],
-          "shards": 2
-        },
-        "test": "angle_deqp_khr_gles3_tests",
-        "trigger_script": {
-          "args": [
-            "--multiple-trigger-configs",
-            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
-            "--multiple-dimension-script-verbose",
-            "True"
-          ],
-          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
-        }
-      }
-    ]
-  },
   "Win10 FYI x64 Exp Release (Intel HD 630)": {
     "gtest_tests": [
       {
@@ -29307,6 +26282,951 @@
       }
     ]
   },
+  "Win10 FYI x64 Release (Intel HD 630)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_end2end_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "angle_gles1_conformance_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "angle_unittests"
+      },
+      {
+        "args": [
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "angle_white_box_tests"
+      },
+      {
+        "args": [
+          "--enable-gpu",
+          "--test-launcher-bot-mode",
+          "--test-launcher-jobs=1",
+          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "tab_capture_end2end_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "browser_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-cmd-decoder=validating"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gl_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-cmd-decoder=passthrough"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gl_tests_passthrough",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gl_tests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gl_unittests"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=d3d9"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_d3d9_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gles2_conform_test"
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=gl",
+          "--disable-gpu-sandbox"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_gl_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gles2_conform_test"
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gpu_unittests"
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests"
+      },
+      {
+        "args": [
+          "--use-angle=d3d11",
+          "--use-test-data-path",
+          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "video_decode_accelerator_d3d11_unittest",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "video_decode_accelerator_unittest"
+      },
+      {
+        "args": [
+          "--use-angle=d3d9",
+          "--use-test-data-path",
+          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "video_decode_accelerator_d3d9_unittest",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "video_decode_accelerator_unittest"
+      },
+      {
+        "args": [
+          "--ignore-runtime-requirements=*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "xr_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "xr_browser_tests"
+      }
+    ],
+    "isolated_scripts": [
+      {
+        "args": [
+          "--gtest-benchmark-name=angle_perftests",
+          "-v",
+          "--one-frame-only"
+        ],
+        "isolate_name": "angle_perftests",
+        "merge": {
+          "args": [
+            "--smoke-test-mode"
+          ],
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "angle_perftests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "context_lost",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "context_lost_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "depth_capture",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "depth_capture_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "gpu_process",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "gpu_process_launch_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "hardware_accelerated_feature",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "hardware_accelerated_feature_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "info_collection",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--expected-vendor-id",
+          "8086",
+          "--expected-device-id",
+          "5912"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "info_collection_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "maps",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--os-type",
+          "win",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "maps_pixel_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "pixel",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--os-type",
+          "win",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "pixel_skia_gold_test",
+        "precommit_args": [
+          "--review-patch-issue",
+          "${patch_issue}",
+          "--review-patch-set",
+          "${patch_set}",
+          "--buildbucket-build-id",
+          "${buildbucket_build_id}"
+        ],
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
+        }
+      },
+      {
+        "args": [
+          "power",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "power_measurement_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "../../tools/perf/run_benchmark",
+          "--benchmarks=rendering.desktop"
+        ],
+        "experiment_percentage": 100,
+        "isolate_name": "rendering_representative_perf_tests",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "rendering_representative_perf_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "screenshot_sync",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "screenshot_sync_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "trace_test",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "trace_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d11 --use-cmd-decoder=validating",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_d3d11_validating_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 20
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 20
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 20
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_d3d9_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_vulkan_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        }
+      }
+    ]
+  },
   "Win10 FYI x64 Release (NVIDIA GeForce GTX 1660)": {
     "gtest_tests": [
       {
@@ -30332,6 +28252,1946 @@
       }
     ]
   },
+  "Win10 FYI x64 Release (NVIDIA)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_end2end_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "angle_gles1_conformance_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "angle_unittests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-retry-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "angle_white_box_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--enable-gpu",
+          "--test-launcher-bot-mode",
+          "--test-launcher-jobs=1",
+          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "tab_capture_end2end_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "browser_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-cmd-decoder=validating"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gl_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-cmd-decoder=passthrough"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gl_tests_passthrough",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gl_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gl_unittests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gles2_conform_test",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=d3d9"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_d3d9_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gles2_conform_test",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--use-angle=gl",
+          "--disable-gpu-sandbox"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "gles2_conform_gl_test",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gles2_conform_test",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "gpu_unittests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "swiftshader_unittests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-angle=d3d11",
+          "--use-test-data-path",
+          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "video_decode_accelerator_d3d11_unittest",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "video_decode_accelerator_unittest",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-angle=d3d9",
+          "--use-test-data-path",
+          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "video_decode_accelerator_d3d9_unittest",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "video_decode_accelerator_unittest",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--use-angle=gl",
+          "--use-test-data-path",
+          "--test_video_data=test-25fps.h264:320:240:250:258:::1"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "video_decode_accelerator_gl_unittest",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "video_decode_accelerator_unittest",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--ignore-runtime-requirements=*"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "xr_browser_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "xr_browser_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      }
+    ],
+    "isolated_scripts": [
+      {
+        "args": [
+          "--gtest-benchmark-name=angle_perftests",
+          "-v",
+          "--one-frame-only"
+        ],
+        "isolate_name": "angle_perftests",
+        "merge": {
+          "args": [
+            "--smoke-test-mode"
+          ],
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "angle_perftests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "context_lost",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "context_lost_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "depth_capture",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "depth_capture_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "gpu_process",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "gpu_process_launch_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "hardware_accelerated_feature",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "hardware_accelerated_feature_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "info_collection",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--expected-vendor-id",
+          "10de",
+          "--expected-device-id",
+          "1cb3"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "info_collection_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "maps",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--os-type",
+          "win",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "maps_pixel_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--gtest-benchmark-name=passthrough_command_buffer_perftests",
+          "-v",
+          "--use-cmd-decoder=passthrough",
+          "--use-angle=gl-null",
+          "--fast-run"
+        ],
+        "isolate_name": "command_buffer_perftests",
+        "merge": {
+          "args": [
+            "--smoke-test-mode"
+          ],
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "passthrough_command_buffer_perftests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "pixel",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test",
+          "--os-type",
+          "win",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "pixel_skia_gold_test",
+        "precommit_args": [
+          "--review-patch-issue",
+          "${patch_issue}",
+          "--review-patch-set",
+          "${patch_set}",
+          "--buildbucket-build-id",
+          "${buildbucket_build_id}"
+        ],
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "service_account": "chrome-gpu-gold@chops-service-accounts.iam.gserviceaccount.com"
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "../../tools/perf/run_benchmark",
+          "--benchmarks=rendering.desktop"
+        ],
+        "experiment_percentage": 100,
+        "isolate_name": "rendering_representative_perf_tests",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "rendering_representative_perf_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "screenshot_sync",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--dont-restore-color-profile-after-test"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "screenshot_sync_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "trace_test",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "trace_test",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--gtest-benchmark-name=validating_command_buffer_perftests",
+          "-v",
+          "--use-cmd-decoder=validating",
+          "--use-stub",
+          "--fast-run"
+        ],
+        "isolate_name": "command_buffer_perftests",
+        "merge": {
+          "args": [
+            "--smoke-test-mode"
+          ],
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "validating_command_buffer_perftests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 20
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl2_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 20
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d11 --use-cmd-decoder=validating"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_d3d11_validating_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_d3d9_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d9 --use-cmd-decoder=validating"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_d3d9_validating_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_gl_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release_x64",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
+        },
+        "name": "webgl_conformance_vulkan_passthrough_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "idempotent": false,
+          "shards": 2
+        },
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      }
+    ]
+  },
+  "Win10 FYI x64 Release XR Perf (NVIDIA)": {
+    "isolated_scripts": [
+      {
+        "args": [
+          "--benchmarks=xr.webxr.static",
+          "-v",
+          "--upload-results",
+          "--output-format=histograms",
+          "--browser=release"
+        ],
+        "experiment_percentage": 100,
+        "isolate_name": "vr_perf_tests",
+        "merge": {
+          "script": "//tools/perf/process_perf_results.py"
+        },
+        "name": "xr.webxr.static",
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        }
+      }
+    ]
+  },
+  "Win10 FYI x64 dEQP Release (Intel HD 630)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-d3d11"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles2_d3d11_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "intel-hd-630-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_deqp_gles2_tests"
+      }
+    ]
+  },
+  "Win10 FYI x64 dEQP Release (NVIDIA)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-d3d11"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_egl_d3d11_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_deqp_egl_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-gl"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_egl_gl_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_deqp_egl_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--deqp-egl-display-type=angle-vulkan",
+          "--test-launcher-batch-limit=400"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_egl_vulkan_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_deqp_egl_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-d3d11"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles2_d3d11_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_deqp_gles2_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-gl"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles2_gl_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_deqp_gles2_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--deqp-egl-display-type=angle-vulkan",
+          "--test-launcher-batch-limit=400"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles2_vulkan_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 4
+        },
+        "test": "angle_deqp_gles2_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-d3d11"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles31_d3d11_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 10
+        },
+        "test": "angle_deqp_gles31_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-gl"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles31_gl_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 10
+        },
+        "test": "angle_deqp_gles31_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--deqp-egl-display-type=angle-vulkan",
+          "--test-launcher-batch-limit=400"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles31_vulkan_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 10
+        },
+        "test": "angle_deqp_gles31_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-d3d11"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles3_d3d11_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 12
+        },
+        "test": "angle_deqp_gles3_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--test-launcher-batch-limit=400",
+          "--deqp-egl-display-type=angle-gl"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles3_gl_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 12
+        },
+        "test": "angle_deqp_gles3_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--deqp-egl-display-type=angle-vulkan",
+          "--test-launcher-batch-limit=400"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_gles3_vulkan_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 12
+        },
+        "test": "angle_deqp_gles3_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--deqp-egl-display-type=angle-vulkan",
+          "--test-launcher-batch-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_khr_gles2_vulkan_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ]
+        },
+        "test": "angle_deqp_khr_gles2_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--deqp-egl-display-type=angle-vulkan",
+          "--test-launcher-batch-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_khr_gles31_vulkan_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 2
+        },
+        "test": "angle_deqp_khr_gles31_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      },
+      {
+        "args": [
+          "--deqp-egl-display-type=angle-vulkan",
+          "--test-launcher-batch-limit=0"
+        ],
+        "merge": {
+          "args": [],
+          "script": "//testing/merge_scripts/standard_gtest_merge.py"
+        },
+        "name": "angle_deqp_khr_gles3_vulkan_tests",
+        "should_retry_with_patch": false,
+        "swarming": {
+          "can_use_on_swarming_builders": true,
+          "containment_type": "AUTO",
+          "dimension_sets": [
+            {
+              "gpu": "nvidia-quadro-p400-win10-stable",
+              "os": "Windows-10",
+              "pool": "Chrome-GPU"
+            }
+          ],
+          "shards": 2
+        },
+        "test": "angle_deqp_khr_gles3_tests",
+        "trigger_script": {
+          "args": [
+            "--multiple-trigger-configs",
+            "[{\"gpu\": \"nvidia-quadro-p400-win10-stable\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]",
+            "--multiple-dimension-script-verbose",
+            "True"
+          ],
+          "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py"
+        }
+      }
+    ]
+  },
   "Win7 ANGLE Tryserver (AMD)": {
     "gtest_tests": [
       {
diff --git a/testing/buildbot/filters/BUILD.gn b/testing/buildbot/filters/BUILD.gn
index bb073ce..f6d606c 100644
--- a/testing/buildbot/filters/BUILD.gn
+++ b/testing/buildbot/filters/BUILD.gn
@@ -37,6 +37,7 @@
 
   data = [
     "//testing/buildbot/filters/bfcache.browser_tests.filter",
+    "//testing/buildbot/filters/code_coverage.browser_tests.filter",
     "//testing/buildbot/filters/navigation_loader_on_ui_browser_tests.filter",
     "//testing/buildbot/filters/skia_renderer.browser_tests.filter",
     "//testing/buildbot/filters/webrtc_functional.browser_tests.filter",
diff --git a/testing/buildbot/filters/chromeos.browser_tests.filter b/testing/buildbot/filters/chromeos.browser_tests.filter
index 645c035..7f9aa2e 100644
--- a/testing/buildbot/filters/chromeos.browser_tests.filter
+++ b/testing/buildbot/filters/chromeos.browser_tests.filter
@@ -20,12 +20,18 @@
 # TODO(crbug.com/977743): Enable this.
 -ManagementApiKioskTest.ManagementApi
 
+# TODO(crbug.com/990844): Enable this.
+-MergeSessionTest.XHRNotThrottled/1
+
 # TODO(crbug.com/985390): Enable this.
 -OSSettingsPeoplePageAccountManagerTest.AllJsTests
 
 # TODO(crbug.com/977744): Enable this.
 -ProcessMemoryMetricsEmitterTest.RendererBuildId
 
+# TODO(crbug.com/990819): Enable this.
+-StructSequence/OobeLocalizationTest.LocalizationTest/0
+
 # TODO(crbug.com/977170): Enable this.
 -StructSequence/OobeLocalizationTest.LocalizationTest/3
 -StructSequence/OobeLocalizationTest.LocalizationTest/4
diff --git a/testing/buildbot/filters/code_coverage.browser_tests.filter b/testing/buildbot/filters/code_coverage.browser_tests.filter
new file mode 100644
index 0000000..4111ed5e
--- /dev/null
+++ b/testing/buildbot/filters/code_coverage.browser_tests.filter
@@ -0,0 +1,17 @@
+# TODO(crbug.com/988146): Enable this.
+-AutofillPrivateApiTest.AddAndUpdateAddress
+-PasswordManagerBrowserTest.*
+-ContentScriptApiTest.ContentScriptBlobFetch
+-CredentialManagerBrowserTest.*
+-DiceManageAccountBrowserTest.ClearManagedProfileOnStartup
+-PasswordManagerDialogBrowserTest.InvokeUi_normal
+-PopupTrackerBrowserTest.ControlClick_HasTracker
+-PrerenderBrowserTest.AutosigninInPrerenderer
+-ProfileStatisticsBrowserTest.GatherStatistics
+-TabHoverCardBubbleViewBrowserTest.WidgetNotVisibleOnMousePressAfterTabFocus
+-TabHoverCardBubbleViewBrowserTest.WidgetVisibleOnTabCloseButtonFocusAfterTabFocus
+-TabHoverCardBubbleViewBrowserTest.WidgetVisibleOnTabFocus
+-TranslateLanguageBrowserTest.RecentTargetLanguage
+-SaveCardBubbleViewsFullFormBrowserTest.Local_Metrics_SigninImpressionManageCards
+-SaveCardBubbleViewsFullFormBrowserTest.Upload_ClickingSaveClosesBubble
+-SaveCardBubbleViewsSyncTransportFullFormBrowserTest.Upload_TransportMode_ClickingSaveClosesBubble
diff --git a/testing/buildbot/filters/gpu.skiarenderer_vulkan_content_browsertests.filter b/testing/buildbot/filters/gpu.skiarenderer_vulkan_content_browsertests.filter
index 2e58ca51..f2ec394f 100644
--- a/testing/buildbot/filters/gpu.skiarenderer_vulkan_content_browsertests.filter
+++ b/testing/buildbot/filters/gpu.skiarenderer_vulkan_content_browsertests.filter
@@ -96,3 +96,5 @@
 -MediaSourceTest.Playback_VideoAudio_WebM
 -WebRtcDataBrowserTest.CallWithSctpDataAndMedia
 -WebRtcDataBrowserTest.CallWithDataAndMedia
+-Http/MediaTest.VideoBearMp4Vp9/0
+-File/MediaTest.VideoBearMp4Vp9/0
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py
index 9eb144d..2129917 100755
--- a/testing/buildbot/generate_buildbot_json.py
+++ b/testing/buildbot/generate_buildbot_json.py
@@ -1002,23 +1002,16 @@
       'ANGLE GPU Mac Release (Intel)',
       'ANGLE GPU Mac Retina Release (AMD)',
       'ANGLE GPU Mac Retina Release (NVIDIA)',
-      'ANGLE GPU Win10 Release (Intel HD 630)',
-      'ANGLE GPU Win10 Release (NVIDIA)',
-      'Dawn GPU Linux Release (Intel HD 630)',
-      'Dawn GPU Linux Release (NVIDIA)',
-      'Dawn GPU Mac Release (Intel)',
-      'Dawn GPU Mac Retina Release (AMD)',
-      'Dawn GPU Mac Retina Release (NVIDIA)',
-      'Dawn GPU Win10 Release (Intel HD 630)',
-      'Dawn GPU Win10 Release (NVIDIA)',
+      'ANGLE GPU Win10 x64 Release (Intel HD 630)',
+      'ANGLE GPU Win10 x64 Release (NVIDIA)',
       'Optional Android Release (Nexus 5X)',
       'Optional Linux Release (Intel HD 630)',
       'Optional Linux Release (NVIDIA)',
       'Optional Mac Release (Intel)',
       'Optional Mac Retina Release (AMD)',
       'Optional Mac Retina Release (NVIDIA)',
-      'Optional Win10 Release (Intel HD 630)',
-      'Optional Win10 Release (NVIDIA)',
+      'Optional Win10 x64 Release (Intel HD 630)',
+      'Optional Win10 x64 Release (NVIDIA)',
       'Win7 ANGLE Tryserver (AMD)',
       # chromium.fyi
       'linux-blink-rel-dummy',
@@ -1032,7 +1025,6 @@
       'Dummy WebKit Mac10.13',
       'WebKit Linux composite_after_paint Dummy Builder',
       'WebKit Linux layout_ng Dummy Builder',
-      'WebKit Linux root_layer_scrolls Dummy Builder',
       # chromium, due to https://crbug.com/878915
       'win-dbg',
       'win32-dbg',
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl
index f4ab691..eef5d2787 100644
--- a/testing/buildbot/mixins.pyl
+++ b/testing/buildbot/mixins.pyl
@@ -501,6 +501,37 @@
       },
     },
   },
+  'pie-x86-emulator': {
+    '$mixin_append': {
+      'args': [
+        '--avd-name=20190716T160000Z_android_28_google_apis_x86',
+        '--emulator-home=../../.android',
+      ],
+    },
+    'swarming': {
+      'cipd_packages': [
+        {
+          'cipd_package': 'chromium/third_party/android_sdk/public/avds/android-28/google_apis/x86',
+          'location': '.android',
+          'revision': 'J5MFTg7OhekLKsOX7bmkVTSCDzohydCvXrn4sJzy0xsC',
+        },
+        {
+          'cipd_package': 'chromium/third_party/android_sdk/public/emulator',
+          'location': 'third_party/android_sdk/public',
+          'revision': 'xhyuoquVvBTcJelgRjMKZeoBVSQRjB7pLVJPt5C9saIC',
+        },
+        {
+          'cipd_package': 'chromium/third_party/android_sdk/public/system-images/android-28/google_apis/x86',
+          'location': 'third_party/android_sdk/public',
+          'revision': 'LDa0XkTjgGYx7Amzg5qjIRgCfc4F_pq7rKMJVdACYx8C',
+        },
+      ],
+      'dimensions': {
+        'device_os': None,
+        'device_type': None,
+      },
+    },
+  },
   'shamu': {
     # Nexus 6
     'swarming': {
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index b56ffb7b..1237fcd9 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -341,6 +341,8 @@
       'KitKat Tablet Tester',
       'Lollipop Tablet Tester',
       'Marshmallow Tablet Tester',
+      # chromium.android.fyi
+      'android-pie-x86-fyi-rel',
       # chromium.clang
       'ToTAndroid',
       'ToTAndroidCFI',
@@ -1412,7 +1414,7 @@
       'Mac Retina Debug (AMD)',
       'Win10 Debug (NVIDIA)',
       # chromium.gpu.fyi
-      'Win10 FYI Debug (NVIDIA)',
+      'Win10 FYI x64 Debug (NVIDIA)',
       'Win7 FYI Debug (AMD)',
       # Disabled due to dbus crashes crbug.com/927465
       'Linux FYI Experimental Release (Intel HD 630)',
@@ -1612,9 +1614,9 @@
     'remove_from': [
       # chromium.gpu.fyi
       # Windows Intel doesn't have the GL extensions to support this test.
-      'ANGLE GPU Win10 Release (Intel HD 630)',
-      'Optional Win10 Release (Intel HD 630)',
-      'Win10 FYI Release (Intel HD 630)',
+      'ANGLE GPU Win10 x64 Release (Intel HD 630)',
+      'Optional Win10 x64 Release (Intel HD 630)',
+      'Win10 FYI x64 Release (Intel HD 630)',
       'Win10 FYI x64 Exp Release (Intel HD 630)',
     ],
   },
@@ -1626,8 +1628,22 @@
       'Fuchsia x64',  # https://crbug.com/961455
     ],
   },
+  'vr_android_unittests': {
+    'remove_from': [
+      # chromium.android.fyi
+      'android-pie-x86-fyi-rel',
+    ],
+  },
+  'vr_common_unittests': {
+    'remove_from': [
+      # chromium.android.fyi
+      'android-pie-x86-fyi-rel',
+    ],
+  },
   'vr_pixeltests': {
     'remove_from': [
+      # chromium.android.fyi
+      'android-pie-x86-fyi-rel',
       # chromium.fyi
       'VR Linux',
     ],
@@ -1659,7 +1675,7 @@
   'webgl2_conformance_gl_passthrough_tests': {
     'remove_from': [
       # Not enough capacity. https://crbug.com/946694
-      'ANGLE GPU Win10 Release (Intel HD 630)',
+      'ANGLE GPU Win10 x64 Release (Intel HD 630)',
     ],
   },
   'webgl2_conformance_tests': {
@@ -1755,7 +1771,7 @@
       'linux-blink-heap-concurrent-marking-tsan-rel': {
         'args': [
           '--release',
-          '--additional-driver-flag=--enable-blink-features=HeapConcurrentMarking',
+          '--additional-driver-flag=--enable-features=BlinkHeapConcurrentMarking',
         ],
       },
       'linux-blink-heap-unified-gc': {
@@ -1817,11 +1833,6 @@
           '--additional-driver-flag=--disable-blink-features=LayoutNG',
         ],
       },
-      'WebKit Linux root_layer_scrolls Dummy Builder': {
-        'args': [
-          '--additional-driver-flag=--root-layer-scrolls',
-        ],
-      },
       # chromium.linux
       'Fuchsia x64': {
         'args': [
@@ -1916,11 +1927,6 @@
           '--enable-sanitizer',
         ],
         'swarming': {
-          'dimension_sets': [
-            {
-              'os': 'Ubuntu-16.04',
-            },
-          ],
           'shards': 20,
         },
       },
@@ -1933,11 +1939,6 @@
           '--enable-leak-detection',
         ],
         'swarming': {
-          'dimension_sets': [
-            {
-              'os': 'Ubuntu-16.04',
-            },
-          ],
           'shards': 10,
         },
       },
@@ -1950,26 +1951,12 @@
           '--enable-sanitizer',
         ],
         'swarming': {
-          'dimension_sets': [
-            {
-              'os': 'Ubuntu-16.04',
-            },
-          ],
           'expiration': 36000,
           'hard_timeout': 10800,
           'io_timeout': 3600,
           'shards': 20,
         },
       },
-      'WebKit Win10': {
-        'swarming': {
-          'dimension_sets': [
-            {
-              'os': 'Windows-10-15063',
-            },
-          ],
-        },
-      },
       # chromium.win
       'Win7 Tests (dbg)(1)': {
         'args': [
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 7ae1e25..eb9119b9 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -5324,6 +5324,7 @@
       'gpu_telemetry_tests',
       'gpu_webgl2_conformance_telemetry_tests',
       'gpu_webgl_conformance_telemetry_tests',
+      'gpu_webgl_conformance_gl_passthrough_telemetry_tests',
     ],
 
     'gpu_fyi_optional_linux_telemetry_tests': [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index b0a9473..cc1a9e9 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -623,6 +623,17 @@
           'isolated_scripts': 'memory_infra_isolated_scripts',
         },
       },
+      'android-pie-x86-fyi-rel': {
+        'mixins': [
+          'pie-x86-emulator',
+          'linux-xenial',
+          'x86-64',
+        ],
+        'os_type': 'android',
+        'test_suites': {
+          'gtest_tests': 'chromium_android_gtests',
+        }
+      },
     },
   },
   {
@@ -1474,19 +1485,6 @@
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
         },
       },
-      'WebKit Linux root_layer_scrolls Dummy Builder': {
-        'swarming': {
-          'dimension_sets': [
-            {
-              'os': 'Ubuntu-14.04',
-            },
-          ],
-          'hard_timeout': 900,
-        },
-        'test_suites': {
-          'isolated_scripts': 'chromium_webkit_isolated_scripts',
-        },
-      },
       'Win 10 Fast Ring': {
         'test_suites': {
           'gtest_tests': 'chromium_win_gtests',
@@ -1730,7 +1728,7 @@
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
         },
         'gtest_args': [
-          '--enable-blink-features=HeapConcurrentMarking',
+          '--enable-features=BlinkHeapConcurrentMarking',
         ]
       },
       'linux-blink-heap-unified-gc': {
@@ -2309,9 +2307,9 @@
           'gtest_tests': 'gpu_angle_gtests',
         },
       },
-      'ANGLE GPU Win10 Release (Intel HD 630)': {
+      'ANGLE GPU Win10 x64 Release (Intel HD 630)': {
         'os_type': 'win',
-        'browser_config': 'release',
+        'browser_config': 'release_x64',
         'mixins': [
           'win10_intel_hd_630_stable',
         ],
@@ -2321,9 +2319,9 @@
           'gpu_telemetry_tests': 'gpu_angle_win_intel_telemetry_tests',
         },
       },
-      'ANGLE GPU Win10 Release (NVIDIA)': {
+      'ANGLE GPU Win10 x64 Release (NVIDIA)': {
         'os_type': 'win',
-        'browser_config': 'release',
+        'browser_config': 'release_x64',
         'mixins': [
           'win10_nvidia_quadro_p400_stable',
         ],
@@ -2519,78 +2517,6 @@
           'gtest_tests': 'gpu_angle_deqp_android_gtests',
         },
       },
-      # BEGIN Fake builder used as mirror targets for Dawn's GPU tryservers
-      'Dawn GPU Linux Release (Intel HD 630)': {
-        'os_type': 'linux',
-        'browser_config': 'release',
-        'mixins': [
-          'linux_intel_hd_630',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_dawn_gtests',
-        },
-      },
-      'Dawn GPU Linux Release (NVIDIA)': {
-        'os_type': 'linux',
-        'browser_config': 'release',
-        'mixins': [
-          'linux_nvidia_quadro_p400',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_dawn_gtests',
-        },
-      },
-      'Dawn GPU Mac Release (Intel)': {
-        'os_type': 'mac',
-        'browser_config': 'release',
-        'mixins': [
-          'mac_mini_intel_gpu',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_dawn_gtests',
-        },
-      },
-      'Dawn GPU Mac Retina Release (AMD)': {
-        'os_type': 'mac',
-        'browser_config': 'release',
-        'mixins': [
-          'mac_retina_amd_gpu',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_dawn_gtests',
-        },
-      },
-      'Dawn GPU Mac Retina Release (NVIDIA)': {
-        'os_type': 'mac',
-        'browser_config': 'release',
-        'mixins': [
-          'mac_retina_nvidia_gpu',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_dawn_gtests',
-        },
-      },
-      'Dawn GPU Win10 Release (Intel HD 630)': {
-        'os_type': 'win',
-        'browser_config': 'release',
-        'mixins': [
-          'win10_intel_hd_630_stable',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_dawn_gtests',
-        },
-      },
-      'Dawn GPU Win10 Release (NVIDIA)': {
-        'os_type': 'win',
-        'browser_config': 'release',
-        'mixins': [
-          'win10_nvidia_quadro_p400_stable',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_dawn_gtests',
-        },
-      },
-      # END Fake builder used as mirror targets for Dawn's GPU tryservers
       'GPU FYI Fuchsia Builder' : {
         'additional_compile_targets': [
           'angle_end2end_tests',
@@ -3015,9 +2941,9 @@
           'gpu_telemetry_tests': 'gpu_fyi_optional_telemetry_tests',
         },
       },
-      'Optional Win10 Release (Intel HD 630)': {
+      'Optional Win10 x64 Release (Intel HD 630)': {
         'os_type': 'win',
-        'browser_config': 'release',
+        'browser_config': 'release_x64',
         'mixins': [
           'swarming_containment_auto',
           'win10_intel_hd_630_stable',
@@ -3028,9 +2954,9 @@
           'gpu_telemetry_tests': 'gpu_optional_win_intel_telemetry_tests',
         },
       },
-      'Optional Win10 Release (NVIDIA)': {
+      'Optional Win10 x64 Release (NVIDIA)': {
         'os_type': 'win',
-        'browser_config': 'release',
+        'browser_config': 'release_x64',
         'mixins': [
           'win10_nvidia_quadro_p400_stable',
         ],
@@ -3043,9 +2969,9 @@
         'use_multi_dimension_trigger_script': True,
       },
       # END Fake builder used as mirror targets for Optional GPU tryservers
-      'Win10 FYI Debug (NVIDIA)': {
+      'Win10 FYI x64 Debug (NVIDIA)': {
         'os_type': 'win',
-        'browser_config': 'debug',
+        'browser_config': 'debug_x64',
         'mixins': [
           'win10_nvidia_quadro_p400_stable',
         ],
@@ -3054,61 +2980,6 @@
           'gpu_telemetry_tests': 'gpu_fyi_win_debug_telemetry_tests',
         },
       },
-      'Win10 FYI Release (Intel HD 630)': {
-        'os_type': 'win',
-        'browser_config': 'release',
-        'mixins': [
-          'win10_intel_hd_630_stable',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_fyi_win_gtests',
-          'isolated_scripts': 'gpu_angle_and_desktop_representative_perf_fyi_isolated_scripts',
-          'gpu_telemetry_tests': 'gpu_fyi_win_intel_release_telemetry_tests',
-        },
-      },
-      'Win10 FYI Release (NVIDIA)': {
-        'os_type': 'win',
-        'browser_config': 'release',
-        'mixins': [
-          'win10_nvidia_quadro_p400_stable',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_fyi_win_gtests',
-          'isolated_scripts': 'gpu_angle_fyi_win_optional_and_representative_perf_isolated_scripts',
-          'gpu_telemetry_tests': 'gpu_fyi_win_release_telemetry_tests',
-        },
-        # We keep this value enabled to provide minimal regression testing.
-        'use_multi_dimension_trigger_script': True,
-      },
-      'Win10 FYI Release XR Perf (NVIDIA)': {
-        'os_type': 'win',
-        'browser_config': 'release',
-        'mixins': [
-          'win10_nvidia_quadro_p400_stable',
-        ],
-        'test_suites': {
-          'isolated_scripts': 'win_specific_xr_perf_tests',
-        },
-      },
-      'Win10 FYI dEQP Release (Intel HD 630)': {
-        'os_type': 'win',
-        'mixins': [
-          'win10_intel_hd_630_stable',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_angle_deqp_gles2_d3d11_gtests',
-        },
-      },
-      'Win10 FYI dEQP Release (NVIDIA)': {
-        'os_type': 'win',
-        'mixins': [
-          'win10_nvidia_quadro_p400_stable',
-        ],
-        'test_suites': {
-          'gtest_tests': 'gpu_angle_deqp_win_nvidia_gtests',
-        },
-        'use_multi_dimension_trigger_script': True,
-      },
       # TODO(kbr): "Experimental" caused too-long path names pre-LUCI.
       # crbug.com/812000
       'Win10 FYI x64 Exp Release (Intel HD 630)': {
@@ -3151,6 +3022,18 @@
           'gpu_telemetry_tests': 'gpu_fyi_win_amd_telemetry_tests',
         },
       },
+      'Win10 FYI x64 Release (Intel HD 630)': {
+        'os_type': 'win',
+        'browser_config': 'release_x64',
+        'mixins': [
+          'win10_intel_hd_630_stable',
+        ],
+        'test_suites': {
+          'gtest_tests': 'gpu_fyi_win_gtests',
+          'isolated_scripts': 'gpu_angle_and_desktop_representative_perf_fyi_isolated_scripts',
+          'gpu_telemetry_tests': 'gpu_fyi_win_intel_release_telemetry_tests',
+        },
+      },
       'Win10 FYI x64 Release (NVIDIA GeForce GTX 1660)': {
         # This bot currently only has one piece of hardware behind it,
         # and is being qualified for potential scale-out.
@@ -3165,10 +3048,53 @@
           'gpu_telemetry_tests': 'gpu_fyi_win_release_telemetry_tests',
         },
       },
+      'Win10 FYI x64 Release (NVIDIA)': {
+        'os_type': 'win',
+        'browser_config': 'release_x64',
+        'mixins': [
+          'win10_nvidia_quadro_p400_stable',
+        ],
+        'test_suites': {
+          'gtest_tests': 'gpu_fyi_win_gtests',
+          'isolated_scripts': 'gpu_angle_fyi_win_optional_and_representative_perf_isolated_scripts',
+          'gpu_telemetry_tests': 'gpu_fyi_win_release_telemetry_tests',
+        },
+        # We keep this value enabled to provide minimal regression testing.
+        'use_multi_dimension_trigger_script': True,
+      },
+      'Win10 FYI x64 Release XR Perf (NVIDIA)': {
+        'os_type': 'win',
+        'browser_config': 'release_x64',
+        'mixins': [
+          'win10_nvidia_quadro_p400_stable',
+        ],
+        'test_suites': {
+          'isolated_scripts': 'win_specific_xr_perf_tests',
+        },
+      },
+      'Win10 FYI x64 dEQP Release (Intel HD 630)': {
+        'os_type': 'win',
+        'mixins': [
+          'win10_intel_hd_630_stable',
+        ],
+        'test_suites': {
+          'gtest_tests': 'gpu_angle_deqp_gles2_d3d11_gtests',
+        },
+      },
+      'Win10 FYI x64 dEQP Release (NVIDIA)': {
+        'os_type': 'win',
+        'mixins': [
+          'win10_nvidia_quadro_p400_stable',
+        ],
+        'test_suites': {
+          'gtest_tests': 'gpu_angle_deqp_win_nvidia_gtests',
+        },
+        'use_multi_dimension_trigger_script': True,
+      },
       # This tryserver doesn't actually exist; it's a separate
       # configuration from the Win AMD bot on this waterfall because we
       # don't have enough tryserver capacity to run all the tests from
-      # that bot on win-angle-rel.
+      # that bot on win-angle-rel-32.
       'Win7 ANGLE Tryserver (AMD)': {
         'os_type': 'win',
         'browser_config': 'release',
@@ -3835,61 +3761,6 @@
     },
   },
   {
-    'name': 'chromium.webkit',
-    'machines': {
-      # TODO(jchinlee): The below three builders are in chromium.memory on LUCI,
-      # see crbug.com/790309, crbug.com/790294, crbug.com/790286.
-      'WebKit Linux ASAN': {
-        'mixins': [
-          'linux-trusty',
-        ],
-        'test_suites': {
-          'isolated_scripts': 'chromium_webkit_isolated_scripts',
-        },
-      },
-      'WebKit Linux Leak': {
-        'mixins': [
-          'linux-trusty',
-        ],
-        'test_suites': {
-          'isolated_scripts': 'chromium_webkit_isolated_scripts',
-        },
-      },
-      'WebKit Linux MSAN': {
-        'mixins': [
-          'linux-trusty',
-        ],
-        'test_suites': {
-          'isolated_scripts': 'chromium_webkit_isolated_scripts',
-        },
-      },
-      # TODO(vadimsh): This builder is in chromium.mac on LUCI, see
-      # crbug.com/864817.
-      'WebKit Mac10.13 (retina)': {
-        'test_suites': {
-          'isolated_scripts': 'chromium_webkit_isolated_scripts',
-        },
-        'swarming': {
-          'dimension_sets': [
-            {
-              'gpu': '1002:6821',
-              'hidpi': '1',
-              'os': 'Mac-10.13.6',
-              'pool': 'Chrome-GPU',
-            }
-          ],
-        },
-      },
-      # TODO(jchinlee): This builder is in chromium.win on LUCI, see
-      # crbug.com/790343.
-      'WebKit Win10': {
-        'test_suites': {
-          'isolated_scripts': 'chromium_webkit_isolated_scripts',
-        },
-      },
-    },
-  },
-  {
     'name': 'chromium.webrtc',
     'machines': {
       'WebRTC Chromium Android Builder': {},
@@ -4090,6 +3961,9 @@
     'name': 'chromium.win',
     'machines': {
       'WebKit Win10': {
+        'mixins': [
+            'win10',
+        ],
         'test_suites': {
           'isolated_scripts': 'chromium_webkit_isolated_scripts',
         },
diff --git a/testing/scripts/test_buildbucket_api_gpu_use_cases.py b/testing/scripts/test_buildbucket_api_gpu_use_cases.py
index f02c3664..5a9ea5a 100755
--- a/testing/scripts/test_buildbucket_api_gpu_use_cases.py
+++ b/testing/scripts/test_buildbucket_api_gpu_use_cases.py
@@ -32,7 +32,7 @@
     # Verify we can get power measurement test data from latest successful
     # build, including the swarming bot that runs the test, and actual test
     # results.
-    bot = 'Win10 FYI Release (Intel HD 630)'
+    bot = 'Win10 FYI x64 Release (Intel HD 630)'
     step = 'power_measurement_test'
     build_id = gather_power_measurement_results.GetLatestGreenBuild(bot)
     build_json = gather_power_measurement_results.GetJsonForBuildSteps(
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 5c4d3d3..2940ce06 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2496,7 +2496,7 @@
             ]
         }
     ],
-    "HomePageButtonForceEnabled": [
+    "HomeButtonAndroid": [
         {
             "platforms": [
                 "android"
@@ -3557,9 +3557,6 @@
             "experiments": [
                 {
                     "name": "DesktopExperiments",
-                    "params": {
-                        "UIVerticalMargin": "10"
-                    },
                     "enable_features": [
                         "OmniboxDisplayTitleForCurrentUrl",
                         "OmniboxDocumentProvider",
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index a53cb1f..a8fe876 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -230,6 +230,10 @@
 const base::Feature kForbidSyncXHRInPageDismissal{
     "ForbidSyncXHRInPageDismissal", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Forces the redirect mode for prefetches to kManual. See crbug.com/988956.
+const base::Feature kPrefetchRedirectError{"PrefetchRedirectError",
+                                           base::FEATURE_DISABLED_BY_DEFAULT};
+
 const char kMixedContentAutoupgradeModeParamName[] = "mode";
 const char kMixedContentAutoupgradeModeBlockable[] = "blockable";
 const char kMixedContentAutoupgradeModeOptionallyBlockable[] =
diff --git a/third_party/blink/common/mediastream/media_stream_mojom_traits.cc b/third_party/blink/common/mediastream/media_stream_mojom_traits.cc
index 9089e73..dad9a54 100644
--- a/third_party/blink/common/mediastream/media_stream_mojom_traits.cc
+++ b/third_party/blink/common/mediastream/media_stream_mojom_traits.cc
@@ -7,7 +7,7 @@
 #include "base/logging.h"
 #include "media/base/ipc/media_param_traits.h"
 #include "media/capture/mojom/video_capture_types_mojom_traits.h"
-#include "media/mojo/interfaces/display_media_information.mojom.h"
+#include "media/mojo/mojom/display_media_information.mojom.h"
 #include "mojo/public/cpp/base/unguessable_token_mojom_traits.h"
 
 namespace mojo {
diff --git a/third_party/blink/public/common/BUILD.gn b/third_party/blink/public/common/BUILD.gn
index 0fd8de22..d81ee950 100644
--- a/third_party/blink/public/common/BUILD.gn
+++ b/third_party/blink/public/common/BUILD.gn
@@ -137,7 +137,7 @@
       "//media/capture:capture_base",
       "//media/capture:capture_lib",
     ]
-    public_deps += [ "//media/mojo/interfaces:interfaces" ]
+    public_deps += [ "//media/mojo/mojom" ]
   }
 
   if (is_android || is_win) {
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index ef7bf0f..e52bcbe 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -65,6 +65,7 @@
 BLINK_COMMON_EXPORT extern const base::Feature kNativeFileSystemAPI;
 BLINK_COMMON_EXPORT extern const base::Feature kFileHandlingAPI;
 BLINK_COMMON_EXPORT extern const base::Feature kForbidSyncXHRInPageDismissal;
+BLINK_COMMON_EXPORT extern const base::Feature kPrefetchRedirectError;
 
 BLINK_COMMON_EXPORT extern const char kMixedContentAutoupgradeModeParamName[];
 BLINK_COMMON_EXPORT extern const char kMixedContentAutoupgradeModeBlockable[];
diff --git a/third_party/blink/public/common/mediastream/media_stream_request.h b/third_party/blink/public/common/mediastream/media_stream_request.h
index 7816dbf..ee5e4073 100644
--- a/third_party/blink/public/common/mediastream/media_stream_request.h
+++ b/third_party/blink/public/common/mediastream/media_stream_request.h
@@ -16,7 +16,7 @@
 #include "media/base/audio_parameters.h"
 #include "media/base/video_facing.h"
 #include "media/capture/video/video_capture_device_descriptor.h"
-#include "media/mojo/interfaces/display_media_information.mojom.h"
+#include "media/mojo/mojom/display_media_information.mojom.h"
 #include "third_party/blink/public/common/common_export.h"
 #include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h"
 
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn
index a412a9e..7d3a1cc 100644
--- a/third_party/blink/public/mojom/BUILD.gn
+++ b/third_party/blink/public/mojom/BUILD.gn
@@ -179,7 +179,7 @@
   if (!is_ios) {
     public_deps += [
       "//media/capture/mojom:video_capture",
-      "//media/mojo/interfaces",
+      "//media/mojo/mojom",
     ]
   }
 
diff --git a/third_party/blink/public/mojom/app_banner/app_banner.mojom b/third_party/blink/public/mojom/app_banner/app_banner.mojom
index 9ae94fe..7c2d0e7 100644
--- a/third_party/blink/public/mojom/app_banner/app_banner.mojom
+++ b/third_party/blink/public/mojom/app_banner/app_banner.mojom
@@ -11,9 +11,9 @@
 
 interface AppBannerController {
   // The browser asks the renderer if the app banner should be shown.
-  BannerPromptRequest(AppBannerService service, AppBannerEvent& event,
-                      array<string> platform, bool require_gesture) =>
-      (AppBannerPromptReply reply);
+  BannerPromptRequest(AppBannerService service,
+                      AppBannerEvent& event,
+                      array<string> platform) => (AppBannerPromptReply reply);
 };
 
 interface AppBannerEvent {
diff --git a/third_party/blink/public/mojom/content_index/content_index.mojom b/third_party/blink/public/mojom/content_index/content_index.mojom
index ab23bb04..4407c74 100644
--- a/third_party/blink/public/mojom/content_index/content_index.mojom
+++ b/third_party/blink/public/mojom/content_index/content_index.mojom
@@ -50,11 +50,11 @@
 // TODO(crbug.com/976962): Register interfaces that are exposed only on
 // Service Workers.
 interface ContentIndexService {
-  const int32 kMaxIconDimension = 256;
+  const int32 kMaxIconResolution = 65536;  // 256x256
 
   Add(int64 service_worker_registration_id,
       ContentDescription description,
-      skia.mojom.Bitmap icon,
+      array<skia.mojom.Bitmap> icon,
       url.mojom.Url launchUrl)
       => (ContentIndexError error);
   Delete(int64 service_worker_registration_id, string id)
diff --git a/third_party/blink/public/mojom/indexeddb/indexeddb.mojom b/third_party/blink/public/mojom/indexeddb/indexeddb.mojom
index 93b91a8..60f3876 100644
--- a/third_party/blink/public/mojom/indexeddb/indexeddb.mojom
+++ b/third_party/blink/public/mojom/indexeddb/indexeddb.mojom
@@ -36,13 +36,26 @@
 // These values are written to logs. New enum values can be added, but
 // existing enums must never be renumbered or deleted and reused.
 enum IDBKeyType {
+  // Invalid is used in blink bindings code. When converting a V8 value that
+  // is not a valid key, key of this type is returned. Outside of testing
+  // it should only be used in blink code.
   Invalid,
+
+  // The following indicate the type of a valid key, per the standard:
+  // https://w3c.github.io/IndexedDB/#key-construct
   Array,
   Binary,
   String,
   Date,
   Number,
+
+  // Null is used to represent the lack of a key, e.g. when a key range
+  // has no upper/lower bound.
   Null,
+
+  // Min is used to encode the lower bound of a construct in leveldb, e.g.
+  // all entries in a store are from [{id, min}, {id+1, min}). It should
+  // only appear in browser code.
   Min,
 };
 
diff --git a/third_party/blink/public/mojom/mediastream/media_devices.mojom b/third_party/blink/public/mojom/mediastream/media_devices.mojom
index 05030e8..446a4334 100644
--- a/third_party/blink/public/mojom/mediastream/media_devices.mojom
+++ b/third_party/blink/public/mojom/mediastream/media_devices.mojom
@@ -5,7 +5,7 @@
 module blink.mojom;
 
 import "media/capture/mojom/video_capture_types.mojom";
-import "media/mojo/interfaces/audio_parameters.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
 import "mojo/public/mojom/base/time.mojom";
 
 enum MediaDeviceType {
diff --git a/third_party/blink/public/mojom/mediastream/media_stream.mojom b/third_party/blink/public/mojom/mediastream/media_stream.mojom
index 6d9e5ad..921aa0e 100644
--- a/third_party/blink/public/mojom/mediastream/media_stream.mojom
+++ b/third_party/blink/public/mojom/mediastream/media_stream.mojom
@@ -5,8 +5,8 @@
 module blink.mojom;
 
 import "media/capture/mojom/video_capture_types.mojom";
-import "media/mojo/interfaces/audio_parameters.mojom";
-import "media/mojo/interfaces/display_media_information.mojom";
+import "media/mojo/mojom/audio_parameters.mojom";
+import "media/mojo/mojom/display_media_information.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
 
 // Types of media streams. When updating this list, make sure to update the
diff --git a/third_party/blink/public/platform/DEPS b/third_party/blink/public/platform/DEPS
index bd735aa8..0bc6186 100644
--- a/third_party/blink/public/platform/DEPS
+++ b/third_party/blink/public/platform/DEPS
@@ -37,7 +37,7 @@
 
     # Enforce to use mojom-shared.h in blink/public so that it can compile
     # inside and outside Blink.
-    "+media/mojo/interfaces/display_media_information.mojom-shared.h",
+    "+media/mojo/mojom/display_media_information.mojom-shared.h",
     "+services/network/public/mojom/cors.mojom-shared.h",
     "+services/network/public/mojom/fetch_api.mojom-shared.h",
     "+services/network/public/mojom/restricted_cookie_manager.mojom-shared.h",
diff --git a/third_party/blink/public/platform/web_media_stream_track.h b/third_party/blink/public/platform/web_media_stream_track.h
index 05a1bacb..1e96586b 100644
--- a/third_party/blink/public/platform/web_media_stream_track.h
+++ b/third_party/blink/public/platform/web_media_stream_track.h
@@ -28,7 +28,7 @@
 #include <memory>
 
 #include "base/optional.h"
-#include "media/mojo/interfaces/display_media_information.mojom-shared.h"
+#include "media/mojo/mojom/display_media_information.mojom-shared.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_private_ptr.h"
 #include "third_party/blink/public/platform/web_string.h"
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
index 704b1dc..f999e6f 100644
--- a/third_party/blink/public/platform/web_runtime_features.h
+++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -244,6 +244,7 @@
   BLINK_PLATFORM_EXPORT static void EnableConsolidatedMovementXY(bool);
   BLINK_PLATFORM_EXPORT static void EnableStreamsNative(bool);
   BLINK_PLATFORM_EXPORT static void EnableMouseSubframeNoImplicitCapture(bool);
+  BLINK_PLATFORM_EXPORT static void EnableBackForwardCache(bool);
 
  private:
   WebRuntimeFeatures();
diff --git a/third_party/blink/public/web/modules/media/DEPS b/third_party/blink/public/web/modules/media/DEPS
index 4504d508..5604de1 100644
--- a/third_party/blink/public/web/modules/media/DEPS
+++ b/third_party/blink/public/web/modules/media/DEPS
@@ -6,5 +6,5 @@
 
     # Enforce to use mojom-shared.h in blink/public so that it can compile
     # inside and outside Blink.
-    "+media/mojo/interfaces/media_metrics_provider.mojom-shared.h",
+    "+media/mojo/mojom/media_metrics_provider.mojom-shared.h",
 ]
diff --git a/third_party/blink/public/web/modules/media/webmediaplayer_util.h b/third_party/blink/public/web/modules/media/webmediaplayer_util.h
index 11a3e35f..7fcee89c 100644
--- a/third_party/blink/public/web/modules/media/webmediaplayer_util.h
+++ b/third_party/blink/public/web/modules/media/webmediaplayer_util.h
@@ -11,7 +11,7 @@
 #include "media/base/eme_constants.h"
 #include "media/base/pipeline_status.h"
 #include "media/base/ranges.h"
-#include "media/mojo/interfaces/media_metrics_provider.mojom-shared.h"
+#include "media/mojo/mojom/media_metrics_provider.mojom-shared.h"
 #include "third_party/blink/public/platform/web_common.h"
 #include "third_party/blink/public/platform/web_encrypted_media_types.h"
 #include "third_party/blink/public/platform/web_media_player.h"
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h
index cd01406..528efcd 100644
--- a/third_party/blink/public/web/web_local_frame_client.h
+++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -882,6 +882,10 @@
   virtual WebLocalFrameClient::AppCacheType GetAppCacheType() {
     return WebLocalFrameClient::AppCacheType::kAppCacheForNone;
   }
+
+  // Evicts the page from the back forward cache due to e.g., JavaScript
+  // execution.
+  virtual void EvictFromBackForwardCache() {}
 };
 
 }  // namespace blink
diff --git a/third_party/blink/public/web/web_user_media_client.h b/third_party/blink/public/web/web_user_media_client.h
index ae4478b6f..0a52beb 100644
--- a/third_party/blink/public/web/web_user_media_client.h
+++ b/third_party/blink/public/web/web_user_media_client.h
@@ -46,6 +46,7 @@
   virtual void ApplyConstraints(const WebApplyConstraintsRequest&) = 0;
   virtual void StopTrack(const WebMediaStreamTrack&) = 0;
   virtual bool IsCapturing() = 0;
+  virtual void ContextDestroyed() = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/templates/methods.cc.tmpl b/third_party/blink/renderer/bindings/templates/methods.cc.tmpl
index a71634e1..15cd677 100644
--- a/third_party/blink/renderer/bindings/templates/methods.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/methods.cc.tmpl
@@ -506,16 +506,16 @@
 
 {##############################################################################}
 {% macro origin_safe_method_getter(method, world_suffix) %}
-{# TODO(dcheng): Currently, bindings must create a function object for each
-   realm as a hack to support the incumbent realm. Clean this up when Blink
-   properly supports the incumbent realm. #}
 static void {{method.camel_case_name}}OriginSafeMethodGetter{{world_suffix}}(const v8::PropertyCallbackInfo<v8::Value>& info) {
   static int dom_template_key; // This address is used for a key to look up the dom template.
-  V8PerIsolateData* data = V8PerIsolateData::From(info.GetIsolate());
-  const DOMWrapperWorld& world = DOMWrapperWorld::World(info.GetIsolate()->GetCurrentContext());
+  v8::Isolate* isolate = info.GetIsolate();
+  V8PerIsolateData* data = V8PerIsolateData::From(isolate);
+  const DOMWrapperWorld& world =
+      DOMWrapperWorld::World(isolate->GetCurrentContext());
   v8::Local<v8::FunctionTemplate> interface_template =
       data->FindInterfaceTemplate(world, {{v8_class}}::GetWrapperTypeInfo());
-  v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interface_template);
+  v8::Local<v8::Signature> signature =
+      v8::Signature::New(isolate, interface_template);
 
   v8::Local<v8::FunctionTemplate> method_template =
       data->FindOrCreateOperationTemplate(
@@ -525,26 +525,32 @@
           v8::Local<v8::Value>(),
           signature,
           {{method.length}});
-  // Return the function by default, unless the user script has overwritten it.
-  V8SetReturnValue(info, method_template->GetFunction(info.GetIsolate()->GetCurrentContext())
-                   .ToLocalChecked());
 
   {{cpp_class}}* impl = {{v8_class}}::ToImpl(info.Holder());
   if (!BindingSecurity::ShouldAllowAccessTo(
-          CurrentDOMWindow(info.GetIsolate()), impl,
+          CurrentDOMWindow(isolate), impl,
           BindingSecurity::ErrorReportOption::kDoNotReport)) {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            isolate->GetCurrentContext()).ToLocalChecked());
     return;
   }
 
-  {% raw %}
-  // {{method.name}} must be same with |methodName| (=name) in
+  // When the web author overwrote the property, return the overwriting value.
+  //
+  // "{{method.name}}" must be the same as |name_in_utf8| (=name) in
   // {{cpp_class}}OriginSafeMethodSetter defined in interface.cc.tmpl.
-  {% endraw %}
   V8PrivateProperty::Symbol property_symbol =
-      V8PrivateProperty::GetSymbol(info.GetIsolate(), "{{method.name}}");
+      V8PrivateProperty::GetSymbol(isolate, "{{method.name}}");
   v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder());
   if (property_symbol.HasValue(holder)) {
     V8SetReturnValue(info, property_symbol.GetOrUndefined(holder));
+  } else {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            holder->CreationContext()).ToLocalChecked());
   }
 }
 {% endmacro %}
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
index c4c60ad..e04dd86 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
@@ -194,11 +194,14 @@
 
 static void DoNotCheckSecurityVoidMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) {
   static int dom_template_key; // This address is used for a key to look up the dom template.
-  V8PerIsolateData* data = V8PerIsolateData::From(info.GetIsolate());
-  const DOMWrapperWorld& world = DOMWrapperWorld::World(info.GetIsolate()->GetCurrentContext());
+  v8::Isolate* isolate = info.GetIsolate();
+  V8PerIsolateData* data = V8PerIsolateData::From(isolate);
+  const DOMWrapperWorld& world =
+      DOMWrapperWorld::World(isolate->GetCurrentContext());
   v8::Local<v8::FunctionTemplate> interface_template =
       data->FindInterfaceTemplate(world, V8TestInterfaceCheckSecurity::GetWrapperTypeInfo());
-  v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interface_template);
+  v8::Local<v8::Signature> signature =
+      v8::Signature::New(isolate, interface_template);
 
   v8::Local<v8::FunctionTemplate> method_template =
       data->FindOrCreateOperationTemplate(
@@ -208,24 +211,32 @@
           v8::Local<v8::Value>(),
           signature,
           0);
-  // Return the function by default, unless the user script has overwritten it.
-  V8SetReturnValue(info, method_template->GetFunction(info.GetIsolate()->GetCurrentContext())
-                   .ToLocalChecked());
 
   TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder());
   if (!BindingSecurity::ShouldAllowAccessTo(
-          CurrentDOMWindow(info.GetIsolate()), impl,
+          CurrentDOMWindow(isolate), impl,
           BindingSecurity::ErrorReportOption::kDoNotReport)) {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            isolate->GetCurrentContext()).ToLocalChecked());
     return;
   }
 
-  // {{method.name}} must be same with |methodName| (=name) in
-  // {{cpp_class}}OriginSafeMethodSetter defined in interface.cc.tmpl.
+  // When the web author overwrote the property, return the overwriting value.
+  //
+  // "doNotCheckSecurityVoidMethod" must be the same as |name_in_utf8| (=name) in
+  // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl.
   V8PrivateProperty::Symbol property_symbol =
-      V8PrivateProperty::GetSymbol(info.GetIsolate(), "doNotCheckSecurityVoidMethod");
+      V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityVoidMethod");
   v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder());
   if (property_symbol.HasValue(holder)) {
     V8SetReturnValue(info, property_symbol.GetOrUndefined(holder));
+  } else {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            holder->CreationContext()).ToLocalChecked());
   }
 }
 
@@ -237,11 +248,14 @@
 
 static void DoNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) {
   static int dom_template_key; // This address is used for a key to look up the dom template.
-  V8PerIsolateData* data = V8PerIsolateData::From(info.GetIsolate());
-  const DOMWrapperWorld& world = DOMWrapperWorld::World(info.GetIsolate()->GetCurrentContext());
+  v8::Isolate* isolate = info.GetIsolate();
+  V8PerIsolateData* data = V8PerIsolateData::From(isolate);
+  const DOMWrapperWorld& world =
+      DOMWrapperWorld::World(isolate->GetCurrentContext());
   v8::Local<v8::FunctionTemplate> interface_template =
       data->FindInterfaceTemplate(world, V8TestInterfaceCheckSecurity::GetWrapperTypeInfo());
-  v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interface_template);
+  v8::Local<v8::Signature> signature =
+      v8::Signature::New(isolate, interface_template);
 
   v8::Local<v8::FunctionTemplate> method_template =
       data->FindOrCreateOperationTemplate(
@@ -251,24 +265,32 @@
           v8::Local<v8::Value>(),
           signature,
           0);
-  // Return the function by default, unless the user script has overwritten it.
-  V8SetReturnValue(info, method_template->GetFunction(info.GetIsolate()->GetCurrentContext())
-                   .ToLocalChecked());
 
   TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder());
   if (!BindingSecurity::ShouldAllowAccessTo(
-          CurrentDOMWindow(info.GetIsolate()), impl,
+          CurrentDOMWindow(isolate), impl,
           BindingSecurity::ErrorReportOption::kDoNotReport)) {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            isolate->GetCurrentContext()).ToLocalChecked());
     return;
   }
 
-  // {{method.name}} must be same with |methodName| (=name) in
-  // {{cpp_class}}OriginSafeMethodSetter defined in interface.cc.tmpl.
+  // When the web author overwrote the property, return the overwriting value.
+  //
+  // "doNotCheckSecurityPerWorldBindingsVoidMethod" must be the same as |name_in_utf8| (=name) in
+  // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl.
   V8PrivateProperty::Symbol property_symbol =
-      V8PrivateProperty::GetSymbol(info.GetIsolate(), "doNotCheckSecurityPerWorldBindingsVoidMethod");
+      V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityPerWorldBindingsVoidMethod");
   v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder());
   if (property_symbol.HasValue(holder)) {
     V8SetReturnValue(info, property_symbol.GetOrUndefined(holder));
+  } else {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            holder->CreationContext()).ToLocalChecked());
   }
 }
 
@@ -280,11 +302,14 @@
 
 static void DoNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterForMainWorld(const v8::PropertyCallbackInfo<v8::Value>& info) {
   static int dom_template_key; // This address is used for a key to look up the dom template.
-  V8PerIsolateData* data = V8PerIsolateData::From(info.GetIsolate());
-  const DOMWrapperWorld& world = DOMWrapperWorld::World(info.GetIsolate()->GetCurrentContext());
+  v8::Isolate* isolate = info.GetIsolate();
+  V8PerIsolateData* data = V8PerIsolateData::From(isolate);
+  const DOMWrapperWorld& world =
+      DOMWrapperWorld::World(isolate->GetCurrentContext());
   v8::Local<v8::FunctionTemplate> interface_template =
       data->FindInterfaceTemplate(world, V8TestInterfaceCheckSecurity::GetWrapperTypeInfo());
-  v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interface_template);
+  v8::Local<v8::Signature> signature =
+      v8::Signature::New(isolate, interface_template);
 
   v8::Local<v8::FunctionTemplate> method_template =
       data->FindOrCreateOperationTemplate(
@@ -294,24 +319,32 @@
           v8::Local<v8::Value>(),
           signature,
           0);
-  // Return the function by default, unless the user script has overwritten it.
-  V8SetReturnValue(info, method_template->GetFunction(info.GetIsolate()->GetCurrentContext())
-                   .ToLocalChecked());
 
   TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder());
   if (!BindingSecurity::ShouldAllowAccessTo(
-          CurrentDOMWindow(info.GetIsolate()), impl,
+          CurrentDOMWindow(isolate), impl,
           BindingSecurity::ErrorReportOption::kDoNotReport)) {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            isolate->GetCurrentContext()).ToLocalChecked());
     return;
   }
 
-  // {{method.name}} must be same with |methodName| (=name) in
-  // {{cpp_class}}OriginSafeMethodSetter defined in interface.cc.tmpl.
+  // When the web author overwrote the property, return the overwriting value.
+  //
+  // "doNotCheckSecurityPerWorldBindingsVoidMethod" must be the same as |name_in_utf8| (=name) in
+  // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl.
   V8PrivateProperty::Symbol property_symbol =
-      V8PrivateProperty::GetSymbol(info.GetIsolate(), "doNotCheckSecurityPerWorldBindingsVoidMethod");
+      V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityPerWorldBindingsVoidMethod");
   v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder());
   if (property_symbol.HasValue(holder)) {
     V8SetReturnValue(info, property_symbol.GetOrUndefined(holder));
+  } else {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            holder->CreationContext()).ToLocalChecked());
   }
 }
 
@@ -323,11 +356,14 @@
 
 static void DoNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) {
   static int dom_template_key; // This address is used for a key to look up the dom template.
-  V8PerIsolateData* data = V8PerIsolateData::From(info.GetIsolate());
-  const DOMWrapperWorld& world = DOMWrapperWorld::World(info.GetIsolate()->GetCurrentContext());
+  v8::Isolate* isolate = info.GetIsolate();
+  V8PerIsolateData* data = V8PerIsolateData::From(isolate);
+  const DOMWrapperWorld& world =
+      DOMWrapperWorld::World(isolate->GetCurrentContext());
   v8::Local<v8::FunctionTemplate> interface_template =
       data->FindInterfaceTemplate(world, V8TestInterfaceCheckSecurity::GetWrapperTypeInfo());
-  v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interface_template);
+  v8::Local<v8::Signature> signature =
+      v8::Signature::New(isolate, interface_template);
 
   v8::Local<v8::FunctionTemplate> method_template =
       data->FindOrCreateOperationTemplate(
@@ -337,24 +373,32 @@
           v8::Local<v8::Value>(),
           signature,
           0);
-  // Return the function by default, unless the user script has overwritten it.
-  V8SetReturnValue(info, method_template->GetFunction(info.GetIsolate()->GetCurrentContext())
-                   .ToLocalChecked());
 
   TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder());
   if (!BindingSecurity::ShouldAllowAccessTo(
-          CurrentDOMWindow(info.GetIsolate()), impl,
+          CurrentDOMWindow(isolate), impl,
           BindingSecurity::ErrorReportOption::kDoNotReport)) {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            isolate->GetCurrentContext()).ToLocalChecked());
     return;
   }
 
-  // {{method.name}} must be same with |methodName| (=name) in
-  // {{cpp_class}}OriginSafeMethodSetter defined in interface.cc.tmpl.
+  // When the web author overwrote the property, return the overwriting value.
+  //
+  // "doNotCheckSecurityUnforgeableVoidMethod" must be the same as |name_in_utf8| (=name) in
+  // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl.
   V8PrivateProperty::Symbol property_symbol =
-      V8PrivateProperty::GetSymbol(info.GetIsolate(), "doNotCheckSecurityUnforgeableVoidMethod");
+      V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityUnforgeableVoidMethod");
   v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder());
   if (property_symbol.HasValue(holder)) {
     V8SetReturnValue(info, property_symbol.GetOrUndefined(holder));
+  } else {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            holder->CreationContext()).ToLocalChecked());
   }
 }
 
@@ -463,11 +507,14 @@
 
 static void DoNotCheckSecurityVoidOverloadMethodOriginSafeMethodGetter(const v8::PropertyCallbackInfo<v8::Value>& info) {
   static int dom_template_key; // This address is used for a key to look up the dom template.
-  V8PerIsolateData* data = V8PerIsolateData::From(info.GetIsolate());
-  const DOMWrapperWorld& world = DOMWrapperWorld::World(info.GetIsolate()->GetCurrentContext());
+  v8::Isolate* isolate = info.GetIsolate();
+  V8PerIsolateData* data = V8PerIsolateData::From(isolate);
+  const DOMWrapperWorld& world =
+      DOMWrapperWorld::World(isolate->GetCurrentContext());
   v8::Local<v8::FunctionTemplate> interface_template =
       data->FindInterfaceTemplate(world, V8TestInterfaceCheckSecurity::GetWrapperTypeInfo());
-  v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interface_template);
+  v8::Local<v8::Signature> signature =
+      v8::Signature::New(isolate, interface_template);
 
   v8::Local<v8::FunctionTemplate> method_template =
       data->FindOrCreateOperationTemplate(
@@ -477,24 +524,32 @@
           v8::Local<v8::Value>(),
           signature,
           test_interface_check_security_v8_internal::DoNotCheckSecurityVoidOverloadMethodMethodLength());
-  // Return the function by default, unless the user script has overwritten it.
-  V8SetReturnValue(info, method_template->GetFunction(info.GetIsolate()->GetCurrentContext())
-                   .ToLocalChecked());
 
   TestInterfaceCheckSecurity* impl = V8TestInterfaceCheckSecurity::ToImpl(info.Holder());
   if (!BindingSecurity::ShouldAllowAccessTo(
-          CurrentDOMWindow(info.GetIsolate()), impl,
+          CurrentDOMWindow(isolate), impl,
           BindingSecurity::ErrorReportOption::kDoNotReport)) {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            isolate->GetCurrentContext()).ToLocalChecked());
     return;
   }
 
-  // {{method.name}} must be same with |methodName| (=name) in
-  // {{cpp_class}}OriginSafeMethodSetter defined in interface.cc.tmpl.
+  // When the web author overwrote the property, return the overwriting value.
+  //
+  // "doNotCheckSecurityVoidOverloadMethod" must be the same as |name_in_utf8| (=name) in
+  // TestInterfaceCheckSecurityOriginSafeMethodSetter defined in interface.cc.tmpl.
   V8PrivateProperty::Symbol property_symbol =
-      V8PrivateProperty::GetSymbol(info.GetIsolate(), "doNotCheckSecurityVoidOverloadMethod");
+      V8PrivateProperty::GetSymbol(isolate, "doNotCheckSecurityVoidOverloadMethod");
   v8::Local<v8::Object> holder = v8::Local<v8::Object>::Cast(info.Holder());
   if (property_symbol.HasValue(holder)) {
     V8SetReturnValue(info, property_symbol.GetOrUndefined(holder));
+  } else {
+    V8SetReturnValue(
+        info,
+        method_template->GetFunction(
+            holder->CreationContext()).ToLocalChecked());
   }
 }
 
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index db9a37d..f1dcac2 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -1504,11 +1504,11 @@
     "paint/video_painter_test.cc",
     "paint/view_painter_test.cc",
     "resize_observer/resize_observer_test.cc",
-    "scheduler/frame_scheduler_test.cc",
-    "scheduler/frame_throttling_test.cc",
-    "scheduler/scheduler_affecting_features_test.cc",
-    "scheduler/throttling_test.cc",
-    "scheduler/virtual_time_test.cc",
+    "scheduler_integration_tests/frame_scheduler_test.cc",
+    "scheduler_integration_tests/frame_throttling_test.cc",
+    "scheduler_integration_tests/scheduler_affecting_features_test.cc",
+    "scheduler_integration_tests/throttling_test.cc",
+    "scheduler_integration_tests/virtual_time_test.cc",
     "script/document_modulator_impl_test.cc",
     "script/dynamic_module_resolver_test.cc",
     "script/layered_api_test.cc",
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index 0a88b3c..275835a8 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -2375,7 +2375,7 @@
       default_value: "1.0",
       type_name: "float",
       computed_style_custom_functions: ["setter"],
-      typedom_types: ["Keyword", "Number"]
+      typedom_types: ["Number"]
     },
     {
       name: "order",
diff --git a/third_party/blink/renderer/core/css/style_change_reason.cc b/third_party/blink/renderer/core/css/style_change_reason.cc
index dfddc1d1..c3eeeb3 100644
--- a/third_party/blink/renderer/core/css/style_change_reason.cc
+++ b/third_party/blink/renderer/core/css/style_change_reason.cc
@@ -14,7 +14,6 @@
 const char kActiveStylesheetsUpdate[] = "ActiveStylesheetsUpdate";
 const char kAnimation[] = "Animation";
 const char kAttribute[] = "Attribute";
-const char kCleanupPlaceholderStyles[] = "CleanupPlaceholderStyles";
 const char kControlValue[] = "ControlValue";
 const char kControl[] = "Control";
 const char kDeclarativeContent[] = "Extension declarativeContent.css";
diff --git a/third_party/blink/renderer/core/css/style_change_reason.h b/third_party/blink/renderer/core/css/style_change_reason.h
index 45006298..dadf17e 100644
--- a/third_party/blink/renderer/core/css/style_change_reason.h
+++ b/third_party/blink/renderer/core/css/style_change_reason.h
@@ -17,7 +17,6 @@
 extern const char kActiveStylesheetsUpdate[];
 extern const char kAnimation[];
 extern const char kAttribute[];
-extern const char kCleanupPlaceholderStyles[];
 extern const char kControlValue[];
 extern const char kControl[];
 extern const char kDeclarativeContent[];
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc
index 53cf2b54..abcaa81 100644
--- a/third_party/blink/renderer/core/css/style_engine.cc
+++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -1377,14 +1377,6 @@
   if (tree_scope.GetDocument().HasPendingForcedStyleRecalc())
     return;
 
-  if (!tree_scope.GetDocument().body()) {
-    tree_scope.GetDocument().SetNeedsStyleRecalc(
-        kSubtreeStyleChange,
-        StyleChangeReasonForTracing::Create(
-            style_change_reason::kCleanupPlaceholderStyles));
-    return;
-  }
-
   if (changed_rule_sets.IsEmpty())
     return;
 
diff --git a/third_party/blink/renderer/core/css/style_traversal_root.cc b/third_party/blink/renderer/core/css/style_traversal_root.cc
index c9957993..98f32dd 100644
--- a/third_party/blink/renderer/core/css/style_traversal_root.cc
+++ b/third_party/blink/renderer/core/css/style_traversal_root.cc
@@ -16,10 +16,17 @@
 
   if (!common_ancestor) {
     // This is either first dirty node in which case we are using it as a
-    // single root, or the document which we set as a common root.
-    root_node_ = dirty_node;
-    if (dirty_node->IsDocumentNode())
+    // single root, or the document/documentElement which we set as a common
+    // root.
+    //
+    // TODO(futhark): Disallow Document as the root. All traversals start at
+    // the RootElement().
+    if (dirty_node->IsDocumentNode() ||
+        (root_node_ &&
+         dirty_node == dirty_node->GetDocument().documentElement())) {
       root_type_ = RootType::kCommonRoot;
+    }
+    root_node_ = dirty_node;
     return;
   }
 
diff --git a/third_party/blink/renderer/core/css/style_traversal_root_test.cc b/third_party/blink/renderer/core/css/style_traversal_root_test.cc
index 15f9c294..fcf4ccc 100644
--- a/third_party/blink/renderer/core/css/style_traversal_root_test.cc
+++ b/third_party/blink/renderer/core/css/style_traversal_root_test.cc
@@ -7,6 +7,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/element.h"
+#include "third_party/blink/renderer/core/dom/flat_tree_traversal.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
 
@@ -16,17 +17,20 @@
   STACK_ALLOCATED();
 
  public:
-  StyleTraversalRootTestImpl() {}
+  StyleTraversalRootTestImpl() = default;
   void MarkDirty(const Node* node) { dirty_nodes_.insert(node); }
   void MarkChildDirty(const Node* node) { child_dirty_nodes_.insert(node); }
   bool IsSingleRoot() const { return root_type_ == RootType::kSingleRoot; }
   bool IsCommonRoot() const { return root_type_ == RootType::kCommonRoot; }
 
  private:
-#if DCHECK_IS_ON()
-  ContainerNode* Parent(const Node& node) const final {
+  virtual ContainerNode* ParentInternal(const Node& node) const {
     return node.parentNode();
   }
+#if DCHECK_IS_ON()
+  ContainerNode* Parent(const Node& node) const override {
+    return ParentInternal(node);
+  }
   bool IsChildDirty(const ContainerNode& node) const final {
     return child_dirty_nodes_.Contains(&node);
   }
@@ -34,9 +38,9 @@
   bool IsDirty(const Node& node) const final {
     return dirty_nodes_.Contains(&node);
   }
-  void ClearChildDirtyForAncestors(ContainerNode& parent) const final {
+  void ClearChildDirtyForAncestors(ContainerNode& parent) const override {
     for (ContainerNode* ancestor = &parent; ancestor;
-         ancestor = ancestor->parentNode()) {
+         ancestor = ParentInternal(*ancestor)) {
       child_dirty_nodes_.erase(ancestor);
     }
   }
@@ -174,4 +178,39 @@
   EXPECT_TRUE(root.IsSingleRoot());
 }
 
+class StyleTraversalRootFlatTreeTestImpl : public StyleTraversalRootTestImpl {
+ private:
+  ContainerNode* ParentInternal(const Node& node) const final {
+    // Flat tree does not include Document or ShadowRoot.
+    return FlatTreeTraversal::ParentElement(node);
+  }
+};
+
+TEST_F(StyleTraversalRootTest, Update_CommonRoot_FlatTree) {
+  StyleTraversalRootFlatTreeTestImpl root;
+
+  // The single dirty node D becomes a single root.
+  root.MarkChildDirty(DivElement(kA));
+  root.MarkChildDirty(DivElement(kB));
+  root.MarkDirty(DivElement(kD));
+  root.Update(nullptr, DivElement(kD));
+
+  EXPECT_EQ(DivElement(kD), root.GetRootNode());
+  EXPECT_TRUE(root.IsSingleRoot());
+
+  // A becomes a common root.
+  root.MarkDirty(DivElement(kA));
+  root.Update(nullptr, DivElement(kA));
+
+  EXPECT_EQ(DivElement(kA), root.GetRootNode());
+  EXPECT_TRUE(root.IsCommonRoot());
+
+  // Making E dirty and the document becomes the common root.
+  root.MarkDirty(DivElement(kE));
+  root.Update(DivElement(kB), DivElement(kE));
+
+  EXPECT_EQ(&GetDocument(), root.GetRootNode());
+  EXPECT_TRUE(root.IsCommonRoot());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 0df5d48..12bc4a8b 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -688,12 +688,11 @@
   scrollIntoView(arg);
 }
 
-// TODO(cathiechen): CSS direction hasn't been supported. (See:
-// crbug.com/982212, https://www.w3.org/TR/cssom-view-1/#beginning-edges).
 static ScrollAlignment ToPhysicalAlignment(const ScrollIntoViewOptions* options,
                                            ScrollOrientation axis,
-                                           bool is_horizontal_writing_mode,
-                                           bool is_flipped_blocks_mode) {
+                                           WritingMode writing_mode,
+                                           bool is_ltr) {
+  bool is_horizontal_writing_mode = IsHorizontalWritingMode(writing_mode);
   String alignment =
       ((axis == kHorizontalScroll && is_horizontal_writing_mode) ||
        (axis == kVerticalScroll && !is_horizontal_writing_mode))
@@ -705,16 +704,72 @@
   if (alignment == "nearest")
     return ScrollAlignment::kAlignToEdgeIfNeeded;
   if (alignment == "start") {
-    return (axis == kHorizontalScroll)
-               ? is_flipped_blocks_mode ? ScrollAlignment::kAlignRightAlways
-                                        : ScrollAlignment::kAlignLeftAlways
-               : ScrollAlignment::kAlignTopAlways;
+    if (axis == kHorizontalScroll) {
+      switch (writing_mode) {
+        case WritingMode::kHorizontalTb:
+          return is_ltr ? ScrollAlignment::kAlignLeftAlways
+                        : ScrollAlignment::kAlignRightAlways;
+        case WritingMode::kVerticalRl:
+        case WritingMode::kSidewaysRl:
+          return ScrollAlignment::kAlignRightAlways;
+        case WritingMode::kVerticalLr:
+        case WritingMode::kSidewaysLr:
+          return ScrollAlignment::kAlignLeftAlways;
+        default:
+          NOTREACHED();
+          return ScrollAlignment::kAlignLeftAlways;
+      }
+    } else {
+      switch (writing_mode) {
+        case WritingMode::kHorizontalTb:
+          return ScrollAlignment::kAlignTopAlways;
+        case WritingMode::kVerticalRl:
+        case WritingMode::kSidewaysRl:
+        case WritingMode::kVerticalLr:
+          return is_ltr ? ScrollAlignment::kAlignTopAlways
+                        : ScrollAlignment::kAlignBottomAlways;
+        case WritingMode::kSidewaysLr:
+          return is_ltr ? ScrollAlignment::kAlignBottomAlways
+                        : ScrollAlignment::kAlignTopAlways;
+        default:
+          NOTREACHED();
+          return ScrollAlignment::kAlignTopAlways;
+      }
+    }
   }
   if (alignment == "end") {
-    return (axis == kHorizontalScroll)
-               ? is_flipped_blocks_mode ? ScrollAlignment::kAlignLeftAlways
-                                        : ScrollAlignment::kAlignRightAlways
-               : ScrollAlignment::kAlignBottomAlways;
+    if (axis == kHorizontalScroll) {
+      switch (writing_mode) {
+        case WritingMode::kHorizontalTb:
+          return is_ltr ? ScrollAlignment::kAlignRightAlways
+                        : ScrollAlignment::kAlignLeftAlways;
+        case WritingMode::kVerticalRl:
+        case WritingMode::kSidewaysRl:
+          return ScrollAlignment::kAlignLeftAlways;
+        case WritingMode::kVerticalLr:
+        case WritingMode::kSidewaysLr:
+          return ScrollAlignment::kAlignRightAlways;
+        default:
+          NOTREACHED();
+          return ScrollAlignment::kAlignRightAlways;
+      }
+    } else {
+      switch (writing_mode) {
+        case WritingMode::kHorizontalTb:
+          return ScrollAlignment::kAlignBottomAlways;
+        case WritingMode::kVerticalRl:
+        case WritingMode::kSidewaysRl:
+        case WritingMode::kVerticalLr:
+          return is_ltr ? ScrollAlignment::kAlignBottomAlways
+                        : ScrollAlignment::kAlignTopAlways;
+        case WritingMode::kSidewaysLr:
+          return is_ltr ? ScrollAlignment::kAlignTopAlways
+                        : ScrollAlignment::kAlignBottomAlways;
+        default:
+          NOTREACHED();
+          return ScrollAlignment::kAlignBottomAlways;
+      }
+    }
   }
 
   // Default values
@@ -744,16 +799,12 @@
                                 ? kScrollBehaviorSmooth
                                 : kScrollBehaviorAuto;
 
-  bool is_horizontal_writing_mode =
-      GetComputedStyle()->IsHorizontalWritingMode();
-  bool is_flipped_blocks_mode =
-      GetComputedStyle()->IsFlippedBlocksWritingMode();
+  WritingMode writing_mode = GetComputedStyle()->GetWritingMode();
+  bool is_ltr = GetComputedStyle()->IsLeftToRightDirection();
   ScrollAlignment align_x =
-      ToPhysicalAlignment(options, kHorizontalScroll,
-                          is_horizontal_writing_mode, is_flipped_blocks_mode);
+      ToPhysicalAlignment(options, kHorizontalScroll, writing_mode, is_ltr);
   ScrollAlignment align_y =
-      ToPhysicalAlignment(options, kVerticalScroll, is_horizontal_writing_mode,
-                          is_flipped_blocks_mode);
+      ToPhysicalAlignment(options, kVerticalScroll, writing_mode, is_ltr);
 
   PhysicalRect bounds = BoundingBoxForScrollIntoView();
   GetLayoutObject()->ScrollRectToVisible(
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
index 2523d91a..8d2808e1 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -1270,6 +1270,11 @@
   return web_frame_->Client()->GetAppCacheType();
 }
 
+void LocalFrameClientImpl::EvictFromBackForwardCache() {
+  DCHECK(web_frame_->Client());
+  return web_frame_->Client()->EvictFromBackForwardCache();
+}
+
 STATIC_ASSERT_ENUM(DownloadCrossOriginRedirects::kFollow,
                    WebLocalFrameClient::CrossOriginRedirects::kFollow);
 STATIC_ASSERT_ENUM(DownloadCrossOriginRedirects::kNavigate,
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
index 8b056b83..c0d76a1 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -332,6 +332,8 @@
       std::unique_ptr<blink::URLLoaderFactoryBundleInfo> info) override;
   WebLocalFrameClient::AppCacheType GetAppCacheType() override;
 
+  void EvictFromBackForwardCache() override;
+
  private:
   struct DocumentInterfaceBrokerForwarderTraits {
     using Interface = mojom::blink::DocumentInterfaceBroker;
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 24301180..66e8f49 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
@@ -96,7 +96,8 @@
     return;
   asked_to_terminate_ = true;
   appcache_host_->Detach();
-  if (shadow_page_ && !shadow_page_->WasInitialized()) {
+
+  if (!worker_thread_) {
     client_->WorkerScriptLoadFailed();
     // The worker thread hasn't been started yet. Immediately notify the client
     // of worker termination.
@@ -104,11 +105,10 @@
     // |this| is deleted at this point.
     return;
   }
-  if (worker_thread_) {
-    worker_thread_->Terminate();
-    DevToolsAgent::WorkerThreadTerminated(shadow_page_->GetDocument(),
-                                          worker_thread_.get());
-  }
+  worker_thread_->Terminate();
+  DevToolsAgent::WorkerThreadTerminated(shadow_page_->GetDocument(),
+                                        worker_thread_.get());
+  // DidTerminateWorkerThread() will be called asynchronously.
 }
 
 void WebSharedWorkerImpl::OnShadowPageInitialized() {
@@ -159,6 +159,7 @@
   DCHECK(IsMainThread());
   client_->WorkerContextClosed();
   TerminateWorkerThread();
+  // DidTerminateWorkerThread() will be called asynchronously.
 }
 
 void WebSharedWorkerImpl::DidTerminateWorkerThread() {
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 0c28b25..2bef34f6 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
@@ -71,7 +71,9 @@
 // methods must be called from a worker thread. Such methods are suffixed with
 // *OnWorkerThread or have header comments.
 //
-// Owned by WebSharedWorkerClient.
+// Owned by WebSharedWorkerClient. Destroyed in TerminateWorkerThread() or
+// DidTerminateWorkerThread() via
+// WebSharedWorkerClient::WorkerContextDestroyed().
 class CORE_EXPORT WebSharedWorkerImpl final : public WebSharedWorker,
                                               public WorkerShadowPage::Client {
  public:
@@ -116,12 +118,13 @@
   void DidFailToFetchClassicScript();
   void DidEvaluateClassicScript(bool success);
   void DidCloseWorkerGlobalScope();
+  // This synchronously destroys |this|.
   void DidTerminateWorkerThread();
 
  private:
   SharedWorkerThread* GetWorkerThread() { return worker_thread_.get(); }
 
-  // Shuts down the worker thread.
+  // Shuts down the worker thread. This may synchronously destroy |this|.
   void TerminateWorkerThread();
 
   void OnAppCacheSelected();
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index e207fc6..62b1a8cf 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -38,6 +38,7 @@
 #include "services/service_manager/public/cpp/connector.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "third_party/blink/public/common/frame/blocked_navigation_types.h"
+#include "third_party/blink/public/mojom/frame/document_interface_broker.mojom-blink.h"
 #include "third_party/blink/public/platform/interface_provider.h"
 #include "third_party/blink/public/platform/interface_registry.h"
 #include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
@@ -511,6 +512,30 @@
       document_resource_coordinator->SetLifecycleState(
           resource_coordinator::mojom::LifecycleState::kFrozen);
     }
+
+    // Register a callback dispatched when JavaScript is executed on the frame.
+    // The callback evicts the frame. If a frame is frozen by BackForwardCache,
+    // the frame must not be mutated e.g., by JavaScript execution, then the
+    // frame must be evicted in such cases.
+    if (RuntimeEnabledFeatures::BackForwardCacheEnabled()) {
+      // TODO(hajimehoshi): Set the callback only when the frame is frozen by
+      // BackForwardCache (crbug.com/990718).
+      Vector<scoped_refptr<DOMWrapperWorld>> worlds;
+      DOMWrapperWorld::AllWorldsInCurrentThread(worlds);
+      for (const auto& world : worlds) {
+        ScriptState* script_state = ToScriptState(this, *world);
+        ScriptState::Scope scope(script_state);
+        script_state->GetContext()->SetAbortScriptExecution(
+            [](v8::Isolate* isolate, v8::Local<v8::Context> context) {
+              ScriptState* script_state = ScriptState::From(context);
+              LocalDOMWindow* window = LocalDOMWindow::From(script_state);
+              DCHECK(window);
+              LocalFrame* frame = window->GetFrame();
+              if (frame)
+                frame->EvictFromBackForwardCache();
+            });
+      }
+    }
   }
 }
 
@@ -530,6 +555,14 @@
       document_resource_coordinator->SetLifecycleState(
           resource_coordinator::mojom::LifecycleState::kRunning);
     }
+
+    Vector<scoped_refptr<DOMWrapperWorld>> worlds;
+    DOMWrapperWorld::AllWorldsInCurrentThread(worlds);
+    for (const auto& world : worlds) {
+      ScriptState* script_state = ToScriptState(this, *world);
+      ScriptState::Scope scope(script_state);
+      script_state->GetContext()->SetAbortScriptExecution(nullptr);
+    }
   }
 }
 
@@ -1734,4 +1767,8 @@
   }
 }
 
+void LocalFrame::EvictFromBackForwardCache() {
+  Client()->EvictFromBackForwardCache();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h
index 3b22665..03936d4 100644
--- a/third_party/blink/renderer/core/frame/local_frame.h
+++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -502,6 +502,8 @@
   void PauseContext();
   void UnpauseContext();
 
+  void EvictFromBackForwardCache();
+
   std::unique_ptr<FrameScheduler> frame_scheduler_;
 
   // Holds all PauseSubresourceLoadingHandles allowing either |this| to delete
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
index 5b788de..8b10a11 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client.h
+++ b/third_party/blink/renderer/core/frame/local_frame_client.h
@@ -535,6 +535,8 @@
   virtual WebLocalFrameClient::AppCacheType GetAppCacheType() {
     return WebLocalFrameClient::AppCacheType::kAppCacheForNone;
   }
+
+  virtual void EvictFromBackForwardCache() = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index c3aed55d..9bf82ef 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -695,6 +695,8 @@
           continue;
         LayoutFromRootObject(*root);
 
+        root->PaintingLayer()->UpdateLayerPositionsAfterLayout();
+
         // We need to ensure that we mark up all layoutObjects up to the
         // LayoutView for paint invalidation. This simplifies our code as we
         // just always do a full tree walk.
@@ -764,6 +766,7 @@
 
   FontCachePurgePreventer font_cache_purge_preventer;
   StyleRetainScope style_retain_scope;
+  bool in_subtree_layout = false;
   {
     base::AutoReset<bool> change_scheduling_enabled(&layout_scheduling_enabled_,
                                                     false);
@@ -776,7 +779,7 @@
       ClearLayoutSubtreeRootsAndMarkContainingBlocks();
     GetLayoutView()->ClearHitTestCache();
 
-    bool in_subtree_layout = IsSubtreeLayout();
+    in_subtree_layout = IsSubtreeLayout();
 
     // TODO(crbug.com/460956): The notion of a single root for layout is no
     // longer applicable. Remove or update this code.
@@ -873,9 +876,8 @@
 
   frame_timing_requests_dirty_ = true;
 
-  // FIXME: Could find the common ancestor layer of all dirty subtrees and
-  // mark from there. crbug.com/462719
-  GetLayoutView()->EnclosingLayer()->UpdateLayerPositionsAfterLayout();
+  if (!in_subtree_layout)
+    GetLayoutView()->EnclosingLayer()->UpdateLayerPositionsAfterLayout();
 
   TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
       TRACE_DISABLED_BY_DEFAULT("blink.debug.layout.trees"), "LayoutTree", this,
@@ -3356,14 +3358,12 @@
 }
 
 void LocalFrameView::AddResizerArea(LayoutBox& resizer_box) {
-  DCHECK(!RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled());
   if (!resizer_areas_)
     resizer_areas_ = std::make_unique<ResizerAreaSet>();
   resizer_areas_->insert(&resizer_box);
 }
 
 void LocalFrameView::RemoveResizerArea(LayoutBox& resizer_box) {
-  DCHECK(!RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled());
   if (!resizer_areas_)
     return;
 
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.h b/third_party/blink/renderer/core/frame/local_frame_view.h
index 1558182..a879e10 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.h
+++ b/third_party/blink/renderer/core/frame/local_frame_view.h
@@ -464,15 +464,10 @@
   // the bottom right of the object. We keep track of these resizer areas for
   // checking if touches (implemented using Scroll gesture) are targeting the
   // resizer.
-  // TODO(pdr): The resizers do not need to be tracked with
-  // PaintNonFastScrollableRegions and can be removed once that ships.
   typedef HashSet<LayoutBox*> ResizerAreaSet;
   void AddResizerArea(LayoutBox&);
   void RemoveResizerArea(LayoutBox&);
-  const ResizerAreaSet* ResizerAreas() const {
-    DCHECK(!RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled());
-    return resizer_areas_.get();
-  }
+  const ResizerAreaSet* ResizerAreas() const { return resizer_areas_.get(); }
 
   void ScheduleAnimation();
 
diff --git a/third_party/blink/renderer/core/html/forms/resources/color_picker.js b/third_party/blink/renderer/core/html/forms/resources/color_picker.js
index 0d3c3fa..218d8196 100644
--- a/third_party/blink/renderer/core/html/forms/resources/color_picker.js
+++ b/third_party/blink/renderer/core/html/forms/resources/color_picker.js
@@ -74,8 +74,12 @@
         [this.rValue_, this.gValue_, this.bValue_] =
             colorStringOrFormat.substring(4, colorStringOrFormat.length - 1)
             .split(',').map(Number);
+      } else if (colorStringOrFormat.startsWith('hsl')) {
+        colorStringOrFormat = colorStringOrFormat.replace(/%|\s+/g, '');
+        [this.hValue_, this.sValue_, this.lValue_] =
+            colorStringOrFormat.substring(4, colorStringOrFormat.length - 1)
+            .split(',').map(Number);
       }
-      // TODO(crbug.com/982088): Add support for HSL
     } else {
       switch(colorStringOrFormat) {
         case ColorFormat.HEX:
@@ -84,7 +88,9 @@
         case ColorFormat.RGB:
           [this.rValue_, this.gValue_, this.bValue_] = colorValues.map(Number);
           break;
-        // TODO(crbug.com/982088): Add support for HSL
+        case ColorFormat.HSL:
+          [this.hValue_, this.sValue_, this.lValue_] = colorValues.map(Number);
+          break;
       }
     }
   }
@@ -110,8 +116,10 @@
     } else if (this.rValue_ !== undefined) {
       this.hexValue_ =
           Color.rgbToHex(this.rValue_, this.gValue_, this.bValue_);
+    } else if (this.hValue_ !== undefined) {
+      this.hexValue_ =
+          Color.hslToHex(this.hValue_, this.sValue_, this.lValue_);
     }
-    // TODO(crbug.com/982088): Add support for HSL
   }
 
   asHex() {
@@ -148,8 +156,11 @@
     } else if (this.hexValue_ !== undefined) {
       [this.rValue_, this.gValue_, this.bValue_] =
           Color.hexToRGB(this.hexValue_);
+    } else if (this.hValue_ !== undefined) {
+      [this.rValue_, this.gValue_, this.bValue_] =
+          Color.hslToRGB(this.hValue_, this.sValue_, this.lValue_)
+          .map(Math.round);
     }
-    // TODO(crbug.com/982088): Add support for HSL
   }
 
   rgbValues() {
@@ -161,6 +172,51 @@
   }
 
   /**
+   * @returns {number} between 0 and 359
+   */
+  get hValue() {
+    this.computeHSLValues_();
+    return this.hValue_;
+  }
+
+  /**
+   * @returns {number} between 0 and 100
+   */
+  get sValue() {
+    this.computeHSLValues_();
+    return this.sValue_;
+  }
+
+  /**
+   * @returns {number} between 0 and 100
+   */
+  get lValue() {
+    this.computeHSLValues_();
+    return this.lValue_;
+  }
+
+  computeHSLValues_() {
+    if (this.hValue_ !== undefined) {
+      // Already computed.
+    } else if (this.rValue_ !== undefined) {
+      [this.hValue_, this.sValue_, this.lValue_] =
+          Color.rgbToHSL(this.rValue_, this.gValue_, this.bValue_)
+          .map(Math.round);
+    } else if (this.hexValue_ !== undefined) {
+      [this.hValue_, this.sValue_, this.lValue_] =
+          Color.hexToHSL(this.hexValue_).map(Math.round);
+    }
+  }
+
+  hslValues() {
+    return [this.hValue, this.sValue, this.lValue];
+  }
+
+  asHSL() {
+    return 'hsl(' + this.hValue + ',' + this.sValue + '%,' + this.lValue + '%)';
+  }
+
+  /**
    * @param {string} hexValue
    * @returns {number[]}
    */
@@ -184,6 +240,108 @@
       return (cumulativeHexValue + hexValue);
     }, '');
   }
+
+  /**
+   * The algorithm has been written based on the mathematical formula found at:
+   * https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB.
+   * @param {...number} hslValues
+   * @returns {number[]}
+   */
+  static hslToRGB(...hslValues) {
+    let [hValue, sValue, lValue] = hslValues;
+    hValue /= 60;
+    sValue /= 100;
+    lValue /= 100;
+
+    let rValue = lValue;
+    let gValue = lValue;
+    let bValue = lValue;
+    let match = 0;
+    if (sValue !== 0) {
+      const chroma = (1 - Math.abs(2 * lValue - 1)) * sValue;
+      const x = chroma * (1 - Math.abs(hValue % 2 - 1));
+      match = lValue - chroma / 2;
+      if ((0 <= hValue) && (hValue <= 1)) {
+        rValue = chroma;
+        gValue = x;
+        bValue = 0;
+      } else if ((1 < hValue) && (hValue <= 2)) {
+        rValue = x;
+        gValue = chroma;
+        bValue = 0;
+      } else if ((2 < hValue) && (hValue <= 3)) {
+        rValue = 0;
+        gValue = chroma;
+        bValue = x;
+      } else if ((3 < hValue) && (hValue <= 4)) {
+        rValue = 0;
+        gValue = x;
+        bValue = chroma;
+      } else if ((4 < hValue) && (hValue <= 5)) {
+        rValue = x;
+        gValue = 0;
+        bValue = chroma;
+      } else {
+        // (5 < hValue) && (hValue < 6)
+        rValue = chroma;
+        gValue = 0;
+        bValue = x;
+      }
+    }
+    rValue = (rValue + match) * 255;
+    gValue = (gValue + match) * 255;
+    bValue = (bValue + match) * 255;
+    return [rValue, gValue, bValue];
+  }
+
+  /**
+   * The algorithm has been written based on the mathematical formula found at:
+   * https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB.
+   * @param {...number} rgbValues
+   * @returns {number[]}
+   */
+  static rgbToHSL(...rgbValues) {
+    const [rValue, gValue, bValue] = rgbValues.map((value) => value / 255);
+    const max = Math.max(rValue, gValue, bValue);
+    const min = Math.min(rValue, gValue, bValue);
+    let hValue = 0;
+    let sValue = 0;
+    let lValue = (max + min) / 2;
+    if (max !== min) {
+      const diff = max - min;
+      if (max === rValue) {
+        hValue = ((gValue - bValue) / diff);
+      } else if (max === gValue) {
+        hValue = ((bValue - rValue) / diff) + 2;
+      } else {
+        // max === bValue
+        hValue = ((rValue - gValue) / diff) + 4;
+      }
+      hValue *= 60;
+      if (hValue < 0) {
+        hValue += 360;
+      }
+      sValue = (diff / (1 - Math.abs(2 * lValue - 1))) * 100;
+    }
+    lValue *= 100;
+    return [hValue, sValue, lValue];
+  }
+
+  /**
+   * @param {...number} rgbValues
+   * @returns {string}
+   */
+  static hslToHex(...hslValues) {
+    return Color.rgbToHex(...Color.hslToRGB(...hslValues).map(Math.round));
+  }
+
+  /**
+   * @param {string} hexValue
+   * @returns {...number}
+   */
+  static hexToHSL(hexValue) {
+    return Color.rgbToHSL(...Color.hexToRGB(hexValue));
+  }
 }
 
 /**
@@ -290,30 +448,27 @@
                                                       initialColor);
     this.rgbValueContainer_ = new ColorValueContainer(ColorFormat.RGB,
                                                       initialColor);
+    this.hslValueContainer_ = new ColorValueContainer(ColorFormat.HSL,
+                                                      initialColor);
     this.colorValueContainers_ = [
       this.hexValueContainer_,
       this.rgbValueContainer_,
-      // TODO(crbug.com/982088): Add support for HSL
+      this.hslValueContainer_,
     ];
-    this.formatToggler_ = new FormatToggler(ColorFormat.RGB);
+    this.currentColorFormat_ = ColorFormat.RGB;
+    this.adjustValueContainerVisibility_();
+    this.formatToggler_ = new FormatToggler(this.currentColorFormat_);
     this.append(...this.colorValueContainers_, this.formatToggler_);
 
-    this.hexValueContainer_.hide();
-    this.rgbValueContainer_.show();
-
     this.formatToggler_
     .addEventListener('format-change', this.onFormatChange_);
 
     this.addEventListener('manual-color-change', this.onManualColorChange_);
   }
 
-  /**
-   * @param {!Event} event
-   */
-  onFormatChange_ = (event) => {
-    const newColorFormat = event.detail.colorFormat;
+  adjustValueContainerVisibility_() {
     this.colorValueContainers_.forEach((colorValueContainer) => {
-      if (colorValueContainer.colorFormat === newColorFormat) {
+      if (colorValueContainer.colorFormat === this.currentColorFormat_) {
         colorValueContainer.show();
       } else {
         colorValueContainer.hide();
@@ -324,6 +479,14 @@
   /**
    * @param {!Event} event
    */
+  onFormatChange_ = (event) => {
+    this.currentColorFormat_ = event.detail.colorFormat;
+    this.adjustValueContainerVisibility_();
+  }
+
+  /**
+   * @param {!Event} event
+   */
   onManualColorChange_ = (event) => {
     const newColor = event.detail.color;
     this.colorValueContainers_.forEach((colorValueContainer) =>
@@ -360,8 +523,17 @@
       this.channelValueContainers_.push(rValueContainer,
                                         gValueContainer,
                                         bValueContainer);
+    } else if (this.colorFormat_ === ColorFormat.HSL) {
+      const hValueContainer = new ChannelValueContainer(ColorChannel.H,
+                                                        initialColor);
+      const sValueContainer = new ChannelValueContainer(ColorChannel.S,
+                                                        initialColor);
+      const lValueContainer = new ChannelValueContainer(ColorChannel.L,
+                                                        initialColor);
+      this.channelValueContainers_.push(hValueContainer,
+                                        sValueContainer,
+                                        lValueContainer);
     }
-    // TODO(crbug.com/982088): Add support for HSL
     this.append(...this.channelValueContainers_);
 
     this.channelValueContainers_.forEach((channelValueContainer) =>
@@ -427,9 +599,16 @@
       case ColorChannel.R:
       case ColorChannel.G:
       case ColorChannel.B:
-        this.setAttribute('maxLength', '3');
+        this.setAttribute('maxlength', '3');
         break;
-      // TODO(crbug.com/982088): Add support for HSL
+      case ColorChannel.H:
+        this.setAttribute('maxlength', '3');
+        break;
+      case ColorChannel.S:
+      case ColorChannel.L:
+        // up to 3 digits plus '%'
+        this.setAttribute('maxlength', '4');
+        break;
     }
     this.setValue(initialColor);
 
@@ -469,7 +648,24 @@
           this.value = this.channelValue_;
         }
         break;
-      // TODO(crbug.com/982088): Add support for HSL
+      case ColorChannel.H:
+        if (this.channelValue_ !== color.hValue) {
+          this.channelValue_ = color.hValue;
+          this.value = this.channelValue_;
+        }
+        break;
+      case ColorChannel.S:
+        if (this.channelValue_ !== color.sValue) {
+          this.channelValue_ = color.sValue;
+          this.value = this.channelValue_ + '%';
+        }
+        break;
+      case ColorChannel.L:
+        if (this.channelValue_ !== color.lValue) {
+          this.channelValue_ = color.lValue;
+          this.value = this.channelValue_ + '%';
+        }
+        break;
     }
   }
 
@@ -495,7 +691,20 @@
             this.channelValue_ = Number(value);
           }
           break;
-        // TODO(crbug.com/982088): Add support for HSL
+        case ColorChannel.H:
+            if (value.match(/^\d+$/) && (0 <= value) && (value < 360)) {
+              this.channelValue_ = Number(value);
+            }
+            break;
+        case ColorChannel.S:
+        case ColorChannel.L:
+          if (value.endsWith('%')) {
+            value = value.substring(0, value.length - 1);
+            if (value.match(/^\d+$/) && (0 <= value) && (value <= 100)) {
+              this.channelValue_ = Number(value);
+            }
+          }
+          break;
       }
     }
   }
@@ -517,12 +726,13 @@
     this.currentColorFormat_ = initialColorFormat;
     this.hexFormatLabel_ = new FormatLabel(ColorFormat.HEX);
     this.rgbFormatLabel_ = new FormatLabel(ColorFormat.RGB);
+    this.hslFormatLabel_ = new FormatLabel(ColorFormat.HSL);
     this.colorFormatLabels_ = [
       this.hexFormatLabel_,
       this.rgbFormatLabel_,
-      // TODO(crbug.com/982088): Add support for HSL
+      this.hslFormatLabel_,
     ];
-    this.adjustFormatLabelVisibility();
+    this.adjustFormatLabelVisibility_();
 
     this.upDownIcon_ = document.createElement('span');
     this.upDownIcon_.innerHTML =
@@ -539,7 +749,7 @@
     this.addEventListener('mousedown', (event) => event.preventDefault());
   }
 
-  adjustFormatLabelVisibility() {
+  adjustFormatLabelVisibility_() {
     this.colorFormatLabels_.forEach((colorFormatLabel) => {
       if (colorFormatLabel.colorFormat === this.currentColorFormat_) {
         colorFormatLabel.show();
@@ -553,10 +763,11 @@
     if (this.currentColorFormat_ == ColorFormat.HEX) {
       this.currentColorFormat_ = ColorFormat.RGB;
     } else if (this.currentColorFormat_ == ColorFormat.RGB) {
+      this.currentColorFormat_ = ColorFormat.HSL;
+    } else if (this.currentColorFormat_ == ColorFormat.HSL) {
       this.currentColorFormat_ = ColorFormat.HEX;
     }
-    // TODO(crbug.com/982088): Add support for HSL
-    this.adjustFormatLabelVisibility();
+    this.adjustFormatLabelVisibility_();
 
     this.dispatchEvent(new CustomEvent('format-change', {
       detail: {
@@ -581,15 +792,21 @@
     if (colorFormat === ColorFormat.HEX) {
       this.hexChannelLabel_ = new ChannelLabel(ColorChannel.HEX);
       this.append(this.hexChannelLabel_);
-    } else {
+    } else if (colorFormat === ColorFormat.RGB) {
       this.rChannelLabel_ = new ChannelLabel(ColorChannel.R);
       this.gChannelLabel_ = new ChannelLabel(ColorChannel.G);
       this.bChannelLabel_ = new ChannelLabel(ColorChannel.B);
       this.append(this.rChannelLabel_,
                   this.gChannelLabel_,
                   this.bChannelLabel_);
+    } else if (colorFormat === ColorFormat.HSL) {
+      this.hChannelLabel_ = new ChannelLabel(ColorChannel.H);
+      this.sChannelLabel_ = new ChannelLabel(ColorChannel.S);
+      this.lChannelLabel_ = new ChannelLabel(ColorChannel.L);
+      this.append(this.hChannelLabel_,
+                  this.sChannelLabel_,
+                  this.lChannelLabel_);
     }
-    // TODO(crbug.com/982088): Add support for HSL
   }
 
   get colorFormat() {
@@ -624,8 +841,13 @@
       this.textContent = 'G';
     } else if (colorChannel === ColorChannel.B) {
       this.textContent = 'B';
+    } else if (colorChannel === ColorChannel.H) {
+      this.textContent = 'H';
+    } else if (colorChannel === ColorChannel.S) {
+      this.textContent = 'S';
+    } else if (colorChannel === ColorChannel.L) {
+      this.textContent = 'L';
     }
-    // TODO(crbug.com/982088): Add support for HSL
   }
 }
 window.customElements.define('channel-label', ChannelLabel);
diff --git a/third_party/blink/renderer/core/html/resources/android.css b/third_party/blink/renderer/core/html/resources/android.css
index ce254bb..8212135 100644
--- a/third_party/blink/renderer/core/html/resources/android.css
+++ b/third_party/blink/renderer/core/html/resources/android.css
@@ -50,7 +50,7 @@
 input[type="time" i],
 input[type="week" i] {
     align-items: center;
-    -webkit-appearance: menulist;
+    -webkit-appearance: menulist; /* AutoAppearanceFor() should match to this. */
     background-color: ButtonFace;
     border: 1px solid #a9a9a9;
     display: -webkit-inline-flex;
diff --git a/third_party/blink/renderer/core/html/resources/html.css b/third_party/blink/renderer/core/html/resources/html.css
index 5c5b650..e76db8bf 100644
--- a/third_party/blink/renderer/core/html/resources/html.css
+++ b/third_party/blink/renderer/core/html/resources/html.css
@@ -395,7 +395,7 @@
 }
 
 button {
-    -webkit-appearance: button;
+    -webkit-appearance: button; /* AutoAppearanceFor() should match to this. */
 }
 
 /* Form controls don't go vertical. */
@@ -423,7 +423,7 @@
 }
 
 input {
-    -webkit-appearance: textfield;
+    -webkit-appearance: textfield; /* AutoAppearanceFor() should match to this. */
     padding: 1px;
     background-color: white;
     border: 2px inset;
@@ -432,7 +432,7 @@
 }
 
 input[type="search" i] {
-    -webkit-appearance: searchfield;
+    -webkit-appearance: searchfield; /* AutoAppearanceFor() should match to this. */
     box-sizing: border-box;
 }
 
@@ -444,7 +444,7 @@
 }
 
 input::-webkit-clear-button {
-    -webkit-appearance: searchfield-cancel-button;
+    -webkit-appearance: searchfield-cancel-button; /* AutoAppearanceFor() should match to this. */
     display: inline-block;
     cursor: default;
     flex: none;
@@ -460,7 +460,7 @@
 }
 
 input[type="search" i]::-webkit-search-cancel-button {
-    -webkit-appearance: searchfield-cancel-button;
+    -webkit-appearance: searchfield-cancel-button; /* AutoAppearanceFor() should match to this. */
     display: block;
     cursor: default;
     flex: none;
@@ -477,7 +477,7 @@
 }
 
 input::-webkit-inner-spin-button {
-    -webkit-appearance: inner-spin-button;
+    -webkit-appearance: inner-spin-button; /* AutoAppearanceFor() should match to this. */
     display: inline-block;
     cursor: default;
     flex: none;
@@ -497,7 +497,7 @@
 }
 
 textarea {
-    -webkit-appearance: textarea;
+    -webkit-appearance: textarea; /* AutoAppearanceFor() should match to this. */
     background-color: white;
     border: 1px solid;
     -webkit-rtl-ordering: logical;
@@ -544,7 +544,7 @@
 }
 
 input[type="hidden" i], input[type="image" i], input[type="file" i] {
-    -webkit-appearance: initial;
+    -webkit-appearance: initial; /* AutoAppearanceFor() should match to this. */
     padding: initial;
     background-color: initial;
     border: initial;
@@ -588,13 +588,13 @@
 }
 
 input[type="button" i], input[type="submit" i], input[type="reset" i] {
-    -webkit-appearance: push-button;
+    -webkit-appearance: push-button; /* AutoAppearanceFor() should match to this. */
     -webkit-user-select: none;
     white-space: pre
 }
 
 input[type="file" i]::-webkit-file-upload-button {
-    -webkit-appearance: push-button;
+    -webkit-appearance: push-button; /* AutoAppearanceFor() should match to this. */
     -webkit-user-modify: read-only !important;
     white-space: nowrap;
     margin: 0;
@@ -613,7 +613,7 @@
 }
 
 input[type="range" i] {
-    -webkit-appearance: slider-horizontal;
+    -webkit-appearance: slider-horizontal; /* AutoAppearanceFor() should match to this. */
     padding: initial;
     border: initial;
     margin: 2px;
@@ -622,7 +622,7 @@
 }
 
 input[type="range" i]::-webkit-slider-container, input[type="range" i]::-webkit-media-slider-container {
-    -webkit-appearance: inherit;
+    -webkit-appearance: inherit; /* AutoAppearanceFor() should match to this. */
     flex: 1;
     min-width: 0;
     box-sizing: border-box;
@@ -641,7 +641,7 @@
 }
 
 input[type="range" i]::-webkit-slider-thumb, input[type="range" i]::-webkit-media-slider-thumb {
-    -webkit-appearance: sliderthumb-horizontal;
+    -webkit-appearance: sliderthumb-horizontal; /* AutoAppearanceFor() should match to this. */
     box-sizing: border-box;
     -webkit-user-modify: read-only !important;
     display: block;
@@ -689,17 +689,17 @@
 }
 
 input[type="checkbox" i] {
-    -webkit-appearance: checkbox;
+    -webkit-appearance: checkbox; /* AutoAppearanceFor() should match to this. */
     box-sizing: border-box;
 }
 
 input[type="radio" i] {
-    -webkit-appearance: radio;
+    -webkit-appearance: radio; /* AutoAppearanceFor() should match to this. */
     box-sizing: border-box;
 }
 
 input[type="color" i] {
-    -webkit-appearance: square-button;
+    -webkit-appearance: square-button; /* AutoAppearanceFor() should match to this. */
     width: 44px;
     height: 23px;
     background-color: ButtonFace;
@@ -727,7 +727,7 @@
 }
 
 input[type="color" i][list] {
-    -webkit-appearance: menulist;
+    -webkit-appearance: menulist; /* AutoAppearanceFor() should match to this. */
     width: 88px;
     height: 23px
 }
@@ -784,7 +784,7 @@
 }
 
 select {
-    -webkit-appearance: menulist;
+    -webkit-appearance: menulist; /* AutoAppearanceFor() should match to this. */
     box-sizing: border-box;
     align-items: center;
     border: 1px solid;
@@ -800,7 +800,7 @@
 }
 
 select:-internal-list-box {
-    -webkit-appearance: listbox;
+    -webkit-appearance: listbox; /* AutoAppearanceFor() should match to this. */
     align-items: flex-start;
     border: 1px inset gray;
     border-radius: initial;
@@ -864,7 +864,7 @@
 /* meter */
 
 meter {
-    -webkit-appearance: meter;
+    -webkit-appearance: meter; /* AutoAppearanceFor() should match to this. */
     box-sizing: border-box;
     display: inline-block;
     height: 1em;
@@ -874,7 +874,7 @@
 }
 
 meter::-webkit-meter-inner-element {
-    -webkit-appearance: inherit;
+    -webkit-appearance: inherit; /* AutoAppearanceFor() should match to this. */
     box-sizing: inherit;
     display: none;
     -webkit-user-modify: read-only !important;
@@ -922,7 +922,7 @@
 /* progress */
 
 progress {
-    -webkit-appearance: progress-bar;
+    -webkit-appearance: progress-bar; /* AutoAppearanceFor() should match to this. */
     box-sizing: border-box;
     display: inline-block;
     height: 1em;
diff --git a/third_party/blink/renderer/core/layout/layout_table_section_test.cc b/third_party/blink/renderer/core/layout/layout_table_section_test.cc
index 80963e9..42393c7 100644
--- a/third_party/blink/renderer/core/layout/layout_table_section_test.cc
+++ b/third_party/blink/renderer/core/layout/layout_table_section_test.cc
@@ -398,20 +398,6 @@
   )HTML");
 }
 
-TEST_F(LayoutTableSectionTest, RowCollapseSaturation) {
-  // When a collapsed row's height saturates LayoutUnit, we'd set the height to
-  // -1/64, triggering a downstream DCHECK(height >= 0). After a little trial
-  // and error, a huge line-height was the only way I could reproduce this.
-  SetBodyInnerHTML(R"HTML(
-    <div style="display:table-row; visibility:collapse; line-height:279999999%">
-      <div style="display:table-cell;">
-        <div style="position:fixed"></div>
-        No crash = pass.
-      </div>
-    </div>
-  )HTML");
-}
-
 }  // anonymous namespace
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_theme.cc b/third_party/blink/renderer/core/layout/layout_theme.cc
index 8bacc88f..1213f92 100644
--- a/third_party/blink/renderer/core/layout/layout_theme.cc
+++ b/third_party/blink/renderer/core/layout/layout_theme.cc
@@ -21,11 +21,13 @@
 
 #include "third_party/blink/renderer/core/layout/layout_theme.h"
 
+#include "build/build_config.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_rect.h"
 #include "third_party/blink/public/web/blink.h"
 #include "third_party/blink/renderer/core/css_value_keywords.h"
 #include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/core/dom/shadow_root.h"
 #include "third_party/blink/renderer/core/editing/frame_selection.h"
 #include "third_party/blink/renderer/core/fileapi/file_list.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -35,6 +37,7 @@
 #include "third_party/blink/renderer/core/html/forms/html_form_control_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
 #include "third_party/blink/renderer/core/html/forms/html_option_element.h"
+#include "third_party/blink/renderer/core/html/forms/html_select_element.h"
 #include "third_party/blink/renderer/core/html/forms/spin_button_element.h"
 #include "third_party/blink/renderer/core/html/forms/text_control_inner_elements.h"
 #include "third_party/blink/renderer/core/html/html_collection.h"
@@ -63,6 +66,80 @@
 
 namespace blink {
 
+namespace {
+
+// This function should match to the user-agent stylesheet.
+ControlPart AutoAppearanceFor(const Element& element) {
+  if (IsA<HTMLButtonElement>(element))
+    return kButtonPart;
+  if (IsA<HTMLMeterElement>(element))
+    return kMeterPart;
+  if (IsA<HTMLProgressElement>(element))
+    return kProgressBarPart;
+  if (IsA<HTMLTextAreaElement>(element))
+    return kTextAreaPart;
+  if (IsA<SpinButtonElement>(element))
+    return kInnerSpinButtonPart;
+  if (const auto* select = DynamicTo<HTMLSelectElement>(element))
+    return select->UsesMenuList() ? kMenulistPart : kListboxPart;
+
+  if (const auto* input = DynamicTo<HTMLInputElement>(element)) {
+    const AtomicString& type = input->type();
+    if (type == input_type_names::kCheckbox)
+      return kCheckboxPart;
+    if (type == input_type_names::kRadio)
+      return kRadioPart;
+    if (input->IsTextButton())
+      return kPushButtonPart;
+    if (type == input_type_names::kColor) {
+      return input->FastHasAttribute(html_names::kListAttr) ? kMenulistPart
+                                                            : kSquareButtonPart;
+    }
+    if (type == input_type_names::kRange)
+      return kSliderHorizontalPart;
+    if (type == input_type_names::kSearch)
+      return kSearchFieldPart;
+    if (type == input_type_names::kDate ||
+        type == input_type_names::kDatetimeLocal ||
+        type == input_type_names::kMonth || type == input_type_names::kTime ||
+        type == input_type_names::kWeek) {
+#if defined(OS_ANDROID)
+      return kMenulistPart;
+#else
+      return kTextFieldPart;
+#endif
+    }
+    if (type == input_type_names::kEmail || type == input_type_names::kNumber ||
+        type == input_type_names::kPassword || type == input_type_names::kTel ||
+        type == input_type_names::kText || type == input_type_names::kUrl)
+      return kTextFieldPart;
+
+    // Type=hidden/image/file.
+    return kNoControlPart;
+  }
+
+  if (element.IsInUserAgentShadowRoot()) {
+    const AtomicString& id_value =
+        element.FastGetAttribute(html_names::kIdAttr);
+    if (id_value == shadow_element_names::SliderThumb())
+      return kSliderThumbHorizontalPart;
+    if (id_value == shadow_element_names::SearchClearButton() ||
+        id_value == shadow_element_names::ClearButton())
+      return kSearchFieldCancelButtonPart;
+
+    // Slider container elements and -webkit-meter-inner-element don't have IDs.
+    const AtomicString& shadow_pseudo = element.ShadowPseudoId();
+    if (shadow_pseudo == "-webkit-media-slider-container" ||
+        shadow_pseudo == "-webkit-slider-container")
+      return kSliderHorizontalPart;
+    if (shadow_pseudo == "-webkit-meter-inner-element")
+      return kMeterPart;
+  }
+  return kNoControlPart;
+}
+
+}  // namespace
+
 // Wrapper function defined in WebKit.h
 void SetMockThemeEnabledForTest(bool value) {
   WebTestSupport::SetMockThemeEnabledForTest(value);
@@ -92,11 +169,69 @@
     const ComputedStyle& style,
     const Element* element) {
   ControlPart part = style.EffectiveAppearance();
-  // TODO(crbug.com/981720): Implement element type restriction, and apply
-  // 'auto' if |part| doesn't support |element|.
-  // e.g.  kSearchFieldPart for input[type=search] ==> kSearchFieldPart
-  //       kSearchFieldPart for div ==> kNoControlPart
-  //       kSearchFieldPart for button ==> kButtonPart
+  if (!RuntimeEnabledFeatures::RestrictedWebkitAppearanceEnabled())
+    return part;
+
+  if (!element)
+    return kNoControlPart;
+
+  ControlPart auto_appearance = AutoAppearanceFor(*element);
+  if (part == auto_appearance)
+    return part;
+
+  switch (part) {
+    // No restrictions.
+    case kNoControlPart:
+    case kMediaSliderPart:
+    case kMediaSliderThumbPart:
+    case kMediaVolumeSliderPart:
+    case kMediaVolumeSliderThumbPart:
+    case kMediaControlPart:
+      return part;
+
+    // Aliases of 'auto'.
+    // https://drafts.csswg.org/css-ui-4/#typedef-appearance-compat-auto
+    case kCheckboxPart:
+    case kRadioPart:
+    case kPushButtonPart:
+    case kSquareButtonPart:
+    case kInnerSpinButtonPart:
+    case kListboxPart:
+    case kMenulistPart:
+    case kMeterPart:
+    case kProgressBarPart:
+    case kSliderHorizontalPart:
+    case kSliderThumbHorizontalPart:
+    case kSearchFieldPart:
+    case kSearchFieldCancelButtonPart:
+    case kTextAreaPart:
+      return auto_appearance;
+
+      // The following keywords should work well for some element types
+      // even if their default appearances are different from the keywords.
+
+    case kButtonPart:
+      if (IsA<HTMLSelectElement>(*element) || IsA<HTMLAnchorElement>(*element))
+        return auto_appearance;
+      return part;
+
+    case kMenulistButtonPart:
+      return auto_appearance == kMenulistPart ? part : auto_appearance;
+
+    case kSliderVerticalPart:
+      return auto_appearance == kSliderHorizontalPart ? part : auto_appearance;
+
+    case kSliderThumbVerticalPart:
+      return auto_appearance == kSliderThumbHorizontalPart ? part
+                                                           : auto_appearance;
+
+    case kTextFieldPart:
+      if (IsA<HTMLInputElement>(*element) &&
+          To<HTMLInputElement>(*element).type() == input_type_names::kSearch)
+        return part;
+      return auto_appearance;
+  }
+
   return part;
 }
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
index 6253874..e863dafc 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -1133,8 +1133,16 @@
     if (!item_results->IsEmpty()) {
       NGInlineItemResult* item_result = AddItem(item, line_info);
       NGInlineItemResult* last = &(*item_results)[item_results->size() - 2];
-      item_result->can_break_after = last->can_break_after;
-      last->can_break_after = false;
+      // Honor the last |can_break_after| if it's true, in case it was
+      // artificially set to true for break-after-space.
+      if (last->can_break_after) {
+        item_result->can_break_after = last->can_break_after;
+        last->can_break_after = false;
+      } else {
+        // Otherwise compute from the text. |LazyLineBreakIterator| knows how to
+        // break around bidi control characters.
+        ComputeCanBreakAfter(item_result, auto_wrap_, break_iterator_);
+      }
     } else {
       AddItem(item, line_info);
     }
diff --git a/third_party/blink/renderer/core/loader/empty_clients.h b/third_party/blink/renderer/core/loader/empty_clients.h
index 650081c..90e41e5 100644
--- a/third_party/blink/renderer/core/loader/empty_clients.h
+++ b/third_party/blink/renderer/core/loader/empty_clients.h
@@ -421,6 +421,8 @@
 
   Frame* FindFrame(const AtomicString& name) const override;
 
+  void EvictFromBackForwardCache() override {}
+
  protected:
   // Not owned
   WebTextCheckClient* text_check_client_;
diff --git a/third_party/blink/renderer/core/loader/link_loader_test.cc b/third_party/blink/renderer/core/loader/link_loader_test.cc
index 02784ca..a24e127 100644
--- a/third_party/blink/renderer/core/loader/link_loader_test.cc
+++ b/third_party/blink/renderer/core/loader/link_loader_test.cc
@@ -7,7 +7,9 @@
 #include <base/macros.h>
 #include <memory>
 #include "base/single_thread_task_runner.h"
+#include "base/test/scoped_feature_list.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_prescient_networking.h"
 #include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
@@ -549,6 +551,65 @@
                          LinkLoaderModulePreloadTest,
                          testing::ValuesIn(kModulePreloadTestParams));
 
+class LinkLoaderTestPrefetchRedirect
+    : public testing::Test,
+      public testing::WithParamInterface<bool> {
+ public:
+  LinkLoaderTestPrefetchRedirect() : redirect_mode_is_error_(GetParam()) {}
+  void SetUp() override {
+    std::vector<base::Feature> enable_features;
+    std::vector<base::Feature> disabled_features;
+    if (GetParam()) {
+      enable_features.push_back(features::kPrefetchRedirectError);
+    } else {
+      disabled_features.push_back(features::kPrefetchRedirectError);
+    }
+    feature_list_.InitWithFeatures(enable_features, disabled_features);
+  }
+
+ protected:
+  const bool redirect_mode_is_error_;
+  ScopedTestingPlatformSupport<TestingPlatformSupportWithNetworkHintsMock>
+      platform_;
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(LinkLoaderTestPrefetchRedirect,
+                         LinkLoaderTestPrefetchRedirect,
+                         testing::Values(true, false));
+
+TEST_P(LinkLoaderTestPrefetchRedirect, PrefetchRedirect) {
+  auto dummy_page_holder = std::make_unique<DummyPageHolder>(IntSize(500, 500));
+  dummy_page_holder->GetFrame().GetSettings()->SetScriptEnabled(true);
+  Persistent<MockLinkLoaderClient> loader_client =
+      MakeGarbageCollected<MockLinkLoaderClient>(true);
+  LinkLoader* loader = LinkLoader::Create(loader_client.Get());
+  KURL href_url = KURL(NullURL(), "http://example.test/cat.jpg");
+  url_test_helpers::RegisterMockedErrorURLLoad(href_url);
+  LinkLoadParameters params(
+      LinkRelAttribute("prefetch"), kCrossOriginAttributeNotSet, "image/jpg",
+      "", "", "", "", String(), network::mojom::ReferrerPolicy::kDefault,
+      href_url, String() /* image_srcset */, String() /* image_sizes */);
+  loader->LoadLink(params, dummy_page_holder->GetDocument());
+  ASSERT_TRUE(dummy_page_holder->GetDocument().Fetcher());
+  Resource* resource = loader->GetResourceForTesting();
+  EXPECT_TRUE(resource);
+
+  if (redirect_mode_is_error_) {
+    EXPECT_EQ(resource->GetResourceRequest().GetRedirectMode(),
+              network::mojom::RedirectMode::kError);
+  } else {
+    EXPECT_EQ(resource->GetResourceRequest().GetRedirectMode(),
+              network::mojom::RedirectMode::kFollow);
+  }
+
+  Platform::Current()
+      ->GetURLLoaderMockFactory()
+      ->UnregisterAllURLsAndClearMemoryCache();
+}
+
 class LinkLoaderTest : public testing::Test {
  protected:
   ScopedTestingPlatformSupport<TestingPlatformSupportWithNetworkHintsMock>
diff --git a/third_party/blink/renderer/core/loader/preload_helper.cc b/third_party/blink/renderer/core/loader/preload_helper.cc
index e6ff13d..67eca2a 100644
--- a/third_party/blink/renderer/core/loader/preload_helper.cc
+++ b/third_party/blink/renderer/core/loader/preload_helper.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/core/loader/preload_helper.h"
 
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_prescient_networking.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
@@ -481,6 +482,11 @@
     UseCounter::Count(document, WebFeature::kLinkRelPrefetch);
 
     ResourceRequest resource_request(params.href);
+
+    if (base::FeatureList::IsEnabled(features::kPrefetchRedirectError)) {
+      resource_request.SetRedirectMode(network::mojom::RedirectMode::kError);
+    }
+
     resource_request.SetReferrerPolicy(params.referrer_policy);
     resource_request.SetFetchImportanceMode(
         GetFetchImportanceAttributeValue(params.importance));
diff --git a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc
index 866e423..1e4799a9 100644
--- a/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc
+++ b/third_party/blink/renderer/core/page/scrolling/scrolling_coordinator_test.cc
@@ -1907,6 +1907,11 @@
 
 TEST_P(PaintNonFastScrollableRegionsScrollingCoordinatorTest,
        NonCompositedResizerNonFastScrollableRegion) {
+  // TODO(pdr): Paint non-fast scrollable regions for resizers
+  // (crbug.com/864567).
+  if (RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled())
+    return;
+
   GetWebView()->GetPage()->GetSettings().SetPreferCompositingToLCDTextEnabled(
       false);
   LoadHTML(R"HTML(
@@ -1920,7 +1925,6 @@
       }
     </style>
     <div id="container">
-      <div id="offset" style="height: 35px;"></div>
       <div id="scroller"></div>
     </div>
   )HTML");
@@ -1936,11 +1940,15 @@
   // when the container moves and not when the viewport scrolls.
   auto region =
       container_graphics_layer->CcLayer()->non_fast_scrollable_region();
-  EXPECT_EQ(region.bounds(), gfx::Rect(66, 101, 14, 14));
+  EXPECT_EQ(region.bounds(), gfx::Rect(66, 66, 14, 14));
 }
 
 TEST_P(PaintNonFastScrollableRegionsScrollingCoordinatorTest,
        CompositedResizerNonFastScrollableRegion) {
+  // TODO(pdr): Paint non-fast scrollable regions for resizers
+  // (crbug.com/864567).
+  if (RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled())
+    return;
   LoadHTML(R"HTML(
     <style>
       #container { will-change: transform; }
@@ -1953,7 +1961,6 @@
       }
     </style>
     <div id="container">
-      <div id="offset" style="height: 35px;"></div>
       <div id="scroller"></div>
     </div>
   )HTML");
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
index e2f49a6..b75eb409 100644
--- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
+++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -145,8 +145,7 @@
       GetScrollAnimator().SetCurrentOffset(scroll_offset_);
     element->SetSavedLayerScrollOffset(ScrollOffset());
   }
-  if (!RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled())
-    UpdateResizerAreaSet();
+  UpdateResizerAreaSet();
 }
 
 PaintLayerScrollableArea::~PaintLayerScrollableArea() {
@@ -185,11 +184,9 @@
       element->SetSavedLayerScrollOffset(scroll_offset_);
   }
 
-  if (!RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled()) {
-    if (LocalFrame* frame = GetLayoutBox()->GetFrame()) {
-      if (LocalFrameView* frame_view = frame->View())
-        frame_view->RemoveResizerArea(*GetLayoutBox());
-    }
+  if (LocalFrame* frame = GetLayoutBox()->GetFrame()) {
+    if (LocalFrameView* frame_view = frame->View())
+      frame_view->RemoveResizerArea(*GetLayoutBox());
   }
 
   // Note: it is not safe to call ScrollAnchor::clear if the document is being
@@ -1224,8 +1221,7 @@
     VerticalScrollbar()->StyleChanged();
 
   UpdateScrollCornerStyle();
-  if (!RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled())
-    UpdateResizerAreaSet();
+  UpdateResizerAreaSet();
   UpdateResizerStyle(old_style);
 }
 
diff --git a/third_party/blink/renderer/core/paint/scrollable_area_painter.cc b/third_party/blink/renderer/core/paint/scrollable_area_painter.cc
index d4361da..6bb2c7e7 100644
--- a/third_party/blink/renderer/core/paint/scrollable_area_painter.cc
+++ b/third_party/blink/renderer/core/paint/scrollable_area_painter.cc
@@ -18,7 +18,6 @@
 #include "third_party/blink/renderer/platform/graphics/graphics_layer.h"
 #include "third_party/blink/renderer/platform/graphics/paint/drawing_recorder.h"
 #include "third_party/blink/renderer/platform/graphics/paint/scoped_paint_chunk_properties.h"
-#include "third_party/blink/renderer/platform/graphics/paint/scroll_hit_test_display_item.h"
 
 namespace blink {
 
@@ -36,18 +35,6 @@
     return;
   abs_rect.MoveBy(paint_offset);
 
-  const auto& client = DisplayItemClientForCorner();
-  if (RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled()) {
-    IntRect touch_rect = scrollable_area_->ResizerCornerRect(
-        GetScrollableArea().GetLayoutBox()->PixelSnappedBorderBoxRect(
-            scrollable_area_->Layer()->SubpixelAccumulation()),
-        kResizerForTouch);
-    touch_rect.MoveBy(paint_offset);
-    ScrollHitTestDisplayItem::Record(context, client,
-                                     DisplayItem::kResizerScrollHitTest,
-                                     nullptr, touch_rect);
-  }
-
   if (const auto* resizer = GetScrollableArea().Resizer()) {
     if (!cull_rect.Intersects(abs_rect))
       return;
@@ -57,6 +44,7 @@
     return;
   }
 
+  const auto& client = DisplayItemClientForCorner();
   if (DrawingRecorder::UseCachedDrawingIfPossible(context, client,
                                                   DisplayItem::kResizer))
     return;
diff --git a/third_party/blink/renderer/core/scheduler/DEPS b/third_party/blink/renderer/core/scheduler_integration_tests/DEPS
similarity index 100%
rename from third_party/blink/renderer/core/scheduler/DEPS
rename to third_party/blink/renderer/core/scheduler_integration_tests/DEPS
diff --git a/third_party/blink/renderer/core/scheduler/OWNERS b/third_party/blink/renderer/core/scheduler_integration_tests/OWNERS
similarity index 100%
rename from third_party/blink/renderer/core/scheduler/OWNERS
rename to third_party/blink/renderer/core/scheduler_integration_tests/OWNERS
diff --git a/third_party/blink/renderer/core/scheduler/README.md b/third_party/blink/renderer/core/scheduler_integration_tests/README.md
similarity index 100%
rename from third_party/blink/renderer/core/scheduler/README.md
rename to third_party/blink/renderer/core/scheduler_integration_tests/README.md
diff --git a/third_party/blink/renderer/core/scheduler/frame_scheduler_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/frame_scheduler_test.cc
similarity index 99%
rename from third_party/blink/renderer/core/scheduler/frame_scheduler_test.cc
rename to third_party/blink/renderer/core/scheduler_integration_tests/frame_scheduler_test.cc
index 06ef1325..6274292 100644
--- a/third_party/blink/renderer/core/scheduler/frame_scheduler_test.cc
+++ b/third_party/blink/renderer/core/scheduler_integration_tests/frame_scheduler_test.cc
@@ -2,11 +2,11 @@
 // Use of this source code if governed by a BSD-style license that can be
 // found in LICENSE file.
 
+#include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_request.h"
 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
-#include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
 
 using testing::ElementsAre;
 
diff --git a/third_party/blink/renderer/core/scheduler/frame_throttling_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/frame_throttling_test.cc
similarity index 100%
rename from third_party/blink/renderer/core/scheduler/frame_throttling_test.cc
rename to third_party/blink/renderer/core/scheduler_integration_tests/frame_throttling_test.cc
diff --git a/third_party/blink/renderer/core/scheduler/scheduler_affecting_features_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/scheduler_affecting_features_test.cc
similarity index 100%
rename from third_party/blink/renderer/core/scheduler/scheduler_affecting_features_test.cc
rename to third_party/blink/renderer/core/scheduler_integration_tests/scheduler_affecting_features_test.cc
diff --git a/third_party/blink/renderer/core/scheduler/throttling_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc
similarity index 97%
rename from third_party/blink/renderer/core/scheduler/throttling_test.cc
rename to third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc
index f3e336e9..b7be15a 100644
--- a/third_party/blink/renderer/core/scheduler/throttling_test.cc
+++ b/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc
@@ -12,8 +12,8 @@
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 
-using testing::ElementsAre;
 using testing::AnyOf;
+using testing::ElementsAre;
 
 namespace blink {
 
@@ -23,9 +23,7 @@
  public:
   DisableBackgroundThrottlingIsRespectedTest()
       : ScopedTimerThrottlingForBackgroundTabsForTest(false) {}
-  void SetUp() override {
-    SimTest::SetUp();
-  }
+  void SetUp() override { SimTest::SetUp(); }
 };
 
 TEST_F(DisableBackgroundThrottlingIsRespectedTest,
diff --git a/third_party/blink/renderer/core/scheduler/virtual_time_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/virtual_time_test.cc
similarity index 100%
rename from third_party/blink/renderer/core/scheduler/virtual_time_test.cc
rename to third_party/blink/renderer/core/scheduler_integration_tests/virtual_time_test.cc
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
index 948ffbc..15f369b 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
@@ -150,7 +150,8 @@
 }  // namespace
 
 bool RequireTrustedTypesCheck(const ExecutionContext* execution_context) {
-  return execution_context && execution_context->RequireTrustedTypes();
+  return execution_context && execution_context->RequireTrustedTypes() &&
+         !ContentSecurityPolicy::ShouldBypassMainWorld(execution_context);
 }
 
 String GetStringFromTrustedType(
diff --git a/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc b/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc
index e40002e..247081e 100644
--- a/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc
+++ b/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc
@@ -53,7 +53,7 @@
   AccumulateArrayBuffersForAllWorlds(isolate, to_transfer, buffer_handles);
 
   for (const auto& buffer_handle : buffer_handles)
-    buffer_handle->Neuter();
+    buffer_handle->Detach();
 
   return true;
 }
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
index 520d9847..2ec270e 100644
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -417,6 +417,7 @@
     "webshare/navigator_share_test.cc",
     "websockets/dom_websocket_test.cc",
     "websockets/websocket_channel_impl_test.cc",
+    "websockets/websocket_common_test.cc",
     "worklet/animation_and_paint_worklet_thread_test.cc",
     "worklet/worklet_thread_test_common.cc",
     "worklet/worklet_thread_test_common.h",
diff --git a/third_party/blink/renderer/modules/app_banner/app_banner_controller.cc b/third_party/blink/renderer/modules/app_banner/app_banner_controller.cc
index 07b8709..e00b3d0 100644
--- a/third_party/blink/renderer/modules/app_banner/app_banner_controller.cc
+++ b/third_party/blink/renderer/modules/app_banner/app_banner_controller.cc
@@ -32,7 +32,6 @@
     mojom::blink::AppBannerServicePtr service_ptr,
     mojom::blink::AppBannerEventRequest event_request,
     const Vector<String>& platforms,
-    bool require_gesture,
     BannerPromptRequestCallback callback) {
   // TODO(hajimehoshi): Add tests for the case the frame is detached.
   if (!frame_ || !frame_->GetDocument() || !frame_->IsAttached()) {
@@ -43,8 +42,8 @@
   mojom::AppBannerPromptReply reply =
       frame_->DomWindow()->DispatchEvent(*BeforeInstallPromptEvent::Create(
           event_type_names::kBeforeinstallprompt, *frame_,
-          std::move(service_ptr), std::move(event_request), platforms,
-          require_gesture)) == DispatchEventResult::kNotCanceled
+          std::move(service_ptr), std::move(event_request), platforms)) ==
+              DispatchEventResult::kNotCanceled
           ? mojom::AppBannerPromptReply::NONE
           : mojom::AppBannerPromptReply::CANCEL;
 
diff --git a/third_party/blink/renderer/modules/app_banner/app_banner_controller.h b/third_party/blink/renderer/modules/app_banner/app_banner_controller.h
index 2143c54..fa40630 100644
--- a/third_party/blink/renderer/modules/app_banner/app_banner_controller.h
+++ b/third_party/blink/renderer/modules/app_banner/app_banner_controller.h
@@ -26,7 +26,6 @@
   void BannerPromptRequest(mojom::blink::AppBannerServicePtr,
                            mojom::blink::AppBannerEventRequest,
                            const Vector<String>& platforms,
-                           bool require_gesture,
                            BannerPromptRequestCallback) override;
 
  private:
diff --git a/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.cc b/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.cc
index 34b84911..80652c1 100644
--- a/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.cc
+++ b/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.cc
@@ -18,8 +18,7 @@
     LocalFrame& frame,
     mojom::blink::AppBannerServicePtr service_ptr,
     mojom::blink::AppBannerEventRequest event_request,
-    const Vector<String>& platforms,
-    bool require_gesture)
+    const Vector<String>& platforms)
     : Event(name, Bubbles::kNo, Cancelable::kYes),
       ContextClient(&frame),
       banner_service_(std::move(service_ptr)),
@@ -30,8 +29,7 @@
       user_choice_(MakeGarbageCollected<UserChoiceProperty>(
           frame.GetDocument(),
           this,
-          UserChoiceProperty::kUserChoice)),
-      require_gesture_(require_gesture) {
+          UserChoiceProperty::kUserChoice)) {
   DCHECK(banner_service_);
   DCHECK(binding_.is_bound());
   UseCounter::Count(frame.GetDocument(), WebFeature::kBeforeInstallPromptEvent);
@@ -41,10 +39,7 @@
     ExecutionContext* execution_context,
     const AtomicString& name,
     const BeforeInstallPromptEventInit* init)
-    : Event(name, init),
-      ContextClient(execution_context),
-      binding_(this),
-      require_gesture_(true) {
+    : Event(name, init), ContextClient(execution_context), binding_(this) {
   if (init->hasPlatforms())
     platforms_ = init->platforms();
 }
@@ -86,8 +81,8 @@
   ExecutionContext* context = ExecutionContext::From(script_state);
   Document* doc = To<Document>(context);
 
-  if (require_gesture_ && !LocalFrame::ConsumeTransientUserActivation(
-                              doc ? doc->GetFrame() : nullptr)) {
+  if (!LocalFrame::ConsumeTransientUserActivation(doc ? doc->GetFrame()
+                                                      : nullptr)) {
     return ScriptPromise::RejectWithDOMException(
         script_state,
         MakeGarbageCollected<DOMException>(
diff --git a/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.h b/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.h
index 77d7a77..411ad81 100644
--- a/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.h
+++ b/third_party/blink/renderer/modules/app_banner/before_install_prompt_event.h
@@ -40,8 +40,7 @@
                            LocalFrame&,
                            mojom::blink::AppBannerServicePtr,
                            mojom::blink::AppBannerEventRequest,
-                           const Vector<String>& platforms,
-                           bool require_gesture);
+                           const Vector<String>& platforms);
   BeforeInstallPromptEvent(ExecutionContext*,
                            const AtomicString& name,
                            const BeforeInstallPromptEventInit*);
@@ -52,11 +51,10 @@
       LocalFrame& frame,
       mojom::blink::AppBannerServicePtr service_ptr,
       mojom::blink::AppBannerEventRequest event_request,
-      const Vector<String>& platforms,
-      bool require_gesture) {
+      const Vector<String>& platforms) {
     return MakeGarbageCollected<BeforeInstallPromptEvent>(
         name, frame, std::move(service_ptr), std::move(event_request),
-        platforms, require_gesture);
+        platforms);
   }
 
   static BeforeInstallPromptEvent* Create(
@@ -90,10 +88,6 @@
   mojo::Binding<mojom::blink::AppBannerEvent> binding_;
   Vector<String> platforms_;
   Member<UserChoiceProperty> user_choice_;
-
-  // TODO(crbug.com/869780): remove this member when the ExperimentalAppBanners
-  // feature is removed.
-  bool require_gesture_;
 };
 
 DEFINE_TYPE_CASTS(BeforeInstallPromptEvent,
diff --git a/third_party/blink/renderer/modules/content_index/content_index.cc b/third_party/blink/renderer/modules/content_index/content_index.cc
index 20d418ffd..b319a58 100644
--- a/third_party/blink/renderer/modules/content_index/content_index.cc
+++ b/third_party/blink/renderer/modules/content_index/content_index.cc
@@ -106,9 +106,7 @@
   // TODO(crbug.com/973844): Use ideal icon dimensions instead of the max.
   threaded_icon_loader->Start(
       registration_->GetExecutionContext(), resource_request,
-      /* resize_dimensions= */
-      WebSize(mojom::blink::ContentIndexService::kMaxIconDimension,
-              mojom::blink::ContentIndexService::kMaxIconDimension),
+      /* resize_dimensions= */ WebSize(256, 256),
       WTF::Bind(&ContentIndex::DidGetIcon, WrapPersistent(this),
                 WrapPersistent(resolver), WrapPersistent(threaded_icon_loader),
                 mojom::blink::ContentDescription::From(description)));
@@ -134,7 +132,7 @@
       description->launch_url);
 
   GetService()->Add(registration_->RegistrationId(), std::move(description),
-                    icon, launch_url,
+                    {std::move(icon)}, launch_url,
                     WTF::Bind(&ContentIndex::DidAdd, WrapPersistent(this),
                               WrapPersistent(resolver)));
 }
diff --git a/third_party/blink/renderer/modules/media/webmediaplayer_util.cc b/third_party/blink/renderer/modules/media/webmediaplayer_util.cc
index a822a2d..ce8fdf1 100644
--- a/third_party/blink/renderer/modules/media/webmediaplayer_util.cc
+++ b/third_party/blink/renderer/modules/media/webmediaplayer_util.cc
@@ -17,8 +17,6 @@
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
-using namespace media;
-
 namespace {
 
 std::string LoadTypeToString(blink::WebMediaPlayer::LoadType load_type) {
@@ -36,19 +34,19 @@
 }
 
 void RunSetSinkIdCallback(blink::WebSetSinkIdCompleteCallback callback,
-                          OutputDeviceStatus result) {
+                          media::OutputDeviceStatus result) {
   switch (result) {
-    case OUTPUT_DEVICE_STATUS_OK:
+    case media::OUTPUT_DEVICE_STATUS_OK:
       std::move(callback).Run(/*error =*/base::nullopt);
       break;
-    case OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND:
+    case media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND:
       std::move(callback).Run(blink::WebSetSinkIdError::kNotFound);
       break;
-    case OUTPUT_DEVICE_STATUS_ERROR_NOT_AUTHORIZED:
+    case media::OUTPUT_DEVICE_STATUS_ERROR_NOT_AUTHORIZED:
       std::move(callback).Run(blink::WebSetSinkIdError::kNotAuthorized);
       break;
-    case OUTPUT_DEVICE_STATUS_ERROR_TIMED_OUT:
-    case OUTPUT_DEVICE_STATUS_ERROR_INTERNAL:
+    case media::OUTPUT_DEVICE_STATUS_ERROR_TIMED_OUT:
+    case media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL:
       std::move(callback).Run(blink::WebSetSinkIdError::kAborted);
       break;
   }
@@ -91,7 +89,8 @@
   return media::mojom::MediaURLScheme::kUnknown;
 }
 
-WebTimeRanges ConvertToWebTimeRanges(const Ranges<base::TimeDelta>& ranges) {
+WebTimeRanges ConvertToWebTimeRanges(
+    const media::Ranges<base::TimeDelta>& ranges) {
   WebTimeRanges result(ranges.size());
   for (size_t i = 0; i < ranges.size(); ++i) {
     result[i].start = ranges.start(i).InSecondsF();
@@ -100,32 +99,33 @@
   return result;
 }
 
-WebMediaPlayer::NetworkState PipelineErrorToNetworkState(PipelineStatus error) {
+WebMediaPlayer::NetworkState PipelineErrorToNetworkState(
+    media::PipelineStatus error) {
   switch (error) {
-    case PIPELINE_ERROR_NETWORK:
-    case PIPELINE_ERROR_READ:
-    case CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR:
+    case media::PIPELINE_ERROR_NETWORK:
+    case media::PIPELINE_ERROR_READ:
+    case media::CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR:
       return WebMediaPlayer::kNetworkStateNetworkError;
 
-    case PIPELINE_ERROR_INITIALIZATION_FAILED:
-    case PIPELINE_ERROR_COULD_NOT_RENDER:
-    case PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED:
-    case DEMUXER_ERROR_COULD_NOT_OPEN:
-    case DEMUXER_ERROR_COULD_NOT_PARSE:
-    case DEMUXER_ERROR_NO_SUPPORTED_STREAMS:
-    case DEMUXER_ERROR_DETECTED_HLS:
-    case DECODER_ERROR_NOT_SUPPORTED:
+    case media::PIPELINE_ERROR_INITIALIZATION_FAILED:
+    case media::PIPELINE_ERROR_COULD_NOT_RENDER:
+    case media::PIPELINE_ERROR_EXTERNAL_RENDERER_FAILED:
+    case media::DEMUXER_ERROR_COULD_NOT_OPEN:
+    case media::DEMUXER_ERROR_COULD_NOT_PARSE:
+    case media::DEMUXER_ERROR_NO_SUPPORTED_STREAMS:
+    case media::DEMUXER_ERROR_DETECTED_HLS:
+    case media::DECODER_ERROR_NOT_SUPPORTED:
       return WebMediaPlayer::kNetworkStateFormatError;
 
-    case PIPELINE_ERROR_DECODE:
-    case PIPELINE_ERROR_ABORT:
-    case PIPELINE_ERROR_INVALID_STATE:
-    case CHUNK_DEMUXER_ERROR_APPEND_FAILED:
-    case CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR:
-    case AUDIO_RENDERER_ERROR:
+    case media::PIPELINE_ERROR_DECODE:
+    case media::PIPELINE_ERROR_ABORT:
+    case media::PIPELINE_ERROR_INVALID_STATE:
+    case media::CHUNK_DEMUXER_ERROR_APPEND_FAILED:
+    case media::CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR:
+    case media::AUDIO_RENDERER_ERROR:
       return WebMediaPlayer::kNetworkStateDecodeError;
 
-    case PIPELINE_OK:
+    case media::PIPELINE_OK:
       NOTREACHED() << "Unexpected status! " << error;
   }
   return WebMediaPlayer::kNetworkStateFormatError;
@@ -134,7 +134,7 @@
 void ReportMetrics(WebMediaPlayer::LoadType load_type,
                    const WebURL& url,
                    const WebLocalFrame& frame,
-                   MediaLog* media_log) {
+                   media::MediaLog* media_log) {
   DCHECK(media_log);
 
   // Report URL scheme, such as http, https, file, blob etc. Only do this for
@@ -167,16 +167,16 @@
 }
 
 void ReportPipelineError(WebMediaPlayer::LoadType load_type,
-                         PipelineStatus error,
-                         MediaLog* media_log) {
-  DCHECK_NE(PIPELINE_OK, error);
+                         media::PipelineStatus error,
+                         media::MediaLog* media_log) {
+  DCHECK_NE(media::PIPELINE_OK, error);
 
   // Report the origin from where the media player is created.
   media_log->RecordRapporWithSecurityOrigin(
       "Media.OriginUrl." + LoadTypeToString(load_type) + ".PipelineError");
 }
 
-OutputDeviceStatusCB ConvertToOutputDeviceStatusCB(
+media::OutputDeviceStatusCB ConvertToOutputDeviceStatusCB(
     WebSetSinkIdCompleteCallback callback) {
   return media::BindToCurrentLoop(
       WTF::Bind(RunSetSinkIdCallback, std::move(callback)));
diff --git a/third_party/blink/renderer/modules/media_capabilities/DEPS b/third_party/blink/renderer/modules/media_capabilities/DEPS
index 5e42cc2e..35cf7adf6 100644
--- a/third_party/blink/renderer/modules/media_capabilities/DEPS
+++ b/third_party/blink/renderer/modules/media_capabilities/DEPS
@@ -3,8 +3,8 @@
     "+media/base/supported_types.h",
     "+media/base/video_codecs.h",
     "+media/filters/stream_parser_factory.h",
-    "+media/mojo/interfaces/media_types.mojom-blink.h",
-    "+media/mojo/interfaces/video_decode_perf_history.mojom-blink.h",
+    "+media/mojo/mojom/media_types.mojom-blink.h",
+    "+media/mojo/mojom/video_decode_perf_history.mojom-blink.h",
     "-third_party/blink/renderer/modules",
     "+third_party/blink/renderer/modules/encryptedmedia",
     "+third_party/blink/renderer/modules/media_capabilities",
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
index 8c1c23d..1f8d0b7c 100644
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
+++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc
@@ -11,7 +11,7 @@
 #include "media/base/mime_util.h"
 #include "media/base/supported_types.h"
 #include "media/filters/stream_parser_factory.h"
-#include "media/mojo/interfaces/media_types.mojom-blink.h"
+#include "media/mojo/mojom/media_types.mojom-blink.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "third_party/blink/public/mojom/web_feature/web_feature.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/media_capabilities/web_media_capabilities_info.h"
diff --git a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
index f04d0ce7..a052fd0 100644
--- a/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
+++ b/third_party/blink/renderer/modules/media_capabilities/media_capabilities.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIA_CAPABILITIES_MEDIA_CAPABILITIES_H_
 
 #include "media/base/video_codecs.h"  // for media::VideoCodecProfile
-#include "media/mojo/interfaces/video_decode_perf_history.mojom-blink.h"
+#include "media/mojo/mojom/video_decode_perf_history.mojom-blink.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/visitor.h"
diff --git a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
index e839835..a1f063e5 100644
--- a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
+++ b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
@@ -385,6 +385,8 @@
 video::-webkit-media-controls-fullscreen-button:disabled {
   background-color: initial;
   opacity: 0.3;
+
+  cursor: default;
 }
 
 audio::-internal-media-controls-cast-button,
@@ -623,6 +625,11 @@
   box-sizing: unset !important;
 }
 
+audio::-webkit-media-controls-timeline:disabled,
+video::-webkit-media-controls-timeline:disabled {
+  cursor: default;
+}
+
 audio::-webkit-media-controls-timeline,
 video::-webkit-media-controls.audio-only [pseudo="-webkit-media-controls-timeline"] {
   padding-top: 26px;
diff --git a/third_party/blink/renderer/modules/mediastream/DEPS b/third_party/blink/renderer/modules/mediastream/DEPS
index a1f30af..4c8cff6c 100644
--- a/third_party/blink/renderer/modules/mediastream/DEPS
+++ b/third_party/blink/renderer/modules/mediastream/DEPS
@@ -30,7 +30,7 @@
     "+media/audio",
     "+media/base",
     "+media/capture",
-    "+media/mojo/interfaces",
+    "+media/mojo/mojom",
     "+media/webrtc/audio_processor_controls.h",
     "+media/webrtc/webrtc_switches.h",
     "+mojo/public/cpp/bindings/binding.h",
diff --git a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc
index 1de720ff..82ee81f 100644
--- a/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.cc
@@ -8,7 +8,7 @@
 
 #include "base/strings/stringprintf.h"
 #include "media/audio/audio_source_parameters.h"
-#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h"
+#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/web/web_local_frame.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_device.cc b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_device.cc
index 4122604..f51179d 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_device.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_device.cc
@@ -11,7 +11,7 @@
 #include <vector>
 
 #include "media/base/limits.h"
-#include "media/mojo/interfaces/display_media_information.mojom-blink.h"
+#include "media/mojo/mojom/display_media_information.mojom-blink.h"
 #include "third_party/blink/public/platform/web_media_constraints.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_source_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_source_test.cc
index a5df5cd..2acf4898 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_source_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_source_test.cc
@@ -12,7 +12,7 @@
 #include "media/base/limits.h"
 #include "media/base/video_frame.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h"
+#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_video_track.h"
 #include "third_party/blink/public/web/modules/mediastream/mock_constraint_factory.h"
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
index 5947567..83f7e20 100644
--- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
@@ -17,7 +17,7 @@
 #include "media/base/sample_rates.h"
 #include "media/webrtc/audio_processor_controls.h"
 #include "media/webrtc/webrtc_switches.h"
-#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h"
+#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/mediastream/media_stream_audio_processor.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client.cc b/third_party/blink/renderer/modules/mediastream/user_media_client.cc
index 6096ec2..1b1ece8 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_client.cc
+++ b/third_party/blink/renderer/modules/mediastream/user_media_client.cc
@@ -76,4 +76,11 @@
   return client_->IsCapturing();
 }
 
+void UserMediaClient::ContextDestroyed() {
+  if (!client_)
+    return;
+
+  client_->ContextDestroyed();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client.h b/third_party/blink/renderer/modules/mediastream/user_media_client.h
index 96b17db..c621b1bf 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_client.h
+++ b/third_party/blink/renderer/modules/mediastream/user_media_client.h
@@ -58,6 +58,7 @@
   void ApplyConstraints(ApplyConstraintsRequest*);
   void StopTrack(MediaStreamComponent*);
   bool IsCapturing();
+  void ContextDestroyed();
 
  private:
   WebUserMediaClient* client_;
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_controller.cc b/third_party/blink/renderer/modules/mediastream/user_media_controller.cc
index 658bd8e..10de2d4 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_controller.cc
+++ b/third_party/blink/renderer/modules/mediastream/user_media_controller.cc
@@ -23,6 +23,7 @@
  */
 
 #include "third_party/blink/renderer/modules/mediastream/user_media_controller.h"
+#include "third_party/blink/renderer/core/dom/document.h"
 
 namespace blink {
 
@@ -31,10 +32,17 @@
 UserMediaController::UserMediaController(
     LocalFrame& frame,
     std::unique_ptr<UserMediaClient> client)
-    : Supplement<LocalFrame>(frame), client_(std::move(client)) {}
+    : Supplement<LocalFrame>(frame),
+      ContextLifecycleObserver(frame.GetDocument()),
+      client_(std::move(client)) {}
 
 void UserMediaController::Trace(blink::Visitor* visitor) {
   Supplement<LocalFrame>::Trace(visitor);
+  ContextLifecycleObserver::Trace(visitor);
+}
+
+void UserMediaController::ContextDestroyed(ExecutionContext*) {
+  client_->ContextDestroyed();
 }
 
 void ProvideUserMediaTo(LocalFrame& frame,
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_controller.h b/third_party/blink/renderer/modules/mediastream/user_media_controller.h
index c44e234..adf4a3c 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_controller.h
+++ b/third_party/blink/renderer/modules/mediastream/user_media_controller.h
@@ -27,6 +27,7 @@
 
 #include <memory>
 
+#include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/modules/mediastream/user_media_client.h"
 
@@ -38,7 +39,8 @@
 
 class UserMediaController final
     : public GarbageCollectedFinalized<UserMediaController>,
-      public Supplement<LocalFrame> {
+      public Supplement<LocalFrame>,
+      public ContextLifecycleObserver {
   USING_GARBAGE_COLLECTED_MIXIN(UserMediaController);
 
  public:
@@ -55,6 +57,9 @@
   void StopTrack(MediaStreamComponent*);
   bool HasRequestedUserMedia();
 
+  // ContextLifecycleObserver implementation.
+  void ContextDestroyed(ExecutionContext*) override;
+
   static UserMediaController* From(LocalFrame* frame) {
     return Supplement<LocalFrame>::From<UserMediaController>(frame);
   }
diff --git a/third_party/blink/renderer/modules/nfc/nfc.cc b/third_party/blink/renderer/modules/nfc/nfc.cc
index 7af48678..8126d1fe 100644
--- a/third_party/blink/renderer/modules/nfc/nfc.cc
+++ b/third_party/blink/renderer/modules/nfc/nfc.cc
@@ -165,11 +165,12 @@
 
   auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
   requests_.insert(resolver);
-  auto watch_callback =
-      WTF::Bind(&NFC::OnWatchRegistered, WrapPersistent(this),
-                WrapPersistent(callback), WrapPersistent(resolver));
+  auto watch_callback = WTF::Bind(&NFC::OnWatchRegistered, WrapPersistent(this),
+                                  WrapPersistent(callback),
+                                  WrapPersistent(resolver), next_watch_id_);
   nfc_->Watch(device::mojom::blink::NFCReaderOptions::From(options),
-              std::move(watch_callback));
+              next_watch_id_, std::move(watch_callback));
+  next_watch_id_++;
   return resolver->Promise();
 }
 
@@ -179,15 +180,14 @@
   if (!promise.IsEmpty())
     return promise;
 
-  if (id) {
-    callbacks_.erase(id);
-  } else {
+  if (!callbacks_.Contains(id)) {
     return ScriptPromise::RejectWithDOMException(
         script_state,
         MakeGarbageCollected<DOMException>(DOMExceptionCode::kNotFoundError,
                                            kNfcWatchIdNotFound));
   }
 
+  callbacks_.erase(id);
   auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
   requests_.insert(resolver);
   nfc_->CancelWatch(id,
@@ -310,16 +310,6 @@
                             device::mojom::blink::NFCErrorPtr error) {
   requests_.erase(resolver);
 
-  // Invalid id was returned.
-  // https://w3c.github.io/web-nfc/#dom-nfc-watch
-  // 8. If the request fails, reject promise with "NotSupportedError"
-  // and abort these steps.
-  if (!id) {
-    resolver->Reject(NFCErrorTypeToDOMException(
-        device::mojom::blink::NFCErrorType::NOT_SUPPORTED));
-    return;
-  }
-
   if (error.is_null()) {
     callbacks_.insert(id, callback);
     resolver->Resolve(id);
diff --git a/third_party/blink/renderer/modules/nfc/nfc.h b/third_party/blink/renderer/modules/nfc/nfc.h
index 72de8f1..4a4ac01 100644
--- a/third_party/blink/renderer/modules/nfc/nfc.h
+++ b/third_party/blink/renderer/modules/nfc/nfc.h
@@ -93,6 +93,10 @@
   HeapHashSet<Member<ScriptPromiseResolver>> requests_;
   using WatchCallbacksMap = HeapHashMap<uint32_t, Member<V8MessageCallback>>;
   WatchCallbacksMap callbacks_;
+
+  // Identifies watch requests tied to a given Mojo connection of NFC interface.
+  // Incremented each time a watch request is made.
+  uint32_t next_watch_id_ = 1;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/nfc/nfc_proxy.cc b/third_party/blink/renderer/modules/nfc/nfc_proxy.cc
index d3f00230..1a1ce084 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_proxy.cc
+++ b/third_party/blink/renderer/modules/nfc/nfc_proxy.cc
@@ -16,10 +16,6 @@
 
 namespace blink {
 
-namespace {
-constexpr uint32_t kInvalidNfcWatchId = 0;
-}
-
 // static
 const char NFCProxy::kSupplementName[] = "NFCProxy";
 
@@ -65,16 +61,18 @@
 
   EnsureMojoConnection();
   nfc_->Watch(device::mojom::blink::NFCReaderOptions::From(reader->options()),
+              next_watch_id_,
               WTF::Bind(&NFCProxy::OnReaderRegistered, WrapPersistent(this),
-                        WrapPersistent(reader)));
-  readers_.insert(reader, kInvalidNfcWatchId);
+                        WrapPersistent(reader), next_watch_id_));
+  readers_.insert(reader, next_watch_id_);
+  next_watch_id_++;
 }
 
 void NFCProxy::StopReading(NFCReader* reader) {
   DCHECK(reader);
   auto iter = readers_.find(reader);
   if (iter != readers_.end()) {
-    if (nfc_ && iter->value != kInvalidNfcWatchId) {
+    if (nfc_) {
       // We do not need to notify |reader| of anything.
       nfc_->CancelWatch(iter->value,
                         device::mojom::blink::NFC::CancelWatchCallback());
@@ -108,36 +106,41 @@
 }
 
 // device::mojom::blink::NFCClient implementation.
-void NFCProxy::OnWatch(const Vector<uint32_t>& ids,
+void NFCProxy::OnWatch(const Vector<uint32_t>& watch_ids,
                        const String& serial_number,
                        device::mojom::blink::NDEFMessagePtr message) {
-  // Dispatch the event to all matched readers. Of course readers with
-  // kInvalidNfcWatchId do not match.
+  // Dispatch the event to all matched readers.
   // This loop is O(n^2), however, we assume the number of readers to be small
   // so it'd be just OK.
   for (auto pair : readers_) {
-    if (ids.Contains(pair.value)) {
+    if (watch_ids.Contains(pair.value)) {
       pair.key->OnReading(serial_number, *message);
     }
   }
 }
 
 void NFCProxy::OnReaderRegistered(NFCReader* reader,
-                                  uint32_t id,
+                                  uint32_t watch_id,
                                   device::mojom::blink::NFCErrorPtr error) {
   DCHECK(reader);
   // |reader| may have already stopped reading.
   if (!readers_.Contains(reader))
     return;
 
+  // |reader| already stopped reading for the previous |watch_id| request and
+  // started a new one, let's just ignore this response callback as we do not
+  // need to notify |reader| of anything for an obsoleted session.
+  if (readers_.at(reader) != watch_id)
+    return;
+
   if (error) {
     reader->OnError(error->error_type);
     readers_.erase(reader);
     return;
   }
 
-  DCHECK_NE(id, kInvalidNfcWatchId);
-  readers_.Set(reader, id);
+  // It's good the watch request has been accepted, we do nothing here but just
+  // wait for message notifications in OnWatch().
 }
 
 void NFCProxy::PageVisibilityChanged() {
@@ -204,12 +207,16 @@
 
   // Notify all active readers about the connection error and clear the list.
   ReaderMap readers = std::move(readers_);
-  for (auto pair : readers) {
+  for (auto& pair : readers) {
     // The reader may call StopReading() to remove itself from |readers_| when
     // handling the error.
     pair.key->OnError(device::mojom::blink::NFCErrorType::NOT_READABLE);
   }
 
+  // Each connection maintains its own watch ID numbering, so reset to 1 on
+  // connection error.
+  next_watch_id_ = 1;
+
   // Notify all writers about the connection error.
   for (auto& writer : writers_) {
     writer->OnMojoConnectionError();
diff --git a/third_party/blink/renderer/modules/nfc/nfc_proxy.h b/third_party/blink/renderer/modules/nfc/nfc_proxy.h
index 69163b5..28c2ccd1ae 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_proxy.h
+++ b/third_party/blink/renderer/modules/nfc/nfc_proxy.h
@@ -20,7 +20,7 @@
 class NFCWriter;
 
 // This is a proxy class used by NFCWriter(s) and NFCReader(s) to connect
-// to the DeviceService for device::mojom::blink::NFC service.
+// to implementation of device::mojom::blink::NFC interface.
 class MODULES_EXPORT NFCProxy final
     : public GarbageCollectedFinalized<NFCProxy>,
       public PageVisibilityObserver,
@@ -49,11 +49,10 @@
   void StartReading(NFCReader*);
   void StopReading(NFCReader*);
   bool IsReading(const NFCReader*);
-  void Push(device::mojom::blink::NDEFMessagePtr message,
-            device::mojom::blink::NFCPushOptionsPtr options,
-            device::mojom::blink::NFC::PushCallback cb);
-  void CancelPush(const String& target,
-                  device::mojom::blink::NFC::CancelPushCallback callback);
+  void Push(device::mojom::blink::NDEFMessagePtr,
+            device::mojom::blink::NFCPushOptionsPtr,
+            device::mojom::blink::NFC::PushCallback);
+  void CancelPush(const String&, device::mojom::blink::NFC::CancelPushCallback);
 
  private:
   // Implementation of device::mojom::blink::NFCClient.
@@ -61,9 +60,9 @@
                const String&,
                device::mojom::blink::NDEFMessagePtr) override;
 
-  void OnReaderRegistered(NFCReader* reader,
-                          uint32_t id,
-                          device::mojom::blink::NFCErrorPtr error);
+  void OnReaderRegistered(NFCReader*,
+                          uint32_t watch_id,
+                          device::mojom::blink::NFCErrorPtr);
 
   // Implementation of PageVisibilityObserver.
   void PageVisibilityChanged() override;
@@ -74,13 +73,17 @@
   void UpdateSuspendedStatus();
   bool ShouldSuspendNFC() const;
 
-  // For the Mojo connection with the DeviceService.
   void EnsureMojoConnection();
+
+  // This could only happen when the embedder does not implement NFC interface.
   void OnMojoConnectionError();
 
-  // The <NFCReader, WatchId> map. An reader is inserted with the WatchId
-  // initially being 0, then we send a watch request to |nfc_|, the watch ID is
-  // then updated to the value (>= 1) passed to OnReaderRegistered().
+  // Identifies watch requests tied to a given Mojo connection of NFC interface,
+  // i.e. |nfc_|. Incremented each time a watch request is made.
+  uint32_t next_watch_id_ = 1;
+
+  // The <NFCReader, WatchId> map keeps all readers that have started reading.
+  // The watch id comes from |next_watch_id_|.
   using ReaderMap = HeapHashMap<WeakMember<NFCReader>, uint32_t>;
   ReaderMap readers_;
 
diff --git a/third_party/blink/renderer/modules/nfc/nfc_proxy_test.cc b/third_party/blink/renderer/modules/nfc/nfc_proxy_test.cc
index a4b07422..c873865c 100644
--- a/third_party/blink/renderer/modules/nfc/nfc_proxy_test.cc
+++ b/third_party/blink/renderer/modules/nfc/nfc_proxy_test.cc
@@ -120,10 +120,10 @@
     std::move(callback).Run(nullptr);
   }
   void Watch(device::mojom::blink::NFCReaderOptionsPtr options,
+             uint32_t id,
              WatchCallback callback) override {
-    uint32_t id = ++last_watch_id_;
     watches_.insert(std::make_pair(id, std::move(options)));
-    std::move(callback).Run(id, nullptr);
+    std::move(callback).Run(nullptr);
   }
   void CancelWatch(uint32_t id, CancelWatchCallback callback) override {
     if (watches_.erase(id) < 1) {
@@ -142,7 +142,6 @@
 
   device::mojom::blink::NDEFMessagePtr tag_message_;
   device::mojom::blink::NFCClientPtr client_;
-  uint32_t last_watch_id_ = 0;
   std::map<uint32_t, device::mojom::blink::NFCReaderOptionsPtr> watches_;
   mojo::Binding<device::mojom::blink::NFC> binding_;
 };
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc
index 99259ce..8831286 100644
--- a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc
+++ b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source.cc
@@ -14,7 +14,7 @@
 #include "media/base/timestamp_constants.h"
 #include "media/base/video_frame.h"
 #include "media/base/video_util.h"
-#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-shared.h"
+#include "third_party/blink/public/mojom/mediastream/media_stream.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/webrtc/track_observer.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_video_frame_adapter.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_video_utils.h"
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 62759aa..acbf831 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
@@ -766,11 +766,6 @@
                             : stringOrUrl.GetAsTrustedScriptURL()->toString();
 
     KURL completed_url = CompleteURL(string_url);
-    // Bust the MemoryCache to ensure script requests reach the browser-side
-    // and get added to and retrieved from the ServiceWorker's script cache.
-    // FIXME: Revisit in light of the solution to crbug/388375.
-    RemoveURLFromMemoryCache(completed_url);
-
     if (installed_scripts_manager &&
         !installed_scripts_manager->IsScriptInstalled(completed_url)) {
       DCHECK(installed_scripts_manager->IsScriptInstalled(Url()));
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_swap_chain.cc b/third_party/blink/renderer/modules/webgpu/gpu_swap_chain.cc
index 799bdb1..a46cfae0 100644
--- a/third_party/blink/renderer/modules/webgpu/gpu_swap_chain.cc
+++ b/third_party/blink/renderer/modules/webgpu/gpu_swap_chain.cc
@@ -24,8 +24,9 @@
       device_(descriptor->device()),
       context_(context),
       usage_(AsDawnEnum<DawnTextureUsageBit>(descriptor->usage())) {
-  swap_buffers_ = base::AdoptRef(
-      new WebGPUSwapBufferProvider(this, GetDawnControlClient(), usage_));
+  swap_buffers_ = base::AdoptRef(new WebGPUSwapBufferProvider(
+      this, GetDawnControlClient(), usage_,
+      AsDawnEnum<DawnTextureFormat>(descriptor->format())));
 }
 
 GPUSwapChain::~GPUSwapChain() {
diff --git a/third_party/blink/renderer/modules/websockets/BUILD.gn b/third_party/blink/renderer/modules/websockets/BUILD.gn
index b7a03c2..1ec44e4 100644
--- a/third_party/blink/renderer/modules/websockets/BUILD.gn
+++ b/third_party/blink/renderer/modules/websockets/BUILD.gn
@@ -19,6 +19,8 @@
     "websocket_channel_client.h",
     "websocket_channel_impl.cc",
     "websocket_channel_impl.h",
+    "websocket_common.cc",
+    "websocket_common.h",
     "websocket_handle.h",
     "websocket_handle_client.h",
     "websocket_handle_impl.cc",
diff --git a/third_party/blink/renderer/modules/websockets/dom_websocket.cc b/third_party/blink/renderer/modules/websockets/dom_websocket.cc
index 6fc26af..b6262df7 100644
--- a/third_party/blink/renderer/modules/websockets/dom_websocket.cc
+++ b/third_party/blink/renderer/modules/websockets/dom_websocket.cc
@@ -30,6 +30,9 @@
 
 #include "third_party/blink/renderer/modules/websockets/dom_websocket.h"
 
+#include <string>
+#include <utility>
+
 #include "base/callback.h"
 #include "base/feature_list.h"
 #include "base/location.h"
@@ -73,15 +76,6 @@
 
 static const size_t kMaxByteSizeForHistogram = 100 * 1000 * 1000;
 static const int32_t kBucketCountForMessageSizeHistogram = 50;
-static const char kWebSocketSubprotocolSeparator[] = ", ";
-
-namespace {
-void LogMixedAutoupgradeStatus(blink::MixedContentAutoupgradeStatus status) {
-  // For websockets we use the response received element to log successful
-  // connections.
-  UMA_HISTOGRAM_ENUMERATION("MixedAutoupgrade.Websocket.Status", status);
-}
-}  // namespace
 
 namespace blink {
 
@@ -177,68 +171,18 @@
   visitor->Trace(events_);
 }
 
-const size_t kMaxReasonSizeInBytes = 123;
-
-static inline bool IsValidSubprotocolCharacter(UChar character) {
-  const UChar kMinimumProtocolCharacter = '!';  // U+0021.
-  const UChar kMaximumProtocolCharacter = '~';  // U+007E.
-  // Set to true if character does not matches "separators" ABNF defined in
-  // RFC2616. SP and HT are excluded since the range check excludes them.
-  bool is_not_separator =
-      character != '"' && character != '(' && character != ')' &&
-      character != ',' && character != '/' &&
-      !(character >= ':' &&
-        character <=
-            '@')  // U+003A - U+0040 (':', ';', '<', '=', '>', '?', '@').
-      && !(character >= '[' &&
-           character <= ']')  // U+005B - U+005D ('[', '\\', ']').
-      && character != '{' && character != '}';
-  return character >= kMinimumProtocolCharacter &&
-         character <= kMaximumProtocolCharacter && is_not_separator;
-}
-
-bool DOMWebSocket::IsValidSubprotocolString(const String& protocol) {
-  if (protocol.IsEmpty())
-    return false;
-  for (wtf_size_t i = 0; i < protocol.length(); ++i) {
-    if (!IsValidSubprotocolCharacter(protocol[i]))
-      return false;
-  }
-  return true;
-}
-
-static String EncodeSubprotocolString(const String& protocol) {
-  StringBuilder builder;
-  for (wtf_size_t i = 0; i < protocol.length(); i++) {
-    if (protocol[i] < 0x20 || protocol[i] > 0x7E)
-      builder.AppendFormat("\\u%04X", protocol[i]);
-    else if (protocol[i] == 0x5c)
-      builder.Append("\\\\");
-    else
-      builder.Append(protocol[i]);
-  }
-  return builder.ToString();
-}
-
-static String JoinStrings(const Vector<String>& strings,
-                          const char* separator) {
-  StringBuilder builder;
-  for (wtf_size_t i = 0; i < strings.size(); ++i) {
-    if (i)
-      builder.Append(separator);
-    builder.Append(strings[i]);
-  }
-  return builder.ToString();
-}
-
 static void SetInvalidStateErrorForSendMethod(ExceptionState& exception_state) {
   exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
                                     "Still in CONNECTING state.");
 }
 
+constexpr WebSocketCommon::State DOMWebSocket::kConnecting;
+constexpr WebSocketCommon::State DOMWebSocket::kOpen;
+constexpr WebSocketCommon::State DOMWebSocket::kClosing;
+constexpr WebSocketCommon::State DOMWebSocket::kClosed;
+
 DOMWebSocket::DOMWebSocket(ExecutionContext* context)
     : ContextLifecycleStateObserver(context),
-      state_(kConnecting),
       buffered_amount_(0),
       consumed_buffered_amount_(0),
       buffered_amount_after_close_(0),
@@ -246,8 +190,7 @@
       subprotocol_(""),
       extensions_(""),
       event_queue_(MakeGarbageCollected<EventQueue>(this)),
-      buffered_amount_update_task_pending_(false),
-      was_autoupgraded_to_wss_(false) {}
+      buffered_amount_update_task_pending_(false) {}
 
 DOMWebSocket::~DOMWebSocket() {
   DCHECK(!channel_);
@@ -306,117 +249,32 @@
   UseCounter::Count(GetExecutionContext(), WebFeature::kWebSocket);
 
   NETWORK_DVLOG(1) << "WebSocket " << this << " connect() url=" << url;
-  url_ = KURL(NullURL(), url);
 
-  bool upgrade_insecure_requests_set =
-      GetExecutionContext()->GetSecurityContext().GetInsecureRequestPolicy() &
-      kUpgradeInsecureRequests;
-
-  if ((upgrade_insecure_requests_set ||
-       MixedContentChecker::ShouldAutoupgrade(
-           GetExecutionContext()->GetHttpsState(),
-           WebMixedContentContextType::kBlockable)) &&
-      url_.Protocol() == "ws" &&
-      !SecurityOrigin::Create(url_)->IsPotentiallyTrustworthy()) {
-    if (!upgrade_insecure_requests_set) {
-      was_autoupgraded_to_wss_ = true;
-      LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kStarted);
-      GetExecutionContext()->AddConsoleMessage(
-          MixedContentChecker::CreateConsoleMessageAboutWebSocketAutoupgrade(
-              GetExecutionContext()->Url(), url_));
-    }
-    UseCounter::Count(GetExecutionContext(),
-                      WebFeature::kUpgradeInsecureRequestsUpgradedRequest);
-    url_.SetProtocol("wss");
-    if (url_.Port() == 80)
-      url_.SetPort(443);
-  }
-
-  if (!url_.IsValid()) {
-    state_ = kClosed;
-    exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
-                                      "The URL '" + url + "' is invalid.");
-    return;
-  }
-  if (!url_.ProtocolIs("ws") && !url_.ProtocolIs("wss")) {
-    state_ = kClosed;
-    exception_state.ThrowDOMException(
-        DOMExceptionCode::kSyntaxError,
-        "The URL's scheme must be either 'ws' or 'wss'. '" + url_.Protocol() +
-            "' is not allowed.");
-    return;
-  }
-
-  if (url_.HasFragmentIdentifier()) {
-    state_ = kClosed;
-    exception_state.ThrowDOMException(
-        DOMExceptionCode::kSyntaxError,
-        "The URL contains a fragment identifier ('" +
-            url_.FragmentIdentifier() +
-            "'). Fragment identifiers are not allowed in WebSocket URLs.");
-    return;
-  }
-
-  if (!IsPortAllowedForScheme(url_)) {
-    state_ = kClosed;
-    exception_state.ThrowSecurityError(
-        "The port " + String::Number(url_.Port()) + " is not allowed.");
-    return;
-  }
-
-  if (!GetExecutionContext()
-           ->GetContentSecurityPolicyForWorld()
-           ->AllowConnectToSource(url_)) {
-    state_ = kClosed;
-
-    // Delay the event dispatch until after the current task by suspending and
-    // resuming the queue. If we don't do this, the event is fired synchronously
-    // with the constructor, meaning that it's impossible to listen for.
-    event_queue_->Pause();
-    event_queue_->Dispatch(Event::Create(event_type_names::kError));
-    event_queue_->Unpause();
-    return;
-  }
-
-  // Fail if not all elements in |protocols| are valid.
-  for (const String& protocol : protocols) {
-    if (!IsValidSubprotocolString(protocol)) {
-      state_ = kClosed;
-      exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
-                                        "The subprotocol '" +
-                                            EncodeSubprotocolString(protocol) +
-                                            "' is invalid.");
-      return;
-    }
-  }
-
-  // Fail if there're duplicated elements in |protocols|.
-  HashSet<String> visited;
-  for (const String& protocol : protocols) {
-    if (!visited.insert(protocol).is_new_entry) {
-      state_ = kClosed;
-      exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
-                                        "The subprotocol '" +
-                                            EncodeSubprotocolString(protocol) +
-                                            "' is duplicated.");
-      return;
-    }
-  }
-
-  String protocol_string;
-  if (!protocols.IsEmpty())
-    protocol_string = JoinStrings(protocols, kWebSocketSubprotocolSeparator);
-
-  origin_string_ = SecurityOrigin::Create(url_)->ToString();
   channel_ = CreateChannel(GetExecutionContext(), this);
+  auto result = common_.Connect(GetExecutionContext(), url, protocols, channel_,
+                                exception_state);
 
-  if (!channel_->Connect(url_, protocol_string)) {
-    state_ = kClosed;
-    exception_state.ThrowSecurityError(
-        "An insecure WebSocket connection may not be initiated from a page "
-        "loaded over HTTPS.");
-    ReleaseChannel();
-    return;
+  switch (result) {
+    case WebSocketCommon::ConnectResult::kSuccess:
+      DCHECK(!exception_state.HadException());
+      origin_string_ = SecurityOrigin::Create(common_.Url())->ToString();
+      return;
+
+    case WebSocketCommon::ConnectResult::kException:
+      DCHECK(exception_state.HadException());
+      channel_ = nullptr;
+      return;
+
+    case WebSocketCommon::ConnectResult::kAsyncError:
+      DCHECK(!exception_state.HadException());
+      // Delay the event dispatch until after the current task by suspending and
+      // resuming the queue. If we don't do this, the event is fired
+      // synchronously with the constructor, meaning that it's impossible to
+      // listen for.
+      event_queue_->Pause();
+      event_queue_->Dispatch(Event::Create(event_type_names::kError));
+      event_queue_->Unpause();
+      return;
   }
 }
 
@@ -463,14 +321,14 @@
                         ExceptionState& exception_state) {
   NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending String "
                    << message;
-  if (state_ == kConnecting) {
+  if (common_.GetState() == kConnecting) {
     SetInvalidStateErrorForSendMethod(exception_state);
     return;
   }
   // No exception is raised if the connection was once established but has
   // subsequently been closed.
   std::string encoded_message = message.Utf8();
-  if (state_ == kClosing || state_ == kClosed) {
+  if (common_.GetState() == kClosing || common_.GetState() == kClosed) {
     UpdateBufferedAmountAfterClose(encoded_message.length());
     return;
   }
@@ -488,11 +346,11 @@
                    << binary_data;
   DCHECK(binary_data);
   DCHECK(binary_data->Buffer());
-  if (state_ == kConnecting) {
+  if (common_.GetState() == kConnecting) {
     SetInvalidStateErrorForSendMethod(exception_state);
     return;
   }
-  if (state_ == kClosing || state_ == kClosed) {
+  if (common_.GetState() == kClosing || common_.GetState() == kClosed) {
     UpdateBufferedAmountAfterClose(binary_data->ByteLength());
     return;
   }
@@ -510,11 +368,11 @@
   NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBufferView "
                    << array_buffer_view.View();
   DCHECK(array_buffer_view);
-  if (state_ == kConnecting) {
+  if (common_.GetState() == kConnecting) {
     SetInvalidStateErrorForSendMethod(exception_state);
     return;
   }
-  if (state_ == kClosing || state_ == kClosed) {
+  if (common_.GetState() == kClosing || common_.GetState() == kClosed) {
     UpdateBufferedAmountAfterClose(array_buffer_view.View()->byteLength());
     return;
   }
@@ -532,11 +390,11 @@
   NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending Blob "
                    << binary_data->Uuid();
   DCHECK(binary_data);
-  if (state_ == kConnecting) {
+  if (common_.GetState() == kConnecting) {
     SetInvalidStateErrorForSendMethod(exception_state);
     return;
   }
-  if (state_ == kClosing || state_ == kClosed) {
+  if (common_.GetState() == kClosing || common_.GetState() == kClosed) {
     UpdateBufferedAmountAfterClose(binary_data->size());
     return;
   }
@@ -576,60 +434,15 @@
 void DOMWebSocket::CloseInternal(int code,
                                  const String& reason,
                                  ExceptionState& exception_state) {
-  String cleansed_reason = reason;
-  if (code == WebSocketChannel::kCloseEventCodeNotSpecified) {
-    NETWORK_DVLOG(1) << "WebSocket " << this
-                     << " close() without code and reason";
-  } else {
-    NETWORK_DVLOG(1) << "WebSocket " << this << " close() code=" << code
-                     << " reason=" << reason;
-    if (!(code == WebSocketChannel::kCloseEventCodeNormalClosure ||
-          (WebSocketChannel::kCloseEventCodeMinimumUserDefined <= code &&
-           code <= WebSocketChannel::kCloseEventCodeMaximumUserDefined))) {
-      exception_state.ThrowDOMException(
-          DOMExceptionCode::kInvalidAccessError,
-          "The code must be either 1000, or between 3000 and 4999. " +
-              String::Number(code) + " is neither.");
-      return;
-    }
-    // Bindings specify USVString, so unpaired surrogates are already replaced
-    // with U+FFFD.
-    StringUTF8Adaptor utf8(reason);
-    if (utf8.size() > kMaxReasonSizeInBytes) {
-      exception_state.ThrowDOMException(
-          DOMExceptionCode::kSyntaxError,
-          "The message must not be greater than " +
-              String::Number(kMaxReasonSizeInBytes) + " bytes.");
-      return;
-    }
-    if (!reason.IsEmpty() && !reason.Is8Bit()) {
-      DCHECK_GT(utf8.size(), 0u);
-      // reason might contain unpaired surrogates. Reconstruct it from
-      // utf8.
-      cleansed_reason = String::FromUTF8(utf8.data(), utf8.size());
-    }
-  }
-
-  if (state_ == kClosing || state_ == kClosed)
-    return;
-  if (state_ == kConnecting) {
-    state_ = kClosing;
-    channel_->Fail("WebSocket is closed before the connection is established.",
-                   mojom::ConsoleMessageLevel::kWarning,
-                   std::make_unique<SourceLocation>(String(), 0, 0, nullptr));
-    return;
-  }
-  state_ = kClosing;
-  if (channel_)
-    channel_->Close(code, cleansed_reason);
+  common_.CloseInternal(code, reason, channel_, exception_state);
 }
 
 const KURL& DOMWebSocket::url() const {
-  return url_;
+  return common_.Url();
 }
 
-DOMWebSocket::State DOMWebSocket::readyState() const {
-  return state_;
+WebSocketCommon::State DOMWebSocket::readyState() const {
+  return common_.GetState();
 }
 
 uint64_t DOMWebSocket::bufferedAmount() const {
@@ -681,13 +494,14 @@
   NETWORK_DVLOG(1) << "WebSocket " << this << " contextDestroyed()";
   event_queue_->ContextDestroyed();
   if (channel_) {
-    if (state_ == kOpen) {
+    if (common_.GetState() == kOpen) {
       channel_->Close(WebSocketChannel::kCloseEventCodeGoingAway, String());
     }
     ReleaseChannel();
   }
-  if (state_ != kClosed)
-    state_ = kClosed;
+  if (common_.GetState() != kClosed) {
+    common_.SetState(kClosed);
+  }
 }
 
 bool DOMWebSocket::HasPendingActivity() const {
@@ -711,11 +525,11 @@
 void DOMWebSocket::DidConnect(const String& subprotocol,
                               const String& extensions) {
   NETWORK_DVLOG(1) << "WebSocket " << this << " DidConnect()";
-  if (was_autoupgraded_to_wss_)
-    LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kResponseReceived);
-  if (state_ != kConnecting)
+  common_.LogMixedAutoupgradeStatus(
+      MixedContentAutoupgradeStatus::kResponseReceived);
+  if (common_.GetState() != kConnecting)
     return;
-  state_ = kOpen;
+  common_.SetState(kOpen);
   subprotocol_ = subprotocol;
   extensions_ = extensions;
   event_queue_->Dispatch(Event::Create(event_type_names::kOpen));
@@ -725,8 +539,8 @@
   NETWORK_DVLOG(1) << "WebSocket " << this
                    << " DidReceiveTextMessage() Text message " << msg;
   ReflectBufferedAmountConsumption();
-  DCHECK_NE(state_, kConnecting);
-  if (state_ != kOpen)
+  DCHECK_NE(common_.GetState(), kConnecting);
+  if (common_.GetState() != kOpen)
     return;
   RecordReceiveTypeHistogram(kWebSocketReceiveTypeString);
 
@@ -745,8 +559,8 @@
   ReflectBufferedAmountConsumption();
   DCHECK(!origin_string_.IsNull());
 
-  DCHECK_NE(state_, kConnecting);
-  if (state_ != kOpen)
+  DCHECK_NE(common_.GetState(), kConnecting);
+  if (common_.GetState() != kOpen)
     return;
 
   switch (binary_type_) {
@@ -775,10 +589,10 @@
 
 void DOMWebSocket::DidError() {
   NETWORK_DVLOG(1) << "WebSocket " << this << " DidError()";
-  if (state_ == kConnecting && was_autoupgraded_to_wss_)
-    LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kFailed);
+  if (common_.GetState() == kConnecting)
+    common_.LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kFailed);
   ReflectBufferedAmountConsumption();
-  state_ = kClosed;
+  common_.SetState(kClosed);
   event_queue_->Dispatch(Event::Create(event_type_names::kError));
 }
 
@@ -786,7 +600,7 @@
   DCHECK_GE(buffered_amount_, consumed + consumed_buffered_amount_);
   NETWORK_DVLOG(1) << "WebSocket " << this << " DidConsumeBufferedAmount("
                    << consumed << ")";
-  if (state_ == kClosed)
+  if (common_.GetState() == kClosed)
     return;
   consumed_buffered_amount_ += consumed;
   PostBufferedAmountUpdateTask();
@@ -795,7 +609,7 @@
 void DOMWebSocket::DidStartClosingHandshake() {
   NETWORK_DVLOG(1) << "WebSocket " << this << " DidStartClosingHandshake()";
   ReflectBufferedAmountConsumption();
-  state_ = kClosing;
+  common_.SetState(kClosing);
 }
 
 void DOMWebSocket::DidClose(
@@ -808,10 +622,11 @@
     return;
   bool all_data_has_been_consumed =
       buffered_amount_ == consumed_buffered_amount_;
-  bool was_clean = state_ == kClosing && all_data_has_been_consumed &&
+  bool was_clean = common_.GetState() == kClosing &&
+                   all_data_has_been_consumed &&
                    closing_handshake_completion == kClosingHandshakeComplete &&
                    code != WebSocketChannel::kCloseEventCodeAbnormalClosure;
-  state_ = kClosed;
+  common_.SetState(kClosed);
 
   ReleaseChannel();
 
diff --git a/third_party/blink/renderer/modules/websockets/dom_websocket.h b/third_party/blink/renderer/modules/websockets/dom_websocket.h
index adf6dd3..1736f88 100644
--- a/third_party/blink/renderer/modules/websockets/dom_websocket.h
+++ b/third_party/blink/renderer/modules/websockets/dom_websocket.h
@@ -44,6 +44,7 @@
 #include "third_party/blink/renderer/modules/websockets/websocket_channel.h"
 #include "third_party/blink/renderer/modules/websockets/websocket_channel_client.h"
 #include "third_party/blink/renderer/modules/websockets/websocket_channel_impl.h"
+#include "third_party/blink/renderer/modules/websockets/websocket_common.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/timer.h"
@@ -69,6 +70,12 @@
   USING_GARBAGE_COLLECTED_MIXIN(DOMWebSocket);
 
  public:
+  // These definitions are required by V8DOMWebSocket.
+  static constexpr auto kConnecting = WebSocketCommon::kConnecting;
+  static constexpr auto kOpen = WebSocketCommon::kOpen;
+  static constexpr auto kClosing = WebSocketCommon::kClosing;
+  static constexpr auto kClosed = WebSocketCommon::kClosed;
+
   // DOMWebSocket instances must be used with a wrapper since this class's
   // lifetime management is designed assuming the V8 holds a ref on it while
   // hasPendingActivity() returns true.
@@ -83,8 +90,6 @@
   explicit DOMWebSocket(ExecutionContext*);
   ~DOMWebSocket() override;
 
-  enum State { kConnecting = 0, kOpen = 1, kClosing = 2, kClosed = 3 };
-
   void Connect(const String& url,
                const Vector<String>& protocols,
                ExceptionState&);
@@ -104,7 +109,7 @@
   void close(uint16_t code, ExceptionState&);
 
   const KURL& url() const;
-  State readyState() const;
+  WebSocketCommon::State readyState() const;
   uint64_t bufferedAmount() const;
 
   String protocol() const;
@@ -145,8 +150,6 @@
 
   void Trace(blink::Visitor*) override;
 
-  static bool IsValidSubprotocolString(const String&);
-
  private:
   // FIXME: This should inherit blink::EventQueue.
   class EventQueue final : public GarbageCollectedFinalized<EventQueue> {
@@ -247,9 +250,8 @@
 
   Member<WebSocketChannel> channel_;
 
-  State state_;
+  WebSocketCommon common_;
 
-  KURL url_;
   String origin_string_;
 
   uint64_t buffered_amount_;
@@ -265,8 +267,6 @@
   Member<EventQueue> event_queue_;
 
   bool buffered_amount_update_task_pending_;
-
-  bool was_autoupgraded_to_wss_;
 };
 
 }  // namespace blink
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 e4208de4..0d254386 100644
--- a/third_party/blink/renderer/modules/websockets/dom_websocket_test.cc
+++ b/third_party/blink/renderer/modules/websockets/dom_websocket_test.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/websockets/dom_websocket.h"
 
 #include <memory>
+#include <string>
 
 #include "base/test/scoped_feature_list.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -345,31 +346,6 @@
   EXPECT_EQ(DOMWebSocket::kClosed, websocket_scope.Socket().readyState());
 }
 
-TEST(DOMWebSocketTest, isValidSubprotocolString) {
-  EXPECT_TRUE(DOMWebSocket::IsValidSubprotocolString("Helloworld!!"));
-  EXPECT_FALSE(DOMWebSocket::IsValidSubprotocolString("Hello, world!!"));
-  EXPECT_FALSE(DOMWebSocket::IsValidSubprotocolString(String()));
-  EXPECT_FALSE(DOMWebSocket::IsValidSubprotocolString(""));
-
-  const char kValidCharacters[] =
-      "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`"
-      "abcdefghijklmnopqrstuvwxyz|~";
-  size_t length = strlen(kValidCharacters);
-  for (size_t i = 0; i < length; ++i) {
-    String s(kValidCharacters + i, 1u);
-    EXPECT_TRUE(DOMWebSocket::IsValidSubprotocolString(s));
-  }
-  for (size_t i = 0; i < 256; ++i) {
-    if (std::find(kValidCharacters, kValidCharacters + length,
-                  static_cast<char>(i)) != kValidCharacters + length) {
-      continue;
-    }
-    char to_check = char{i};
-    String s(&to_check, 1u);
-    EXPECT_FALSE(DOMWebSocket::IsValidSubprotocolString(s));
-  }
-}
-
 TEST(DOMWebSocketTest, connectSuccess) {
   V8TestingScope scope;
   DOMWebSocketTestScope websocket_scope(scope.GetExecutionContext());
diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.cc b/third_party/blink/renderer/modules/websockets/websocket_common.cc
new file mode 100644
index 0000000..b070a37
--- /dev/null
+++ b/third_party/blink/renderer/modules/websockets/websocket_common.cc
@@ -0,0 +1,260 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/websockets/websocket_common.h"
+
+#include <stddef.h>
+
+#include "base/metrics/histogram_macros.h"
+#include "third_party/blink/public/platform/web_insecure_request_policy.h"
+#include "third_party/blink/renderer/core/execution_context/execution_context.h"
+#include "third_party/blink/renderer/core/execution_context/security_context.h"
+#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
+#include "third_party/blink/renderer/core/loader/mixed_content_checker.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
+#include "third_party/blink/renderer/platform/loader/mixed_content_autoupgrade_status.h"
+
+#include "third_party/blink/renderer/modules/websockets/websocket_channel.h"
+#include "third_party/blink/renderer/platform/weborigin/known_ports.h"
+#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
+#include "third_party/blink/renderer/platform/wtf/assertions.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_utf8_adaptor.h"
+#include "third_party/blink/renderer/platform/wtf/wtf_size_t.h"
+
+namespace blink {
+
+namespace {
+
+constexpr char kWebSocketSubprotocolSeparator[] = ", ";
+constexpr size_t kMaxReasonSizeInBytes = 123;
+
+}  // namespace
+
+WebSocketCommon::ConnectResult WebSocketCommon::Connect(
+    ExecutionContext* execution_context,
+    const String& url,
+    const Vector<String>& protocols,
+    WebSocketChannel* channel,
+    ExceptionState& exception_state) {
+  url_ = KURL(NullURL(), url);
+
+  bool upgrade_insecure_requests_set =
+      execution_context->GetSecurityContext().GetInsecureRequestPolicy() &
+      kUpgradeInsecureRequests;
+
+  if ((upgrade_insecure_requests_set ||
+       MixedContentChecker::ShouldAutoupgrade(
+           execution_context->GetHttpsState(),
+           WebMixedContentContextType::kBlockable)) &&
+      url_.Protocol() == "ws" &&
+      !SecurityOrigin::Create(url_)->IsPotentiallyTrustworthy()) {
+    if (!upgrade_insecure_requests_set) {
+      was_autoupgraded_to_wss_ = true;
+      LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kStarted);
+      execution_context->AddConsoleMessage(
+          MixedContentChecker::CreateConsoleMessageAboutWebSocketAutoupgrade(
+              execution_context->Url(), url_));
+    }
+    UseCounter::Count(execution_context,
+                      WebFeature::kUpgradeInsecureRequestsUpgradedRequest);
+    url_.SetProtocol("wss");
+    if (url_.Port() == 80)
+      url_.SetPort(443);
+  }
+
+  if (!url_.IsValid()) {
+    state_ = kClosed;
+    exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
+                                      "The URL '" + url + "' is invalid.");
+    return ConnectResult::kException;
+  }
+  if (!url_.ProtocolIs("ws") && !url_.ProtocolIs("wss")) {
+    state_ = kClosed;
+    exception_state.ThrowDOMException(
+        DOMExceptionCode::kSyntaxError,
+        "The URL's scheme must be either 'ws' or 'wss'. '" + url_.Protocol() +
+            "' is not allowed.");
+    return ConnectResult::kException;
+  }
+
+  if (url_.HasFragmentIdentifier()) {
+    state_ = kClosed;
+    exception_state.ThrowDOMException(
+        DOMExceptionCode::kSyntaxError,
+        "The URL contains a fragment identifier ('" +
+            url_.FragmentIdentifier() +
+            "'). Fragment identifiers are not allowed in WebSocket URLs.");
+    return ConnectResult::kException;
+  }
+
+  if (!IsPortAllowedForScheme(url_)) {
+    state_ = kClosed;
+    exception_state.ThrowSecurityError(
+        "The port " + String::Number(url_.Port()) + " is not allowed.");
+    return ConnectResult::kException;
+  }
+
+  if (!execution_context->GetContentSecurityPolicyForWorld()
+           ->AllowConnectToSource(url_)) {
+    state_ = kClosed;
+
+    return ConnectResult::kAsyncError;
+  }
+
+  // Fail if not all elements in |protocols| are valid.
+  for (const String& protocol : protocols) {
+    if (!IsValidSubprotocolString(protocol)) {
+      state_ = kClosed;
+      exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
+                                        "The subprotocol '" +
+                                            EncodeSubprotocolString(protocol) +
+                                            "' is invalid.");
+      return ConnectResult::kException;
+    }
+  }
+
+  // Fail if there're duplicated elements in |protocols|.
+  HashSet<String> visited;
+  for (const String& protocol : protocols) {
+    if (!visited.insert(protocol).is_new_entry) {
+      state_ = kClosed;
+      exception_state.ThrowDOMException(DOMExceptionCode::kSyntaxError,
+                                        "The subprotocol '" +
+                                            EncodeSubprotocolString(protocol) +
+                                            "' is duplicated.");
+      return ConnectResult::kException;
+    }
+  }
+
+  String protocol_string;
+  if (!protocols.IsEmpty())
+    protocol_string = JoinStrings(protocols, kWebSocketSubprotocolSeparator);
+
+  if (!channel->Connect(url_, protocol_string)) {
+    state_ = kClosed;
+    exception_state.ThrowSecurityError(
+        "An insecure WebSocket connection may not be initiated from a page "
+        "loaded over HTTPS.");
+    channel->Disconnect();
+    return ConnectResult::kException;
+  }
+
+  return ConnectResult::kSuccess;
+}
+
+void WebSocketCommon::CloseInternal(int code,
+                                    const String& reason,
+                                    WebSocketChannel* channel,
+                                    ExceptionState& exception_state) {
+  String cleansed_reason = reason;
+  if (code == WebSocketChannel::kCloseEventCodeNotSpecified) {
+    DVLOG(1) << "WebSocket " << this << " close() without code and reason";
+  } else {
+    DVLOG(1) << "WebSocket " << this << " close() code=" << code
+             << " reason=" << reason;
+    if (!(code == WebSocketChannel::kCloseEventCodeNormalClosure ||
+          (WebSocketChannel::kCloseEventCodeMinimumUserDefined <= code &&
+           code <= WebSocketChannel::kCloseEventCodeMaximumUserDefined))) {
+      exception_state.ThrowDOMException(
+          DOMExceptionCode::kInvalidAccessError,
+          "The code must be either 1000, or between 3000 and 4999. " +
+              String::Number(code) + " is neither.");
+      return;
+    }
+    // Bindings specify USVString, so unpaired surrogates are already replaced
+    // with U+FFFD.
+    StringUTF8Adaptor utf8(reason);
+    if (utf8.size() > kMaxReasonSizeInBytes) {
+      exception_state.ThrowDOMException(
+          DOMExceptionCode::kSyntaxError,
+          "The message must not be greater than " +
+              String::Number(kMaxReasonSizeInBytes) + " bytes.");
+      return;
+    }
+    if (!reason.IsEmpty() && !reason.Is8Bit()) {
+      DCHECK_GT(utf8.size(), 0u);
+      // reason might contain unpaired surrogates. Reconstruct it from
+      // utf8.
+      cleansed_reason = String::FromUTF8(utf8.data(), utf8.size());
+    }
+  }
+
+  if (state_ == kClosing || state_ == kClosed)
+    return;
+  if (state_ == kConnecting) {
+    state_ = kClosing;
+    channel->Fail("WebSocket is closed before the connection is established.",
+                  mojom::ConsoleMessageLevel::kWarning,
+                  std::make_unique<SourceLocation>(String(), 0, 0, nullptr));
+    return;
+  }
+  state_ = kClosing;
+  if (channel)
+    channel->Close(code, cleansed_reason);
+}
+
+void WebSocketCommon::LogMixedAutoupgradeStatus(
+    blink::MixedContentAutoupgradeStatus status) const {
+  if (!was_autoupgraded_to_wss_)
+    return;
+  // For websockets we use the response received element to log successful
+  // connections.
+  UMA_HISTOGRAM_ENUMERATION("MixedAutoupgrade.Websocket.Status", status);
+}
+
+inline bool WebSocketCommon::IsValidSubprotocolCharacter(UChar character) {
+  const UChar kMinimumProtocolCharacter = '!';  // U+0021.
+  const UChar kMaximumProtocolCharacter = '~';  // U+007E.
+  // Set to true if character does not matches "separators" ABNF defined in
+  // RFC2616. SP and HT are excluded since the range check excludes them.
+  bool is_not_separator =
+      character != '"' && character != '(' && character != ')' &&
+      character != ',' && character != '/' &&
+      !(character >= ':' &&
+        character <=
+            '@')  // U+003A - U+0040 (':', ';', '<', '=', '>', '?', '@').
+      && !(character >= '[' &&
+           character <= ']')  // U+005B - U+005D ('[', '\\', ']').
+      && character != '{' && character != '}';
+  return character >= kMinimumProtocolCharacter &&
+         character <= kMaximumProtocolCharacter && is_not_separator;
+}
+
+bool WebSocketCommon::IsValidSubprotocolString(const String& protocol) {
+  if (protocol.IsEmpty())
+    return false;
+  for (wtf_size_t i = 0; i < protocol.length(); ++i) {
+    if (!IsValidSubprotocolCharacter(protocol[i]))
+      return false;
+  }
+  return true;
+}
+
+String WebSocketCommon::EncodeSubprotocolString(const String& protocol) {
+  StringBuilder builder;
+  for (wtf_size_t i = 0; i < protocol.length(); i++) {
+    if (protocol[i] < 0x20 || protocol[i] > 0x7E)
+      builder.AppendFormat("\\u%04X", protocol[i]);
+    else if (protocol[i] == 0x5c)
+      builder.Append("\\\\");
+    else
+      builder.Append(protocol[i]);
+  }
+  return builder.ToString();
+}
+
+String WebSocketCommon::JoinStrings(const Vector<String>& strings,
+                                    const char* separator) {
+  StringBuilder builder;
+  for (wtf_size_t i = 0; i < strings.size(); ++i) {
+    if (i)
+      builder.Append(separator);
+    builder.Append(strings[i]);
+  }
+  return builder.ToString();
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.h b/third_party/blink/renderer/modules/websockets/websocket_common.h
new file mode 100644
index 0000000..ba382cd
--- /dev/null
+++ b/third_party/blink/renderer/modules/websockets/websocket_common.h
@@ -0,0 +1,87 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Common functionality shared between DOMWebSocket and WebSocketStream.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBSOCKETS_WEBSOCKET_COMMON_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBSOCKETS_WEBSOCKET_COMMON_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
+#include "third_party/blink/renderer/platform/weborigin/kurl.h"
+#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+#include "third_party/blink/renderer/platform/wtf/forward.h"
+
+namespace blink {
+
+class ExecutionContext;
+class ExceptionState;
+class WebSocketChannel;
+enum class MixedContentAutoupgradeStatus;
+
+// Implements connection- and closing- related functionality that otherwise
+// would be duplicated between DOMWebSocket and WebSocketStream. Is embedded
+// into those classes and delegated to when needed.
+class MODULES_EXPORT WebSocketCommon {
+  DISALLOW_NEW();
+
+ public:
+  WebSocketCommon() = default;
+  ~WebSocketCommon() = default;
+
+  enum State { kConnecting = 0, kOpen = 1, kClosing = 2, kClosed = 3 };
+  enum class ConnectResult { kSuccess, kException, kAsyncError };
+
+  // Checks |url| and |protocols| are valid, and starts a connection if they
+  // are.
+  ConnectResult Connect(ExecutionContext*,
+                        const String& url,
+                        const Vector<String>& protocols,
+                        WebSocketChannel*,
+                        ExceptionState&);
+
+  // Closes the connection if |code| and |reason| are valid.
+  void CloseInternal(int code,
+                     const String& reason,
+                     WebSocketChannel*,
+                     ExceptionState&);
+
+  // Logs "MixedAutoupgrade.Websocket.Status" histogram. Does nothing unless
+  // |was_autoupgraded_to_wss_| is true.
+  void LogMixedAutoupgradeStatus(blink::MixedContentAutoupgradeStatus) const;
+
+  State GetState() const { return state_; }
+  void SetState(State state) { state_ = state; }
+  const KURL& Url() const { return url_; }
+
+  // The following methods are public for testing.
+
+  // Returns true if |protocol| is a valid WebSocket subprotocol name.
+  static bool IsValidSubprotocolString(const String& protocol);
+
+  // Escapes non-printing or non-ASCII characters in |protocol| as "\uXXXX" for
+  // inclusion in exception messages.
+  static String EncodeSubprotocolString(const String& protocol);
+
+  // Joins the strings in |strings| into a single string, with |separator|
+  // between each string.
+  static String JoinStrings(const Vector<String>& strings,
+                            const char* separator);
+
+ private:
+  // Returns true if |character| is allowed in a WebSocket subprotocol name.
+  static bool IsValidSubprotocolCharacter(UChar character);
+
+  KURL url_;
+  bool was_autoupgraded_to_wss_ = false;
+  State state_ = kConnecting;
+
+  DISALLOW_COPY_AND_ASSIGN(WebSocketCommon);
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBSOCKETS_WEBSOCKET_COMMON_H_
diff --git a/third_party/blink/renderer/modules/websockets/websocket_common_test.cc b/third_party/blink/renderer/modules/websockets/websocket_common_test.cc
new file mode 100644
index 0000000..c368c11
--- /dev/null
+++ b/third_party/blink/renderer/modules/websockets/websocket_common_test.cc
@@ -0,0 +1,64 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/websockets/websocket_common.h"
+
+#include <string.h>
+
+#include <algorithm>
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+
+namespace blink {
+
+namespace {
+
+// Connect() and CloseInternal() are very thoroughly tested by DOMWebSocket unit
+// tests, so the rests aren't duplicated here.
+
+// This test also indirectly tests IsValidSubprotocolCharacter.
+TEST(WebSocketCommonTest, IsValidSubprotocolString) {
+  EXPECT_TRUE(WebSocketCommon::IsValidSubprotocolString("Helloworld!!"));
+  EXPECT_FALSE(WebSocketCommon::IsValidSubprotocolString("Hello, world!!"));
+  EXPECT_FALSE(WebSocketCommon::IsValidSubprotocolString(String()));
+  EXPECT_FALSE(WebSocketCommon::IsValidSubprotocolString(""));
+
+  const char kValidCharacters[] =
+      "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`"
+      "abcdefghijklmnopqrstuvwxyz|~";
+  size_t length = strlen(kValidCharacters);
+  for (size_t i = 0; i < length; ++i) {
+    String s(kValidCharacters + i, 1u);
+    EXPECT_TRUE(WebSocketCommon::IsValidSubprotocolString(s));
+  }
+  for (size_t i = 0; i < 256; ++i) {
+    if (std::find(kValidCharacters, kValidCharacters + length,
+                  static_cast<char>(i)) != kValidCharacters + length) {
+      continue;
+    }
+    char to_check = char{i};
+    String s(&to_check, 1u);
+    EXPECT_FALSE(WebSocketCommon::IsValidSubprotocolString(s));
+  }
+}
+
+TEST(WebSocketCommonTest, EncodeSubprotocolString) {
+  EXPECT_EQ("\\\\\\u0009\\u000D\\uFE0F ~hello\\u000A",
+            WebSocketCommon::EncodeSubprotocolString(u"\\\t\r\uFE0F ~hello\n"));
+}
+
+TEST(WebSocketCommonTest, JoinStrings) {
+  EXPECT_EQ("", WebSocketCommon::JoinStrings({}, ","));
+  EXPECT_EQ("ab", WebSocketCommon::JoinStrings({"ab"}, ","));
+  EXPECT_EQ("ab,c", WebSocketCommon::JoinStrings({"ab", "c"}, ","));
+  EXPECT_EQ("a\r\nbcd\r\nef",
+            WebSocketCommon::JoinStrings({"a", "bcd", "ef"}, "\r\n"));
+  EXPECT_EQ("|||", WebSocketCommon::JoinStrings({"|", "|"}, "|"));
+  // Non-ASCII strings are not required to work.
+}
+
+}  // namespace
+
+}  // namespace blink
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 145921b..03e6e27 100644
--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -695,4 +695,8 @@
   RuntimeEnabledFeatures::SetMouseSubframeNoImplicitCaptureEnabled(enable);
 }
 
+void WebRuntimeFeatures::EnableBackForwardCache(bool enable) {
+  RuntimeEnabledFeatures::SetBackForwardCacheEnabled(enable);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/geometry/layout_unit.h b/third_party/blink/renderer/platform/geometry/layout_unit.h
index 3384ee0..eaaff017 100644
--- a/third_party/blink/renderer/platform/geometry/layout_unit.h
+++ b/third_party/blink/renderer/platform/geometry/layout_unit.h
@@ -58,15 +58,31 @@
 static const int kFixedPointDenominator = 1 << kLayoutUnitFractionalBits;
 
 const int kIntMaxForLayoutUnit = INT_MAX / kFixedPointDenominator;
-const int kIntMinForLayoutUnit = -kIntMaxForLayoutUnit;
+const int kIntMinForLayoutUnit = INT_MIN / kFixedPointDenominator;
 
+#if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) && \
+    defined(COMPILER_GCC) && !defined(OS_NACL) && __OPTIMIZE__
+inline int GetMaxSaturatedSetResultForTesting() {
+  // For ARM Asm version the set function maxes out to the biggest
+  // possible integer part with the fractional part zero'd out.
+  // e.g. 0x7fffffc0.
+  return std::numeric_limits<int>::max() & ~(kFixedPointDenominator - 1);
+}
+
+inline int GetMinSaturatedSetResultForTesting() {
+  return std::numeric_limits<int>::min();
+}
+#else
 ALWAYS_INLINE int GetMaxSaturatedSetResultForTesting() {
+  // For C version the set function maxes out to max int, this differs from
+  // the ARM asm version.
   return std::numeric_limits<int>::max();
 }
 
 ALWAYS_INLINE int GetMinSaturatedSetResultForTesting() {
-  return -GetMaxSaturatedSetResultForTesting();
+  return std::numeric_limits<int>::min();
 }
+#endif  // CPU(ARM) && COMPILER(GCC)
 
 // TODO(thakis): Remove these two lines once http://llvm.org/PR26504 is resolved
 class PLATFORM_EXPORT LayoutUnit;
@@ -86,54 +102,34 @@
   }
   constexpr explicit LayoutUnit(uint64_t value)
       : value_(base::saturated_cast<int>(value * kFixedPointDenominator)) {}
-
-  template <typename T>
-  // As long as std::numeric_limits<T>::max() <= -std::numeric_limits<T>::min(),
-  // this class will make  min and max be of equal magnitude.
-  struct SymmetricLimits {
-    static constexpr T NaN() {
-      return std::numeric_limits<T>::has_quiet_NaN
-                 ? std::numeric_limits<T>::quiet_NaN()
-                 : T();
-    }
-    static constexpr T max() { return std::numeric_limits<T>::max(); }
-    static constexpr T Overflow() { return max(); }
-    static constexpr T lowest() { return -max(); }
-    static constexpr T Underflow() { return lowest(); }
-  };
-
   constexpr explicit LayoutUnit(float value)
-      : value_(base::saturated_cast<int, SymmetricLimits>(
-            value * kFixedPointDenominator)) {}
+      : value_(base::saturated_cast<int>(value * kFixedPointDenominator)) {}
   constexpr explicit LayoutUnit(double value)
-      : value_(base::saturated_cast<int, SymmetricLimits>(
-            value * kFixedPointDenominator)) {}
+      : value_(base::saturated_cast<int>(value * kFixedPointDenominator)) {}
 
   static LayoutUnit FromFloatCeil(float value) {
     LayoutUnit v;
-    v.value_ = base::saturated_cast<int, SymmetricLimits>(
-        ceilf(value * kFixedPointDenominator));
+    v.value_ = base::saturated_cast<int>(ceilf(value * kFixedPointDenominator));
     return v;
   }
 
   static LayoutUnit FromFloatFloor(float value) {
     LayoutUnit v;
-    v.value_ = base::saturated_cast<int, SymmetricLimits>(
-        floorf(value * kFixedPointDenominator));
+    v.value_ =
+        base::saturated_cast<int>(floorf(value * kFixedPointDenominator));
     return v;
   }
 
   static LayoutUnit FromFloatRound(float value) {
     LayoutUnit v;
-    v.value_ = base::saturated_cast<int, SymmetricLimits>(
-        roundf(value * kFixedPointDenominator));
+    v.value_ =
+        base::saturated_cast<int>(roundf(value * kFixedPointDenominator));
     return v;
   }
 
   static LayoutUnit FromDoubleRound(double value) {
     LayoutUnit v;
-    v.value_ = base::saturated_cast<int, SymmetricLimits>(
-        round(value * kFixedPointDenominator));
+    v.value_ = base::saturated_cast<int>(round(value * kFixedPointDenominator));
     return v;
   }
 
@@ -168,7 +164,7 @@
   constexpr int RawValue() const { return value_; }
   inline void SetRawValue(int value) { value_ = value; }
   void SetRawValue(int64_t value) {
-    REPORT_OVERFLOW(value > -std::numeric_limits<int>::max() &&
+    REPORT_OVERFLOW(value > std::numeric_limits<int>::min() &&
                     value < std::numeric_limits<int>::max());
     value_ = static_cast<int>(value);
   }
@@ -220,7 +216,7 @@
 
   bool MightBeSaturated() const {
     return RawValue() == std::numeric_limits<int>::max() ||
-           RawValue() == -std::numeric_limits<int>::max();
+           RawValue() == std::numeric_limits<int>::min();
   }
 
   static float Epsilon() { return 1.0f / kFixedPointDenominator; }
@@ -239,12 +235,12 @@
   }
   static constexpr LayoutUnit Min() {
     LayoutUnit m;
-    m.value_ = -std::numeric_limits<int>::max();
+    m.value_ = std::numeric_limits<int>::min();
     return m;
   }
 
   // Versions of max/min that are slightly smaller/larger than max/min() to
-  // allow for rounding without overflowing.
+  // allow for roinding without overflowing.
   static const LayoutUnit NearlyMax() {
     LayoutUnit m;
     m.value_ = std::numeric_limits<int>::max() - kFixedPointDenominator / 2;
@@ -252,7 +248,7 @@
   }
   static const LayoutUnit NearlyMin() {
     LayoutUnit m;
-    m.value_ = -std::numeric_limits<int>::max() + kFixedPointDenominator / 2;
+    m.value_ = std::numeric_limits<int>::min() + kFixedPointDenominator / 2;
     return m;
   }
 
@@ -274,11 +270,67 @@
            std::numeric_limits<int>::max() / kFixedPointDenominator;
   }
 
+#if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) && \
+    defined(COMPILER_GCC) && !defined(OS_NACL) && __OPTIMIZE__
+  // If we're building ARM 32-bit on GCC we replace the C++ versions with some
+  // native ARM assembly for speed.
+  inline void SaturatedSet(int value) {
+    // Figure out how many bits are left for storing the integer part of
+    // the fixed point number, and saturate our input to that
+    enum { Saturate = 32 - kLayoutUnitFractionalBits };
+
+    int result;
+
+    // The following ARM code will Saturate the passed value to the number of
+    // bits used for the whole part of the fixed point representation, then
+    // shift it up into place. This will result in the low
+    // <kLayoutUnitFractionalBits> bits all being 0's. When the value saturates
+    // this gives a different result to from the C++ case; in the C++ code a
+    // saturated value has all the low bits set to 1 (for a +ve number at
+    // least). This cannot be done rapidly in ARM ... we live with the
+    // difference, for the sake of speed.
+
+    asm("ssat %[output],%[saturate],%[value]\n\t"
+        "lsl  %[output],%[shift]"
+        : [output] "=r"(result)
+        : [value] "r"(value), [saturate] "n"(Saturate),
+          [shift] "n"(kLayoutUnitFractionalBits));
+
+    value_ = result;
+  }
+
+  inline void SaturatedSet(unsigned value) {
+    // Here we are being passed an unsigned value to saturate,
+    // even though the result is returned as a signed integer. The ARM
+    // instruction for unsigned saturation therefore needs to be given one
+    // less bit (i.e. the sign bit) for the saturation to work correctly; hence
+    // the '31' below.
+    enum { Saturate = 31 - kLayoutUnitFractionalBits };
+
+    // The following ARM code will Saturate the passed value to the number of
+    // bits used for the whole part of the fixed point representation, then
+    // shift it up into place. This will result in the low
+    // <kLayoutUnitFractionalBits> bits all being 0's. When the value saturates
+    // this gives a different result to from the C++ case; in the C++ code a
+    // saturated value has all the low bits set to 1. This cannot be done
+    // rapidly in ARM, so we live with the difference, for the sake of speed.
+
+    int result;
+
+    asm("usat %[output],%[saturate],%[value]\n\t"
+        "lsl  %[output],%[shift]"
+        : [output] "=r"(result)
+        : [value] "r"(value), [saturate] "n"(Saturate),
+          [shift] "n"(kLayoutUnitFractionalBits));
+
+    value_ = result;
+  }
+#else
   ALWAYS_INLINE void SaturatedSet(int value) {
     if (value > kIntMaxForLayoutUnit)
       value_ = std::numeric_limits<int>::max();
     else if (value < kIntMinForLayoutUnit)
-      value_ = -std::numeric_limits<int>::max();
+      value_ = std::numeric_limits<int>::min();
     else
       value_ = static_cast<unsigned>(value) << kLayoutUnitFractionalBits;
   }
@@ -289,6 +341,7 @@
     else
       value_ = value << kLayoutUnitFractionalBits;
   }
+#endif  // CPU(ARM) && COMPILER(GCC)
 
   int value_;
 };
@@ -422,7 +475,7 @@
 }
 
 // For multiplication that's prone to overflow, this bounds it to
-// LayoutUnit::Max() and ::Min()
+// LayoutUnit::max() and ::min()
 inline LayoutUnit BoundedMultiply(const LayoutUnit& a, const LayoutUnit& b) {
   int64_t result = static_cast<int64_t>(a.RawValue()) *
                    static_cast<int64_t>(b.RawValue()) / kFixedPointDenominator;
diff --git a/third_party/blink/renderer/platform/geometry/layout_unit_test.cc b/third_party/blink/renderer/platform/geometry/layout_unit_test.cc
index c0fd1f1..db1fa1f61 100644
--- a/third_party/blink/renderer/platform/geometry/layout_unit_test.cc
+++ b/third_party/blink/renderer/platform/geometry/layout_unit_test.cc
@@ -75,7 +75,7 @@
             LayoutUnit(kIntMaxForLayoutUnit + 100).RawValue());
   EXPECT_EQ((kIntMaxForLayoutUnit - 100) << kLayoutUnitFractionalBits,
             LayoutUnit(kIntMaxForLayoutUnit - 100).RawValue());
-  EXPECT_EQ(-max_internal_representation,
+  EXPECT_EQ(GetMinSaturatedSetResultForTesting(),
             LayoutUnit(kIntMinForLayoutUnit).RawValue());
   EXPECT_EQ(GetMinSaturatedSetResultForTesting(),
             LayoutUnit(kIntMinForLayoutUnit - 100).RawValue());
@@ -83,10 +83,6 @@
   // multiplication instead of direct shifting here.
   EXPECT_EQ((kIntMinForLayoutUnit + 100) * (1 << kLayoutUnitFractionalBits),
             LayoutUnit(kIntMinForLayoutUnit + 100).RawValue());
-  // A positive overflowed LayoutUnit should be of equal magnitude to a negative
-  // overflowed LayoutUnit.
-  EXPECT_EQ(LayoutUnit(), LayoutUnit(kIntMaxForLayoutUnit + 100) +
-                              LayoutUnit(-kIntMaxForLayoutUnit - 100));
 }
 
 TEST(LayoutUnitTest, LayoutUnitUnsigned) {
@@ -141,9 +137,12 @@
   // The fractional part of LayoutUnit::Max() is 0x3f, so it should round up.
   EXPECT_EQ(((std::numeric_limits<int>::max() / kFixedPointDenominator) + 1),
             LayoutUnit::Max().Round());
-  // Similarly, LayoutUnit::Min() should round down.
-  EXPECT_EQ((-std::numeric_limits<int>::max() / kFixedPointDenominator) - 1,
-            LayoutUnit::Min().Round());
+  // The fractional part of LayoutUnit::Min() is 0, so the next bigger possible
+  // value should round down.
+  LayoutUnit epsilon;
+  epsilon.SetRawValue(1);
+  EXPECT_EQ(((std::numeric_limits<int>::min() / kFixedPointDenominator)),
+            (LayoutUnit::Min() + epsilon).Round());
 }
 
 TEST(LayoutUnitTest, LayoutUnitSnapSizeToPixel) {
@@ -306,20 +305,6 @@
   EXPECT_EQ(kIntMinForLayoutUnit, LayoutUnit(-176972000.0f).ToInt());
   EXPECT_EQ(kIntMaxForLayoutUnit, LayoutUnit(176972000.0).ToInt());
   EXPECT_EQ(kIntMinForLayoutUnit, LayoutUnit(-176972000.0).ToInt());
-
-  EXPECT_EQ(GetMinSaturatedSetResultForTesting(),
-            LayoutUnit::FromFloatCeil(-176972000.0f).RawValue());
-  EXPECT_EQ(GetMinSaturatedSetResultForTesting(),
-            LayoutUnit::FromFloatFloor(-176972000.0f).RawValue());
-  EXPECT_EQ(GetMinSaturatedSetResultForTesting(),
-            LayoutUnit::FromFloatRound(-176972000.0f).RawValue());
-
-  EXPECT_EQ(GetMinSaturatedSetResultForTesting(),
-            LayoutUnit::FromDoubleRound(-176972000.0).RawValue());
-
-  // A positive overflowed LayoutUnit should be of equal magnitude to a negative
-  // overflowed LayoutUnit.
-  EXPECT_EQ(LayoutUnit(), LayoutUnit(176972000.0) + LayoutUnit(-176972000.0));
 }
 
 TEST(LayoutUnitTest, UnaryMinus) {
@@ -327,8 +312,12 @@
   EXPECT_EQ(LayoutUnit(999), -LayoutUnit(-999));
   EXPECT_EQ(LayoutUnit(-999), -LayoutUnit(999));
 
-  // -LayoutUnit::Min() and LayoutUnit::Max() are equal.
-  EXPECT_EQ(LayoutUnit::Min(), -LayoutUnit::Max());
+  LayoutUnit negative_max;
+  negative_max.SetRawValue(LayoutUnit::Min().RawValue() + 1);
+  EXPECT_EQ(negative_max, -LayoutUnit::Max());
+  EXPECT_EQ(LayoutUnit::Max(), -negative_max);
+
+  // -LayoutUnit::min() is saturated to LayoutUnit::max()
   EXPECT_EQ(LayoutUnit::Max(), -LayoutUnit::Min());
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
index 49f0e54..3675b63d 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
@@ -77,7 +77,7 @@
     kSharedImage = 5,
     kDirectGpuMemoryBuffer = 6,
     kPassThrough = 7,
-    kMaxValue = kDirectGpuMemoryBuffer,
+    kMaxValue = kPassThrough,
   };
 
   void static RecordTypeToUMA(ResourceProviderType type);
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
index bc4365f0..0ba6beb1 100644
--- a/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
+++ b/third_party/blink/renderer/platform/graphics/compositing/paint_artifact_compositor.cc
@@ -630,7 +630,6 @@
       const auto& last_display_item =
           paint_artifact.GetDisplayItemList()[chunk_it->begin_index];
       bool item_for_scrolling = last_display_item.IsScrollHitTest() &&
-                                !last_display_item.IsResizerScrollHitTest() &&
                                 !last_display_item.IsPluginScrollHitTest();
       bool requires_own_layer = last_display_item.IsForeignLayer() ||
                                 // TODO(pdr): This should require a direct
diff --git a/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.cc b/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.cc
index b4e67c83..fc376069 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.h"
 
+#include "build/build_config.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
 #include "gpu/command_buffer/client/webgpu_interface.h"
@@ -12,13 +13,28 @@
 
 namespace blink {
 
+namespace {
+viz::ResourceFormat DawnFormatToViz(DawnTextureFormat format) {
+  if (format == DAWN_TEXTURE_FORMAT_BGRA8_UNORM) {
+    return viz::BGRA_8888;
+  }
+  if (format == DAWN_TEXTURE_FORMAT_RGBA8_UNORM) {
+    return viz::RGBA_8888;
+  }
+  NOTREACHED();
+  return viz::RGBA_8888;
+}
+}  // namespace
+
 WebGPUSwapBufferProvider::WebGPUSwapBufferProvider(
     Client* client,
     scoped_refptr<DawnControlClientHolder> dawn_control_client,
-    DawnTextureUsageBit usage)
+    DawnTextureUsageBit usage,
+    DawnTextureFormat format)
     : dawn_control_client_(dawn_control_client),
       client_(client),
-      usage_(usage) {
+      usage_(usage),
+      format_(DawnFormatToViz(format)) {
   // Create a layer that will be used by the canvas and will ask for a
   // SharedImage each frame.
   layer_ = cc::TextureLayer::CreateForMailbox(this);
@@ -80,8 +96,7 @@
   // Create a new swap buffer.
   // TODO(cwallez@chromium.org): have some recycling mechanism.
   gpu::Mailbox mailbox = sii->CreateSharedImage(
-      viz::RGBA_8888, static_cast<gfx::Size>(size),
-      gfx::ColorSpace::CreateSRGB(),
+      format_, static_cast<gfx::Size>(size), gfx::ColorSpace::CreateSRGB(),
       gpu::SHARED_IMAGE_USAGE_WEBGPU | gpu::SHARED_IMAGE_USAGE_DISPLAY);
   gpu::SyncToken creation_token = sii->GenUnverifiedSyncToken();
 
@@ -137,13 +152,25 @@
   webgpu->GenUnverifiedSyncTokenCHROMIUM(
       current_swap_buffer_->access_finished_token.GetData());
 
+  // On macOS, shared images are backed by IOSurfaces that can only be used
+  // with OpenGL via the rectangle texture target. Every other shared image
+  // implementation is implemented on OpenGL via some form of eglSurface and
+  // eglBindTexImage (on ANGLE or system drivers) so they use the 2D texture
+  // target.
+  const uint32_t texture_target =
+#if defined(OS_MACOSX)
+      GL_TEXTURE_RECTANGLE_ARB
+#else
+      GL_TEXTURE_2D
+#endif
+      ;
   // Populate the output resource
   *out_resource = viz::TransferableResource::MakeGL(
-      current_swap_buffer_->mailbox, GL_LINEAR, GL_TEXTURE_RECTANGLE_ARB,
+      current_swap_buffer_->mailbox, GL_LINEAR, texture_target,
       current_swap_buffer_->access_finished_token, current_swap_buffer_->size,
       false);
   out_resource->color_space = gfx::ColorSpace::CreateSRGB();
-  out_resource->format = viz::RGBA_8888;
+  out_resource->format = format_;
 
   // This holds a ref on the SwapBuffers that will keep it alive until the
   // mailbox is released (and while the release callback is running).
diff --git a/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.h b/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.h
index 6729a082..83711044 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.h
+++ b/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider.h
@@ -35,7 +35,8 @@
   WebGPUSwapBufferProvider(
       Client* client,
       scoped_refptr<DawnControlClientHolder> dawn_control_client,
-      DawnTextureUsageBit usage);
+      DawnTextureUsageBit usage,
+      DawnTextureFormat format);
   ~WebGPUSwapBufferProvider() override;
 
   cc::Layer* CcLayer();
@@ -88,6 +89,7 @@
   uint32_t wire_texture_id_ = 0;
   uint32_t wire_texture_generation_ = 0;
   scoped_refptr<SwapBuffer> current_swap_buffer_;
+  viz::ResourceFormat format_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider_test.cc b/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider_test.cc
index 5d9bafb..ee3e046 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider_test.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/webgpu_swap_buffer_provider_test.cc
@@ -58,8 +58,9 @@
       bool* alive,
       Client* client,
       scoped_refptr<DawnControlClientHolder> dawn_control_client,
-      DawnTextureUsageBit usage)
-      : WebGPUSwapBufferProvider(client, dawn_control_client, usage),
+      DawnTextureUsageBit usage,
+      DawnTextureFormat format)
+      : WebGPUSwapBufferProvider(client, dawn_control_client, usage, format),
         alive_(alive) {}
   ~WebGPUSwapBufferProviderForTests() override { *alive_ = false; }
 
@@ -83,7 +84,8 @@
         base::MakeRefCounted<DawnControlClientHolder>(std::move(provider));
     provider_ = base::MakeRefCounted<WebGPUSwapBufferProviderForTests>(
         &provider_alive_, &client_, dawn_control_client_,
-        DAWN_TEXTURE_USAGE_BIT_OUTPUT_ATTACHMENT);
+        DAWN_TEXTURE_USAGE_BIT_OUTPUT_ATTACHMENT,
+        DAWN_TEXTURE_FORMAT_RGBA8_UNORM);
   }
 
   scoped_refptr<DawnControlClientHolder> dawn_control_client_;
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item.cc b/third_party/blink/renderer/platform/graphics/paint/display_item.cc
index 6063758d..adeeb9f 100644
--- a/third_party/blink/renderer/platform/graphics/paint/display_item.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/display_item.cc
@@ -150,7 +150,6 @@
   switch (type) {
     DEBUG_STRING_CASE(HitTest);
     DEBUG_STRING_CASE(ScrollHitTest);
-    DEBUG_STRING_CASE(ResizerScrollHitTest);
     DEBUG_STRING_CASE(PluginScrollHitTest);
     DEBUG_STRING_CASE(LayerChunkBackground);
     DEBUG_STRING_CASE(LayerChunkNegativeZOrderChildren);
diff --git a/third_party/blink/renderer/platform/graphics/paint/display_item.h b/third_party/blink/renderer/platform/graphics/paint/display_item.h
index 9448ce6..f33960d0 100644
--- a/third_party/blink/renderer/platform/graphics/paint/display_item.h
+++ b/third_party/blink/renderer/platform/graphics/paint/display_item.h
@@ -130,8 +130,6 @@
     // Used both for specifying the paint-order scroll location, and for non-
     // composited scroll hit testing (see: scroll_hit_test_display_item.h).
     kScrollHitTest,
-    // Used to prevent composited scrolling on the resize handle.
-    kResizerScrollHitTest,
     // Used to prevent composited scrolling on plugins with wheel handlers.
     kPluginScrollHitTest,
 
@@ -249,10 +247,8 @@
 
   bool IsHitTest() const { return type_ == kHitTest; }
   bool IsScrollHitTest() const {
-    return type_ == kScrollHitTest || IsResizerScrollHitTest() ||
-           IsPluginScrollHitTest();
+    return type_ == kScrollHitTest || IsPluginScrollHitTest();
   }
-  bool IsResizerScrollHitTest() const { return type_ == kResizerScrollHitTest; }
   bool IsPluginScrollHitTest() const { return type_ == kPluginScrollHitTest; }
 
   bool IsCacheable() const { return is_cacheable_; }
diff --git a/third_party/blink/renderer/platform/graphics/paint/scroll_hit_test_display_item.cc b/third_party/blink/renderer/platform/graphics/paint/scroll_hit_test_display_item.cc
index 6e1f2445..c64717b 100644
--- a/third_party/blink/renderer/platform/graphics/paint/scroll_hit_test_display_item.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/scroll_hit_test_display_item.cc
@@ -20,10 +20,9 @@
       scroll_container_bounds_(scroll_container_bounds) {
   DCHECK(RuntimeEnabledFeatures::PaintNonFastScrollableRegionsEnabled());
 #if DCHECK_IS_ON()
-  if (type == DisplayItem::Type::kResizerScrollHitTest ||
-      type == DisplayItem::Type::kPluginScrollHitTest) {
-    // Resizer and plugin scroll hit tests are only used to prevent composited
-    // scrolling and should not have a scroll offset node.
+  if (type == DisplayItem::Type::kPluginScrollHitTest) {
+    // Plugin scroll hit tests are only used to prevent composited scrolling
+    // and should not have a scroll offset node.
     DCHECK(!scroll_offset_node);
   } else if (type == DisplayItem::Type::kScrollHitTest) {
     DCHECK(scroll_offset_node);
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 02e16c211dc..91a93119 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -158,6 +158,9 @@
       settable_from_internals: true,
     },
     {
+      name: "BackForwardCache",
+    },
+    {
       name: "BackgroundFetch",
       status: "stable",
     },
@@ -1339,6 +1342,9 @@
       status: "experimental",
     },
     {
+      name: "RestrictedWebkitAppearance",
+    },
+    {
       name: "RtcAudioJitterBufferMaxPackets",
       origin_trial_feature_name: "RtcAudioJitterBufferMaxPackets",
       status: "experimental",
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc
index 25ba458..64b813e 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/memory_purge_manager_unittest.cc
@@ -25,7 +25,7 @@
   MemoryPurgeManagerTest()
       : scoped_task_environment_(
             base::test::ScopedTaskEnvironment::MainThreadType::UI,
-            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW),
+            base::test::ScopedTaskEnvironment::TimeSource::MOCK_TIME),
         memory_purge_manager_(
             scoped_task_environment_.GetMainThreadTaskRunner()),
         observed_memory_pressure_(false) {}
diff --git a/third_party/blink/web_tests/LeakExpectations b/third_party/blink/web_tests/LeakExpectations
index c1a04876..65f8ec2 100644
--- a/third_party/blink/web_tests/LeakExpectations
+++ b/third_party/blink/web_tests/LeakExpectations
@@ -78,6 +78,7 @@
 crbug.com/862029 [ Linux ] virtual/threaded/http/tests/devtools/tracing/timeline-misc/timeline-window-filter.js [ Pass Leak ]
 
 crbug.com/733494 [ Linux ] media/autoplay/document-user-activation.html [ Pass Leak ]
+crbug.com/733494 [ Linux ] virtual/audio-service/media/autoplay/document-user-activation.html [ Pass Leak ]
 
 # Sheriff 2019-01-04
 crbug.com/919117 [ Linux ] virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-drag.html [ Pass Leak ]
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index fe8f8cd8..7a75cd0 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -1622,6 +1622,7 @@
 
 # Requires --use-fake-ui-for-media-stream to run.
 external/wpt/mediacapture-streams/MediaStream-default-feature-policy.https.html [ WontFix ]
+virtual/audio-service/external/wpt/mediacapture-streams/MediaStream-default-feature-policy.https.html [ WontFix ]
 
 # These directories have manual tests that don't have to run with
 # run_web_tests.py; see https://crbug.com/359838.
@@ -2137,6 +2138,8 @@
 virtual/blink-cors/external/wpt/xhr/send-authentication-prompt-2-manual.htm [ WontFix ]
 virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-MediaElement-preload-none-manual.https.html [ WontFix ]
 virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStreamTrack-end-manual.https.html [ WontFix ]
+virtual/audio-service/external/wpt/mediacapture-streams/MediaStream-MediaElement-preload-none-manual.https.html [ WontFix ]
+virtual/audio-service/external/wpt/mediacapture-streams/MediaStreamTrack-end-manual.https.html [ WontFix ]
 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/fetch-event-is-history-backward-navigation-manual.https.html [ WontFix ]
 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ WontFix ]
 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ]
@@ -2147,6 +2150,9 @@
 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ]
 virtual/not-omt-sw-fetch/external/wpt/xhr/send-authentication-existing-session-manual.htm [ WontFix ]
 virtual/not-omt-sw-fetch/external/wpt/xhr/send-authentication-prompt-2-manual.htm [ WontFix ]
+virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/fetch-event-is-history-backward-navigation-manual.https.html [ WontFix ]
+virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ WontFix ]
+virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ]
 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-event-is-history-backward-navigation-manual.https.html [ WontFix ]
 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ WontFix ]
 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ]
@@ -2245,6 +2251,7 @@
 crbug.com/946022 [ Win7 ] images/image-zoom-to-25.html [ WontFix ]
 crbug.com/946022 [ Win7 ] images/image-zoom-to-500.html [ WontFix ]
 crbug.com/946022 [ Win7 ] media/controls/overflow-menu-hide-on-resize.html [ WontFix ]
+crbug.com/946022 [ Win7 ] virtual/audio-service/media/controls/overflow-menu-hide-on-resize.html [ WontFix ]
 crbug.com/946022 [ Win7 ] paint/invalidation/resize-iframe-text.html [ WontFix ]
 crbug.com/946022 [ Win7 ] paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html [ WontFix ]
 crbug.com/946022 [ Win7 ] paint/invalidation/window-resize/ [ WontFix ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index 3b4112f4..3ea40c6d 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -44,6 +44,8 @@
 crbug.com/24182 jquery/traversing.html [ Slow ]
 crbug.com/24182 media/controls/controls-cast-do-not-fade-out.html [ Slow ]
 crbug.com/24182 media/controls/controls-cast-overlay-slow-fade.html [ Slow ]
+crbug.com/24182 virtual/audio-service/media/controls/controls-cast-do-not-fade-out.html [ Slow ]
+crbug.com/24182 virtual/audio-service/media/controls/controls-cast-overlay-slow-fade.html [ Slow ]
 crbug.com/24182 svg/filters/big-sized-filter.svg [ Slow ]
 crbug.com/24182 tables/mozilla/other/slashlogo.html [ Slow ]
 crbug.com/24182 fast/canvas/color-space/canvas-colorManaged-toBlob-toDataURL.html [ Slow ]
@@ -117,6 +119,10 @@
 crbug.com/73609 http/tests/media/video-preload-metadata.html [ Slow ]
 crbug.com/869829 http/tests/media/video-cancel-load.html [ Slow ]
 crbug.com/870259 http/tests/media/video-throttled-load-metadata.html [ Slow ]
+crbug.com/73609 virtual/audio-service/http/tests/media/video-play-stall.html [ Slow ]
+crbug.com/73609 virtual/audio-service/http/tests/media/video-preload-metadata.html [ Slow ]
+crbug.com/869829 virtual/audio-service/http/tests/media/video-cancel-load.html [ Slow ]
+crbug.com/870259 virtual/audio-service/http/tests/media/video-throttled-load-metadata.html [ Slow ]
 
 # Many of the virtual animations tests are slow.
 crbug.com/243871 virtual/threaded/fast/scroll-behavior/ [ Slow ]
@@ -150,6 +156,7 @@
 crbug.com/346259 http/tests/websocket/no-crash-on-cookie-flood.html [ Slow ]
 
 crbug.com/522646 http/tests/media/encrypted-media/encrypted-media-encrypted-event-different-origin.html [ Slow ]
+crbug.com/522646 virtual/audio-service/http/tests/media/encrypted-media/encrypted-media-encrypted-event-different-origin.html [ Slow ]
 crbug.com/411164 [ Win ] http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Slow ]
 crbug.com/411164 [ Win ] virtual/blink-cors/http/tests/security/powerfulFeatureRestrictions/serviceworker-on-insecure-origin.html [ Slow ]
 crbug.com/510337 http/tests/devtools/console/console-format.js [ Slow ]
@@ -216,6 +223,7 @@
 
 # Media controls tests have to wait for panel to fade out.
 crbug.com/722825 media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Slow ]
+crbug.com/722825 virtual/audio-service/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Slow ]
 
 crbug.com/719298 fast/dnd/dropEffect-for-effectAllowed.html [ Slow ]
 
@@ -229,6 +237,7 @@
 crbug.com/451577 [ Linux ] http/tests/devtools/layers/layer-canvas-log.js [ Slow ]
 
 crbug.com/793771 media/controls/scrubbing.html [ Slow ]
+crbug.com/793771 virtual/audio-service/media/controls/scrubbing.html [ Slow ]
 
 # These tests need to do many iterations and so can't be fast.
 crbug.com/748418 http/tests/streams/chromium/deep-recursion-getwriter.html [ Slow ]
@@ -269,8 +278,10 @@
 crbug.com/864887 [ Mac ] fast/scroll-snap/snaps-after-scrollbar-scrolling.html [ Slow ]
 
 crbug.com/865262 [ Mac ] media/controls/text-track-menu-pointer-selection.html [ Slow ]
+crbug.com/865262 [ Mac ] virtual/audio-service/media/controls/text-track-menu-pointer-selection.html [ Slow ]
 
 crbug.com/942951 media/controls/controls-layout-in-different-size.html [ Slow ]
+crbug.com/942951 virtual/audio-service/media/controls/controls-layout-in-different-size.html [ Slow ]
 
 crbug.com/910627 webexposed/global-interface-listing-shared-worker.html [ Slow ]
 crbug.com/910627 virtual/stable/webexposed/global-interface-listing-shared-worker.html [ Slow ]
@@ -435,6 +446,11 @@
 crbug.com/874695 http/tests/media/video-buffered.html [ Slow ]
 crbug.com/874695 http/tests/media/video-load-metadata-decode-error.html [ Slow ]
 crbug.com/874695 http/tests/media/video-play-stall-before-meta-data.html [ Slow ]
+crbug.com/874695 virtual/audio-service/http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Slow ]
+crbug.com/874695 virtual/audio-service/http/tests/media/preload-conditions.html [ Slow ]
+crbug.com/874695 virtual/audio-service/http/tests/media/video-buffered.html [ Slow ]
+crbug.com/874695 virtual/audio-service/http/tests/media/video-load-metadata-decode-error.html [ Slow ]
+crbug.com/874695 virtual/audio-service/http/tests/media/video-play-stall-before-meta-data.html [ Slow ]
 crbug.com/874695 http/tests/misc/adopt-iframe-src-attr-after-remove.html [ Slow ]
 crbug.com/874695 http/tests/misc/async-script-removed.html [ Slow ]
 crbug.com/874695 http/tests/misc/client-hints-accept-meta-preloader.html [ Slow ]
@@ -493,6 +509,27 @@
 crbug.com/874695 media/video-controls-visibility-multimodal-mouse-after-touch.html [ Slow ]
 crbug.com/874695 media/video-controls-visibility-multimodal-touch-after-mouse.html [ Slow ]
 crbug.com/874695 media/video-played-collapse.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/audio-controls-do-not-fade-out.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/autoplay-muted.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/color-profile-video-seek-filter.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/encrypted-media/encrypted-media-onencrypted.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/encrypted-media/encrypted-media-setmediakeys-at-same-time.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/media-controls-tap-show-controls-without-activating.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/media-ended.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/remoteplayback/prompt-twice-throws.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/track/track-cue-gc-wrapper.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/unsupported-rtsp.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-always-visible-when-control-hovered.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-auto-hide-after-play-by-touch.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-dont-show-on-focus-when-disabled.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-focus-movement-on-hide.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-hide-after-touch-on-control.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-hide-on-move-outside-controls.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-show-on-focus.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-visibility-multimodal-mouse-after-touch.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-controls-visibility-multimodal-touch-after-mouse.html [ Slow ]
+crbug.com/874695 virtual/audio-service/media/video-played-collapse.html [ Slow ]
 crbug.com/874695 paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child.html [ Slow ]
 crbug.com/874695 paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter.html [ Slow ]
 crbug.com/874695 paint/invalidation/filters/filter-repaint-on-accelerated-layer.html [ Slow ]
@@ -515,7 +552,6 @@
 crbug.com/874695 storage/websql/transaction-error-callback-isolated-world.html [ Slow ]
 crbug.com/874695 storage/websql/transaction-success-callback-isolated-world.html [ Slow ]
 crbug.com/874695 svg/animations/svg-animation-policy-once.html [ Slow ]
-crbug.com/874695 svg/animations/svglengthlist-animation-3.html [ Slow ]
 crbug.com/874695 virtual/android/fullscreen/full-screen-restrictions.html [ Slow ]
 crbug.com/874695 virtual/android/fullscreen/video-specified-size.html [ Slow ]
 crbug.com/874695 virtual/display-compositor-pixel-dump/fast/canvas/display-compositor-pixel-dump/OffscreenCanvas-opaque-background-compositing.html [ Slow ]
@@ -604,6 +640,7 @@
 crbug.com/893015 [ Linux ] virtual/streaming-preload/http/tests/fetch/chromium/response-text-gc-crash.html [ Slow ]
 
 crbug.com/914981 [ Mac ] media/controls/overflow-menu-pointer-selection.html [ Slow ]
+crbug.com/914981 [ Mac ] virtual/audio-service/media/controls/overflow-menu-pointer-selection.html [ Slow ]
 crbug.com/914981 [ Mac ] virtual/mouseevent_fractional/fast/events/no-fake-mousemove.html [ Slow ]
 crbug.com/914981 [ Mac ] fast/events/no-fake-mousemove.html [ Slow ]
 
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 7ccaa44..be97a99 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -39,6 +39,7 @@
 # These two are left over from crbug.com/881040, I rebaselined them twice and
 # they continue to fail.
 crbug.com/881040 media/controls/lazy-loaded-style.html [ Failure Pass ]
+crbug.com/881040 virtual/audio-service/media/controls/lazy-loaded-style.html [ Failure Pass ]
 
 # With --enable-display-compositor-pixel-dump enabled by default, these three
 # tests fail. See crbug.com/887140 for more info.
@@ -75,8 +76,10 @@
 crbug.com/801992 http/tests/misc/iframe-script-modify-attr.html [ Pass Crash ]
 crbug.com/819800 external/wpt/payment-request/allowpaymentrequest/setting-allowpaymentrequest-timing.https.sub.html [ Failure ]
 crbug.com/872952 http/tests/media/autoplay/document-user-activation-feature-policy-iframe-no-gesture.html [ Failure Pass Timeout ]
+crbug.com/872952 virtual/audio-service/http/tests/media/autoplay/document-user-activation-feature-policy-iframe-no-gesture.html [ Failure Pass Timeout ]
 crbug.com/895001 external/wpt/html/user-activation/message-event-activation-api-iframe-cross-origin.sub.tentative.html [ Timeout Pass ]
 crbug.com/895001 http/tests/media/autoplay/webaudio-autoplay-iframe-with-gesture.html [ Timeout Pass ]
+crbug.com/895001 virtual/audio-service/http/tests/media/autoplay/webaudio-autoplay-iframe-with-gesture.html [ Timeout Pass ]
 crbug.com/901502 http/tests/devtools/oopif/oopif-storage.js [ Pass Failure ]
 crbug.com/906879 http/tests/inspector-protocol/network/navigation-blocking-xorigin-iframe.js [ Pass Failure ]
 crbug.com/949003 http/tests/printing/cross-site-frame-scrolled.html [ Pass Failure ]
@@ -535,11 +538,13 @@
 crbug.com/949909 external/wpt/css/css-text-decor/text-decoration-040-manual.html [ Skip ]
 
 crbug.com/722825 media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html [ Timeout Pass ]
+crbug.com/722825 virtual/audio-service/media/controls/video-enter-exit-fullscreen-while-hovering-shows-controls.html [ Timeout Pass ]
 
 #### crbug.com/783229 overflow
 crbug.com/724701 overflow/overflow-basic-004.html [ Failure ]
 
 crbug.com/846753 [ Mac ] http/tests/media/reload-after-dialog.html [ Failure Pass Timeout ]
+crbug.com/846753 [ Mac ] virtual/audio-service/http/tests/media/reload-after-dialog.html [ Failure Pass Timeout ]
 
 ### external/wpt/css/css-tables/
 crbug.com/598134 external/wpt/css/css-tables/table-has-box-sizing-border-box-002.html [ Failure ]
@@ -863,6 +868,7 @@
 crbug.com/591099 [ Mac ] images/feature-policy-oversized-images-resize.html [ Failure ]
 crbug.com/974717 [ Linux ] images/feature-policy-oversized-images-resize.html [ Failure Pass ]
 # crbug.com/591099 [ Mac10.11 ] media/track/track-cue-rendering-position-auto-rtl.html [ Failure ]
+crbug.com/591099 [ Mac10.11 ] virtual/audio-service/media/track/track-cue-rendering-position-auto-rtl.html [ Failure ]
 crbug.com/591099 [ Mac10.11 ] virtual/scalefactor200/fast/hidpi/static/popup-menu-appearance.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] compositing/geometry/root-layer-update.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] compositing/overlap-blending/reflection-opacity-huge.html [ Failure ]
@@ -1170,7 +1176,9 @@
 crbug.com/591099 [ Mac10.13 ] images/imagemap-focus-ring.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] images/imagemap-overflowing-polygon-focus-ring.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] media/video-colorspace-yuv420.html [ Failure ]
+crbug.com/591099 [ Mac10.13 ] virtual/audio-service/media/video-colorspace-yuv420.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] media/video-empty-source.html [ Failure ]
+crbug.com/591099 [ Mac10.13 ] virtual/audio-service/media/video-empty-source.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] paint/invalidation/background/background-misaligned.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] paint/invalidation/block-no-inflow-children.html [ Failure ]
 crbug.com/591099 [ Mac10.13 ] paint/invalidation/bugzilla-7235.html [ Failure ]
@@ -1394,7 +1402,7 @@
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-columns-invalid-002.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-columns-toolong-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-containing-001.xht [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-containing-002.xht [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-containing-002.xht [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-count-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-count-002.xht [ Failure ]
 crbug.com/776051 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-count-computed-003.xht [ Failure ]
@@ -1407,11 +1415,11 @@
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-000.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-auto-001.xht [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-auto-002.xht [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-auto-002.xht [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-auto-003.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-auto-block-children-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-auto-block-children-002.xht [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-balance-001.xht [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-fill-balance-001.xht [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-gap-000.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-gap-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-gap-002.xht [ Failure ]
@@ -1442,7 +1450,7 @@
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-reduce-000.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-000.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-001.xht [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-002.xht [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-002.xht [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-003.xht [ Failure ]
 crbug.com/792435 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-004.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-color-001.xht [ Failure ]
@@ -1453,7 +1461,7 @@
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-double-000.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-fraction-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-fraction-002.xht [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-fraction-003.xht [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-fraction-003.xht [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-groove-000.xht [ Failure ]
 crbug.com/792437 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-inset-000.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-rule-large-001.xht [ Failure ]
@@ -1474,7 +1482,7 @@
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-005.html [ Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-006.html [ Failure Crash ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-007.html [ Failure ]
-crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-009.html [ Crash ]
+crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-009.html [ Crash Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-008.html [ Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-010.html [ Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-span-all-011.html [ Failure ]
@@ -1503,7 +1511,7 @@
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-under-vertical-rl-scroll.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-002.xht [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-003.xht [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-003.xht [ Crash Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-004.html [ Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-005.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-ch-001.xht [ Failure ]
@@ -1514,7 +1522,7 @@
 crbug.com/591099 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-width-small-001.xht [ Failure ]
 crbug.com/829028 virtual/layout_ng_experimental/external/wpt/css/css-multicol/multicol-zero-height-001.xht [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/abspos-after-break-after.html [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/abspos-new-width-rebalance.html [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/abspos-new-width-rebalance.html [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/balance-float-after-forced-break.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/balance-float-in-inline.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/balance-floats.html [ Failure ]
@@ -1640,7 +1648,7 @@
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/line-pushed-down-by-float.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/line-too-tall-for-second-outer-row.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/many-lines-overflow-in-single-row-inner.html [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/mixed-opacity-test.html [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/mixed-opacity-test.html [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/mixed-positioning-stacking-order.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/nested-3-multicols-fixed-height.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/nested-auto-height-extra-block-inbetween.html [ Failure ]
@@ -1690,7 +1698,7 @@
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/overflow-unsplittable.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/pageLogicalOffset-vertical.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/paginate-block-replaced.html [ Failure ]
-crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/positioned-outside-of-columns.html [ Crash ]
+crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/positioned-outside-of-columns.html [ Crash Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/positioned-split.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/positive-leading.html [ Failure ]
 crbug.com/591099 virtual/layout_ng_experimental/fast/multicol/pushed-line-affected-by-float.html [ Failure ]
@@ -2258,8 +2266,6 @@
 crbug.com/538697 [ Win ] printing/webgl-oversized-printing.html [ Failure Crash ]
 
 crbug.com/904592 css3/filters/backdrop-filter-svg.html [ Failure ]
-crbug.com/984766 [ Mac ] css3/filters/backdrop-filter-plus-mask.html [ Failure ]
-crbug.com/984766 [ Mac ] virtual/scalefactor200/css3/filters/backdrop-filter-plus-mask.html [ Failure ]
 
 crbug.com/492664 [ Linux ] external/wpt/css/css-writing-modes/box-offsets-rel-pos-vlr-005.xht [ Failure ]
 crbug.com/492664 [ Linux ] external/wpt/css/css-writing-modes/box-offsets-rel-pos-vrl-004.xht [ Failure ]
@@ -2269,10 +2275,14 @@
 crbug.com/280342 [ Mac ] http/tests/media/progress-events-generated-correctly.html [ Failure Pass ]
 crbug.com/280342 [ Linux ] http/tests/media/progress-events-generated-correctly.html [ Failure Pass ]
 crbug.com/280342 [ Win ] http/tests/media/progress-events-generated-correctly.html [ Failure Pass ]
+crbug.com/280342 [ Mac ] virtual/audio-service/http/tests/media/progress-events-generated-correctly.html [ Failure Pass ]
+crbug.com/280342 [ Linux ] virtual/audio-service/http/tests/media/progress-events-generated-correctly.html [ Failure Pass ]
+crbug.com/280342 [ Win ] virtual/audio-service/http/tests/media/progress-events-generated-correctly.html [ Failure Pass ]
 
 crbug.com/520736 [ Win7 ] media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
 crbug.com/520736 [ Linux ] media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
 crbug.com/909095 [ Mac ] media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
+crbug.com/909095 virtual/audio-service/media/W3C/video/networkState/networkState_during_progress.html [ Failure Pass ]
 
 crbug.com/862716 [ Mac ] css3/filters/effect-brightness-clamping-hw.html [ Failure Pass Timeout ]
 crbug.com/862716 [ Linux ] css3/filters/effect-brightness-clamping-hw.html [ Failure Pass Timeout ]
@@ -2341,6 +2351,7 @@
 
 crbug.com/432129 html/marquee/marquee-scroll.html [ Failure Pass ]
 crbug.com/326139 crbug.com/390125 media/video-frame-accurate-seek.html [ Failure Pass ]
+crbug.com/326139 crbug.com/390125 virtual/audio-service/media/video-frame-accurate-seek.html [ Failure Pass ]
 crbug.com/421283 html/marquee/marquee-scrollamount.html [ Pass Failure ]
 
 # TODO(oshima): Mac Android are currently not supported.
@@ -2422,6 +2433,7 @@
 
 crbug.com/688613 external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-audio-is-silence.https.html [ Skip ]
 crbug.com/688613 virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-audio-is-silence.https.html [ Skip ]
+crbug.com/688613 virtual/audio-service/external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-audio-is-silence.https.html [ Skip ]
 
 
 crbug.com/766135 fast/dom/Window/redirect-with-timer.html [ Timeout Pass ]
@@ -2568,6 +2580,7 @@
 crbug.com/467635 fast/dom/HTMLImageElement/image-sizes-meta-viewport.html [ Skip ]
 
 crbug.com/636239 [ Win7 ] media/video-zoom-controls.html [ Failure ]
+crbug.com/636239 [ Win7 ] virtual/audio-service/media/video-zoom-controls.html [ Failure ]
 
 # The spec for "Propagation to the Initial Containing Block" was changed.
 # https://drafts.csswg.org/css-writing-modes-4/#icb
@@ -2625,11 +2638,13 @@
 crbug.com/658305 css3/filters/filter-effect-removed.html [ Failure Pass ]
 
 crbug.com/524160 [ Debug ] http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-default-buffers.html [ Timeout ]
+crbug.com/524160 [ Debug ] virtual/audio-service/http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-default-buffers.html [ Timeout ]
 
 # Run the tests with the default MSE buffer sizes in the main test suite and the tests for 1MB buffers set via command line in a virtual test suite
 # with the --mse-audio-buffer-size-limit=1048576 and --mse-video-buffer-size-limit=1048576 command-line parameters.
 crbug.com/630342 virtual/mse-1mb-buffers/http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-default-buffers.html [ Skip ]
 crbug.com/630342 http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-1mb-buffers.html [ Skip ]
+crbug.com/630342 virtual/audio-service/http/tests/media/media-source/stream_memory_tests/mediasource-appendbuffer-quota-exceeded-1mb-buffers.html [ Skip ]
 
 # On these platforms (all but Android) media tests don't currently use gpu-accelerated (proprietary) codecs, so no
 # benefit to running them again with gpu acceleration enabled.
@@ -2641,7 +2656,9 @@
 crbug.com/467477 fast/multicol/vertical-rl/nested-columns.html [ Failure ]
 
 crbug.com/400841 media/video-canvas-draw.html [ Failure ]
+crbug.com/400841 virtual/audio-service/media/video-canvas-draw.html [ Failure ]
 crbug.com/400829 virtual/stable/media/stable/video-object-fit-stable.html [ Failure ]
+crbug.com/400829 virtual/audio-service/media/stable/video-object-fit-stable.html [ Failure ]
 
 # These contain faulty expectations. https://chromium-review.googlesource.com/c/v8/v8/+/1350790 should fix the
 # faulty return values but to allow landing that patch, the tests have to be deactivated in the meanwhile.
@@ -3020,12 +3037,18 @@
 crbug.com/654477 fast/layers/video-layer.html [ Failure ]
 # These could likely be removed - see https://chromium-review.googlesource.com/c/chromium/src/+/1252141
 crbug.com/654477 media/controls-focus-ring.html [ Failure ]
+crbug.com/654477 virtual/audio-service/media/controls-focus-ring.html [ Failure ]
 crbug.com/654477 [ Mac10.10 ] http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
 crbug.com/654477 [ Mac10.11 ] http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
 crbug.com/654477 [ Retina ] http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
 crbug.com/638621 [ Win7 ] http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
+crbug.com/654477 [ Mac10.10 ] virtual/audio-service/http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
+crbug.com/654477 [ Mac10.11 ] virtual/audio-service/http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
+crbug.com/654477 [ Retina ] virtual/audio-service/http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
+crbug.com/638621 [ Win7 ] virtual/audio-service/http/tests/media/video-buffered-range-contains-currentTime.html [ Failure ]
 
 crbug.com/637930 http/tests/media/video-buffered.html [ Pass Failure ]
+crbug.com/637930 virtual/audio-service/http/tests/media/video-buffered.html [ Pass Failure ]
 
 crbug.com/613659 external/wpt/quirks/percentage-height-calculation.html [ Failure ]
 crbug.com/613661 external/wpt/quirks/table-cell-nowrap-minimum-width-calculation.html [ Failure ]
@@ -3149,6 +3172,7 @@
 crbug.com/832071 virtual/blink-cors/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
 crbug.com/832071 virtual/navigation-mojo-response/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
 crbug.com/832071 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
+crbug.com/832071 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
 crbug.com/832071 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
 
 # failures in external/wpt/css/css-animations/ and web-animations/ from Mozilla tests
@@ -3580,6 +3604,7 @@
 crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/bidi/start_alignment.html [ Failure ]
 crbug.com/626703 [ Retina ] external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Timeout ]
 crbug.com/626703 external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Timeout ]
+crbug.com/626703 virtual/audio-service/external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Timeout ]
 crbug.com/626703 virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/html/cross-origin/anonymous.tentative.html [ Failure Crash ]
 crbug.com/626703 [ Mac10.12 ] external/wpt/html/cross-origin/anonymous.tentative.html [ Failure Crash ]
@@ -3593,6 +3618,7 @@
 crbug.com/626703 virtual/blink-cors/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
 crbug.com/626703 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
 crbug.com/626703 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
+crbug.com/626703 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
 crbug.com/626703 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html [ Failure ]
@@ -4413,6 +4439,7 @@
 crbug.com/648295 virtual/blink-cors/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ]
 crbug.com/648295 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ]
 crbug.com/648295 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ]
+crbug.com/648295 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ]
 crbug.com/648295 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ]
 crbug.com/626703 external/wpt/svg/linking/reftests/href-filter-element.html [ Failure ]
 crbug.com/626703 external/wpt/webvtt/rendering/cues-with-video/processing-model/2_cues_overlapping_completely_move_up.html [ Failure ]
@@ -4811,6 +4838,7 @@
 crbug.com/691944 virtual/blink-cors/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 crbug.com/691944 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 crbug.com/691944 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
+crbug.com/691944 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 crbug.com/691944 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 
 # These tests (erroneously) see a platform-specific User-Agent header
@@ -4818,6 +4846,7 @@
 crbug.com/595993 virtual/blink-cors/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 crbug.com/595993 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 crbug.com/595993 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
+crbug.com/595993 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 crbug.com/595993 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 
 crbug.com/619427 [ Mac ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ]
@@ -4849,6 +4878,8 @@
 #crbug.com/765738 [ Linux Win Mac ] http/tests/wasm/wasm_remote_postMessage_test.https.html [ Pass Timeout ]
 crbug.com/892212 http/tests/wasm/wasm_remote_postMessage_test.https.html [ Pass Failure Timeout ]
 
+crbug.com/990331 virtual/audio-service/http/tests/media/media-source/mediasource-play.html [ Pass Timeout ]
+
 # ====== Random order flaky tests from here ======
 # These tests are flaky when run in random order, which is the default on Linux & Mac since since 2016-12-16.
 
@@ -4929,6 +4960,7 @@
 
 crbug.com/689781 external/wpt/media-source/mediasource-duration.html [ Failure Pass ]
 crbug.com/689781 [ Win Mac ] http/tests/media/media-source/mediasource-duration.html [ Failure Pass ]
+crbug.com/689781 [ Win Mac ] virtual/audio-service/http/tests/media/media-source/mediasource-duration.html [ Failure Pass ]
 
 crbug.com/681468 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom125.html [ Failure Pass ]
 crbug.com/681468 fast/forms/suggestion-picker/date-suggestion-picker-appearance-zoom200.html [ Failure Pass ]
@@ -4973,6 +5005,7 @@
 
 # Sheriff failures 2017-02-21
 crbug.com/73609 http/tests/media/video-play-stall.html [ Pass Timeout ]
+crbug.com/73609 virtual/audio-service/http/tests/media/video-play-stall.html [ Pass Timeout ]
 
 # Sheriff failures 2017-03-10
 crbug.com/741210 [ Mac ] inspector-protocol/emulation/device-emulation-restore.js [ Failure ]
@@ -4993,6 +5026,7 @@
 crbug.com/722212 virtual/mouseevent_fractional/fast/events/pointerevents/mouse-pointer-event-properties.html [ Failure Timeout Pass ]
 # Crashes on win
 crbug.com/722943 media/audio-repaint.html [ Skip ]
+crbug.com/722943 virtual/audio-service/media/audio-repaint.html [ Skip ]
 
 # Sheriff failures 2018-08-13
 crbug.com/873454 css3/filters/effect-reference-image-hw.html [ Failure Pass ]
@@ -5019,6 +5053,7 @@
 crbug.com/718155 fullscreen/full-screen-iframe-not-allowed.html [ Failure ]
 crbug.com/718155 fullscreen/full-screen-restrictions.html [ Failure Timeout ]
 crbug.com/718155 media/video-controls-fullscreen-iframe-not-allowed.html [ Failure ]
+crbug.com/718155 virtual/audio-service/media/video-controls-fullscreen-iframe-not-allowed.html [ Failure ]
 crbug.com/718155 virtual/android/fullscreen/full-screen-iframe-not-allowed.html [ Failure ]
 crbug.com/718155 virtual/android/fullscreen/full-screen-restrictions.html [ Failure Timeout ]
 
@@ -5069,6 +5104,7 @@
 # Service worker updates need to handle redirect appropriately.
 crbug.com/889798 external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
 crbug.com/889798 virtual/blink-cors/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
+crbug.com/889798 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
 crbug.com/889798 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
 crbug.com/889798 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
 crbug.com/889798 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
@@ -5081,7 +5117,9 @@
 crbug.com/745887 [ Win ] fast/frames/sandboxed-iframe-plugins.html [ Failure Pass ]
 
 crbug.com/746128 [ Win7 Debug ] media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Failure ]
+crbug.com/746128 [ Win7 Debug ] virtual/audio-service/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Failure ]
 crbug.com/746128 [ Mac ] media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Failure Pass ]
+crbug.com/746128 [ Mac ] virtual/audio-service/media/controls/video-enter-exit-fullscreen-without-hovering-doesnt-show-controls.html [ Failure Pass ]
 
 crbug.com/731018 [ Mac ] sensor/accelerometer.html [ Failure Pass Crash ]
 crbug.com/731018 [ Mac ] sensor/ambient-light-sensor.html [ Failure Pass Crash ]
@@ -5091,12 +5129,17 @@
 
 # Tests failing when enabling new modern media controls
 crbug.com/831942 media/webkit-media-controls-webkit-appearance.html [ Failure Pass ]
+crbug.com/831942 virtual/audio-service/media/webkit-media-controls-webkit-appearance.html [ Failure Pass ]
 crbug.com/831957 compositing/video/video-controls-layer-creation-squashing.html [ Failure Pass ]
 crbug.com/832157 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-after-controls-added.html [ Skip ]
 crbug.com/832169 media/media-controls-fit-properly-while-zoomed.html [ Failure Pass ]
+crbug.com/832169 virtual/audio-service/media/media-controls-fit-properly-while-zoomed.html [ Failure Pass ]
 crbug.com/832447 media/controls/controls-page-zoom-in.html [ Failure Pass ]
 crbug.com/832447 media/controls/controls-page-zoom-out.html [ Failure Pass ]
+crbug.com/832447 virtual/audio-service/media/controls/controls-page-zoom-in.html [ Failure Pass ]
+crbug.com/832447 virtual/audio-service/media/controls/controls-page-zoom-out.html [ Failure Pass ]
 crbug.com/849694 [ Mac ] http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Failure Pass ]
+crbug.com/849694 [ Mac ] virtual/audio-service/http/tests/media/controls/toggle-class-with-state-source-buffer.html [ Failure Pass ]
 
 # ContentSecurityPolicy modifies the SchemeRegistry before some initialization.
 crbug.com/686118 http/tests/security/contentSecurityPolicy/register-bypassing-scheme.html [ Pass Crash ]
@@ -5209,6 +5252,9 @@
 crbug.com/694855 media/audio-src-suspend-after-have-metadata.html [ Skip ]
 crbug.com/694855 media/video-src-skip-suspend-after-have-metadata.html [ Skip ]
 crbug.com/694855 media/video-src-suspend-after-have-metadata.html [ Skip ]
+crbug.com/694855 virtual/audio-service/media/audio-src-suspend-after-have-metadata.html [ Skip ]
+crbug.com/694855 virtual/audio-service/media/video-src-skip-suspend-after-have-metadata.html [ Skip ]
+crbug.com/694855 virtual/audio-service/media/video-src-suspend-after-have-metadata.html [ Skip ]
 
 ### See crbug.com/891427 comment near the top of this file:
 ###crbug.com/849979 media/video-layer-crash.html [ Pass Timeout ]
@@ -5258,6 +5304,7 @@
 
 # Sheriff failures 2017-10-23
 crbug.com/772411 http/tests/media/autoplay-crossorigin.html [ Timeout Failure Pass ]
+crbug.com/772411 virtual/audio-service/http/tests/media/autoplay-crossorigin.html [ Timeout Failure Pass ]
 crbug.com/777222 http/tests/devtools/inspect-iframe-from-different-domain.js [ Pass Failure Timeout ]
 
 crbug.com/778745 http/tests/inspector-protocol/cachestorage/read-cached-response.js [ Pass Failure ]
@@ -5334,6 +5381,12 @@
 crbug.com/783154 [ Mac ] media/controls/doubletap-on-play-button.html [ Skip ]
 crbug.com/783154 [ Mac ] media/controls/doubletap-to-toggle-fullscreen.html [ Skip ]
 crbug.com/783154 [ Mac ] media/controls/click-anywhere-to-play-pause.html [ Skip ]
+crbug.com/783154 [ Mac ] virtual/audio-service/media/controls/doubletap-to-jump-backwards.html [ Skip ]
+crbug.com/783154 [ Mac ] virtual/audio-service/media/controls/doubletap-to-jump-forwards.html [ Skip ]
+crbug.com/783154 [ Mac ] virtual/audio-service/media/controls/doubletap-to-jump-forwards-too-short.html [ Skip ]
+crbug.com/783154 [ Mac ] virtual/audio-service/media/controls/doubletap-on-play-button.html [ Skip ]
+crbug.com/783154 [ Mac ] virtual/audio-service/media/controls/doubletap-to-toggle-fullscreen.html [ Skip ]
+crbug.com/783154 [ Mac ] virtual/audio-service/media/controls/click-anywhere-to-play-pause.html [ Skip ]
 
 # Seen flaky on Linux, suppressing on Windows as well
 crbug.com/831720 [ Win ] media/controls/doubletap-to-jump-forwards-too-short.html [ Pass Failure ]
@@ -5341,6 +5394,11 @@
 crbug.com/831720 [ Mac ] media/controls/tap-to-hide-controls.html [ Pass Failure ]
 crbug.com/831720 [ Win ] media/controls/tap-to-hide-controls.html [ Pass Failure ]
 crbug.com/831720 [ Linux ] media/controls/tap-to-hide-controls.html [ Pass Failure ]
+crbug.com/831720 [ Win ] virtual/audio-service/media/controls/doubletap-to-jump-forwards-too-short.html [ Pass Failure ]
+crbug.com/831720 [ Linux ] virtual/audio-service/media/controls/doubletap-to-jump-forwards-too-short.html [ Pass Failure ]
+crbug.com/831720 [ Mac ] virtual/audio-service/media/controls/tap-to-hide-controls.html [ Pass Failure ]
+crbug.com/831720 [ Win ] virtual/audio-service/media/controls/tap-to-hide-controls.html [ Pass Failure ]
+crbug.com/831720 [ Linux ] virtual/audio-service/media/controls/tap-to-hide-controls.html [ Pass Failure ]
 
 crbug.com/802915 css3/blending/isolation-should-include-non-local-background.html [ Failure ]
 
@@ -5351,6 +5409,7 @@
 
 # Does not work on Mac
 crbug.com/793771 [ Mac ] media/controls/scrubbing.html [ Skip ]
+crbug.com/793771 [ Mac Win ] virtual/audio-service/media/controls/scrubbing.html [ Skip ]
 
 # Different paths may have different anti-aliasing pixels 2018-02-21
 skbug.com/7641 external/wpt/css/css-paint-api/paint2d-paths.https.html [ Failure Pass ]
@@ -5369,6 +5428,7 @@
 
 # Sheriff failures 2018-02-20
 crbug.com/789921 media/controls/repaint-on-resize.html [ Failure Pass ]
+crbug.com/789921 virtual/audio-service/media/controls/repaint-on-resize.html [ Failure Pass ]
 
 # Sheriff failures 2018-02-21
 crbug.com/814585 [ Linux ] fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk.html [ Pass Failure ]
@@ -5395,7 +5455,9 @@
 crbug.com/807110 external/wpt/media-source/mediasource-sequencemode-append-buffer.html [ Failure Pass ]
 crbug.com/807110 external/wpt/media-source/mediasource-sourcebuffer-mode-timestamps.html [ Failure Pass ]
 crbug.com/794338 media/video-rotation.html [ Failure Pass ]
+crbug.com/794338 virtual/audio-service/media/video-rotation.html [ Failure Pass ]
 crbug.com/811605 media/video-poster-after-loadedmetadata.html [ Failure Pass ]
+crbug.com/811605 virtual/audio-service/media/video-poster-after-loadedmetadata.html [ Failure Pass ]
 
 crbug.com/813704 http/tests/images/png-partial-load-as-document.html [ Failure Pass ]
 
@@ -5430,6 +5492,8 @@
 # Sheriff 2018-03-22
 crbug.com/824775 [ Win ] media/controls/video-controls-with-cast-rendering.html [ Pass Failure ]
 crbug.com/824775 [ Mac ] media/controls/video-controls-with-cast-rendering.html [ Pass Failure ]
+crbug.com/824775 [ Win ] virtual/audio-service/media/controls/video-controls-with-cast-rendering.html [ Pass Failure ]
+crbug.com/824775 [ Mac ] virtual/audio-service/media/controls/video-controls-with-cast-rendering.html [ Pass Failure ]
 crbug.com/824848 [ Linux ] external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.html [ Pass Failure ]
 crbug.com/824848 [ Mac ] external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.html [ Pass Failure ]
 crbug.com/824848 [ Win ] external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.html [ Pass Failure ]
@@ -5450,7 +5514,9 @@
 
 # Sheriff 2018-03-26
 crbug.com/825733 [ Win ] media/color-profile-video-seek-filter.html [ Pass Timeout Failure ]
+crbug.com/825733 [ Win ] virtual/audio-service/media/color-profile-video-seek-filter.html [ Pass Timeout Failure ]
 crbug.com/754986 media/video-transformed.html [ Pass Failure ]
+crbug.com/754986 virtual/audio-service/media/video-transformed.html [ Pass Failure ]
 
 # Sheriff 2018-03-29
 crbug.com/827209 [ Win ] fast/events/middleClickAutoscroll-latching.html [ Pass Timeout Failure ]
@@ -5491,6 +5557,10 @@
 crbug.com/833658 [ Linux ] media/video-controls-focus-movement-on-hide.html [ Pass Failure ]
 crbug.com/833658 [ Win ] media/video-controls-focus-movement-on-hide.html [ Pass Failure ]
 crbug.com/833658 [ Mac ] media/video-controls-focus-movement-on-hide.html [ Pass Failure ]
+crbug.com/833655 [ Linux ] virtual/audio-service/media/controls/closed-captions-dynamic-update.html [ Skip ]
+crbug.com/833658 [ Linux ] virtual/audio-service/media/video-controls-focus-movement-on-hide.html [ Pass Failure ]
+crbug.com/833658 [ Win ] virtual/audio-service/media/video-controls-focus-movement-on-hide.html [ Pass Failure ]
+crbug.com/833658 [ Mac ] virtual/audio-service/media/video-controls-focus-movement-on-hide.html [ Pass Failure ]
 
 # Sheriff 2018-04-23
 crbug.com/833331 [ Win10 ] inspector-protocol/page/pageNavigateToFragment.js [ Pass Failure ]
@@ -5526,9 +5596,6 @@
 # Sheriff 2018-05-31
 crbug.com/848398 http/tests/devtools/oopif/oopif-performance-cpu-profiles.js [ Pass Timeout Failure ]
 
-# Sheriff 2018-06-01
-crbug.com/848851 virtual/exotic-color-space/images/image-hover-display-alt.html [ Failure Pass ]
-
 # Flakes 2018-06-02
 crbug.com/841567 fast/scrolling/scrollbar-tickmarks-hittest.html [ Failure Pass ]
 
@@ -5624,6 +5691,8 @@
 crbug.com/873873 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ]
 crbug.com/873873 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ]
 crbug.com/873873 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ]
+crbug.com/873873 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ]
+crbug.com/873873 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ]
 crbug.com/873873 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ]
 crbug.com/873873 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ]
 
@@ -5781,6 +5850,7 @@
 # Sheriff 2018-11-26
 crbug.com/908276 [ Mac ] external/wpt/webstorage/storage_setitem.html [ Pass Timeout ]
 crbug.com/908347 media/autoplay/webaudio-audio-context-resume.html [ Failure Pass ]
+crbug.com/908347 virtual/audio-service/media/autoplay/webaudio-audio-context-resume.html [ Failure Pass ]
 
 # Sheriff 2018-11-29
 crbug.com/910139 custom-elements/form-submission-file.html [ Crash Pass ]
@@ -5801,6 +5871,7 @@
 
 # Sheriff 2018-12-13
 crbug.com/910452 media/controls/buttons-after-reset.html [ Pass Failure ]
+crbug.com/910452 virtual/audio-service/media/controls/buttons-after-reset.html [ Pass Failure ]
 crbug.com/914782 [ Linux ] fast/scrolling/no-hover-during-scroll.html [ Pass Failure ]
 
 # Sheriff 2018-12-14
@@ -5878,6 +5949,9 @@
 crbug.com/922951 media/controls/overflow-menu-hide-on-click-outside-stoppropagation.html [ Skip ]
 crbug.com/922951 media/controls/overflow-menu-hide-on-click-outside.html [ Skip ]
 crbug.com/922951 media/controls/overflow-menu-toggle-class-for-animation.html [ Skip ]
+crbug.com/922951 virtual/audio-service/media/controls/overflow-menu-hide-on-click-outside-stoppropagation.html [ Skip ]
+crbug.com/922951 virtual/audio-service/media/controls/overflow-menu-hide-on-click-outside.html [ Skip ]
+crbug.com/922951 virtual/audio-service/media/controls/overflow-menu-toggle-class-for-animation.html [ Skip ]
 crbug.com/922951 scrollbars/resize-scales-with-dpi-150.html [ Skip ]
 crbug.com/922951 svg/animations/dynamic-modify-transform-without-baseval.html [ Skip ]
 crbug.com/922951 svg/animations/target-condition-crash.html [ Skip ]
@@ -5961,6 +6035,7 @@
 
 # Sheriff 2019-02-12
 crbug.com/931349 [ Mac ] media/video-played-ranges-1.html [ Failure Timeout Pass ]
+crbug.com/931349 [ Mac ] virtual/audio-service/media/video-played-ranges-1.html [ Failure Timeout Pass ]
 
 # Sheriff 2019-02-13
 crbug.com/931646 [ Win7 ] http/tests/preload/meta-viewport-link-headers-imagesrcset.html [ Failure Pass ]
@@ -5973,6 +6048,7 @@
 crbug.com/933880 virtual/blink-cors/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 crbug.com/933880 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 crbug.com/933880 virtual/not-omt-sw-fetch/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
+crbug.com/933880 virtual/cache-storage-parallel/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 crbug.com/933880 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 crbug.com/933880 http/tests/inspector-protocol/network/interception-take-stream.js [ Failure ]
 crbug.com/933880 http/tests/inspector-protocol/network/xhr-interception-auth-fail.js [ Failure ]
@@ -5997,6 +6073,7 @@
 # Sheriff 2019-02-26
 crbug.com/936083 external/wpt/import-maps/builtin-import-scheme.tentative.html [ Failure Pass ]
 crbug.com/936165 media/autoplay-muted.html [ Timeout Pass ]
+crbug.com/936165 virtual/audio-service/media/autoplay-muted.html [ Timeout Pass ]
 
 # Sheriff 2019-02-27
 crbug.com/936279 external/wpt/import-maps/fallback-disallowed.sub.tentative.html [ Failure Pass Timeout ]
@@ -6029,6 +6106,7 @@
 
 # Caused a revert of a good change.
 crbug.com/931533 media/video-played-collapse.html [ Pass Failure ]
+crbug.com/931533 virtual/audio-service/media/video-played-collapse.html [ Pass Failure ]
 
 # Test was blocking WPT importer
 crbug.com/941471 external/wpt/css/css-transforms/transform-flattening-001.html [ Pass Failure Crash ]
@@ -6086,6 +6164,7 @@
 crbug.com/919789 images/image-zoom-to-25.html [ Pass Timeout ]
 crbug.com/919789 images/image-zoom-to-500.html [ Pass Timeout ]
 crbug.com/919789 media/controls/overflow-menu-hide-on-resize.html [ Pass Timeout ]
+crbug.com/919789 virtual/audio-service/media/controls/overflow-menu-hide-on-resize.html [ Pass Timeout ]
 crbug.com/919789 [ Linux Mac10.13 ] paint/invalidation/resize-iframe-text.html [ Pass Timeout ]
 crbug.com/919789 paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html [ Pass Timeout ]
 crbug.com/919789 paint/invalidation/window-resize/ [ Pass Timeout ]
@@ -6212,9 +6291,14 @@
 crbug.com/963141 media/video-object-fit-change.html [ Pass Failure ]
 crbug.com/963141 [ Mac Win ] media/controls/video-overlay-cast-light-rendering.html [ Pass Failure ]
 crbug.com/963141 [ Mac ] media/video-aspect-ratio.html [ Pass Failure ]
+crbug.com/963141 [ Mac Win ] virtual/audio-service/media/video-object-fit.html [ Pass Failure ]
+crbug.com/963141 virtual/audio-service/media/video-object-fit-change.html [ Pass Failure ]
+crbug.com/963141 [ Mac Win ] virtual/audio-service/media/controls/video-overlay-cast-light-rendering.html [ Pass Failure ]
+crbug.com/963141 [ Mac ] virtual/audio-service/media/video-aspect-ratio.html [ Pass Failure ]
 
 # Sheriff 2019-05-16
 crbug.com/963141 [ Linux ] media/video-object-fit.html [ Pass Failure ]
+crbug.com/963141 [ Linux ] virtual/audio-service/media/video-object-fit.html [ Pass Failure ]
 crbug.com/963740 compositing/video-frame-size-change.html [ Pass Failure ]
 
 # Sheriff 2019-05-17
@@ -6231,6 +6315,7 @@
 crbug.com/963739 [ Fuchsia ] synthetic_gestures/smooth-scroll-tiny-delta.html [ Pass Timeout ]
 crbug.com/964239 external/wpt/css/css-scroll-snap/scroll-margin.html [ Pass Failure ]
 crbug.com/965389 [ Mac ] media/track/track-cue-rendering-position-auto.html [ Pass Failure ]
+crbug.com/965389 [ Mac ] virtual/audio-service/media/track/track-cue-rendering-position-auto.html [ Pass Failure ]
 
 # Sheriff 2019-05-27
 crbug.com/942411 [ Win ] http/tests/devtools/network/network-search.js [ Pass Timeout ]
@@ -6253,8 +6338,10 @@
 
 # Sheriff 2019-06-05
 crbug.com/971259 media/controls/volumechange-stopimmediatepropagation.html [ Pass Failure ]
+crbug.com/971259 virtual/audio-service/media/controls/volumechange-stopimmediatepropagation.html [ Pass Failure ]
 crbug.com/971262 http/tests/devtools/profiler/live-line-level-heap-profile.js [ Pass Timeout ]
 crbug.com/971319 [ Mac ] media/audio-garbage-collect.html [ Pass Timeout ]
+crbug.com/971319 [ Mac ] virtual/audio-service/media/audio-garbage-collect.html [ Pass Timeout ]
 
 # Sheriff 2019-06-06
 crbug.com/971590 fast/dom/timer-throttling-out-of-view-cross-origin-page.html [ Pass Failure ]
@@ -6365,6 +6452,9 @@
 crbug.com/986477 [ Win ] external/wpt/cookies/path/match.html [ Pass Timeout ]
 crbug.com/986477 [ Win ] virtual/samesite-by-default-cookies/external/wpt/cookies/path/match.html [ Pass Timeout ]
 
+
+crbug.com/987269 [ Linux ] virtual/audio-service/http/tests/media/autoplay/document-user-activation-cross-origin-feature-policy-disabled.html [ Pass Failure ]
+crbug.com/987269 [ Linux ] virtual/audio-service/http/tests/media/autoplay/document-user-activation-cross-origin-feature-policy-header.html [ Pass Failure ]
 # Sheriff 2019-07-24
 crbug.com/986019 animations/play-state.html [ Pass Timeout ]
 crbug.com/986019 virtual/threaded/animations/play-state.html [ Pass Timeout ]
@@ -6373,6 +6463,7 @@
 crbug.com/987132 [ Mac ] fast/forms/select/option-strip-whitespace.html [ Failure ]
 crbug.com/986282 external/wpt/client-hints/accept-ch-lifetime.tentative.https.html [ Pass Failure ]
 crbug.com/987138 [ Linux Win ] media/controls/doubletap-to-jump-forwards.html [ Pass Timeout ]
+crbug.com/987138 [ Linux Win ] virtual/audio-service/media/controls/doubletap-to-jump-forwards.html [ Pass Timeout ]
 
 # Sheriff 2019-07-26
 crbug.com/835943 [ Debug ] http/tests/appcache/non-html.xhtml [ Crash Pass ]
@@ -6430,91 +6521,14 @@
 crbug.com/979422 [ Mac ] fast/borders/border-radius-mask-video.html [ Failure ]
 crbug.com/989365 [ Win7 ] virtual/blink-cors/http/tests/security/img-crossorigin-redirect-credentials.html [ Pass Timeout ]
 crbug.com/989365 [ Win7 ] http/tests/security/img-crossorigin-redirect-credentials.html [ Pass Timeout ]
-crbug.com/989365 [ Linux Debug ] external/wpt/cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.tentative.https.html [ Pass Timeout ]
+crbug.com/989014 [ Linux Debug ] external/wpt/cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.tentative.https.html [ Pass Timeout ]
 crbug.com/989665 [ Win Linux ] virtual/omt-worker-fetch/external/wpt/resource-timing/resource_timing_buffer_full_eventually.html [ Pass Timeout ]
-crbug.com/989757 [ Linux ] http/tests/fetch/serviceworker/thorough/redirect-base-https-other-https.html [ Pass Failure ]
-crbug.com/989757 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/redirect-base-https-other-https.html [ Pass Failure ]
-crbug.com/989756 [ Linux ] http/tests/fetch/serviceworker/thorough/redirect-password-base-https-other-https.html [ Pass Failure ]
-crbug.com/989756 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/redirect-password-base-https-other-https.html [ Pass Failure ]
-crbug.com/989755 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989755 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989755 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/auth-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989756 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Pass Failure ]
-crbug.com/989756 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Pass Failure ]
-crbug.com/989756 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/access-control-base-https-other-https.html [ Pass Failure ]
 
 # Sheriff 2019-08-01
 crbug.com/989860 [ Mac10.13 Linux Debug ] http/tests/devtools/indexeddb/live-update-indexeddb-list.js [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/auth-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/auth-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker/thorough/auth-base-https-other-https.html [ Pass Failure ]
-crbug.com/989848 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989848 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989848 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/cookie-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989825 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/cors-preflight-base-https-other-https.html [ Pass Failure ]
-crbug.com/989825 [ Linux ]  http/tests/fetch/serviceworker/thorough/cors-preflight-base-https-other-https.html [ Pass Failure ]
-crbug.com/989825 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/cors-preflight-base-https-other-https.html [ Pass Failure ]
-crbug.com/989824 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/redirect-base-https-other-https.html [ Pass Failure ]
-crbug.com/989824 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/redirect-base-https-other-https.html [ Pass Failure ]
-crbug.com/989824 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/redirect-base-https-other-https.html [ Pass Failure ]
-crbug.com/989823 [ Linux ] http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989823 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989823 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/cors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989811 [ Linux ] http/tests/fetch/serviceworker/thorough/redirect-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989811 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/redirect-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989811 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/redirect-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989808 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/scheme-data-base-https-other-https.html [ Pass Failure ]
-crbug.com/989808 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/scheme-data-base-https-other-https.html [ Pass Failure ]
-crbug.com/989808 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/scheme-data-base-https-other-https.html [ Pass Failure ]
-crbug.com/989807 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/cookie-base-https-other-https.html [ Pass Failure ]
-crbug.com/989807 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/cookie-base-https-other-https.html [ Pass Failure ]
-crbug.com/989807 [ Linux ] http/tests/fetch/serviceworker/thorough/cookie-base-https-other-https.html [ Pass Failure ]
-crbug.com/989806 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/cors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989806 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/cors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989806 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/cors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989805 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-base-https-other-https.html [ Pass Failure ]
-crbug.com/989805 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-base-https-other-https.html [ Pass Failure ]
-crbug.com/989805 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/redirect-credentials-base-https-other-https.html [ Pass Failure ]
-crbug.com/989757 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/redirect-base-https-other-https.html [ Pass Failure ]
-crbug.com/989879 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/scheme-data-base-https-other-https.html [ Pass Failure ]
-crbug.com/989879 [ Linux ] http/tests/fetch/serviceworker/thorough/scheme-data-base-https-other-https.html [ Pass Failure ]
-crbug.com/989879 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/scheme-data-base-https-other-https.html [ Pass Failure ]
-crbug.com/989878 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-base-https-other-https.html [ Pass Failure ]
-crbug.com/989878 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-base-https-other-https.html [ Pass Failure ]
-crbug.com/989878 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/scheme-blob-base-https-other-https.html [ Pass Failure ]
-crbug.com/989756 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/redirect-password-base-https-other-https.html [ Pass Failure ]
 crbug.com/989717 [ Fuchsia ] http/tests/preload/avoid_delaying_onload_link_preload.html [ Pass Failure ]
 crbug.com/988074 [ Linux ] virtual/not-omt-sw-fetch/http/tests/security/cors-rfc1918/addressspace-serviceworker-basic.html [ Pass Failure ]
 crbug.com/988074 [ Linux ] virtual/omt-worker-fetch/http/tests/security/cors-rfc1918/addressspace-serviceworker-basic.html [ Pass Failure ]
-crbug.com/948167 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/948167 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/948167 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/redirect-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/855860 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Pass Failure ]
-crbug.com/855860 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Pass Failure ]
-crbug.com/855860 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Pass Failure ]
 
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/cookie-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker/thorough/cookie-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker/thorough/nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker/thorough/redirect-loop-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/auth-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/redirect-loop-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/access-control-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/cookie-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/cors-preflight2-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/redirect-credentials-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker/thorough/redirect-loop-base-https-other-https.html [ Pass Failure ]
-crbug.com/990145 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker-proxied/thorough/cookie-base-https-other-https.html [ Pass Failure ]
-crbug.com/990145 [ Linux ] virtual/streaming-preload/http/tests/fetch/serviceworker-proxied/thorough/cookie-base-https-other-https.html [ Pass Failure ]
-crbug.com/990146 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/cookie-nocors-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/redirect-loop-base-https-other-https.html [ Pass Failure ]
-crbug.com/989863 [ Linux ] virtual/blink-cors/http/tests/fetch/serviceworker/thorough/access-control-base-https-other-https.html [ Pass Failure ]
+# Sheriff 2019-08-05
+crbug.com/981522 [ Linux ] external/wpt/svg/animations/correct-events-for-short-animations-with-syncbases.html [ Pass Failure Timeout ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index d2d5139..2aef67e 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1204,6 +1204,13 @@
     "args": ["--enable-blink-features=CSSVariables2AtProperty"]
   },
   {
+    "prefix": "cache-storage-parallel",
+    "base": "external/wpt/service-workers",
+    "args": ["--enable-features=CacheStorageParallelOps<CSPO",
+             "--force-fieldtrials=CSPO/G1",
+             "--force-fieldtrial-params=CSPO.G1:max_shared_ops/64"]
+  },
+  {
     "prefix": "cache-storage-sequence",
     "base": "external/wpt/service-workers",
     "args": ["--enable-features=CacheStorageSequence"]
@@ -1212,5 +1219,20 @@
     "prefix": "conditional-appcache-delay",
     "base": "http/tests/loading/appcache-delay",
     "args": ["--enable-features=VerifyHTMLFetchedFromAppCacheBeforeDelay"]
+  },
+  {
+    "prefix": "audio-service",
+    "base": "http/tests/media",
+    "args": ["--enable-features=AudioServiceOutOfProcess,AudioServiceSandbox"]
+  },
+  {
+    "prefix": "audio-service",
+    "base": "media",
+    "args": ["--enable-features=AudioServiceOutOfProcess,AudioServiceSandbox"]
+  },
+  {
+    "prefix": "audio-service",
+    "base": "external/wpt/mediacapture-streams",
+    "args": ["--enable-features=AudioServiceOutOfProcess,AudioServiceSandbox"]
   }
 ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/bidi-line-break-001.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/bidi-line-break-001.html
new file mode 100644
index 0000000..f46b56b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/bidi-line-break-001.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<title>Test implicit bidi controls do not affect line breaking</title>
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#unicode-bidi">
+<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
+<style>
+html {
+  font-size: 10px;
+  line-height: 1;
+}
+.isolate {
+  unicode-bidi: isolate;
+}
+.embed {
+  unicode-bidi: embed;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<div id=log></div>
+<div id="container">
+  <div style="width: 4ch" data-expected-height="20">
+    <span class="isolate" dir="ltr">00</span> <span class="isolate" dir="ltr">00</span>
+  </div>
+  <div style="width: 4ch" data-expected-height="20">
+    <span class="embed" dir="ltr">00</span> <span class="embed" dir="ltr">00</span>
+  </div>
+
+  <div style="width: 4ch" data-expected-height="20">
+    <span dir="ltr">00</span> <span dir="ltr">00</span>
+  </div>
+  <div style="width: 4ch" data-expected-height="20">
+    <bdi dir="ltr">00</bdi> <bdi dir="ltr">00</bdi>
+  </div>
+  <div style="width: 4ch" data-expected-height="20">
+    <bdo dir="ltr">00</bdo> <bdo dir="ltr">00</bdo>
+  </div>
+
+  <div style="width: 4ch" data-expected-height="20">
+    <span class="isolate" dir="ltr">00 </span><span class="isolate" dir="ltr">00</span>
+  </div>
+  <div style="width: 4ch" data-expected-height="20">
+    <span class="embed" dir="ltr">00 </span><span class="embed" dir="ltr">00</span>
+  </div>
+</div>
+<script>
+run();
+function run() {
+  for (let node of document.getElementById('container').children) {
+    test(() => {
+      assert_approx_equals(node.offsetHeight, 20, 1);
+    }, node.innerHTML);
+  }
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction-expected.txt
index 1ee45e2e..e6c667c5 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-horizontal-tb-writing-mode-and-rtl-direction-expected.txt
@@ -1,12 +1,12 @@
 This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
+FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
new file mode 100644
index 0000000..8ed2baa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
@@ -0,0 +1,12 @@
+This is a testharness.js-based test.
+FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 115
+FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 157
+FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollY expected 115 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 115
+PASS scrollIntoView({"block":"center","inline":"center"})
+FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollY expected 200 +/- 0.5 but got 115
+FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 157
+FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 200
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
similarity index 71%
rename from third_party/blink/web_tests/platform/linux/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
rename to third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
index b335f63..410a175 100644
--- a/third_party/blink/web_tests/platform/linux/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
@@ -1,12 +1,12 @@
 This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
+FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-lr-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-lr-writing-mode-and-rtl-direction-expected.txt
index e655517..9c4115c 100644
--- a/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-lr-writing-mode-and-rtl-direction-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/cssom-view/scrollIntoView-vertical-lr-writing-mode-and-rtl-direction-expected.txt
@@ -1,12 +1,12 @@
 This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollY expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollY expected -200 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollY expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollY expected -115 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollY expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollY expected -115 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollY expected -200 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollY expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollY expected -115 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollY expected -200 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollY expected -115 +/- 0.5 but got 200
+FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollY expected -200 +/- 0.5 but got 115
 FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollY expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollY expected -115 +/- 0.5 but got 115
+FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollY expected -115 +/- 0.5 but got 200
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/resources/SVGAnimationTestCase-testharness.js b/third_party/blink/web_tests/external/wpt/resources/SVGAnimationTestCase-testharness.js
index 8fabc9a..59febda 100644
--- a/third_party/blink/web_tests/external/wpt/resources/SVGAnimationTestCase-testharness.js
+++ b/third_party/blink/web_tests/external/wpt/resources/SVGAnimationTestCase-testharness.js
@@ -1,5 +1,5 @@
 // NOTE(edvardt):
-// This file is a slimmed down wrapper for the Chromium SVGAnimationTestCase.js,
+// This file is a slimmed down wrapper for the old SVGAnimationTestCase.js,
 // it has some convenience functions and should not be used for new tests.
 // New tests should not build on this API as it's just meant to keep things
 // working.
@@ -32,6 +32,7 @@
   return document.createElementNS("http://www.w3.org/2000/svg", type);
 }
 
+// Inspired by Layoutests/animations/animation-test-helpers.js
 function moveAnimationTimelineAndSample(index) {
     var animationId = expectedResults[index][0];
     var time = expectedResults[index][1];
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-3.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-3.html
new file mode 100644
index 0000000..5ed9f5a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-3.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLengthAdjustType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Initiate the test by clicking at (1, 50) - the 'S'.
+window.clickX = 1;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.setAttribute("y", "50");
+text.setAttribute("textLength", "200");
+text.textContent = "Stretched text";
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "lengthAdjust");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "spacing");
+animate.setAttribute("to", "spacingAndGlyphs");
+animate.setAttribute("fill", "freeze");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.lengthAdjust.animVal, SVGTextContentElement.LENGTHADJUST_SPACING);
+    assert_equals(text.lengthAdjust.baseVal, SVGTextContentElement.LENGTHADJUST_SPACING);
+}
+
+function sample2() {
+    assert_equals(text.lengthAdjust.animVal, SVGTextContentElement.LENGTHADJUST_SPACINGANDGLYPHS);
+    assert_equals(text.lengthAdjust.baseVal, SVGTextContentElement.LENGTHADJUST_SPACING);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 1.999, sample1],
+        ["animation", 2.001, sample2],
+        ["animation", 3.999, sample2],
+        ["animation", 4.001, sample2]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-4.js b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-4.html
similarity index 71%
rename from third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-4.js
rename to third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-4.html
index eb78d885..652e496 100644
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-4.js
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-4.html
@@ -1,5 +1,17 @@
-description("Test CompositeOperationType enumeration animations");
-createSVGTestCase();
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test CompositeOperationType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
 
 // Setup test document
 var defsElement = createSVGElement("defs");
@@ -111,43 +123,43 @@
 var animate = createSVGElement("animate");
 animate.setAttribute("id", "animation");
 animate.setAttribute("attributeName", "operator");
-animate.setAttribute("begin", "rect.click");
+animate.setAttribute("begin", "0s");
 animate.setAttribute("dur", "5s");
 animate.setAttribute("values", "in;out;atop;xor;arithmetic");
 overComposite1.appendChild(animate);
 
 // Setup animation test
 function sample1() {
-    shouldBe("overComposite1.operator.animVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER");
-    shouldBe("overComposite1.operator.baseVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER");
+    assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
+    assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
 }
 
 function sample2() {
-    shouldBe("overComposite1.operator.animVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_IN");
-    shouldBe("overComposite1.operator.baseVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER");
+    assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_IN);
+    assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
 }
 
 function sample3() {
-    shouldBe("overComposite1.operator.animVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OUT");
-    shouldBe("overComposite1.operator.baseVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER");
+    assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OUT);
+    assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
 }
 
 function sample4() {
-    shouldBe("overComposite1.operator.animVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ATOP");
-    shouldBe("overComposite1.operator.baseVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER");
+    assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ATOP);
+    assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
 }
 
 function sample5() {
-    shouldBe("overComposite1.operator.animVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR");
-    shouldBe("overComposite1.operator.baseVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER");
+    assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR);
+    assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
 }
 
 function sample6() {
-    shouldBe("overComposite1.operator.animVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC");
-    shouldBe("overComposite1.operator.baseVal", "SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER");
+    assert_equals(overComposite1.operator.animVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
+    assert_equals(overComposite1.operator.baseVal, SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER);
 }
 
-function executeTest() {
+smil_async_test((t) => {
     const expectedValues = [
         // [animationId, time, sampleCallback]
         ["animation", 0.0,   sample1],
@@ -164,7 +176,7 @@
         ["animation", 5.001, sample1]
     ];
 
-    runAnimationTest(expectedValues);
-}
+    runAnimationTest(t, expectedValues);
+});
 
-var successfullyParsed = true;
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-5.js b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-5.html
similarity index 62%
rename from third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-5.js
rename to third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-5.html
index 663d646..1487918 100644
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-5.js
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-5.html
@@ -1,5 +1,17 @@
-description("Test MorphologyOperatorType enumeration animations");
-createSVGTestCase();
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test MorphologyOperatorType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
 
 // Setup test document
 var defs = createSVGElement("defs");
@@ -32,7 +44,7 @@
 var animate = createSVGElement("animate");
 animate.setAttribute("id", "animation");
 animate.setAttribute("attributeName", "operator");
-animate.setAttribute("begin", "rect.click");
+animate.setAttribute("begin", "0s");
 animate.setAttribute("dur", "4s");
 animate.setAttribute("from", "dilate");
 animate.setAttribute("to", "erode");
@@ -40,16 +52,16 @@
 
 // Setup animation test
 function sample1() {
-    shouldBe("morphology.operator.animVal", "SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE");
-    shouldBe("morphology.operator.baseVal", "SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE");
+    assert_equals(morphology.operator.animVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE);
+    assert_equals(morphology.operator.baseVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE);
 }
 
 function sample2() {
-    shouldBe("morphology.operator.animVal", "SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_ERODE");
-    shouldBe("morphology.operator.baseVal", "SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE");
+    assert_equals(morphology.operator.animVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_ERODE);
+    assert_equals(morphology.operator.baseVal, SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE);
 }
 
-function executeTest() {
+smil_async_test((t) => {
     const expectedValues = [
         // [animationId, time, sampleCallback]
         ["animation", 0.0,   sample1],
@@ -59,7 +71,7 @@
         ["animation", 4.001, sample1]
     ];
 
-    runAnimationTest(expectedValues);
-}
+    runAnimationTest(t, expectedValues);
+});
 
-var successfullyParsed = true;
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-6.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-6.html
new file mode 100644
index 0000000..e60c93b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-6.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test ColorMatrixType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var colorMatrix = createSVGElement("feColorMatrix");
+colorMatrix.setAttribute("in", "SourceGraphic");
+colorMatrix.setAttribute("type", "matrix");
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("filterUnits", "userSpaceOnUse");
+filter.setAttribute("x", "0");
+filter.setAttribute("y", "0");
+filter.setAttribute("width", "700");
+filter.setAttribute("height", "200");
+filter.appendChild(colorMatrix);
+defs.appendChild(filter);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "type");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("values", "matrix;saturate;hueRotate;luminanceToAlpha");
+colorMatrix.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+    assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+function sample2() {
+    assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE);
+    assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+function sample3() {
+    assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE);
+    assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+function sample4() {
+    assert_equals(colorMatrix.type.animVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA);
+    assert_equals(colorMatrix.type.baseVal, SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 0.999, sample1],
+        ["animation", 1.001, sample2],
+        ["animation", 1.999, sample2],
+        ["animation", 2.001, sample3],
+        ["animation", 2.999, sample3],
+        ["animation", 3.001, sample4],
+        ["animation", 3.999, sample4],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-7.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-7.html
new file mode 100644
index 0000000..4e2d27e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-7.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGStitchOptions/TurbulenceType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("filterUnits", "userSpaceOnUse");
+filter.setAttribute("x", "0");
+filter.setAttribute("y", "0");
+filter.setAttribute("width", "700");
+filter.setAttribute("height", "200");
+defs.appendChild(filter);
+
+var turbulence = createSVGElement("feTurbulence");
+turbulence.setAttribute("in", "foo");
+turbulence.setAttribute("baseFrequency", "0.05");
+turbulence.setAttribute("numOctaves", "3");
+turbulence.setAttribute("seed", "5");
+turbulence.setAttribute("stitchTiles", "stitch");
+turbulence.setAttribute("type", "fractalNoise");
+filter.appendChild(turbulence);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate1 = createSVGElement("animate");
+animate1.setAttribute("id", "animation");
+animate1.setAttribute("attributeName", "type");
+animate1.setAttribute("begin", "0s");
+animate1.setAttribute("dur", "4s");
+animate1.setAttribute("from", "fractalNoise");
+animate1.setAttribute("to", "turbulence");
+turbulence.appendChild(animate1);
+
+var animate2 = createSVGElement("animate");
+animate2.setAttribute("attributeName", "stitchTiles");
+animate2.setAttribute("begin", "0s");
+animate2.setAttribute("dur", "4s");
+animate2.setAttribute("from", "stitch");
+animate2.setAttribute("to", "noStitch");
+turbulence.appendChild(animate2);
+
+// Setup animation test
+function sample1() {
+    assert_equals(turbulence.type.animVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE);
+    assert_equals(turbulence.type.baseVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE);
+
+    assert_equals(turbulence.stitchTiles.animVal, SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH);
+    assert_equals(turbulence.stitchTiles.baseVal, SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH);
+}
+
+function sample2() {
+    assert_equals(turbulence.type.animVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_TURBULENCE);
+    assert_equals(turbulence.type.baseVal, SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE);
+
+    assert_equals(turbulence.stitchTiles.animVal, SVGFETurbulenceElement.SVG_STITCHTYPE_NOSTITCH);
+    assert_equals(turbulence.stitchTiles.baseVal, SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 1.999, sample1],
+        ["animation", 2.001, sample2],
+        ["animation", 3.999, sample2],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-8.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-8.html
new file mode 100644
index 0000000..cd00e46
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-8.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test ComponentTransferType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var feRFunc = createSVGElement("feFuncR");
+feRFunc.setAttribute("type", "identity");
+feRFunc.setAttribute("amplitude", "10");
+
+var feGFunc = createSVGElement("feFuncG");
+feGFunc.setAttribute("type", "identity");
+feGFunc.setAttribute("amplitude", "10");
+
+var feBFunc = createSVGElement("feFuncB");
+feBFunc.setAttribute("type", "identity");
+feBFunc.setAttribute("amplitude", "110");
+
+var feAFunc = createSVGElement("feFuncA");
+feAFunc.setAttribute("type", "identity");
+feAFunc.setAttribute("amplitude", "110");
+
+var feComponentTransfer = createSVGElement("feComponentTransfer");
+feComponentTransfer.appendChild(feRFunc);
+feComponentTransfer.appendChild(feGFunc);
+feComponentTransfer.appendChild(feBFunc);
+feComponentTransfer.appendChild(feAFunc);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("filterUnits", "objectBoundingBox");
+filter.setAttribute("x", "0%");
+filter.setAttribute("y", "0%");
+filter.setAttribute("width", "100%");
+filter.setAttribute("height", "100%");
+filter.appendChild(feComponentTransfer);
+
+var defs = createSVGElement("defs");
+defs.appendChild(filter);
+rootSVGElement.appendChild(defs);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "#408067");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "type");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "5s");
+animate.setAttribute("values", "identity;table;discrete;linear;gamma");
+feRFunc.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+    assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample2() {
+    assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_TABLE);
+    assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample3() {
+    assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE);
+    assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample4() {
+    assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_LINEAR);
+    assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+function sample5() {
+    assert_equals(feRFunc.type.animVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
+    assert_equals(feRFunc.type.baseVal, SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 0.999, sample1],
+        ["animation", 1.001, sample2],
+        ["animation", 1.999, sample2],
+        ["animation", 2.001, sample3],
+        ["animation", 2.999, sample3],
+        ["animation", 3.001, sample4],
+        ["animation", 3.999, sample4],
+        ["animation", 4.001, sample5],
+        ["animation", 4.999, sample5],
+        ["animation", 5.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-9.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-9.html
new file mode 100644
index 0000000..8aa9d6a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgenum-animation-9.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGTextPathSpacingType/SVGTextPathMethodType enumeration animations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var path = createSVGElement("path");
+path.setAttribute("id", "path");
+path.setAttribute("d", "M 50 50 L 200 50");
+rootSVGElement.appendChild(path);
+
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var textPath = createSVGElement("textPath");
+textPath.setAttributeNS(xlinkNS, "xlink:href", "#path");
+textPath.setAttribute("spacing", "auto");
+textPath.setAttribute("method", "align");
+textPath.textContent = "test";
+text.appendChild(textPath);
+
+var animate1 = createSVGElement("animate");
+animate1.setAttribute("id", "animation");
+animate1.setAttribute("attributeName", "spacing");
+animate1.setAttribute("begin", "0s");
+animate1.setAttribute("dur", "4s");
+animate1.setAttribute("from", "auto");
+animate1.setAttribute("to", "exact");
+animate1.setAttribute("fill", "freeze");
+textPath.appendChild(animate1);
+
+var animate2 = createSVGElement("animate");
+animate2.setAttribute("attributeName", "method");
+animate2.setAttribute("begin", "0s");
+animate2.setAttribute("dur", "4s");
+animate2.setAttribute("from", "align");
+animate2.setAttribute("to", "stretch");
+animate2.setAttribute("fill", "freeze");
+textPath.appendChild(animate2);
+
+// Setup animation test
+function sample1() {
+    assert_equals(textPath.method.animVal, SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN);
+    assert_equals(textPath.method.baseVal, SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN);
+
+    assert_equals(textPath.spacing.animVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO);
+    assert_equals(textPath.spacing.baseVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO);
+}
+
+function sample2() {
+    assert_equals(textPath.method.animVal, SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH);
+    assert_equals(textPath.method.baseVal, SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN);
+
+    assert_equals(textPath.spacing.animVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT);
+    assert_equals(textPath.spacing.baseVal, SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 1.999, sample1],
+        ["animation", 2.001, sample2],
+        ["animation", 3.999, sample2],
+        ["animation", 4.001, sample2]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svginteger-animation-1.js b/third_party/blink/web_tests/external/wpt/svg/animations/svginteger-animation-1.html
similarity index 61%
rename from third_party/blink/web_tests/svg/animations/script-tests/svginteger-animation-1.js
rename to third_party/blink/web_tests/external/wpt/svg/animations/svginteger-animation-1.html
index 7d939cd..7803541 100644
--- a/third_party/blink/web_tests/svg/animations/script-tests/svginteger-animation-1.js
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svginteger-animation-1.html
@@ -1,5 +1,17 @@
-description("Test animation of SVGInteger.");
-createSVGTestCase();
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test animation of SVGInteger.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
 
 // Setup test document
 var defs = createSVGElement("defs");
@@ -28,7 +40,7 @@
 var animate = createSVGElement("animate");
 animate.setAttribute("id", "animation");
 animate.setAttribute("attributeName", "targetX");
-animate.setAttribute("begin", "rect.click");
+animate.setAttribute("begin", "0s");
 animate.setAttribute("dur", "4s");
 animate.setAttribute("from", "0");
 animate.setAttribute("to", "2");
@@ -36,21 +48,21 @@
 
 // Setup animation test
 function sample1() {
-    shouldBeCloseEnough("feConvolveMatrix.targetX.animVal", "0");
-    shouldBe("feConvolveMatrix.targetX.baseVal", "0");
+    assert_approx_equals(feConvolveMatrix.targetX.animVal, 0, epsilon);
+    assert_equals(feConvolveMatrix.targetX.baseVal, 0);
 }
 
 function sample2() {
-    shouldBeCloseEnough("feConvolveMatrix.targetX.animVal", "1");
-    shouldBe("feConvolveMatrix.targetX.baseVal", "0");
+    assert_approx_equals(feConvolveMatrix.targetX.animVal, 1, epsilon);
+    assert_equals(feConvolveMatrix.targetX.baseVal, 0);
 }
 
 function sample3() {
-    shouldBeCloseEnough("feConvolveMatrix.targetX.animVal", "2");
-    shouldBe("feConvolveMatrix.targetX.baseVal", "0");
+    assert_approx_equals(feConvolveMatrix.targetX.animVal, 2, epsilon);
+    assert_equals(feConvolveMatrix.targetX.baseVal, 0);
 }
 
-function executeTest() {
+smil_async_test((t) => {
     const expectedValues = [
         // [animationId, time, sampleCallback]
         ["animation", 0.0,   sample1],
@@ -59,7 +71,7 @@
         ["animation", 4.001, sample1]
     ];
 
-    runAnimationTest(expectedValues);
-}
+    runAnimationTest(t, expectedValues);
+});
 
-var successfullyParsed = true;
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svginteger-animation-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svginteger-animation-2.html
new file mode 100644
index 0000000..25ef7ff0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svginteger-animation-2.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test animation of SVGInteger.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+defs.appendChild(filter);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var feConvolveMatrix = createSVGElement("feConvolveMatrix");
+feConvolveMatrix.setAttribute("id", "feConvlveMatrix");
+feConvolveMatrix.setAttribute("order", "3 1");
+feConvolveMatrix.setAttribute("kernelMatrix", "0 0 1");
+filter.appendChild(feConvolveMatrix);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "order");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "3 1");
+animate.setAttribute("to", "1 3");
+feConvlveMatrix.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(feConvolveMatrix.orderX.animVal, 3, epsilon);
+    assert_approx_equals(feConvolveMatrix.orderY.animVal, 1, epsilon);
+    assert_equals(feConvolveMatrix.orderX.baseVal, 3);
+    assert_equals(feConvolveMatrix.orderY.baseVal, 1);
+}
+
+function sample2() {
+    assert_approx_equals(feConvolveMatrix.orderX.animVal, 2, epsilon);
+    assert_approx_equals(feConvolveMatrix.orderY.animVal, 2, epsilon);
+    assert_equals(feConvolveMatrix.orderX.baseVal, 3);
+    assert_equals(feConvolveMatrix.orderY.baseVal, 1);
+}
+
+function sample3() {
+    assert_approx_equals(feConvolveMatrix.orderX.animVal, 1, epsilon);
+    assert_approx_equals(feConvolveMatrix.orderY.animVal, 3, epsilon);
+    assert_equals(feConvolveMatrix.orderX.baseVal, 3);
+    assert_equals(feConvolveMatrix.orderY.baseVal, 1);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-1.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-1.html
new file mode 100644
index 0000000..6754989
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-1.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" by="50" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,  sample1],
+        ["an1", 2.0,  sample2],
+        ["an1", 4.0,  sample3],
+        ["an1", 7.0,  sample4],
+        ["an1", 9.0,  sample5],
+        ["an1", 60.0, sample5]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-2.html
new file mode 100644
index 0000000..e08c99c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-2.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="50" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,  sample1],
+        ["an1", 2.0,  sample2],
+        ["an1", 4.0,  sample3],
+        ["an1", 7.0,  sample4],
+        ["an1", 9.0,  sample5],
+        ["an1", 60.0, sample5]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-3.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-3.html
new file mode 100644
index 0000000..b5ac7a0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-3.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s, then reset to 10. -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" by="90" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 3.999, sample3],
+        ["an1", 4.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-4.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-4.html
new file mode 100644
index 0000000..10e8bd7b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-4.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s, then reset to 10. -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="90" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 3.999, sample3],
+        ["an1", 4.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-6.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-6.html
new file mode 100644
index 0000000..43beafe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-6.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="90" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 3.999, sample3],
+        ["an1", 4.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-7.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-7.html
new file mode 100644
index 0000000..7c1dde4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-7.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="calc(5%)" begin="0s" dur="4s"/>
+        <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="calc(11.25%)" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 3.999, sample3],
+        ["an1", 4.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-8.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-8.html
new file mode 100644
index 0000000..c61cb65
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-by-8.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="calc(4% + 8)" begin="0s" dur="4s"/>
+        <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="calc(10% + 10)" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 55, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 3.999, sample3],
+        ["an1", 4.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-1.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-1.html
new file mode 100644
index 0000000..ce458e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-1.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" from="0" by="50" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,  sample1],
+        ["an1", 2.0,  sample2],
+        ["an1", 4.0,  sample3],
+        ["an1", 7.0,  sample4],
+        ["an1", 9.0,  sample5],
+        ["an1", 60.0, sample5]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-2.html
new file mode 100644
index 0000000..1ac7eed4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-2.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 0 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" from="0" by="100" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 4.0,   sample3],
+        ["an1", 4.999, sample3],
+        ["an1", 5.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-3.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-3.html
new file mode 100644
index 0000000..1c22f35
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-3.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 75 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" from="25" by="25" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 87.5, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 4.0,   sample3],
+        ["an1", 4.999, sample3],
+        ["an1", 5.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-4.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-4.html
new file mode 100644
index 0000000..998c374
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-additive-from-by-4.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>This tests from-by-animations adding to previous underlying values</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!-- an1: Change width from 10 to 50 in 4s -->
+<!-- an2: Change width from 75 to 100 in 4s starting at 5s -->
+<rect width="10" height="100" fill="green">
+    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
+    <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" from="75" by="25" begin="5s" dur="4s"/>
+</rect>
+
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(rect.width.animVal.value, 10, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 30, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 50, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 75, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 87.5, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+function sample6() {
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
+
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["an1", 0.0,   sample1],
+        ["an1", 2.0,   sample2],
+        ["an1", 4.0,   sample3],
+        ["an1", 4.999, sample3],
+        ["an1", 5.001, sample4],
+        ["an1", 7.0,   sample5],
+        ["an1", 9.0,   sample6],
+        ["an1", 60.0,  sample6]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.animationStartsImmediately = true;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeHeight.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeHeight.html
new file mode 100644
index 0000000..2bb409e8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeHeight.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation on LengthModeHeight.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+rootSVGElement.setAttribute("width", "600");
+rootSVGElement.setAttribute("height", "400");
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("font-size", "10px");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "height");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "50%");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.height.animVal.value, 100, epsilon);
+    assert_equals(rect.height.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.height.animVal.value, 150, epsilon);
+    assert_equals(rect.height.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.height.animVal.value, 200, epsilon);
+    assert_equals(rect.height.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeOther.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeOther.html
new file mode 100644
index 0000000..1fd9e0a3
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeOther.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation on LengthModeOther.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+rootSVGElement.setAttribute("width", "600");
+rootSVGElement.setAttribute("height", "400");
+
+// Setup test document
+var circle = createSVGElement("circle");
+circle.setAttribute("id", "circle");
+circle.setAttribute("cx", "50");
+circle.setAttribute("cy", "50");
+circle.setAttribute("r", "10");
+circle.setAttribute("fill", "green");
+circle.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "r");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "10");
+animate.setAttribute("to", "50%");
+circle.appendChild(animate);
+rootSVGElement.appendChild(circle);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(circle.r.animVal.value, 10, epsilon);
+    assert_equals(circle.r.baseVal.value, 10);
+}
+
+function sample2() {
+    assert_approx_equals(circle.r.animVal.value, 132.5, epsilon);
+    assert_equals(circle.r.baseVal.value, 10);
+}
+
+function sample3() {
+    assert_approx_equals(circle.r.animVal.value, 254.9, epsilon);
+    assert_equals(circle.r.baseVal.value, 10);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeWidth.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeWidth.html
new file mode 100644
index 0000000..9481d434
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-LengthModeWidth.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation on LengthModeWidth.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+rootSVGElement.setAttribute("width", "600");
+rootSVGElement.setAttribute("height", "400");
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("font-size", "10px");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "50%");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 300, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-1.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-1.html
new file mode 100644
index 0000000..9b45c5a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-1.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation with invalid value: No spaces between number and unit.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100   px");
+animate.setAttribute("to", "200   px");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample2],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-2.html
new file mode 100644
index 0000000..64d5884
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-2.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation with invalid value: No spaces before value.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "   100pxERROR");
+animate.setAttribute("to", "   200pxERROR");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample2],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-3.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-3.html
new file mode 100644
index 0000000..0fb1794e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-invalid-value-3.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation with invalid value: No spaces after number and unit.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px   ERROR");
+animate.setAttribute("to", "200px   ERROR");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 0, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample2],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-number-to-number.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-number-to-number.html
new file mode 100644
index 0000000..0b4fca5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-number-to-number.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "200");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-cm.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-cm.html
new file mode 100644
index 0000000..f51beed0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-cm.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "5cm");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 144.5, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 189, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-ems.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-ems.html
new file mode 100644
index 0000000..e651253
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-ems.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to ems.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("font-size", "10px");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "20em");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-in.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-in.html
new file mode 100644
index 0000000..a55b3571
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-in.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to inch.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "2.5in");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 170, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 240, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-number.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-number.html
new file mode 100644
index 0000000..8eab444
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-number.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "200");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-pc.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-pc.html
new file mode 100644
index 0000000..62d9d996
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-pc.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to pc.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "15pc");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 170, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 240, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-pt.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-pt.html
new file mode 100644
index 0000000..d86e090
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-pt.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100pt");
+animate.setAttribute("to", "5cm");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 161.2, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 189, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-px.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-px.html
new file mode 100644
index 0000000..fdeb773
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-px-to-px.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation from px to cm.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100px");
+animate.setAttribute("to", "200px");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 150, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 200, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-unitType.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-unitType.html
new file mode 100644
index 0000000..4cd6d2d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-unitType.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test change of unit type for SVGLength animation.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "100");
+animate.setAttribute("to", "200px");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_equals(rect.width.animVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+    assert_equals(rect.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+}
+
+function sample2() {
+    assert_equals(rect.width.animVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+    assert_equals(rect.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+}
+
+function sample3() {
+    assert_equals(rect.width.animVal.unitType, SVGLength.SVG_LENGTHTYPE_PX);
+    assert_equals(rect.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 1.5,   sample2],
+        ["animation", 2.5,   sample3],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-values.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-values.html
new file mode 100644
index 0000000..a3e4853
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglength-animation-values.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGLength animation set with 'values', different units and different count of spaces.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "width");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("values", "100px;  130  ;4cm  ;6in; 200pt");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample2() {
+    assert_approx_equals(rect.width.animVal.value, 130, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample3() {
+    assert_approx_equals(rect.width.animVal.value, 151.2, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample4() {
+    assert_approx_equals(rect.width.animVal.value, 576, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+function sample5() {
+    assert_approx_equals(rect.width.animVal.value, 267, epsilon);
+    assert_equals(rect.width.baseVal.value, 100);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 1.0,   sample2],
+        ["animation", 2.0,   sample3],
+        ["animation", 3.0,   sample4],
+        ["animation", 3.999, sample5],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-1.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-1.html
new file mode 100644
index 0000000..198fc8a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-1.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGLengthList with LengthType number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 70 90 110");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50 70 90 110");
+animate.setAttribute("to", "60 90 120 150");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 70);
+    assert_equals(text.x.baseVal.getItem(2).value, 90);
+    assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample2() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 55, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 105, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 130, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 70);
+    assert_equals(text.x.baseVal.getItem(2).value, 90);
+    assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample3() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 60, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 90, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 120, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 150, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 70);
+    assert_equals(text.x.baseVal.getItem(2).value, 90);
+    assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-2.html
new file mode 100644
index 0000000..c1c91b8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-2.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGLengthList with different LengthTypes.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 70 90 110");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50 70px 5cm 8pt");
+animate.setAttribute("to", "3cm 80 100px 4in");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 70);
+    assert_equals(text.x.baseVal.getItem(2).value, 90);
+    assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample2() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 81.7, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 75, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 144.5, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 197.3, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 70);
+    assert_equals(text.x.baseVal.getItem(2).value, 90);
+    assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+function sample3() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 113.4, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 100, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 384, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 70);
+    assert_equals(text.x.baseVal.getItem(2).value, 90);
+    assert_equals(text.x.baseVal.getItem(3).value, 110);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-3.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-3.html
new file mode 100644
index 0000000..d26e67a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-3.html
@@ -0,0 +1,78 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<meta name="timeout" content="long">
+<title>Test 'to' animation of SVGLengthList with different count of items.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50");
+animate.setAttribute("to", "70 80 90 110");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.x.animVal.numberOfItems, 1);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 1);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+}
+
+function sample2() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 1);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+}
+
+function sample3() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 110, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 1);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-4.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-4.html
new file mode 100644
index 0000000..0e890ab
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-4.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'by' animation of SVGLengthList.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 60 70 80");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "50 60 70 80");
+animate.setAttribute("by", "20 20 20 20");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 60, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 80, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 60);
+    assert_equals(text.x.baseVal.getItem(2).value, 70);
+    assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample2() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 60, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 90, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 60);
+    assert_equals(text.x.baseVal.getItem(2).value, 70);
+    assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample3() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 100, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 60);
+    assert_equals(text.x.baseVal.getItem(2).value, 70);
+    assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-5.html b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-5.html
new file mode 100644
index 0000000..5d0bc2b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svglengthlist-animation-5.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test additive='sum' animation of SVGLengthList.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.setAttribute("id", "text");
+text.textContent = "ABCD";
+text.setAttribute("x", "50 60 70 80");
+text.setAttribute("y", "50");
+text.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(text);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "x");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("additive", "sum");
+animate.setAttribute("from", "0 0 0 0");
+animate.setAttribute("to", "20 20 20 20");
+text.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 50, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 60, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 80, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 60);
+    assert_equals(text.x.baseVal.getItem(2).value, 70);
+    assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample2() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 60, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 90, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 60);
+    assert_equals(text.x.baseVal.getItem(2).value, 70);
+    assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+function sample3() {
+    assert_equals(text.x.animVal.numberOfItems, 4);
+    assert_approx_equals(text.x.animVal.getItem(0).value, 70, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(1).value, 80, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(2).value, 90, epsilon);
+    assert_approx_equals(text.x.animVal.getItem(3).value, 100, epsilon);
+
+    assert_equals(text.x.baseVal.numberOfItems, 4);
+    assert_equals(text.x.baseVal.getItem(0).value, 50);
+    assert_equals(text.x.baseVal.getItem(1).value, 60);
+    assert_equals(text.x.baseVal.getItem(2).value, 70);
+    assert_equals(text.x.baseVal.getItem(3).value, 80);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-1.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-1.html
new file mode 100644
index 0000000..72c2d736
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-1.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("opacity", "0");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "opacity");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0");
+animate.setAttribute("to", "1");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0, epsilon);
+}
+
+function sample2() {
+    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.5, epsilon);
+}
+
+function sample3() {
+    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 1, epsilon);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-2.html
new file mode 100644
index 0000000..1654480
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-2.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation with different exponents.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "0");
+rect.setAttribute("width", "100");
+rect.setAttribute("height", "100");
+rect.setAttribute("fill", "green");
+rect.setAttribute("opacity", "0");
+rect.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "opacity");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0e10");
+animate.setAttribute("to", ".1e1");
+rect.appendChild(animate);
+rootSVGElement.appendChild(rect);
+
+// Setup animation test
+function sample1() {
+    // Check initial/end conditions
+    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0, epsilon);
+}
+
+function sample2() {
+    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 0.5, epsilon);
+}
+
+function sample3() {
+    assert_approx_equals(parseFloat(getComputedStyle(rect).opacity), 1, epsilon);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-3.js b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-3.html
similarity index 62%
rename from third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-3.js
rename to third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-3.html
index 6b1d49d..255eeb0 100644
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-3.js
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-3.html
@@ -1,5 +1,17 @@
-description("Test for SVGNumber animation with invalid units.");
-createSVGTestCase();
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation with invalid units.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
 
 // Setup test document
 var rect = createSVGElement("rect");
@@ -14,7 +26,7 @@
 var animate = createSVGElement("animate");
 animate.setAttribute("id", "animation");
 animate.setAttribute("attributeName", "opacity");
-animate.setAttribute("begin", "click");
+animate.setAttribute("begin", "0s");
 animate.setAttribute("dur", "4s");
 animate.setAttribute("from", "0px");
 animate.setAttribute("to", "1px");
@@ -24,10 +36,10 @@
 // Setup animation test
 function sample() {
     // Check initial/end conditions
-    shouldBe("getComputedStyle(rect).opacity", "'0'");
+    assert_equals(getComputedStyle(rect).opacity, '0');
 }
 
-function executeTest() {
+smil_async_test((t) => {
     const expectedValues = [
         // [animationId, time, sampleCallback]
         ["animation", 0.0,   sample],
@@ -36,7 +48,7 @@
         ["animation", 4.001, sample]
     ];
 
-    runAnimationTest(expectedValues);
-}
+    runAnimationTest(t, expectedValues);
+});
 
-var successfullyParsed = true;
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-4.js b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-4.html
similarity index 63%
rename from third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-4.js
rename to third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-4.html
index de0b15c..758138d 100644
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-4.js
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumber-animation-4.html
@@ -1,5 +1,17 @@
-description("Test for SVGNumber animation on SVG DOM properties.");
-createSVGTestCase();
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test for SVGNumber animation on SVG DOM properties.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
 
 // Setup test document
 var gradient = createSVGElement("linearGradient");
@@ -31,7 +43,7 @@
 animate.setAttribute("id", "animation");
 animate.setAttribute("attributeType", "XML");
 animate.setAttribute("attributeName", "offset");
-animate.setAttribute("begin", "rect.click");
+animate.setAttribute("begin", "0s");
 animate.setAttribute("dur", "4s");
 animate.setAttribute("from", "0");
 animate.setAttribute("to", "1");
@@ -42,21 +54,21 @@
 
 // Setup animation test
 function sample1() {
-    shouldBeCloseEnough("stop1.offset.animVal", "0");
-    shouldBe("stop1.offset.baseVal", "0");
+    assert_approx_equals(stop1.offset.animVal, 0, epsilon);
+    assert_equals(stop1.offset.baseVal, 0);
 }
 
 function sample2() {
-    shouldBeCloseEnough("stop1.offset.animVal", "0.5");
-    shouldBe("stop1.offset.baseVal", "0");
+    assert_approx_equals(stop1.offset.animVal, 0.5, epsilon);
+    assert_equals(stop1.offset.baseVal, 0);
 }
 
 function sample3() {
-    shouldBeCloseEnough("stop1.offset.animVal", "1");
-    shouldBe("stop1.offset.baseVal", "0");
+    assert_approx_equals(stop1.offset.animVal, 1, epsilon);
+    assert_equals(stop1.offset.baseVal, 0);
 }
 
-function executeTest() {
+smil_async_test((t) => {
     const expectedValues = [
         // [animationId, time, sampleCallback]
         ["animation", 0.0, sample1],
@@ -64,7 +76,7 @@
         ["animation", 4.0, sample3]
     ];
 
-    runAnimationTest(expectedValues);
-}
+    runAnimationTest(t, expectedValues);
+});
 
-var successfullyParsed = true;
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberlist-animation-1.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberlist-animation-1.html
new file mode 100644
index 0000000..aabb7d7d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberlist-animation-1.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test SVGNumberList animation on 'rotate' attribute of text.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.textContent = "ABCD";
+text.setAttribute("x", "40 60 80 100");
+text.setAttribute("y", "60");
+text.setAttribute("rotate", "15");
+text.setAttribute("fill", "green");
+text.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "rotate");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0 0 0 0");
+animate.setAttribute("to", "45 90 135 180");
+text.appendChild(animate);
+rootSVGElement.appendChild(text);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.rotate.animVal.numberOfItems, 1);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 15, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample2() {
+    assert_equals(text.rotate.animVal.numberOfItems, 4);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 0, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(1).value, 0, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(2).value, 0, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(3).value, 0, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample3() {
+    assert_equals(text.rotate.animVal.numberOfItems, 4);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 22.5, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(1).value, 45, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(2).value, 67.5, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(3).value, 90, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample4() {
+    assert_equals(text.rotate.animVal.numberOfItems, 4);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 45, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(1).value, 90, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(2).value, 135, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(3).value, 180, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 0.001, sample2],
+        ["animation", 2.0,   sample3],
+        ["animation", 3.999, sample4],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberlist-animation-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberlist-animation-2.html
new file mode 100644
index 0000000..e62bbf6
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberlist-animation-2.html
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'by' animation of SVGNumberList on 'rotate' attribute of text.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var text = createSVGElement("text");
+text.textContent = "ABCD";
+text.setAttribute("x", "40 60 80 100");
+text.setAttribute("y", "60");
+text.setAttribute("rotate", "15");
+text.setAttribute("fill", "green");
+text.setAttribute("onclick", "executeTest()");
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "rotate");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "0 45 90 135");
+animate.setAttribute("by", "45 45 45 45");
+text.appendChild(animate);
+rootSVGElement.appendChild(text);
+
+// Setup animation test
+function sample1() {
+    assert_equals(text.rotate.animVal.numberOfItems, 1);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 15, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample2() {
+    assert_equals(text.rotate.animVal.numberOfItems, 4);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 0, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(1).value, 45, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(2).value, 90, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(3).value, 135, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample3() {
+    assert_equals(text.rotate.animVal.numberOfItems, 4);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 22.5, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(1).value, 67.5, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(2).value, 112.5, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(3).value, 157.5, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+function sample4() {
+    assert_equals(text.rotate.animVal.numberOfItems, 4);
+    assert_approx_equals(text.rotate.animVal.getItem(0).value, 45, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(1).value, 90, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(2).value, 135, epsilon);
+    assert_approx_equals(text.rotate.animVal.getItem(3).value, 180, epsilon);
+
+    assert_equals(text.rotate.baseVal.numberOfItems, 1);
+    assert_equals(text.rotate.baseVal.getItem(0).value, 15);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 0.001, sample2],
+        ["animation", 2.0,   sample3],
+        ["animation", 3.999, sample4],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-1.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-1.html
new file mode 100644
index 0000000..b208551
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-1.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGNumberOptionalNumber with optional number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("x", "-30%");
+filter.setAttribute("y", "-30%");
+filter.setAttribute("width", "160%");
+filter.setAttribute("height", "160%");
+defs.appendChild(filter);
+
+var feGaussianBlur = createSVGElement("feGaussianBlur");
+feGaussianBlur.setAttribute("id", "blur");
+feGaussianBlur.setAttribute("stdDeviation", "5");
+filter.appendChild(feGaussianBlur);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "50");
+rect.setAttribute("y", "50");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "stdDeviation");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "5 5");
+animate.setAttribute("to", "40 10");
+feGaussianBlur.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 5, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 5, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample2() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 22.5, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 7.5, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample3() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 40, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.clickX = 100;
+window.clickY = 100;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-2.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-2.html
new file mode 100644
index 0000000..db25765
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-2.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGNumberOptionalNumber without optional number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("x", "-30%");
+filter.setAttribute("y", "-30%");
+filter.setAttribute("width", "160%");
+filter.setAttribute("height", "160%");
+defs.appendChild(filter);
+
+var feGaussianBlur = createSVGElement("feGaussianBlur");
+feGaussianBlur.setAttribute("id", "blur");
+feGaussianBlur.setAttribute("stdDeviation", "5");
+filter.appendChild(feGaussianBlur);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "50");
+rect.setAttribute("y", "50");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "stdDeviation");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "5");
+animate.setAttribute("to", "40 10");
+feGaussianBlur.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 5, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 5, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample2() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 22.5, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 7.5, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+function sample3() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 40, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 5);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 5);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.clickX = 60;
+window.clickY = 60;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-3.html b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-3.html
new file mode 100644
index 0000000..974c1d7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/svgnumberoptionalnumber-animation-3.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Test 'to' animation of SVGNumberOptionalNumber without optional number.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
+
+<svg>
+</svg>
+
+<script>
+var rootSVGElement = document.querySelector("svg");
+var epsilon = 1.0;
+
+// Setup test document
+var defs = createSVGElement("defs");
+rootSVGElement.appendChild(defs);
+
+var filter = createSVGElement("filter");
+filter.setAttribute("id", "filter");
+filter.setAttribute("x", "-30%");
+filter.setAttribute("y", "-30%");
+filter.setAttribute("width", "160%");
+filter.setAttribute("height", "160%");
+defs.appendChild(filter);
+
+var feGaussianBlur = createSVGElement("feGaussianBlur");
+feGaussianBlur.setAttribute("id", "blur");
+feGaussianBlur.setAttribute("stdDeviation", "40 10");
+filter.appendChild(feGaussianBlur);
+
+var rect = createSVGElement("rect");
+rect.setAttribute("id", "rect");
+rect.setAttribute("x", "50");
+rect.setAttribute("y", "50");
+rect.setAttribute("width", "200");
+rect.setAttribute("height", "200");
+rect.setAttribute("fill", "green");
+rect.setAttribute("filter", "url(#filter)");
+rect.setAttribute("onclick", "executeTest()");
+rootSVGElement.appendChild(rect);
+
+var animate = createSVGElement("animate");
+animate.setAttribute("id", "animation");
+animate.setAttribute("attributeName", "stdDeviation");
+animate.setAttribute("begin", "0s");
+animate.setAttribute("dur", "4s");
+animate.setAttribute("from", "40 10");
+animate.setAttribute("to", "5");
+feGaussianBlur.appendChild(animate);
+
+// Setup animation test
+function sample1() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 40, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 10, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 40);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 10);
+}
+
+function sample2() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 22.5, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 7.5, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 40);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 10);
+}
+
+function sample3() {
+    assert_approx_equals(feGaussianBlur.stdDeviationX.animVal, 5, epsilon);
+    assert_approx_equals(feGaussianBlur.stdDeviationY.animVal, 5, epsilon);
+
+    assert_equals(feGaussianBlur.stdDeviationX.baseVal, 40);
+    assert_equals(feGaussianBlur.stdDeviationY.baseVal, 10);
+}
+
+smil_async_test((t) => {
+    const expectedValues = [
+        // [animationId, time, sampleCallback]
+        ["animation", 0.0,   sample1],
+        ["animation", 2.0,   sample2],
+        ["animation", 3.999, sample3],
+        ["animation", 4.001, sample1]
+    ];
+
+    runAnimationTest(t, expectedValues);
+});
+
+window.clickX = 60;
+window.clickY = 60;
+
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html
similarity index 83%
rename from third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.html
rename to third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html
index e06c219..1bbb30b 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.html
+++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html
@@ -23,8 +23,11 @@
     assert_true(event.hostCandidate.includes(":"), "hostCandidate");
     assert_true(event.url.includes("123"), "url");
   });
-  const offerOptions = {offerToReceiveAudio: 1};
-  await pc.setLocalDescription(await pc.createOffer(offerOptions));
+  const stream = await getNoiseStream({audio:true});
+  t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+  pc.addTrack(stream.getAudioTracks()[0], stream);
+
+  await pc.setLocalDescription(await pc.createOffer());
   await onErrorPromise;
 }, 'Surfacing onicecandidateerror');
 
diff --git a/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt b/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt
index 8654bed31..1682237 100644
--- a/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt
+++ b/third_party/blink/web_tests/fast/dom/wrapper-scope-expected.txt
@@ -10,10 +10,10 @@
 PASS inner.Window.constructor.isInner is true
 PASS inner.Window.constructor.prototype.isInner is true
 PASS inner.Window.__proto__.isInner is true
-FAIL inner.close.isInner should be true. Was false.
-FAIL inner.close.constructor.isInner should be true. Was false.
-FAIL inner.close.constructor.prototype.isInner should be true. Was false.
-FAIL inner.close.__proto__.isInner should be true. Was false.
+PASS inner.close.isInner is true
+PASS inner.close.constructor.isInner is true
+PASS inner.close.constructor.prototype.isInner is true
+PASS inner.close.__proto__.isInner is true
 PASS inner.console.isInner is true
 PASS inner.console.constructor.isInner is true
 PASS inner.console.constructor.prototype.isInner is true
@@ -34,10 +34,10 @@
 PASS inner.navigator.constructor.isInner is true
 PASS inner.navigator.constructor.prototype.isInner is true
 PASS inner.navigator.__proto__.isInner is true
-FAIL inner.postMessage.isInner should be true. Was false.
-FAIL inner.postMessage.constructor.isInner should be true. Was false.
-FAIL inner.postMessage.constructor.prototype.isInner should be true. Was false.
-FAIL inner.postMessage.__proto__.isInner should be true. Was false.
+PASS inner.postMessage.isInner is true
+PASS inner.postMessage.constructor.isInner is true
+PASS inner.postMessage.constructor.prototype.isInner is true
+PASS inner.postMessage.__proto__.isInner is true
 PASS inner.window.isInner is true
 PASS inner.window.constructor.isInner is true
 PASS inner.window.constructor.prototype.isInner is true
diff --git a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hex-format.html b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hex-format.html
index 2ea7e7e..8e52fef 100644
--- a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hex-format.html
+++ b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hex-format.html
@@ -20,7 +20,8 @@
   popupWindow.focus();
   const popupDocument = popupWindow.document;
   const formatToggler = popupDocument.querySelector('format-toggler');
-  formatToggler.click();
+  formatToggler.click();  // first click changes format to HSL
+  formatToggler.click();  // second click changes format to Hex
   testRunner.notifyDone();
 }
 </script>
diff --git a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..28ed0b3
--- /dev/null
+++ b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format.html b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format.html
new file mode 100644
index 0000000..2ea7e7e
--- /dev/null
+++ b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+testRunner.setUseMockTheme(false);
+testRunner.waitUntilDone();
+</script>
+<script src='../../../forms/resources/picker-common.js'></script>
+</head>
+<body>
+<input type='color' id='color' value='#7EFFC9'>
+
+<p id='description' style='opacity: 0'></p>
+<div id='console' style='opacity: 0'></div>
+
+<script>
+openPicker(document.getElementById('color'), openPickerSuccessfulCallback, () => testRunner.notifyDone());
+
+function openPickerSuccessfulCallback() {
+  popupWindow.focus();
+  const popupDocument = popupWindow.document;
+  const formatToggler = popupDocument.querySelector('format-toggler');
+  formatToggler.click();
+  testRunner.notifyDone();
+}
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-channel-value-container-class.html b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-channel-value-container-class.html
index 4fd4429..734169a10 100644
--- a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-channel-value-container-class.html
+++ b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-channel-value-container-class.html
@@ -20,6 +20,9 @@
 let rValueContainer = new ChannelValueContainer(ColorChannel.R, new Color('#7effc9'));
 let gValueContainer = new ChannelValueContainer(ColorChannel.G, new Color('#7effc9'));
 let bValueContainer = new ChannelValueContainer(ColorChannel.B, new Color('#7effc9'));
+let hValueContainer = new ChannelValueContainer(ColorChannel.H, new Color('#7effc9'));
+let sValueContainer = new ChannelValueContainer(ColorChannel.S, new Color('#7effc9'));
+let lValueContainer = new ChannelValueContainer(ColorChannel.L, new Color('#7effc9'));
 
 function setContainerValue(valueContainer, value) {
   valueContainer.value = value;
@@ -42,6 +45,15 @@
       case ColorChannel.B:
         setContainerValue(valueContainer, '201');
         break;
+      case ColorChannel.H:
+        setContainerValue(valueContainer, '155');
+        break;
+      case ColorChannel.S:
+        setContainerValue(valueContainer, '100%');
+        break;
+      case ColorChannel.L:
+        setContainerValue(valueContainer, '75%');
+        break;
     }
   });
 }
@@ -51,6 +63,9 @@
   assert_equals(rValueContainer.channelValue_, 126);
   assert_equals(gValueContainer.channelValue_, 255);
   assert_equals(bValueContainer.channelValue_, 201);
+  assert_equals(hValueContainer.channelValue_, 155);
+  assert_equals(sValueContainer.channelValue_, 100);
+  assert_equals(lValueContainer.channelValue_, 75);
 }, 'initial values');
 
 test(() => {
@@ -154,6 +169,82 @@
   setContainerValue(bValueContainer, '');
   assert_equals(bValueContainer.channelValue_, 201);
 }, 'rgbValueContainers onValueChange_ empty values');
+
+test(() => {
+  resetContainerValues(hValueContainer, sValueContainer, lValueContainer);
+  setContainerValue(hValueContainer, '275');
+  assert_equals(hValueContainer.channelValue_, 275);
+  setContainerValue(sValueContainer, '86%');
+  assert_equals(sValueContainer.channelValue_, 86);
+  setContainerValue(lValueContainer, '7%');
+  assert_equals(lValueContainer.channelValue_, 7);
+}, 'hslValueContainers onValueChange_ valid change');
+
+test(() => {
+  resetContainerValues(hValueContainer, sValueContainer, lValueContainer);
+  setContainerValue(hValueContainer, '018');
+  assert_equals(hValueContainer.channelValue_, 18);
+  setContainerValue(sValueContainer, '005%');
+  assert_equals(sValueContainer.channelValue_, 5);
+  setContainerValue(lValueContainer, '099%');
+  assert_equals(lValueContainer.channelValue_, 99);
+}, 'hslValueContainers onValueChange_ leading zero values');
+
+test(() => {
+  resetContainerValues(hValueContainer, sValueContainer, lValueContainer);
+  setContainerValue(hValueContainer, '-1');
+  assert_equals(hValueContainer.channelValue_, 155);
+  setContainerValue(sValueContainer, '-10%');
+  assert_equals(sValueContainer.channelValue_, 100);
+  setContainerValue(lValueContainer, '-0%');
+  assert_equals(lValueContainer.channelValue_, 75);
+}, 'hslValueContainers onValueChange_ negative values');
+
+test(() => {
+  resetContainerValues(hValueContainer, sValueContainer, lValueContainer);
+  setContainerValue(hValueContainer, '%^&');
+  assert_equals(hValueContainer.channelValue_, 155);
+  setContainerValue(sValueContainer, 'ABC');
+  assert_equals(sValueContainer.channelValue_, 100);
+  setContainerValue(lValueContainer, ',){^');
+  assert_equals(lValueContainer.channelValue_, 75);
+}, 'hslValueContainers onValueChange_ non number values');
+
+test(() => {
+  resetContainerValues(hValueContainer, sValueContainer, lValueContainer);
+  setContainerValue(hValueContainer, '3.2');
+  assert_equals(hValueContainer.channelValue_, 155);
+  setContainerValue(sValueContainer, '5.0%');
+  assert_equals(sValueContainer.channelValue_, 100);
+  setContainerValue(lValueContainer, '9.9%');
+  assert_equals(lValueContainer.channelValue_, 75);
+}, 'hslValueContainers onValueChange_ decimal values');
+
+test(() => {
+  resetContainerValues(hValueContainer, sValueContainer, lValueContainer);
+  setContainerValue(hValueContainer, '');
+  assert_equals(hValueContainer.channelValue_, 155);
+  setContainerValue(sValueContainer, '');
+  assert_equals(sValueContainer.channelValue_, 100);
+  setContainerValue(lValueContainer, '');
+  assert_equals(lValueContainer.channelValue_, 75);
+}, 'hslValueContainers onValueChange_ empty values');
+
+test(() => {
+  resetContainerValues(sValueContainer, lValueContainer);
+  setContainerValue(sValueContainer, '%');
+  assert_equals(sValueContainer.channelValue_, 100);
+  setContainerValue(lValueContainer, '%');
+  assert_equals(lValueContainer.channelValue_, 75);
+}, 'slValueContainers onValueChange_ only \'%\'');
+
+test(() => {
+  resetContainerValues(sValueContainer, lValueContainer);
+  setContainerValue(sValueContainer, '97');
+  assert_equals(sValueContainer.channelValue_, 100);
+  setContainerValue(lValueContainer, '34');
+  assert_equals(lValueContainer.channelValue_, 75);
+}, 'slValueContainers onValueChange_ without \'%\'');
 </script>
 </body>
 </html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-color-class.html b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-color-class.html
index 89a5c950..b8df01c 100644
--- a/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-color-class.html
+++ b/third_party/blink/web_tests/fast/forms/controls-new-ui/color/color-picker-color-class.html
@@ -18,11 +18,17 @@
 
 testEquals();
 testHexToRGB();
-testRGBToHex()
+testRGBToHex();
+testRGBToHSL();
+testHSLToRGB();
+testHexToHSL();
+testHSLToHex();
 testHexValueGetter();
 testRGBValueGetters();
+testHSLValueGetters();
 testAsHex();
 testAsRGB();
+testAsHSL();
 
 function testEquals() {
   test(() => {
@@ -34,12 +40,32 @@
   }, 'new Color(\'rgb(255,255,255)\').equals(new Color(ColorFormat.RGB, 255, 255, 255))');
 
   test(() => {
+    assert_true(new Color('hsl(117,82%,55%)').equals(new Color(ColorFormat.HSL, 117, 82, 55)));
+  }, 'new Color(\'hsl(117,82%,55%)\').equals(new Color(ColorFormat.RGB, 117, 82, 55))');
+
+  test(() => {
     assert_true(new Color('#caebca').equals(new Color(ColorFormat.RGB, 202, 235, 202)));
   }, 'new Color(\'#caebca\').equals(new Color(ColorFormat.RGB, 202, 235, 202))');
 
   test(() => {
     assert_true(new Color(ColorFormat.RGB, 46, 224, 255).equals(new Color('#2ee0ff')));
   }, 'new Color(\'new Color(\'rgb(46,224,255)\').equals(new Color(\'#2ee0ff\')))');
+
+  test(() => {
+    assert_true(new Color('hsl(195, 100%, 50%)').equals(new Color(ColorFormat.HEX, '00bfff')));
+  }, 'new Color(\'hsl(195, 100%, 50%)\').equals(new Color(ColorFormat.HEX, \'00bfff\'))');
+
+  test(() => {
+    assert_true(new Color('#140221').equals(new Color(ColorFormat.HSL, 275, 86, 7)));
+  }, 'new Color(\'#140221\').equals(new Color(ColorFormat.HSL, 275, 86, 7))');
+
+  test(() => {
+    assert_true(new Color(ColorFormat.RGB, 81, 97, 164).equals(new Color(ColorFormat.HSL, 228, 34, 48)));
+  }, 'new Color(\'new Color(ColorFormat.RGB, 81, 97, 164).equals(new Color(ColorFormat.HSL, 228, 34, 48)))');
+
+  test(() => {
+    assert_true(new Color('rgb(142, 197, 32)').equals(new Color('hsl(80,72%,45%)')));
+  }, 'new Color(\'rgb(142, 197, 32)\').equals(new Color(\'hsl(80,72%,45%)\'))');
 }
 
 function testHexToRGB() {
@@ -118,6 +144,90 @@
   }, 'Color.rgbToHex(169, 245, 192)');
 }
 
+function testRGBToHSL() {
+  test(() => {
+    assert_equals(JSON.stringify([0, 0, 0]), JSON.stringify(Color.rgbToHSL(0, 0, 0).map(Math.round)));
+  }, 'Color.rgbToHSL(0, 0, 0).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([0, 0, 100]), JSON.stringify(Color.rgbToHSL(255, 255, 255).map(Math.round)));
+  }, 'Color.rgbToHSL(255, 255, 255).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([98, 49, 31]), JSON.stringify(Color.rgbToHSL(70, 119, 41).map(Math.round)));
+  }, 'Color.rgbToHSL(70, 119, 41).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([299, 91, 44]), JSON.stringify(Color.rgbToHSL(212, 10, 214).map(Math.round)));
+  }, 'Color.rgbToHSL(212, 10, 214).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([80, 72, 45]), JSON.stringify(Color.rgbToHSL(142, 197, 32).map(Math.round)));
+  }, 'Color.rgbToHSL(142, 197, 32).map(Math.round)');
+}
+
+function testHSLToRGB() {
+  test(() => {
+    assert_equals(JSON.stringify([0, 0, 0]), JSON.stringify(Color.hslToRGB(0, 0, 0).map(Math.round)));
+  }, 'Color.hslToRGB(0, 0, 0).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([255, 255, 255]), JSON.stringify(Color.hslToRGB(0, 0, 100).map(Math.round)));
+  }, 'Color.hslToRGB(0, 0, 100).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([63, 75, 65]), JSON.stringify(Color.hslToRGB(133, 9, 27).map(Math.round)));
+  }, 'Color.hslToRGB(133, 9, 27).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([37, 250, 254]), JSON.stringify(Color.hslToRGB(181, 99, 57).map(Math.round)));
+  }, 'Color.hslToRGB(181, 99, 57).map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([142, 197, 32]), JSON.stringify(Color.hslToRGB(80, 72, 45).map(Math.round)));
+  }, 'Color.hslToRGB(80, 72, 45).map(Math.round)');
+}
+
+function testHexToHSL() {
+  test(() => {
+    assert_equals(JSON.stringify([0, 0, 0]), JSON.stringify(Color.hexToHSL('000000').map(Math.round)));
+  }, 'Color.hexToHSL(\'000000\').map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([0, 0, 100]), JSON.stringify(Color.hexToHSL('ffffff').map(Math.round)));
+  }, 'Color.hexToHSL(\'ffffff\').map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([162, 43, 66]), JSON.stringify(Color.hexToHSL('83ceb7').map(Math.round)));
+  }, 'Color.hexToHSL(\'83ceb7\').map(Math.round)');
+
+  test(() => {
+    assert_equals(JSON.stringify([80, 72, 45]), JSON.stringify(Color.hexToHSL('8ec520').map(Math.round)));
+  }, 'Color.hexToHSL(\'8ec520\').map(Math.round)');
+}
+
+function testHSLToHex() {
+  test(() => {
+    assert_equals('000000', Color.hslToHex(0, 0, 0));
+  }, 'Color.hslToHex(0, 0, 0)');
+
+  test(() => {
+    assert_equals('ffffff', Color.hslToHex(0, 0, 100));
+  }, 'Color.hslToHex(0, 0, 100)');
+
+  test(() => {
+    assert_equals('672caf', Color.hslToHex(267, 60, 43));
+  }, 'Color.hslToHex(267, 60, 43)');
+
+  test(() => {
+    assert_equals('dddecf', Color.hslToHex(63, 18, 84));
+  }, 'Color.hslToHex(63, 18, 84)');
+
+  test(() => {
+    assert_equals('8ec520', Color.hslToHex(80, 72, 45));
+  }, 'Color.hslToHex(80, 72, 45)');
+}
+
 function testHexValueGetter() {
   test(() => {
     assert_equals('1f8069', new Color('#1f8069').hexValue);
@@ -134,6 +244,14 @@
   test(() => {
     assert_equals('17679c', new Color(ColorFormat.RGB, 23, 103, 156).hexValue);
   }, 'new Color(ColorFormat.RGB, 23, 103, 156).hexValue');
+
+  test(() => {
+    assert_equals('c505f5', new Color('hsl(288,96%,49%)').hexValue);
+  }, 'new Color(\'hsl(288,96%,49%)\').hexValue');
+
+  test(() => {
+    assert_equals('388f50', new Color(ColorFormat.HSL, 137, 44, 39).hexValue);
+  }, 'new Color(ColorFormat.HSL, 137, 44, 39).hexValue');
 }
 
 function testRGBValueGetters() {
@@ -184,6 +302,104 @@
   test(() => {
     assert_equals(72, new Color(ColorFormat.RGB, 65, 84, 72).bValue);
   }, 'new Color(ColorFormat.RGB, 65, 84, 72).bValue');
+
+  test(() => {
+    assert_equals(20, new Color('hsl(116,79%,25%)').rValue);
+  }, 'new Color(\'hsl(116,79%,25%)\').rValue');
+
+  test(() => {
+    assert_equals(114, new Color('hsl(116,79%,25%)').gValue);
+  }, 'new Color(\'hsl(116,79%,25%)\').gValue');
+
+  test(() => {
+    assert_equals(13, new Color('hsl(116,79%,25%)').bValue);
+  }, 'new Color(\'hsl(116,79%,25%)\').bValue');
+
+  test(() => {
+    assert_equals(236, new Color(ColorFormat.HSL, 301, 64, 79).rValue);
+  }, 'new Color(ColorFormat.HSL, 301, 64, 79).rValue');
+
+  test(() => {
+    assert_equals(167, new Color(ColorFormat.HSL, 301, 64, 79).gValue);
+  }, 'new Color(ColorFormat.HSL, 301, 64, 79).gValue');
+
+  test(() => {
+    assert_equals(235, new Color(ColorFormat.HSL, 301, 64, 79).bValue);
+  }, 'new Color(ColorFormat.HSL, 301, 64, 79).bValue');
+}
+
+function testHSLValueGetters() {
+  test(() => {
+    assert_equals(61, new Color('#e5e73d').hValue);
+  }, 'new Color(\'#e5e73d\').hValue');
+
+  test(() => {
+    assert_equals(78, new Color('#e5e73d').sValue);
+  }, 'new Color(\'#e5e73d\').sValue');
+
+  test(() => {
+    assert_equals(57, new Color('#e5e73d').lValue);
+  }, 'new Color(\'#e5e73d\').lValue');
+
+  test(() => {
+    assert_equals(111, new Color(ColorFormat.HEX, '61a755').hValue);
+  }, 'new Color(ColorFormat.HEX, \'61a755\').hValue');
+
+  test(() => {
+    assert_equals(33, new Color(ColorFormat.HEX, '61a755').sValue);
+  }, 'new Color(ColorFormat.HEX, \'61a755\').sValue');
+
+  test(() => {
+    assert_equals(49, new Color(ColorFormat.HEX, '61a755').lValue);
+  }, 'new Color(ColorFormat.HEX, \'61a755\').lValue');
+
+  test(() => {
+    assert_equals(210, new Color('rgb(156,172,188)').hValue);
+  }, 'new Color(\'rgb(156,172,188)\').hValue');
+
+  test(() => {
+    assert_equals(19, new Color('rgb(156,172,188)').sValue);
+  }, 'new Color(\'rgb(156,172,188)\').sValue');
+
+  test(() => {
+    assert_equals(67, new Color('rgb(156,172,188)').lValue);
+  }, 'new Color(\'rgb(156,172,188)\').lValue');
+
+  test(() => {
+    assert_equals(3, new Color(ColorFormat.RGB, 212, 34, 24).hValue);
+  }, 'new Color(ColorFormat.RGB, 212, 34, 24).hValue');
+
+  test(() => {
+    assert_equals(80, new Color(ColorFormat.RGB, 212, 34, 24).sValue);
+  }, 'new Color(ColorFormat.RGB, 212, 34, 24).sValue');
+
+  test(() => {
+    assert_equals(46, new Color(ColorFormat.RGB, 212, 34, 24).lValue);
+  }, 'new Color(ColorFormat.RGB, 212, 34, 24).lValue');
+
+  test(() => {
+    assert_equals(178, new Color('hsl(178,70%,63%)').hValue);
+  }, 'new Color(\'hsl(178,70%,63%)\').hValue');
+
+  test(() => {
+    assert_equals(70, new Color('hsl(178,70%,63%)').sValue);
+  }, 'new Color(\'hsl(178,70%,63%)\').sValue');
+
+  test(() => {
+    assert_equals(63, new Color('hsl(178,70%,63%)').lValue);
+  }, 'new Color(\'hsl(178,70%,63%)\').lValue');
+
+  test(() => {
+    assert_equals(104, new Color(ColorFormat.HSL, 104, 88, 63).hValue);
+  }, 'new Color(ColorFormat.HSL, 104, 88, 63).hValue');
+
+  test(() => {
+    assert_equals(88, new Color(ColorFormat.HSL, 104, 88, 63).sValue);
+  }, 'new Color(ColorFormat.HSL, 104, 88, 63).sValue');
+
+  test(() => {
+    assert_equals(63, new Color(ColorFormat.HSL, 104, 88, 63).lValue);
+  }, 'new Color(ColorFormat.HSL, 104, 88, 63).lValue');
 }
 
 function testAsHex() {
@@ -202,6 +418,14 @@
   test(() => {
     assert_equals('#6e1026', new Color(ColorFormat.RGB, 110, 16, 38).asHex());
   }, 'new Color(ColorFormat.RGB, 110, 16, 38).asHex()');
+
+  test(() => {
+    assert_equals('#ffe6e8', new Color('hsl(355,99,95)').asHex());
+  }, 'new Color(\'hsl(355,99,95)\').asHex()');
+
+  test(() => {
+    assert_equals('#2d0b06', new Color(ColorFormat.HSL, 7, 75, 10).asHex());
+  }, 'new Color(ColorFormat.HSL, 7, 75, 10).asHex()');
 }
 
 function testAsRGB() {
@@ -220,8 +444,41 @@
   test(() => {
     assert_equals('rgb(15,117,15)', new Color(ColorFormat.RGB, 15, 117, 15).asRGB());
   }, 'new Color(ColorFormat.RGB, 15, 117, 15).asRGB()');
+
+  test(() => {
+    assert_equals('rgb(168,209,168)', new Color('hsl(120,31,74)').asRGB());
+  }, 'new Color(\'hsl(120,31,74)\').asRGB()');
+
+  test(() => {
+    assert_equals('rgb(251,231,9)', new Color(ColorFormat.HSL, 55, 97, 51).asRGB());
+  }, 'new Color(ColorFormat.HSL, 55, 97, 51).asRGB()');
 }
 
+function testAsHSL() {
+  test(() => {
+    assert_equals('hsl(132,2%,48%)', new Color('#787d79').asHSL());
+  }, 'new Color(\'#00fff2\').asHSL()');
+
+  test(() => {
+    assert_equals('hsl(305,24%,68%)', new Color(ColorFormat.HEX, 'c099bd').asHSL());
+  }, 'new Color(ColorFormat.HEX, \'c099bd\').asHSL()');
+
+  test(() => {
+    assert_equals('hsl(259,70%,44%)', new Color('rgb(85,34,192)').asHSL());
+  }, 'new Color(\'rgb(85,34,192)\').asHSL()');
+
+  test(() => {
+    assert_equals('hsl(86,87%,48%)', new Color(ColorFormat.RGB, 139, 230, 16).asHSL());
+  }, 'new Color(ColorFormat.RGB, 139, 230, 16).asHSL()');
+
+  test(() => {
+    assert_equals('hsl(225,41%,44%)', new Color('hsl(225,41,44)').asHSL());
+  }, 'new Color(\'hsl(225,41,44)\').asHSL()');
+
+  test(() => {
+    assert_equals('hsl(307,64%,54%)', new Color(ColorFormat.HSL, 307, 64, 54).asHSL());
+  }, 'new Color(ColorFormat.HSL, 307, 64, 54).asHSL()');
+}
 </script>
 </body>
 </html>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt
index 19a47bbc..458638b 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt
@@ -10,11 +10,6 @@
           "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
           "rect": [0, 50, 106, 206],
           "reason": "geometry"
-        },
-        {
-          "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
-          "rect": [0, 50, 106, 206],
-          "reason": "geometry"
         }
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-resize-property-change-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-resize-property-change-expected.txt
index 5960dd92..ce36c42 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-resize-property-change-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-resize-property-change-expected.txt
@@ -10,16 +10,6 @@
           "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
           "rect": [0, 50, 106, 106],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
-          "rect": [0, 50, 106, 106],
-          "reason": "chunk appeared"
-        },
-        {
-          "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
-          "rect": [0, 50, 106, 106],
-          "reason": "chunk appeared"
         }
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-set-disabled-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-set-disabled-expected.txt
index 1ad2ade..3b514b6f0 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-set-disabled-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/forms/textarea-set-disabled-expected.txt
@@ -10,11 +10,6 @@
           "object": "LayoutTextControl TEXTAREA",
           "rect": [8, 8, 106, 106],
           "reason": "subtree"
-        },
-        {
-          "object": "LayoutTextControl TEXTAREA",
-          "rect": [8, 8, 106, 106],
-          "reason": "subtree"
         }
       ]
     }
diff --git a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/composited-add-resizer-expected.txt b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/composited-add-resizer-expected.txt
index 0c50ecc9..ee504b1 100644
--- a/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/composited-add-resizer-expected.txt
+++ b/third_party/blink/web_tests/flag-specific/enable-blink-features=CompositeAfterPaint/paint/invalidation/scroll/composited-add-resizer-expected.txt
@@ -7,23 +7,13 @@
       "backgroundColor": "#FFFFFF"
     },
     {
-      "name": "LayoutNGBlockFlow DIV id='target'",
+      "name": "LayoutBlockFlow DIV id='target'",
       "bounds": [100, 100],
       "paintInvalidations": [
         {
-          "object": "LayoutNGBlockFlow DIV id='target'",
+          "object": "LayoutBlockFlow DIV id='target'",
           "rect": [0, 0, 100, 100],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutNGBlockFlow DIV id='target'",
-          "rect": [0, 0, 100, 100],
-          "reason": "chunk appeared"
-        },
-        {
-          "object": "LayoutNGBlockFlow DIV id='target'",
-          "rect": [0, 0, 100, 100],
-          "reason": "chunk appeared"
         }
       ],
       "transform": 1
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-trusted-types-expected.txt b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-trusted-types-expected.txt
new file mode 100644
index 0000000..771e72a
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-trusted-types-expected.txt
@@ -0,0 +1,7 @@
+ALERT: Running test #2
+CONSOLE ERROR: line 29: This document requires 'TrustedScript' assignment.
+ALERT: message: blocked
+ALERT: Running test #1
+ALERT: message: pass
+ALERT: Running test #0
+This test ensures that scripts run in isolated worlds marked with their own Content Security Policy aren't affected by the page's content security policy. Extensions, for example, should not be restricted by the page's Trusted Types policy.
diff --git a/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-trusted-types.html b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-trusted-types.html
new file mode 100644
index 0000000..d0e78d6
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/security/isolatedWorld/bypass-main-world-trusted-types.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Security-Policy" content="trusted-types *'">
+<script>
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    tests = 2;
+
+    window.addEventListener("message", function(message) {
+        alert("message: " + message.data);
+        tests -= 1;
+        test();
+    }, false);
+
+    function setup() {
+        // This is needed because isolated worlds are not reset between test
+        // runs and a previous test's CSP may interfere with this test. See
+        // https://crbug.com/415845.
+        testRunner.setIsolatedWorldInfo(1, null, null);
+    }
+
+    function test() {
+        function setScript() {
+            try {
+                document.getElementById("target").textContent = "2+2;";
+                window.postMessage("pass", "*");
+            } catch (e) {
+                window.postMessage("blocked", "*");
+            }
+        }
+
+        alert("Running test #" + tests);
+        switch (tests) {
+            case 2:
+                setScript();
+                break;
+            case 1:
+                testRunner.setIsolatedWorldInfo(1, 'chrome-extension://123', '');
+                testRunner.evaluateScriptInIsolatedWorld(1, setScript.toString() + " setScript();");
+                break;
+            case 0:
+                // Reset isolated worlds for other tests.
+                testRunner.setIsolatedWorldInfo(1, null, null);
+                testRunner.notifyDone();
+                break;
+        }
+    }
+</script>
+<script id="target"></script>
+</head>
+<body onload="setup(); test();">
+    <p>
+        This test ensures that scripts run in isolated worlds marked with their
+        own Content Security Policy aren't affected by the page's content
+        security policy. Extensions, for example, should not be restricted by the
+        page's Trusted Types policy.
+    </p>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/images/color-profile-munsell-adobe-to-srgb-webgl.html b/third_party/blink/web_tests/images/color-profile-munsell-adobe-to-srgb-webgl.html
new file mode 100644
index 0000000..ec0c3ae
--- /dev/null
+++ b/third_party/blink/web_tests/images/color-profile-munsell-adobe-to-srgb-webgl.html
@@ -0,0 +1,143 @@
+<!doctype html>
+<html>
+<script src="../resources/run-after-layout-and-paint.js"></script>
+<script src="resources/color-checker-munsell-chart.js"></script>
+
+<style>
+  div { position: relative; top: -556px; left: 470px }
+  a:hover { background-color: #ccc }
+  a:link { text-decoration: none }
+</style>
+
+<!-- Color accuracy test case: you should not rebaseline this test. -->
+
+<body style="overflow: hidden">
+ <img><p><canvas></canvas></p>
+ <div>
+  <pre id="log" style="font-size: 9pt"></pre>
+  <a href="http://www.brucelindbloom.com/index.html?ColorCheckerRGB.html">
+   <pre>* Munsell Cyan is outside 255 sRGB gamut<pre></a>
+ <div>
+</body>
+
+<script id="vs" type="vertex-shader">
+  attribute vec2 aVertex;
+  attribute vec2 aTex;
+  varying vec2 vTex;
+  void main() {
+    gl_Position = vec4(aVertex, 0.0, 1.0);
+    vTex = aTex;
+  }
+</script>
+
+<script id="fs" type="fragment-shader">
+  precision mediump float;
+  uniform sampler2D uTexture;
+  varying vec2 vTex;
+  void main() {
+    gl_FragColor = texture2D(uTexture, vTex);
+  }
+</script>
+
+<script>
+/*
+ * Overrides the color-checker-munsell-chart.js drawImageToCanvas() function
+ * to render the test image on a webgl <canvas>, instead of a 2d <canvas>.
+ *
+ * Calls chartColorTransform(canvas) to GPU readback the rendered test image
+ * colors and tabulate them in the Munsell chart test result.
+ */
+function drawImageToCanvas() {
+  var image = document.querySelector('img');
+  if (!image.src || !image.src.length)
+    throw new Error('FAIL: test image source is not defined');
+
+  var canvas = document.querySelector('canvas');
+  canvas.width = image.width;
+  canvas.height = image.height;
+
+  var enablePixelReadback = { preserveDrawingBuffer: true };
+  var gl = canvas.getContext('webgl', enablePixelReadback);
+  if (!gl)
+    throw new Error('FAIL: could not create webgl canvas context');
+
+  var colorConvert = gl.BROWSER_DEFAULT_WEBGL;
+  gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, colorConvert);
+  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
+
+  gl.viewport(0, 0, canvas.width, canvas.height);
+  gl.clearColor(0, 0, 0, 1);
+  gl.clear(gl.COLOR_BUFFER_BIT);
+
+  if (gl.getError() != gl.NONE)
+    throw new Error('FAIL: webgl canvas context setup failed');
+
+  function createShader(id, type) {
+    var shader = gl.createShader(type);
+    gl.shaderSource(shader, document.getElementById(id).text);
+    gl.compileShader(shader);
+    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS))
+      throw new Error('FAIL: webgl shader ' + id + ' compilation failed');
+    return shader;
+  }
+
+  var program = gl.createProgram();
+  gl.attachShader(program, createShader('vs', gl.VERTEX_SHADER));
+  gl.attachShader(program, createShader('fs', gl.FRAGMENT_SHADER));
+  gl.linkProgram(program);
+  if (!gl.getProgramParameter(program, gl.LINK_STATUS))
+    throw new Error('FAIL: webgl shader program linking failed');
+  gl.useProgram(program);
+
+  var texture = gl.createTexture();
+  gl.activeTexture(gl.TEXTURE0);
+  gl.bindTexture(gl.TEXTURE_2D, texture);
+  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
+  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
+  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
+  if (gl.getError() != gl.NONE)
+    throw new Error('FAIL: creating webgl image texture failed');
+
+  function createBuffer(data) {
+    var buffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+    gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
+    return buffer;
+  }
+
+  var vertexCoords = new Float32Array([-1, 1, -1, -1, 1, -1, 1, 1]);
+  var vertexBuffer = createBuffer(vertexCoords);
+  var location = gl.getAttribLocation(program, 'aVertex');
+  gl.enableVertexAttribArray(location);
+  gl.vertexAttribPointer(location, 2, gl.FLOAT, false, 0, 0);
+  if (gl.getError() != gl.NONE)
+    throw new Error('FAIL: webgl vertex-coord setup failed');
+
+  var texCoords = new Float32Array([0, 1, 0, 0, 1, 0, 1, 1]);
+  var texBuffer = createBuffer(texCoords);
+  var location = gl.getAttribLocation(program, 'aTex');
+  gl.enableVertexAttribArray(location);
+  gl.vertexAttribPointer(location, 2, gl.FLOAT, false, 0, 0);
+  if (gl.getError() != gl.NONE)
+    throw new Error('FAIL: webgl tex-coord setup failed');
+
+  gl.drawArrays(gl.TRIANGLE_FAN, 0, 4);  // Render the image.
+
+  // Tabulate the rendered image colors in the Munsell chart test result.
+  runAfterLayoutAndPaint(function() {
+    chartColorTransform(canvas);
+  });
+};
+
+if (window.testRunner) {
+  testRunner.dumpAsTextWithPixelResults();
+  testRunner.waitUntilDone();
+}
+
+window.onload = function() {
+  testImageColors('resources/color-checker-adobe-color-profile.png');
+};
+</script>
+</html>
diff --git a/third_party/blink/web_tests/images/resources/color-checker-munsell-chart.js b/third_party/blink/web_tests/images/resources/color-checker-munsell-chart.js
index 951389b..2021b5ca 100644
--- a/third_party/blink/web_tests/images/resources/color-checker-munsell-chart.js
+++ b/third_party/blink/web_tests/images/resources/color-checker-munsell-chart.js
@@ -19,20 +19,50 @@
   canvas.width = image.width;
   canvas.height = image.height;
 
-  canvas.getContext('2d').drawImage(image, 0, 0, canvas.width, canvas.height);
-  chartColorTransform(canvas);
+  var context2D = canvas.getContext('2d');
+  if (context2D) {
+    context2D.drawImage(image, 0, 0, canvas.width, canvas.height);
+    chartColorTransform(canvas);
+    return;
+  }
+
+  console.error('FAIL: 2d <canvas> is required for this test');
+  if (window.testRunner)
+    testRunner.notifyDone();
+}
+
+function getCanvasPixelDataAtPoint(canvas, x, y) {
+  var context2D = canvas.getContext('2d');
+  if (context2D)
+    return context2D.getImageData(x, y, 1, 1).data;
+
+  var gl = canvas.getContext('webgl');
+  if (gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL))
+    y = canvas.height - y;
+  var data = new Uint8Array(4);
+  gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, data);
+  return data;
 }
 
 function getCanvasColor(canvas, i) {
+  /*
+   * Convert the Munsell color index i to a point x,y in the chart image.
+   */
   var x = 40 + (i % 6) * (canvas.width / 6);
   var y = 40 + Math.floor(i / 6) * (canvas.height / 4);
+
+  /*
+   * Read the RGBA pixel from the canvas at the point x,y then return the
+   * RGB values (the Munsell chart test image has no alpha channel).
+   */
   try {
-    var data = canvas.getContext('2d').getImageData(x, y, 1, 1).data;
+    var data = getCanvasPixelDataAtPoint(canvas, x, y);
     if (data[3] == 255)
       return { rgb: [data[0], data[1], data[2]] };
+    console.error('FAIL: invalid canvas pixel alpha channel: ' + data[3]);
     return { rgb: [0, 0, 0] };
   } catch (error) {
-    console.error(error);
+    console.error('FAIL: ' + error);  // security error: tainted <canvas>
     return { rgb: [255, 255, 255] };
   }
 }
@@ -92,8 +122,8 @@
 
 function chartColorTransform(canvas) {
   /*
-   * Add header over table of color names, acutal and expected values, and the
-   * per color error (Euclidean distance).
+   * Add header over table of color names, actual and expected values, and the
+   * per color error dE (Euclidean distance).
    */
   log(pad('Color') + pad('Actual') + pad('Expected') + 'dE');
   drawRule();
@@ -101,7 +131,8 @@
   var totalSquaredError = 0.0;
 
   /*
-   * Report per color error dE, by comparing with the expected Munsell colors.
+   * Report per color error dE, by comparing with the expected Munsell colors,
+   * and accumulate dE * dE in the totalSquaredError.
    */
   for (var i = 0; i < 24;) {
     var expected = getMunsellColor(i);
diff --git a/third_party/blink/web_tests/nfc/resources/nfc-helpers.js b/third_party/blink/web_tests/nfc/resources/nfc-helpers.js
index 4d90760..c9cdc12 100644
--- a/third_party/blink/web_tests/nfc/resources/nfc-helpers.js
+++ b/third_party/blink/web_tests/nfc/resources/nfc-helpers.js
@@ -296,7 +296,6 @@
     this.push_timeout_id_ = null;
     this.push_completed_ = true;
     this.client_ = null;
-    this.watch_id_ = 0;
     this.watchers_ = [];
   }
 
@@ -347,17 +346,15 @@
     this.client_ = client;
   }
 
-  async watch(options) {
+  async watch(options, id) {
+    assert_true(id > 0);
     let error = this.isReady();
     if (error) {
-      error.id = 0;
       return error;
     }
 
-    let retVal = createNFCError(null);
-    retVal.id = ++this.watch_id_;
-    this.watchers_.push({id: this.watch_id_, options: options});
-    return retVal;
+    this.watchers_.push({id: id, options: options});
+    return createNFCError(null);
   }
 
   async cancelWatch(id) {
@@ -411,7 +408,6 @@
   reset() {
     this.hw_status_ = NFCHWStatus.ENABLED;
     this.push_completed_ = true;
-    this.watch_id_ = 0;
     this.watchers_ = [];
     this.cancelPendingPushOperation();
   }
diff --git a/third_party/blink/web_tests/nfc/watch.html b/third_party/blink/web_tests/nfc/watch.html
index f2d42509..74b1ee8 100644
--- a/third_party/blink/web_tests/nfc/watch.html
+++ b/third_party/blink/web_tests/nfc/watch.html
@@ -14,12 +14,12 @@
 
 nfc_test(() => {
   mockNFC.setHWStatus(NFCHWStatus.DISABLED);
-  return assertRejectsWithError(navigator.nfc.watch(noop), 'NotSupportedError');
+  return assertRejectsWithError(navigator.nfc.watch(noop), 'NotReadableError');
 }, 'Test that nfc.watch fails if NFC hardware is disabled.')
 
 nfc_test(() => {
   mockNFC.setHWStatus(NFCHWStatus.NOT_SUPPORTED);
-  return assertRejectsWithError(navigator.nfc.watch(noop), 'NotSupportedError');
+  return assertRejectsWithError(navigator.nfc.watch(noop), 'NotReadableError');
 }, 'Test that nfc.watch fails if NFC hardware is not supported.')
 
 nfc_test(async () => {
diff --git a/third_party/blink/web_tests/platform/linux/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/linux/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..f3ddf0ce
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..75be482
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..0fb97ba
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..4b2d131
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.10/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index b335f63..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.10/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..176bbad
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..15fd22a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..d8e8e41
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..856ac9c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.11/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index b335f63..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.11/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..60517cf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..4de3841
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.11/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.11/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index 243b371f..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-PASS scrollIntoView({"block":"start","inline":"start"})
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 200
-PASS scrollIntoView({"block":"center","inline":"center"})
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 157
-PASS scrollIntoView({"block":"end","inline":"end"})
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index b335f63..0000000
--- a/third_party/blink/web_tests/platform/mac-mac10.12/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..9c29df10
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..4de3841
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/platform/mac-retina/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/mac-retina/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index 243b371f..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-PASS scrollIntoView({"block":"start","inline":"start"})
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 200
-PASS scrollIntoView({"block":"center","inline":"center"})
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 157
-PASS scrollIntoView({"block":"end","inline":"end"})
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-retina/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/mac-retina/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index b335f63..0000000
--- a/third_party/blink/web_tests/platform/mac-retina/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..23a92111
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac-retina/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..4de3841
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-retina/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/mac-retina/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-retina/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..555ac41
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..8dd86b8
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..23a92111
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..f2a638288
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..4de3841
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index 243b371f..0000000
--- a/third_party/blink/web_tests/platform/win/external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-PASS scrollIntoView({"block":"start","inline":"start"})
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected 200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 200
-PASS scrollIntoView({"block":"center","inline":"center"})
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected 157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected 115 +/- 0.5 but got 157
-PASS scrollIntoView({"block":"end","inline":"end"})
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index b335f63..0000000
--- a/third_party/blink/web_tests/platform/win/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/win/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/win/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..0c08c23a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..e44f63c9
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..741546f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/platform/win7/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt b/third_party/blink/web_tests/platform/win7/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
deleted file mode 100644
index b335f63..0000000
--- a/third_party/blink/web_tests/platform/win7/external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction-expected.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-This is a testharness.js-based test.
-FAIL scrollIntoView({"block":"start","inline":"start"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"start","inline":"center"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"start","inline":"end"}) assert_approx_equals: scrollX expected -200 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"center","inline":"start"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"center","inline":"center"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"center","inline":"end"}) assert_approx_equals: scrollX expected -157.5 +/- 0.5 but got 115
-FAIL scrollIntoView({"block":"end","inline":"start"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 200
-FAIL scrollIntoView({"block":"end","inline":"center"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 157
-FAIL scrollIntoView({"block":"end","inline":"end"}) assert_approx_equals: scrollX expected -115 +/- 0.5 but got 115
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..48752054
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
new file mode 100644
index 0000000..741546f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
new file mode 100644
index 0000000..6f8abc6
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl-expected.txt
@@ -0,0 +1,46 @@
+Color         Actual        Expected      dE
+--------------------------------------------
+Dark Skin     115,80,64     115,80,64     0
+Light Skin    195,150,130   195,151,130   1
+Blue Sky      94,123,157    94,123,156    1
+Foliage       89,108,65     88,108,65     1
+Blue Flower   130,129,177   130,129,177   0
+Bluish Green  100,190,171   100,190,171   0
+--------------------------------------------
+Orange        216,122,37    217,122,37    1
+Purplish Blue 72,91,166     72,91,165     1
+Moderate Red  194,84,97     194,84,98     1
+Purple        91,60,107     91,59,107     1
+Yellow Green  160,187,60    160,188,60    1
+Orange Yellow 230,164,42    230,163,42    1
+--------------------------------------------
+Blue          47,60,153     46,60,153     1
+Green         70,149,69     71,150,69     1
+Red           177,44,56     177,44,56     0
+Yellow        239,200,27    238,200,27    1
+Magenta       187,82,147    187,82,148    1
+Cyan (*)      0,135,166     0,135,166     0
+--------------------------------------------
+White         243,241,236   243,242,237   1
+Neutral 8     201,201,200   201,201,201   1
+Neutral 6.5   160,162,160   161,161,161   2
+Neutral 5     123,122,121   122,122,121   1
+Neutral 3.5   83,83,83      83,83,83      0
+Black         50,50,50      50,49,50      1
+--------------------------------------------
+
+Result: total RMS color error: 0.94
+
+* Munsell Cyan is outside 255 sRGB gamut
+
+ 
+
+
+
+
+
+
+
+
+
+
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-1.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-1.svg
deleted file mode 100644
index d51a6db..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-1.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" by="50" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-2.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-2.svg
deleted file mode 100644
index d7c779a..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-2.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="50" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-3.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-3.svg
deleted file mode 100644
index 46256a2..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-3.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s, then reset to 10. -->
-<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" by="90" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-4.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-4.svg
deleted file mode 100644
index 920aab0..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-4.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s, then reset to 10. -->
-<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="90" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-6.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-6.svg
deleted file mode 100644
index b15e7d9a..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-6.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="90" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-7.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-7.svg
deleted file mode 100644
index 048c986b..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-7.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="calc(5%)" begin="0s" dur="4s"/>
-        <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="calc(11.25%)" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-8.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-8.svg
deleted file mode 100644
index f1a69c44..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-by-8.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="800">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 10 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="remove" by="calc(4% + 8)" begin="0s" dur="4s"/>
-        <animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" by="calc(10% + 10)" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-1.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-1.svg
deleted file mode 100644
index 7683e776..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-1.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 50 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" from="0" by="50" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-2.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-2.svg
deleted file mode 100644
index 7de3c12..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-2.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 0 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" from="0" by="100" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-3.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-3.svg
deleted file mode 100644
index a63c25b..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-3.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 75 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="sum" fill="freeze" from="25" by="25" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-4.svg b/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-4.svg
deleted file mode 100644
index 68a87a7..0000000
--- a/third_party/blink/web_tests/svg/animations/resources/svglength-additive-from-by-4.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
-<!-- an1: Change width from 10 to 50 in 4s -->
-<!-- an2: Change width from 75 to 100 in 4s starting at 5s -->
-<rect width="10" height="100" fill="green">
-    <animate id="an1" attributeType="XML" attributeName="width" fill="freeze" from="10" by="40" begin="0s" dur="4s"/>
-	<animate id="an2" attributeType="XML" attributeName="width" additive="replace" fill="freeze" from="75" by="25" begin="5s" dur="4s"/>
-</rect>
-
-</svg>
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-3.js b/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-3.js
deleted file mode 100644
index 5ce34777..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-3.js
+++ /dev/null
@@ -1,50 +0,0 @@
-description("Test SVGLengthAdjustType enumeration animations");
-createSVGTestCase();
-
-// Initiate the test by clicking at (1, 50) - the 'S'.
-window.clickX = 1;
-
-// Setup test document
-var text = createSVGElement("text");
-text.setAttribute("id", "text");
-text.setAttribute("y", "50");
-text.setAttribute("textLength", "200");
-text.textContent = "Stretched text";
-text.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(text);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "lengthAdjust");
-animate.setAttribute("begin", "text.click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "spacing");
-animate.setAttribute("to", "spacingAndGlyphs");
-animate.setAttribute("fill", "freeze");
-text.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.lengthAdjust.animVal", "SVGTextContentElement.LENGTHADJUST_SPACING");
-    shouldBe("text.lengthAdjust.baseVal", "SVGTextContentElement.LENGTHADJUST_SPACING");
-}
-
-function sample2() {
-    shouldBe("text.lengthAdjust.animVal", "SVGTextContentElement.LENGTHADJUST_SPACINGANDGLYPHS");
-    shouldBe("text.lengthAdjust.baseVal", "SVGTextContentElement.LENGTHADJUST_SPACING");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 1.999, sample1],
-        ["animation", 2.001, sample2],
-        ["animation", 3.999, sample2],
-        ["animation", 4.001, sample2]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-6.js b/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-6.js
deleted file mode 100644
index 7386e3ede..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-6.js
+++ /dev/null
@@ -1,77 +0,0 @@
-description("Test ColorMatrixType enumeration animations");
-createSVGTestCase();
-
-// Setup test document
-var defs = createSVGElement("defs");
-rootSVGElement.appendChild(defs);
-
-var colorMatrix = createSVGElement("feColorMatrix");
-colorMatrix.setAttribute("in", "SourceGraphic");
-colorMatrix.setAttribute("type", "matrix");
-
-var filter = createSVGElement("filter");
-filter.setAttribute("id", "filter");
-filter.setAttribute("filterUnits", "userSpaceOnUse");
-filter.setAttribute("x", "0");
-filter.setAttribute("y", "0");
-filter.setAttribute("width", "700");
-filter.setAttribute("height", "200");
-filter.appendChild(colorMatrix);
-defs.appendChild(filter);
-
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "#408067");
-rect.setAttribute("filter", "url(#filter)");
-rect.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(rect);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "type");
-animate.setAttribute("begin", "rect.click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("values", "matrix;saturate;hueRotate;luminanceToAlpha");
-colorMatrix.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("colorMatrix.type.animVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX");
-    shouldBe("colorMatrix.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX");
-}
-
-function sample2() {
-    shouldBe("colorMatrix.type.animVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE");
-    shouldBe("colorMatrix.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX");
-}
-
-function sample3() {
-    shouldBe("colorMatrix.type.animVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE");
-    shouldBe("colorMatrix.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX");
-}
-
-function sample4() {
-    shouldBe("colorMatrix.type.animVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA");
-    shouldBe("colorMatrix.type.baseVal", "SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 0.999, sample1],
-        ["animation", 1.001, sample2],
-        ["animation", 1.999, sample2],
-        ["animation", 2.001, sample3],
-        ["animation", 2.999, sample3],
-        ["animation", 3.001, sample4],
-        ["animation", 3.999, sample4],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-7.js b/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-7.js
deleted file mode 100644
index a930f81e..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-7.js
+++ /dev/null
@@ -1,82 +0,0 @@
-description("Test SVGStitchOptions/TurbulenceType enumeration animations");
-createSVGTestCase();
-
-// Setup test document
-var defs = createSVGElement("defs");
-rootSVGElement.appendChild(defs);
-
-var filter = createSVGElement("filter");
-filter.setAttribute("id", "filter");
-filter.setAttribute("filterUnits", "userSpaceOnUse");
-filter.setAttribute("x", "0");
-filter.setAttribute("y", "0");
-filter.setAttribute("width", "700");
-filter.setAttribute("height", "200");
-defs.appendChild(filter);
-
-var turbulence = createSVGElement("feTurbulence");
-turbulence.setAttribute("in", "foo");
-turbulence.setAttribute("baseFrequency", "0.05");
-turbulence.setAttribute("numOctaves", "3");
-turbulence.setAttribute("seed", "5");
-turbulence.setAttribute("stitchTiles", "stitch");
-turbulence.setAttribute("type", "fractalNoise");
-filter.appendChild(turbulence);
-
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "#408067");
-rect.setAttribute("filter", "url(#filter)");
-rect.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(rect);
-
-var animate1 = createSVGElement("animate");
-animate1.setAttribute("id", "animation");
-animate1.setAttribute("attributeName", "type");
-animate1.setAttribute("begin", "rect.click");
-animate1.setAttribute("dur", "4s");
-animate1.setAttribute("from", "fractalNoise");
-animate1.setAttribute("to", "turbulence");
-turbulence.appendChild(animate1);
-
-var animate2 = createSVGElement("animate");
-animate2.setAttribute("attributeName", "stitchTiles");
-animate2.setAttribute("begin", "rect.click");
-animate2.setAttribute("dur", "4s");
-animate2.setAttribute("from", "stitch");
-animate2.setAttribute("to", "noStitch");
-turbulence.appendChild(animate2);
-
-// Setup animation test
-function sample1() {
-    shouldBe("turbulence.type.animVal", "SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE");
-    shouldBe("turbulence.type.baseVal", "SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE");
-
-    shouldBe("turbulence.stitchTiles.animVal", "SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH");
-    shouldBe("turbulence.stitchTiles.baseVal", "SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH");
-}
-
-function sample2() {
-    shouldBe("turbulence.type.animVal", "SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_TURBULENCE");
-    shouldBe("turbulence.type.baseVal", "SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE");
-
-    shouldBe("turbulence.stitchTiles.animVal", "SVGFETurbulenceElement.SVG_STITCHTYPE_NOSTITCH");
-    shouldBe("turbulence.stitchTiles.baseVal", "SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 1.999, sample1],
-        ["animation", 2.001, sample2],
-        ["animation", 3.999, sample2],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-8.js b/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-8.js
deleted file mode 100644
index 256daad7..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-8.js
+++ /dev/null
@@ -1,102 +0,0 @@
-description("Test ComponentTransferType enumeration animations");
-createSVGTestCase();
-
-// Setup test document
-var feRFunc = createSVGElement("feFuncR");
-feRFunc.setAttribute("type", "identity");
-feRFunc.setAttribute("amplitude", "10");
-
-var feGFunc = createSVGElement("feFuncG");
-feGFunc.setAttribute("type", "identity");
-feGFunc.setAttribute("amplitude", "10");
-
-var feBFunc = createSVGElement("feFuncB");
-feBFunc.setAttribute("type", "identity");
-feBFunc.setAttribute("amplitude", "110");
-
-var feAFunc = createSVGElement("feFuncA");
-feAFunc.setAttribute("type", "identity");
-feAFunc.setAttribute("amplitude", "110");
-
-var feComponentTransfer = createSVGElement("feComponentTransfer");
-feComponentTransfer.appendChild(feRFunc);
-feComponentTransfer.appendChild(feGFunc);
-feComponentTransfer.appendChild(feBFunc);
-feComponentTransfer.appendChild(feAFunc);
-
-var filter = createSVGElement("filter");
-filter.setAttribute("id", "filter");
-filter.setAttribute("filterUnits", "objectBoundingBox");
-filter.setAttribute("x", "0%");
-filter.setAttribute("y", "0%");
-filter.setAttribute("width", "100%");
-filter.setAttribute("height", "100%");
-filter.appendChild(feComponentTransfer);
-
-var defs = createSVGElement("defs");
-defs.appendChild(filter);
-rootSVGElement.appendChild(defs);
-
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "#408067");
-rect.setAttribute("filter", "url(#filter)");
-rect.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(rect);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "type");
-animate.setAttribute("begin", "rect.click");
-animate.setAttribute("dur", "5s");
-animate.setAttribute("values", "identity;table;discrete;linear;gamma");
-feRFunc.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("feRFunc.type.animVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY");
-    shouldBe("feRFunc.type.baseVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY");
-}
-
-function sample2() {
-    shouldBe("feRFunc.type.animVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_TABLE");
-    shouldBe("feRFunc.type.baseVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY");
-}
-
-function sample3() {
-    shouldBe("feRFunc.type.animVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE");
-    shouldBe("feRFunc.type.baseVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY");
-}
-
-function sample4() {
-    shouldBe("feRFunc.type.animVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_LINEAR");
-    shouldBe("feRFunc.type.baseVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY");
-}
-
-function sample5() {
-    shouldBe("feRFunc.type.animVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA");
-    shouldBe("feRFunc.type.baseVal", "SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 0.999, sample1],
-        ["animation", 1.001, sample2],
-        ["animation", 1.999, sample2],
-        ["animation", 2.001, sample3],
-        ["animation", 2.999, sample3],
-        ["animation", 3.001, sample4],
-        ["animation", 3.999, sample4],
-        ["animation", 4.001, sample5],
-        ["animation", 4.999, sample5],
-        ["animation", 5.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-9.js b/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-9.js
deleted file mode 100644
index 5b990e1..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgenum-animation-9.js
+++ /dev/null
@@ -1,71 +0,0 @@
-description("Test SVGTextPathSpacingType/SVGTextPathMethodType enumeration animations");
-createSVGTestCase();
-
-// Setup test document
-var path = createSVGElement("path");
-path.setAttribute("id", "path");
-path.setAttribute("d", "M 50 50 L 200 50");
-rootSVGElement.appendChild(path);
-
-var text = createSVGElement("text");
-text.setAttribute("id", "text");
-text.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(text);
-
-var textPath = createSVGElement("textPath");
-textPath.setAttributeNS(xlinkNS, "xlink:href", "#path");
-textPath.setAttribute("spacing", "auto");
-textPath.setAttribute("method", "align");
-textPath.textContent = "test";
-text.appendChild(textPath);
-
-var animate1 = createSVGElement("animate");
-animate1.setAttribute("id", "animation");
-animate1.setAttribute("attributeName", "spacing");
-animate1.setAttribute("begin", "text.click");
-animate1.setAttribute("dur", "4s");
-animate1.setAttribute("from", "auto");
-animate1.setAttribute("to", "exact");
-animate1.setAttribute("fill", "freeze");
-textPath.appendChild(animate1);
-
-var animate2 = createSVGElement("animate");
-animate2.setAttribute("attributeName", "method");
-animate2.setAttribute("begin", "text.click");
-animate2.setAttribute("dur", "4s");
-animate2.setAttribute("from", "align");
-animate2.setAttribute("to", "stretch");
-animate2.setAttribute("fill", "freeze");
-textPath.appendChild(animate2);
-
-// Setup animation test
-function sample1() {
-    shouldBe("textPath.method.animVal", "SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN");
-    shouldBe("textPath.method.baseVal", "SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN");
-
-    shouldBe("textPath.spacing.animVal", "SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO");
-    shouldBe("textPath.spacing.baseVal", "SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO");
-}
-
-function sample2() {
-    shouldBe("textPath.method.animVal", "SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH");
-    shouldBe("textPath.method.baseVal", "SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN");
-
-    shouldBe("textPath.spacing.animVal", "SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT");
-    shouldBe("textPath.spacing.baseVal", "SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 1.999, sample1],
-        ["animation", 2.001, sample2],
-        ["animation", 3.999, sample2],
-        ["animation", 4.001, sample2]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svginteger-animation-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svginteger-animation-2.js
deleted file mode 100644
index dc5cab4..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svginteger-animation-2.js
+++ /dev/null
@@ -1,70 +0,0 @@
-description("Test animation of SVGInteger.");
-createSVGTestCase();
-
-// Setup test document
-var defs = createSVGElement("defs");
-rootSVGElement.appendChild(defs);
-
-var filter = createSVGElement("filter");
-filter.setAttribute("id", "filter");
-defs.appendChild(filter);
-
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("width", "200");
-rect.setAttribute("height", "200");
-rect.setAttribute("fill", "green");
-rect.setAttribute("filter", "url(#filter)");
-rect.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(rect);
-
-var feConvolveMatrix = createSVGElement("feConvolveMatrix");
-feConvolveMatrix.setAttribute("id", "feConvlveMatrix");
-feConvolveMatrix.setAttribute("order", "3 1");
-feConvolveMatrix.setAttribute("kernelMatrix", "0 0 1");
-filter.appendChild(feConvolveMatrix);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "order");
-animate.setAttribute("begin", "rect.click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "3 1");
-animate.setAttribute("to", "1 3");
-feConvlveMatrix.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("feConvolveMatrix.orderX.animVal", "3");
-    shouldBeCloseEnough("feConvolveMatrix.orderY.animVal", "1");
-    shouldBe("feConvolveMatrix.orderX.baseVal", "3");
-    shouldBe("feConvolveMatrix.orderY.baseVal", "1");
-}
-
-function sample2() {
-    shouldBeCloseEnough("feConvolveMatrix.orderX.animVal", "2");
-    shouldBeCloseEnough("feConvolveMatrix.orderY.animVal", "2");
-    shouldBe("feConvolveMatrix.orderX.baseVal", "3");
-    shouldBe("feConvolveMatrix.orderY.baseVal", "1");
-}
-
-function sample3() {
-    shouldBeCloseEnough("feConvolveMatrix.orderX.animVal", "1");
-    shouldBeCloseEnough("feConvolveMatrix.orderY.animVal", "3");
-    shouldBe("feConvolveMatrix.orderX.baseVal", "3");
-    shouldBe("feConvolveMatrix.orderY.baseVal", "1");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-1.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-1.js
deleted file mode 100644
index 840d88e..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-1.js
+++ /dev/null
@@ -1,47 +0,0 @@
-description("This tests by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-by-1.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "75");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,  sample1],
-        ["an1", 2.0,  sample2],
-        ["an1", 4.0,  sample3],
-        ["an1", 7.0,  sample4],
-        ["an1", 9.0,  sample5],
-        ["an1", 60.0, sample5]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-2.js
deleted file mode 100644
index 2bd9a89..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-2.js
+++ /dev/null
@@ -1,47 +0,0 @@
-description("This tests by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-by-2.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "75");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,  sample1],
-        ["an1", 2.0,  sample2],
-        ["an1", 4.0,  sample3],
-        ["an1", 7.0,  sample4],
-        ["an1", 9.0,  sample5],
-        ["an1", 60.0, sample5]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-3.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-3.js
deleted file mode 100644
index bf0be9d2..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-3.js
+++ /dev/null
@@ -1,53 +0,0 @@
-description("This tests by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-by-3.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "55");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 3.999, sample3],
-        ["an1", 4.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-4.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-4.js
deleted file mode 100644
index 6c098c75..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-4.js
+++ /dev/null
@@ -1,53 +0,0 @@
-description("This tests by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-by-4.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "55");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 3.999, sample3],
-        ["an1", 4.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-6.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-6.js
deleted file mode 100644
index 176c3b2..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-6.js
+++ /dev/null
@@ -1,53 +0,0 @@
-description("This tests by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-by-6.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "55");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 3.999, sample3],
-        ["an1", 4.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-7.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-7.js
deleted file mode 100644
index ee7e4ad0..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-7.js
+++ /dev/null
@@ -1,53 +0,0 @@
-description("This tests by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-by-7.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "55");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 3.999, sample3],
-        ["an1", 4.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-8.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-8.js
deleted file mode 100644
index d422070..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-by-8.js
+++ /dev/null
@@ -1,53 +0,0 @@
-description("This tests by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-by-8.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "55");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 3.999, sample3],
-        ["an1", 4.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-1.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-1.js
deleted file mode 100644
index eee366e..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-1.js
+++ /dev/null
@@ -1,47 +0,0 @@
-description("This tests from-by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-from-by-1.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "75");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,  sample1],
-        ["an1", 2.0,  sample2],
-        ["an1", 4.0,  sample3],
-        ["an1", 7.0,  sample4],
-        ["an1", 9.0,  sample5],
-        ["an1", 60.0, sample5]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-2.js
deleted file mode 100644
index 87ff622..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-2.js
+++ /dev/null
@@ -1,54 +0,0 @@
-description("This tests from-by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-from-by-2.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "0");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 4.0,   sample3],
-        ["an1", 4.999, sample3],
-        ["an1", 5.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-3.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-3.js
deleted file mode 100644
index e713db4..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-3.js
+++ /dev/null
@@ -1,54 +0,0 @@
-description("This tests from-by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-from-by-3.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "75");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "87.5");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 4.0,   sample3],
-        ["an1", 4.999, sample3],
-        ["an1", 5.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-4.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-4.js
deleted file mode 100644
index 20d3f6d8..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-additive-from-by-4.js
+++ /dev/null
@@ -1,54 +0,0 @@
-description("This tests from-by-animations adding to previous underlying values");
-embedSVGTestCase("resources/svglength-additive-from-by-4.svg");
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("rect.width.animVal.value", "10");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "30");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "50");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "75");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "87.5");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function sample6() {
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "10");
-}
-
-function executeTest() {
-    rect = rootSVGElement.ownerDocument.getElementsByTagName("rect")[0];
-
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["an1", 0.0,   sample1],
-        ["an1", 2.0,   sample2],
-        ["an1", 4.0,   sample3],
-        ["an1", 4.999, sample3],
-        ["an1", 5.001, sample4],
-        ["an1", 7.0,   sample5],
-        ["an1", 9.0,   sample6],
-        ["an1", 60.0,  sample6]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.animationStartsImmediately = true;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeHeight.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeHeight.js
deleted file mode 100644
index 35cee16..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeHeight.js
+++ /dev/null
@@ -1,57 +0,0 @@
-description("Test SVGLength animation on LengthModeHeight.");
-createSVGTestCase();
-
-// Setup test document
-rootSVGElement.setAttribute("width", "600");
-rootSVGElement.setAttribute("height", "400");
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("font-size", "10px");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "height");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100");
-animate.setAttribute("to", "50%");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.height.animVal.value", "100");
-    shouldBe("rect.height.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.height.animVal.value", "150");
-    shouldBe("rect.height.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.height.animVal.value", "200");
-    shouldBe("rect.height.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeOther.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeOther.js
deleted file mode 100644
index debcd2a..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeOther.js
+++ /dev/null
@@ -1,56 +0,0 @@
-description("Test SVGLength animation on LengthModeOther.");
-createSVGTestCase();
-
-// Setup test document
-rootSVGElement.setAttribute("width", "600");
-rootSVGElement.setAttribute("height", "400");
-
-// Setup test document
-var circle = createSVGElement("circle");
-circle.setAttribute("id", "circle");
-circle.setAttribute("cx", "50");
-circle.setAttribute("cy", "50");
-circle.setAttribute("r", "10");
-circle.setAttribute("fill", "green");
-circle.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "r");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "10");
-animate.setAttribute("to", "50%");
-circle.appendChild(animate);
-rootSVGElement.appendChild(circle);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("circle.r.animVal.value", "10");
-    shouldBe("circle.r.baseVal.value", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("circle.r.animVal.value", "132.5");
-    shouldBe("circle.r.baseVal.value", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("circle.r.animVal.value", "254.9");
-    shouldBe("circle.r.baseVal.value", "10");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeWidth.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeWidth.js
deleted file mode 100644
index 134a4e6e..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-LengthModeWidth.js
+++ /dev/null
@@ -1,57 +0,0 @@
-description("Test SVGLength animation on LengthModeWidth.");
-createSVGTestCase();
-
-// Setup test document
-rootSVGElement.setAttribute("width", "600");
-rootSVGElement.setAttribute("height", "400");
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("font-size", "10px");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100");
-animate.setAttribute("to", "50%");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "200");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "300");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-1.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-1.js
deleted file mode 100644
index c8298a74..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-1.js
+++ /dev/null
@@ -1,47 +0,0 @@
-description("Test SVGLength animation with invalid value: No spaces between number and unit.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100   px");
-animate.setAttribute("to", "200   px");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "0");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample2],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-2.js
deleted file mode 100644
index 8f041bb..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-2.js
+++ /dev/null
@@ -1,47 +0,0 @@
-description("Test SVGLength animation with invalid value: No spaces before value.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "   100pxERROR");
-animate.setAttribute("to", "   200pxERROR");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "0");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample2],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-3.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-3.js
deleted file mode 100644
index cd20f69..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-invalid-value-3.js
+++ /dev/null
@@ -1,47 +0,0 @@
-description("Test SVGLength animation with invalid value: No spaces after number and unit.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100px   ERROR");
-animate.setAttribute("to", "200px   ERROR");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "0");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample2],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-number-to-number.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-number-to-number.js
deleted file mode 100644
index 988afb2..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-number-to-number.js
+++ /dev/null
@@ -1,52 +0,0 @@
-description("Test SVGLength animation from px to cm.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100");
-animate.setAttribute("to", "200");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "150");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "200");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-cm.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-cm.js
deleted file mode 100644
index 74751fc..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-cm.js
+++ /dev/null
@@ -1,52 +0,0 @@
-description("Test SVGLength animation from px to cm.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100px");
-animate.setAttribute("to", "5cm");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "144.5");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "189");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-ems.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-ems.js
deleted file mode 100644
index 50e0c2c..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-ems.js
+++ /dev/null
@@ -1,53 +0,0 @@
-description("Test SVGLength animation from px to ems.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("font-size", "10px");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100px");
-animate.setAttribute("to", "20em");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "150");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "200");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-in.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-in.js
deleted file mode 100644
index 61faae3..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-in.js
+++ /dev/null
@@ -1,52 +0,0 @@
-description("Test SVGLength animation from px to inch.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100px");
-animate.setAttribute("to", "2.5in");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "170");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "240");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-number.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-number.js
deleted file mode 100644
index 5177556..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-number.js
+++ /dev/null
@@ -1,52 +0,0 @@
-description("Test SVGLength animation from px to number.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100px");
-animate.setAttribute("to", "200");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "150");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "200");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-pc.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-pc.js
deleted file mode 100644
index c7cf17c..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-pc.js
+++ /dev/null
@@ -1,52 +0,0 @@
-description("Test SVGLength animation from px to pc.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100px");
-animate.setAttribute("to", "15pc");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "170");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "240");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-pt.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-pt.js
deleted file mode 100644
index 41d75235..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-pt.js
+++ /dev/null
@@ -1,52 +0,0 @@
-description("Test SVGLength animation from px to cm.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100pt");
-animate.setAttribute("to", "5cm");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "161.2");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "189");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-px.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-px.js
deleted file mode 100644
index f8a00ea..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-px-to-px.js
+++ /dev/null
@@ -1,52 +0,0 @@
-description("Test SVGLength animation from px to cm.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100px");
-animate.setAttribute("to", "200px");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "150");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "200");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-unitType.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-unitType.js
deleted file mode 100644
index f0f7dbf..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-unitType.js
+++ /dev/null
@@ -1,53 +0,0 @@
-description("Test change of unit type for SVGLength animation.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "100");
-animate.setAttribute("to", "200px");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBe("rect.width.animVal.unitType", "SVGLength.SVG_LENGTHTYPE_NUMBER");
-    shouldBe("rect.width.baseVal.unitType", "SVGLength.SVG_LENGTHTYPE_NUMBER");
-}
-
-function sample2() {
-    shouldBe("rect.width.animVal.unitType", "SVGLength.SVG_LENGTHTYPE_NUMBER");
-    shouldBe("rect.width.baseVal.unitType", "SVGLength.SVG_LENGTHTYPE_NUMBER");
-}
-
-function sample3() {
-    shouldBe("rect.width.animVal.unitType", "SVGLength.SVG_LENGTHTYPE_PX");
-    shouldBe("rect.width.baseVal.unitType", "SVGLength.SVG_LENGTHTYPE_NUMBER");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 1.5,   sample2],
-        ["animation", 2.5,   sample3],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-values.js b/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-values.js
deleted file mode 100644
index 567b7d4..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglength-animation-values.js
+++ /dev/null
@@ -1,63 +0,0 @@
-description("Test SVGLength animation set with 'values', different units and different count of spaces.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "width");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("values", "100px;  130  ;4cm  ;6in; 200pt");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("rect.width.animVal.value", "100");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample2() {
-    shouldBeCloseEnough("rect.width.animVal.value", "130");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample3() {
-    shouldBeCloseEnough("rect.width.animVal.value", "151.2");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample4() {
-    shouldBeCloseEnough("rect.width.animVal.value", "576");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function sample5() {
-    shouldBeCloseEnough("rect.width.animVal.value", "267");
-    shouldBe("rect.width.baseVal.value", "100");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 1.0,   sample2],
-        ["animation", 2.0,   sample3],
-        ["animation", 3.0,   sample4],
-        ["animation", 3.999, sample5],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-1.js b/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-1.js
deleted file mode 100644
index 4e4ab66..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-1.js
+++ /dev/null
@@ -1,77 +0,0 @@
-description("Test 'to' animation of SVGLengthList with LengthType number.");
-createSVGTestCase();
-
-// Setup test document
-var text = createSVGElement("text");
-text.setAttribute("id", "text");
-text.textContent = "ABCD";
-text.setAttribute("x", "50 70 90 110");
-text.setAttribute("y", "50");
-text.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(text);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "x");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "50 70 90 110");
-animate.setAttribute("to", "60 90 120 150");
-text.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "50");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "90");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "110");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "70");
-    shouldBe("text.x.baseVal.getItem(2).value", "90");
-    shouldBe("text.x.baseVal.getItem(3).value", "110");
-}
-
-function sample2() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "55");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "105");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "130");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "70");
-    shouldBe("text.x.baseVal.getItem(2).value", "90");
-    shouldBe("text.x.baseVal.getItem(3).value", "110");
-}
-
-function sample3() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "60");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "90");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "120");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "150");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "70");
-    shouldBe("text.x.baseVal.getItem(2).value", "90");
-    shouldBe("text.x.baseVal.getItem(3).value", "110");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-2.js
deleted file mode 100644
index 1381fd8..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-2.js
+++ /dev/null
@@ -1,77 +0,0 @@
-description("Test 'to' animation of SVGLengthList with different LengthTypes.");
-createSVGTestCase();
-
-// Setup test document
-var text = createSVGElement("text");
-text.setAttribute("id", "text");
-text.textContent = "ABCD";
-text.setAttribute("x", "50 70 90 110");
-text.setAttribute("y", "50");
-text.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(text);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "x");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "50 70px 5cm 8pt");
-animate.setAttribute("to", "3cm 80 100px 4in");
-text.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "50");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "90");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "110");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "70");
-    shouldBe("text.x.baseVal.getItem(2).value", "90");
-    shouldBe("text.x.baseVal.getItem(3).value", "110");
-}
-
-function sample2() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "81.7");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "75");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "144.5");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "197.3");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "70");
-    shouldBe("text.x.baseVal.getItem(2).value", "90");
-    shouldBe("text.x.baseVal.getItem(3).value", "110");
-}
-
-function sample3() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "113.4");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "100");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "384");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "70");
-    shouldBe("text.x.baseVal.getItem(2).value", "90");
-    shouldBe("text.x.baseVal.getItem(3).value", "110");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-3.js b/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-3.js
deleted file mode 100644
index 68ac562..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-3.js
+++ /dev/null
@@ -1,65 +0,0 @@
-description("Test 'to' animation of SVGLengthList with different count of items.");
-createSVGTestCase();
-
-// Setup test document
-var text = createSVGElement("text");
-text.setAttribute("id", "text");
-text.textContent = "ABCD";
-text.setAttribute("x", "50");
-text.setAttribute("y", "50");
-text.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(text);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "x");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "50");
-animate.setAttribute("to", "70 80 90 110");
-text.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.x.animVal.numberOfItems", "1");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "50");
-
-    shouldBe("text.x.baseVal.numberOfItems", "1");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-}
-
-function sample2() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "90");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "110");
-
-    shouldBe("text.x.baseVal.numberOfItems", "1");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-}
-
-function sample3() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "90");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "110");
-
-    shouldBe("text.x.baseVal.numberOfItems", "1");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-4.js b/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-4.js
deleted file mode 100644
index 7ef4f36..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-4.js
+++ /dev/null
@@ -1,77 +0,0 @@
-description("Test 'by' animation of SVGLengthList.");
-createSVGTestCase();
-
-// Setup test document
-var text = createSVGElement("text");
-text.setAttribute("id", "text");
-text.textContent = "ABCD";
-text.setAttribute("x", "50 60 70 80");
-text.setAttribute("y", "50");
-text.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(text);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "x");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "50 60 70 80");
-animate.setAttribute("by", "20 20 20 20");
-text.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "50");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "60");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "80");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "60");
-    shouldBe("text.x.baseVal.getItem(2).value", "70");
-    shouldBe("text.x.baseVal.getItem(3).value", "80");
-}
-
-function sample2() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "60");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "90");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "60");
-    shouldBe("text.x.baseVal.getItem(2).value", "70");
-    shouldBe("text.x.baseVal.getItem(3).value", "80");
-}
-
-function sample3() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "90");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "100");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "60");
-    shouldBe("text.x.baseVal.getItem(2).value", "70");
-    shouldBe("text.x.baseVal.getItem(3).value", "80");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-5.js b/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-5.js
deleted file mode 100644
index 66966d6..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svglengthlist-animation-5.js
+++ /dev/null
@@ -1,78 +0,0 @@
-description("Test additive='sum' animation of SVGLengthList.");
-createSVGTestCase();
-
-// Setup test document
-var text = createSVGElement("text");
-text.setAttribute("id", "text");
-text.textContent = "ABCD";
-text.setAttribute("x", "50 60 70 80");
-text.setAttribute("y", "50");
-text.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(text);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "x");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("additive", "sum");
-animate.setAttribute("from", "0 0 0 0");
-animate.setAttribute("to", "20 20 20 20");
-text.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "50");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "60");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "80");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "60");
-    shouldBe("text.x.baseVal.getItem(2).value", "70");
-    shouldBe("text.x.baseVal.getItem(3).value", "80");
-}
-
-function sample2() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "60");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "90");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "60");
-    shouldBe("text.x.baseVal.getItem(2).value", "70");
-    shouldBe("text.x.baseVal.getItem(3).value", "80");
-}
-
-function sample3() {
-    shouldBe("text.x.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.x.animVal.getItem(0).value", "70");
-    shouldBeCloseEnough("text.x.animVal.getItem(1).value", "80");
-    shouldBeCloseEnough("text.x.animVal.getItem(2).value", "90");
-    shouldBeCloseEnough("text.x.animVal.getItem(3).value", "100");
-
-    shouldBe("text.x.baseVal.numberOfItems", "4");
-    shouldBe("text.x.baseVal.getItem(0).value", "50");
-    shouldBe("text.x.baseVal.getItem(1).value", "60");
-    shouldBe("text.x.baseVal.getItem(2).value", "70");
-    shouldBe("text.x.baseVal.getItem(3).value", "80");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-1.js b/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-1.js
deleted file mode 100644
index 1a49f56..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-1.js
+++ /dev/null
@@ -1,50 +0,0 @@
-description("Test for SVGNumber animation.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("opacity", "0");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "opacity");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "0");
-animate.setAttribute("to", "1");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("parseFloat(getComputedStyle(rect).opacity)", "0");
-}
-
-function sample2() {
-    shouldBeCloseEnough("parseFloat(getComputedStyle(rect).opacity)", "0.5");
-}
-
-function sample3() {
-    shouldBeCloseEnough("parseFloat(getComputedStyle(rect).opacity)", "1");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-2.js
deleted file mode 100644
index e237861..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumber-animation-2.js
+++ /dev/null
@@ -1,50 +0,0 @@
-description("Test for SVGNumber animation with different exponents.");
-createSVGTestCase();
-
-// Setup test document
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "0");
-rect.setAttribute("width", "100");
-rect.setAttribute("height", "100");
-rect.setAttribute("fill", "green");
-rect.setAttribute("opacity", "0");
-rect.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "opacity");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "0e10");
-animate.setAttribute("to", ".1e1");
-rect.appendChild(animate);
-rootSVGElement.appendChild(rect);
-
-// Setup animation test
-function sample1() {
-    // Check initial/end conditions
-    shouldBeCloseEnough("parseFloat(getComputedStyle(rect).opacity)", "0");
-}
-
-function sample2() {
-    shouldBeCloseEnough("parseFloat(getComputedStyle(rect).opacity)", "0.5");
-}
-
-function sample3() {
-    shouldBeCloseEnough("parseFloat(getComputedStyle(rect).opacity)", "1");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberlist-animation-1.js b/third_party/blink/web_tests/svg/animations/script-tests/svgnumberlist-animation-1.js
deleted file mode 100644
index 8f51d43..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberlist-animation-1.js
+++ /dev/null
@@ -1,78 +0,0 @@
-description("Test SVGNumberList animation on 'rotate' attribute of text.");
-createSVGTestCase();
-
-// Setup test document
-var text = createSVGElement("text");
-text.textContent = "ABCD";
-text.setAttribute("x", "40 60 80 100");
-text.setAttribute("y", "60");
-text.setAttribute("rotate", "15");
-text.setAttribute("fill", "green");
-text.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "rotate");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "0 0 0 0");
-animate.setAttribute("to", "45 90 135 180");
-text.appendChild(animate);
-rootSVGElement.appendChild(text);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.rotate.animVal.numberOfItems", "1");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "15");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function sample2() {
-    shouldBe("text.rotate.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "0");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(1).value", "0");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(2).value", "0");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(3).value", "0");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function sample3() {
-    shouldBe("text.rotate.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "22.5");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(1).value", "45");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(2).value", "67.5");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(3).value", "90");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function sample4() {
-    shouldBe("text.rotate.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "45");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(1).value", "90");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(2).value", "135");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(3).value", "180");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 0.001, sample2],
-        ["animation", 2.0,   sample3],
-        ["animation", 3.999, sample4],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberlist-animation-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svgnumberlist-animation-2.js
deleted file mode 100644
index 1166760a..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberlist-animation-2.js
+++ /dev/null
@@ -1,78 +0,0 @@
-description("Test 'by' animation of SVGNumberList on 'rotate' attribute of text.");
-createSVGTestCase();
-
-// Setup test document
-var text = createSVGElement("text");
-text.textContent = "ABCD";
-text.setAttribute("x", "40 60 80 100");
-text.setAttribute("y", "60");
-text.setAttribute("rotate", "15");
-text.setAttribute("fill", "green");
-text.setAttribute("onclick", "executeTest()");
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "rotate");
-animate.setAttribute("begin", "click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "0 45 90 135");
-animate.setAttribute("by", "45 45 45 45");
-text.appendChild(animate);
-rootSVGElement.appendChild(text);
-
-// Setup animation test
-function sample1() {
-    shouldBe("text.rotate.animVal.numberOfItems", "1");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "15");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function sample2() {
-    shouldBe("text.rotate.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "0");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(1).value", "45");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(2).value", "90");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(3).value", "135");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function sample3() {
-    shouldBe("text.rotate.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "22.5");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(1).value", "67.5");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(2).value", "112.5");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(3).value", "157.5");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function sample4() {
-    shouldBe("text.rotate.animVal.numberOfItems", "4");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(0).value", "45");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(1).value", "90");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(2).value", "135");
-    shouldBeCloseEnough("text.rotate.animVal.getItem(3).value", "180");
-
-    shouldBe("text.rotate.baseVal.numberOfItems", "1");
-    shouldBe("text.rotate.baseVal.getItem(0).value", "15");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 0.001, sample2],
-        ["animation", 2.0,   sample3],
-        ["animation", 3.999, sample4],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-1.js b/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-1.js
deleted file mode 100644
index 02eb59d5..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-1.js
+++ /dev/null
@@ -1,80 +0,0 @@
-description("Test 'to' animation of SVGNumberOptionalNumber with optional number.");
-createSVGTestCase();
-
-// Setup test document
-var defs = createSVGElement("defs");
-rootSVGElement.appendChild(defs);
-
-var filter = createSVGElement("filter");
-filter.setAttribute("id", "filter");
-filter.setAttribute("x", "-30%");
-filter.setAttribute("y", "-30%");
-filter.setAttribute("width", "160%");
-filter.setAttribute("height", "160%");
-defs.appendChild(filter);
-
-var feGaussianBlur = createSVGElement("feGaussianBlur");
-feGaussianBlur.setAttribute("id", "blur");
-feGaussianBlur.setAttribute("stdDeviation", "5");
-filter.appendChild(feGaussianBlur);
-
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "50");
-rect.setAttribute("y", "50");
-rect.setAttribute("width", "200");
-rect.setAttribute("height", "200");
-rect.setAttribute("fill", "green");
-rect.setAttribute("filter", "url(#filter)");
-rect.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(rect);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "stdDeviation");
-animate.setAttribute("begin", "rect.click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "5 5");
-animate.setAttribute("to", "40 10");
-feGaussianBlur.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "5");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "5");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "5");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "5");
-}
-
-function sample2() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "22.5");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "7.5");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "5");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "5");
-}
-
-function sample3() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "40");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "10");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "5");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "5");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.clickX = 100;
-window.clickY = 100;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-2.js b/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-2.js
deleted file mode 100644
index 6a789aa..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-2.js
+++ /dev/null
@@ -1,80 +0,0 @@
-description("Test 'to' animation of SVGNumberOptionalNumber without optional number.");
-createSVGTestCase();
-
-// Setup test document
-var defs = createSVGElement("defs");
-rootSVGElement.appendChild(defs);
-
-var filter = createSVGElement("filter");
-filter.setAttribute("id", "filter");
-filter.setAttribute("x", "-30%");
-filter.setAttribute("y", "-30%");
-filter.setAttribute("width", "160%");
-filter.setAttribute("height", "160%");
-defs.appendChild(filter);
-
-var feGaussianBlur = createSVGElement("feGaussianBlur");
-feGaussianBlur.setAttribute("id", "blur");
-feGaussianBlur.setAttribute("stdDeviation", "5");
-filter.appendChild(feGaussianBlur);
-
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "50");
-rect.setAttribute("y", "50");
-rect.setAttribute("width", "200");
-rect.setAttribute("height", "200");
-rect.setAttribute("fill", "green");
-rect.setAttribute("filter", "url(#filter)");
-rect.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(rect);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "stdDeviation");
-animate.setAttribute("begin", "rect.click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "5");
-animate.setAttribute("to", "40 10");
-feGaussianBlur.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "5");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "5");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "5");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "5");
-}
-
-function sample2() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "22.5");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "7.5");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "5");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "5");
-}
-
-function sample3() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "40");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "10");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "5");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "5");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.clickX = 60;
-window.clickY = 60;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-3.js b/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-3.js
deleted file mode 100644
index 36129dc..0000000
--- a/third_party/blink/web_tests/svg/animations/script-tests/svgnumberoptionalnumber-animation-3.js
+++ /dev/null
@@ -1,80 +0,0 @@
-description("Test 'to' animation of SVGNumberOptionalNumber without optional number.");
-createSVGTestCase();
-
-// Setup test document
-var defs = createSVGElement("defs");
-rootSVGElement.appendChild(defs);
-
-var filter = createSVGElement("filter");
-filter.setAttribute("id", "filter");
-filter.setAttribute("x", "-30%");
-filter.setAttribute("y", "-30%");
-filter.setAttribute("width", "160%");
-filter.setAttribute("height", "160%");
-defs.appendChild(filter);
-
-var feGaussianBlur = createSVGElement("feGaussianBlur");
-feGaussianBlur.setAttribute("id", "blur");
-feGaussianBlur.setAttribute("stdDeviation", "40 10");
-filter.appendChild(feGaussianBlur);
-
-var rect = createSVGElement("rect");
-rect.setAttribute("id", "rect");
-rect.setAttribute("x", "50");
-rect.setAttribute("y", "50");
-rect.setAttribute("width", "200");
-rect.setAttribute("height", "200");
-rect.setAttribute("fill", "green");
-rect.setAttribute("filter", "url(#filter)");
-rect.setAttribute("onclick", "executeTest()");
-rootSVGElement.appendChild(rect);
-
-var animate = createSVGElement("animate");
-animate.setAttribute("id", "animation");
-animate.setAttribute("attributeName", "stdDeviation");
-animate.setAttribute("begin", "rect.click");
-animate.setAttribute("dur", "4s");
-animate.setAttribute("from", "40 10");
-animate.setAttribute("to", "5");
-feGaussianBlur.appendChild(animate);
-
-// Setup animation test
-function sample1() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "40");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "10");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "40");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "10");
-}
-
-function sample2() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "22.5");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "7.5");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "40");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "10");
-}
-
-function sample3() {
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationX.animVal", "5");
-    shouldBeCloseEnough("feGaussianBlur.stdDeviationY.animVal", "5");
-
-    shouldBe("feGaussianBlur.stdDeviationX.baseVal", "40");
-    shouldBe("feGaussianBlur.stdDeviationY.baseVal", "10");
-}
-
-function executeTest() {
-    const expectedValues = [
-        // [animationId, time, sampleCallback]
-        ["animation", 0.0,   sample1],
-        ["animation", 2.0,   sample2],
-        ["animation", 3.999, sample3],
-        ["animation", 4.001, sample1]
-    ];
-
-    runAnimationTest(expectedValues);
-}
-
-window.clickX = 60;
-window.clickY = 60;
-var successfullyParsed = true;
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-3-expected.txt b/third_party/blink/web_tests/svg/animations/svgenum-animation-3-expected.txt
deleted file mode 100644
index 7d38c867..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-3-expected.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-SVG 1.1 dynamic animation tests
-Stretched text
-
-Test SVGLengthAdjustType enumeration animations
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.lengthAdjust.animVal is SVGTextContentElement.LENGTHADJUST_SPACING
-PASS text.lengthAdjust.baseVal is SVGTextContentElement.LENGTHADJUST_SPACING
-PASS text.lengthAdjust.animVal is SVGTextContentElement.LENGTHADJUST_SPACING
-PASS text.lengthAdjust.baseVal is SVGTextContentElement.LENGTHADJUST_SPACING
-PASS text.lengthAdjust.animVal is SVGTextContentElement.LENGTHADJUST_SPACINGANDGLYPHS
-PASS text.lengthAdjust.baseVal is SVGTextContentElement.LENGTHADJUST_SPACING
-PASS text.lengthAdjust.animVal is SVGTextContentElement.LENGTHADJUST_SPACINGANDGLYPHS
-PASS text.lengthAdjust.baseVal is SVGTextContentElement.LENGTHADJUST_SPACING
-PASS text.lengthAdjust.animVal is SVGTextContentElement.LENGTHADJUST_SPACINGANDGLYPHS
-PASS text.lengthAdjust.baseVal is SVGTextContentElement.LENGTHADJUST_SPACING
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-3.html b/third_party/blink/web_tests/svg/animations/svgenum-animation-3.html
deleted file mode 100644
index 242f20c..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-3.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgenum-animation-3.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-4-expected.txt b/third_party/blink/web_tests/svg/animations/svgenum-animation-4-expected.txt
deleted file mode 100644
index 00e1e02..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-4-expected.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test CompositeOperationType enumeration animations
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_IN
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_IN
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OUT
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OUT
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ATOP
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ATOP
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_XOR
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_ARITHMETIC
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.animVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS overComposite1.operator.baseVal is SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_OVER
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-4.html b/third_party/blink/web_tests/svg/animations/svgenum-animation-4.html
deleted file mode 100644
index de089f40..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-4.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgenum-animation-4.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-5-expected.txt b/third_party/blink/web_tests/svg/animations/svgenum-animation-5-expected.txt
deleted file mode 100644
index f634335..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-5-expected.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test MorphologyOperatorType enumeration animations
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS morphology.operator.animVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS morphology.operator.baseVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS morphology.operator.animVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS morphology.operator.baseVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS morphology.operator.animVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_ERODE
-PASS morphology.operator.baseVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS morphology.operator.animVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_ERODE
-PASS morphology.operator.baseVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS morphology.operator.animVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS morphology.operator.baseVal is SVGFEMorphologyElement.SVG_MORPHOLOGY_OPERATOR_DILATE
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-5.html b/third_party/blink/web_tests/svg/animations/svgenum-animation-5.html
deleted file mode 100644
index b2cfbcb..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-5.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgenum-animation-5.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-6-expected.txt b/third_party/blink/web_tests/svg/animations/svgenum-animation-6-expected.txt
deleted file mode 100644
index 1b1fa76..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-6-expected.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test ColorMatrixType enumeration animations
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_SATURATE
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_HUEROTATE
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.animVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS colorMatrix.type.baseVal is SVGFEColorMatrixElement.SVG_FECOLORMATRIX_TYPE_MATRIX
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-6.html b/third_party/blink/web_tests/svg/animations/svgenum-animation-6.html
deleted file mode 100644
index 28883caa..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-6.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgenum-animation-6.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-7-expected.txt b/third_party/blink/web_tests/svg/animations/svgenum-animation-7-expected.txt
deleted file mode 100644
index ed3bbd0d..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-7-expected.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGStitchOptions/TurbulenceType enumeration animations
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS turbulence.type.animVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.type.baseVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.stitchTiles.animVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS turbulence.stitchTiles.baseVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS turbulence.type.animVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.type.baseVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.stitchTiles.animVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS turbulence.stitchTiles.baseVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS turbulence.type.animVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_TURBULENCE
-PASS turbulence.type.baseVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.stitchTiles.animVal is SVGFETurbulenceElement.SVG_STITCHTYPE_NOSTITCH
-PASS turbulence.stitchTiles.baseVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS turbulence.type.animVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_TURBULENCE
-PASS turbulence.type.baseVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.stitchTiles.animVal is SVGFETurbulenceElement.SVG_STITCHTYPE_NOSTITCH
-PASS turbulence.stitchTiles.baseVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS turbulence.type.animVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.type.baseVal is SVGFETurbulenceElement.SVG_TURBULENCE_TYPE_FRACTALNOISE
-PASS turbulence.stitchTiles.animVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS turbulence.stitchTiles.baseVal is SVGFETurbulenceElement.SVG_STITCHTYPE_STITCH
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-7.html b/third_party/blink/web_tests/svg/animations/svgenum-animation-7.html
deleted file mode 100644
index e102fa5..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-7.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgenum-animation-7.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-8-expected.txt b/third_party/blink/web_tests/svg/animations/svgenum-animation-8-expected.txt
deleted file mode 100644
index a7f37c2..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-8-expected.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test ComponentTransferType enumeration animations
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_TABLE
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_TABLE
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_LINEAR
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_LINEAR
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_GAMMA
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.animVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS feRFunc.type.baseVal is SVGComponentTransferFunctionElement.SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-8.html b/third_party/blink/web_tests/svg/animations/svgenum-animation-8.html
deleted file mode 100644
index e228b1d..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-8.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgenum-animation-8.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-9-expected.txt b/third_party/blink/web_tests/svg/animations/svgenum-animation-9-expected.txt
deleted file mode 100644
index 7de633e..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-9-expected.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-SVG 1.1 dynamic animation tests
-test
-
-Test SVGTextPathSpacingType/SVGTextPathMethodType enumeration animations
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS textPath.method.animVal is SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN
-PASS textPath.method.baseVal is SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN
-PASS textPath.spacing.animVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO
-PASS textPath.spacing.baseVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO
-PASS textPath.method.animVal is SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN
-PASS textPath.method.baseVal is SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN
-PASS textPath.spacing.animVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO
-PASS textPath.spacing.baseVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO
-PASS textPath.method.animVal is SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH
-PASS textPath.method.baseVal is SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN
-PASS textPath.spacing.animVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT
-PASS textPath.spacing.baseVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO
-PASS textPath.method.animVal is SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH
-PASS textPath.method.baseVal is SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN
-PASS textPath.spacing.animVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT
-PASS textPath.spacing.baseVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO
-PASS textPath.method.animVal is SVGTextPathElement.TEXTPATH_METHODTYPE_STRETCH
-PASS textPath.method.baseVal is SVGTextPathElement.TEXTPATH_METHODTYPE_ALIGN
-PASS textPath.spacing.animVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_EXACT
-PASS textPath.spacing.baseVal is SVGTextPathElement.TEXTPATH_SPACINGTYPE_AUTO
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgenum-animation-9.html b/third_party/blink/web_tests/svg/animations/svgenum-animation-9.html
deleted file mode 100644
index c1a2586..0000000
--- a/third_party/blink/web_tests/svg/animations/svgenum-animation-9.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgenum-animation-9.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svginteger-animation-1-expected.txt b/third_party/blink/web_tests/svg/animations/svginteger-animation-1-expected.txt
deleted file mode 100644
index 24ac815..0000000
--- a/third_party/blink/web_tests/svg/animations/svginteger-animation-1-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test animation of SVGInteger.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS feConvolveMatrix.targetX.animVal is 0
-PASS feConvolveMatrix.targetX.baseVal is 0
-PASS feConvolveMatrix.targetX.animVal is 1
-PASS feConvolveMatrix.targetX.baseVal is 0
-PASS feConvolveMatrix.targetX.animVal is 2
-PASS feConvolveMatrix.targetX.baseVal is 0
-PASS feConvolveMatrix.targetX.animVal is 0
-PASS feConvolveMatrix.targetX.baseVal is 0
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svginteger-animation-1.html b/third_party/blink/web_tests/svg/animations/svginteger-animation-1.html
deleted file mode 100644
index e3d45d4..0000000
--- a/third_party/blink/web_tests/svg/animations/svginteger-animation-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svginteger-animation-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svginteger-animation-2-expected.txt b/third_party/blink/web_tests/svg/animations/svginteger-animation-2-expected.txt
deleted file mode 100644
index 7c43a57..0000000
--- a/third_party/blink/web_tests/svg/animations/svginteger-animation-2-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test animation of SVGInteger.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS feConvolveMatrix.orderX.animVal is 3
-PASS feConvolveMatrix.orderY.animVal is 1
-PASS feConvolveMatrix.orderX.baseVal is 3
-PASS feConvolveMatrix.orderY.baseVal is 1
-PASS feConvolveMatrix.orderX.animVal is 2
-PASS feConvolveMatrix.orderY.animVal is 2
-PASS feConvolveMatrix.orderX.baseVal is 3
-PASS feConvolveMatrix.orderY.baseVal is 1
-PASS feConvolveMatrix.orderX.animVal is 1
-PASS feConvolveMatrix.orderY.animVal is 3
-PASS feConvolveMatrix.orderX.baseVal is 3
-PASS feConvolveMatrix.orderY.baseVal is 1
-PASS feConvolveMatrix.orderX.animVal is 3
-PASS feConvolveMatrix.orderY.animVal is 1
-PASS feConvolveMatrix.orderX.baseVal is 3
-PASS feConvolveMatrix.orderY.baseVal is 1
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svginteger-animation-2.html b/third_party/blink/web_tests/svg/animations/svginteger-animation-2.html
deleted file mode 100644
index 0bd4327..0000000
--- a/third_party/blink/web_tests/svg/animations/svginteger-animation-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svginteger-animation-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-1-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-by-1-expected.txt
deleted file mode 100644
index 9775c5a2..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-1-expected.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 75
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-1.html b/third_party/blink/web_tests/svg/animations/svglength-additive-by-1.html
deleted file mode 100644
index cbb0948..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-by-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-2-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-by-2-expected.txt
deleted file mode 100644
index 9775c5a2..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-2-expected.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 75
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-2.html b/third_party/blink/web_tests/svg/animations/svglength-additive-by-2.html
deleted file mode 100644
index 2519226..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-by-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-3-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-by-3-expected.txt
deleted file mode 100644
index 3bfde665..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-3-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 55
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-3.html b/third_party/blink/web_tests/svg/animations/svglength-additive-by-3.html
deleted file mode 100644
index a3db065d..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-3.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-by-3.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-4-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-by-4-expected.txt
deleted file mode 100644
index 3bfde665..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-4-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 55
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-4.html b/third_party/blink/web_tests/svg/animations/svglength-additive-by-4.html
deleted file mode 100644
index e75654e1..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-4.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-by-4.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-6-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-by-6-expected.txt
deleted file mode 100644
index 3bfde665..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-6-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 55
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-6.html b/third_party/blink/web_tests/svg/animations/svglength-additive-by-6.html
deleted file mode 100644
index 01fdf36..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-6.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-by-6.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-7-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-by-7-expected.txt
deleted file mode 100644
index 3bfde665..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-7-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 55
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-7.html b/third_party/blink/web_tests/svg/animations/svglength-additive-by-7.html
deleted file mode 100644
index 3327db0..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-7.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-by-7.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-8-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-by-8-expected.txt
deleted file mode 100644
index 3bfde665..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-8-expected.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 55
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-by-8.html b/third_party/blink/web_tests/svg/animations/svglength-additive-by-8.html
deleted file mode 100644
index 18ca697..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-by-8.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-by-8.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-1-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-1-expected.txt
deleted file mode 100644
index 52a7a111..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-1-expected.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests from-by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 75
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-1.html b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-1.html
deleted file mode 100644
index f32e3944..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-from-by-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-2-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-2-expected.txt
deleted file mode 100644
index eb734c3..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-2-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests from-by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 0
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-2.html b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-2.html
deleted file mode 100644
index 44f3e80..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-from-by-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-3-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-3-expected.txt
deleted file mode 100644
index ac4f5dd..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-3-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests from-by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 75
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 87.5
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-3.html b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-3.html
deleted file mode 100644
index 4352dddb..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-3.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-from-by-3.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-4-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-4-expected.txt
deleted file mode 100644
index ac4f5dd..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-4-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-This tests from-by-animations adding to previous underlying values
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 10
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 30
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 50
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 75
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 87.5
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-4.html b/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-4.html
deleted file mode 100644
index ecf0911..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-additive-from-by-4.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-additive-from-by-4.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeHeight-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeHeight-expected.txt
deleted file mode 100644
index fd15e34..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeHeight-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation on LengthModeHeight.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.height.animVal.value is 100
-PASS rect.height.baseVal.value is 100
-PASS rect.height.animVal.value is 150
-PASS rect.height.baseVal.value is 100
-PASS rect.height.animVal.value is 200
-PASS rect.height.baseVal.value is 100
-PASS rect.height.animVal.value is 100
-PASS rect.height.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeHeight.html b/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeHeight.html
deleted file mode 100644
index b93792f..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeHeight.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-LengthModeHeight.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeOther-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeOther-expected.txt
deleted file mode 100644
index 7f4d5319..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeOther-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation on LengthModeOther.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS circle.r.animVal.value is 10
-PASS circle.r.baseVal.value is 10
-PASS circle.r.animVal.value is 132.5
-PASS circle.r.baseVal.value is 10
-PASS circle.r.animVal.value is 254.9
-PASS circle.r.baseVal.value is 10
-PASS circle.r.animVal.value is 10
-PASS circle.r.baseVal.value is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeOther.html b/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeOther.html
deleted file mode 100644
index 28af247..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeOther.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-LengthModeOther.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeWidth-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeWidth-expected.txt
deleted file mode 100644
index b977c315..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeWidth-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation on LengthModeWidth.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 200
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 300
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeWidth.html b/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeWidth.html
deleted file mode 100644
index fe639a4..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-LengthModeWidth.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-LengthModeWidth.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-1-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-1-expected.txt
deleted file mode 100644
index 767494b..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-1-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation with invalid value: No spaces between number and unit.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 0
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 0
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-1.html b/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-1.html
deleted file mode 100644
index ed4c9d91..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-invalid-value-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-2-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-2-expected.txt
deleted file mode 100644
index 592f3f6..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-2-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation with invalid value: No spaces before value.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 0
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 0
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-2.html b/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-2.html
deleted file mode 100644
index 3b6d149..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-invalid-value-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-3-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-3-expected.txt
deleted file mode 100644
index 6c2308b..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-3-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation with invalid value: No spaces after number and unit.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 0
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 0
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-3.html b/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-3.html
deleted file mode 100644
index a8f0f88e..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-invalid-value-3.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-invalid-value-3.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-number-to-number-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-number-to-number-expected.txt
deleted file mode 100644
index 825656ec..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-number-to-number-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to cm.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 150
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 200
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-number-to-number.html b/third_party/blink/web_tests/svg/animations/svglength-animation-number-to-number.html
deleted file mode 100644
index 26736b85..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-number-to-number.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-number-to-number.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-cm-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-cm-expected.txt
deleted file mode 100644
index b4c0c90..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-cm-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to cm.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 144.5
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 189
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-cm.html b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-cm.html
deleted file mode 100644
index 02223ac..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-cm.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-px-to-cm.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-ems-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-ems-expected.txt
deleted file mode 100644
index edcbf0f0..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-ems-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to ems.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 150
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 200
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-ems.html b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-ems.html
deleted file mode 100644
index b9fdedc..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-ems.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-px-to-ems.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-in-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-in-expected.txt
deleted file mode 100644
index c1ee88e9..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-in-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to inch.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 170
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 240
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-in.html b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-in.html
deleted file mode 100644
index fe425c6..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-in.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-px-to-in.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-number-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-number-expected.txt
deleted file mode 100644
index a275f62..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-number-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to number.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 150
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 200
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-number.html b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-number.html
deleted file mode 100644
index ee3ccd0..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-number.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-px-to-number.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pc-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pc-expected.txt
deleted file mode 100644
index 671e91e..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pc-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to pc.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 170
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 240
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pc.html b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pc.html
deleted file mode 100644
index c57f3d0..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pc.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-px-to-pc.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pt-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pt-expected.txt
deleted file mode 100644
index 66c33d9..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pt-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to cm.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 161.2
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 189
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pt.html b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pt.html
deleted file mode 100644
index fed8026..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-pt.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-px-to-pt.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-px-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-px-expected.txt
deleted file mode 100644
index 825656ec..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-px-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation from px to cm.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 150
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 200
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-px.html b/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-px.html
deleted file mode 100644
index 469e218d..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-px-to-px.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-px-to-px.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-unitType-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-unitType-expected.txt
deleted file mode 100644
index 23d2597..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-unitType-expected.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test change of unit type for SVGLength animation.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS rect.width.baseVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS rect.width.animVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS rect.width.baseVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS rect.width.animVal.unitType is SVGLength.SVG_LENGTHTYPE_PX
-PASS rect.width.baseVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS rect.width.animVal.unitType is SVGLength.SVG_LENGTHTYPE_PX
-PASS rect.width.baseVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS rect.width.animVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS rect.width.baseVal.unitType is SVGLength.SVG_LENGTHTYPE_NUMBER
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-unitType.html b/third_party/blink/web_tests/svg/animations/svglength-animation-unitType.html
deleted file mode 100644
index 231efbd..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-unitType.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-unitType.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-values-expected.txt b/third_party/blink/web_tests/svg/animations/svglength-animation-values-expected.txt
deleted file mode 100644
index ac52684..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-values-expected.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test SVGLength animation set with 'values', different units and different count of spaces.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 130
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 151.2
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 576
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 267
-PASS rect.width.baseVal.value is 100
-PASS rect.width.animVal.value is 100
-PASS rect.width.baseVal.value is 100
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglength-animation-values.html b/third_party/blink/web_tests/svg/animations/svglength-animation-values.html
deleted file mode 100644
index 5dc5bf5..0000000
--- a/third_party/blink/web_tests/svg/animations/svglength-animation-values.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglength-animation-values.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-1-expected.txt b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-1-expected.txt
deleted file mode 100644
index 8cbad15..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-1-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-SVG 1.1 dynamic animation tests
-ABCD
-
-Test 'to' animation of SVGLengthList with LengthType number.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 70
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 110
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 55
-PASS text.x.animVal.getItem(1).value is 80
-PASS text.x.animVal.getItem(2).value is 105
-PASS text.x.animVal.getItem(3).value is 130
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 60
-PASS text.x.animVal.getItem(1).value is 90
-PASS text.x.animVal.getItem(2).value is 120
-PASS text.x.animVal.getItem(3).value is 150
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 70
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 110
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-1.html b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-1.html
deleted file mode 100644
index 636dd251..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglengthlist-animation-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-2-expected.txt b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-2-expected.txt
deleted file mode 100644
index ffecfef9..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-2-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-SVG 1.1 dynamic animation tests
-ABCD
-
-Test 'to' animation of SVGLengthList with different LengthTypes.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 70
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 110
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 81.7
-PASS text.x.animVal.getItem(1).value is 75
-PASS text.x.animVal.getItem(2).value is 144.5
-PASS text.x.animVal.getItem(3).value is 197.3
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 113.4
-PASS text.x.animVal.getItem(1).value is 80
-PASS text.x.animVal.getItem(2).value is 100
-PASS text.x.animVal.getItem(3).value is 384
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 70
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 110
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 70
-PASS text.x.baseVal.getItem(2).value is 90
-PASS text.x.baseVal.getItem(3).value is 110
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-2.html b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-2.html
deleted file mode 100644
index 5263c36..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglengthlist-animation-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-3-expected.txt b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-3-expected.txt
deleted file mode 100644
index 3d18b90..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-3-expected.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-SVG 1.1 dynamic animation tests
-ABCD
-
-Test 'to' animation of SVGLengthList with different count of items.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.x.animVal.numberOfItems is 1
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.baseVal.numberOfItems is 1
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 70
-PASS text.x.animVal.getItem(1).value is 80
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 110
-PASS text.x.baseVal.numberOfItems is 1
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 70
-PASS text.x.animVal.getItem(1).value is 80
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 110
-PASS text.x.baseVal.numberOfItems is 1
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.animVal.numberOfItems is 1
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.baseVal.numberOfItems is 1
-PASS text.x.baseVal.getItem(0).value is 50
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-3.html b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-3.html
deleted file mode 100644
index 2b68ecf..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-3.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglengthlist-animation-3.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-4-expected.txt b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-4-expected.txt
deleted file mode 100644
index 68da434f..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-4-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-SVG 1.1 dynamic animation tests
-ABCD
-
-Test 'by' animation of SVGLengthList.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 60
-PASS text.x.animVal.getItem(2).value is 70
-PASS text.x.animVal.getItem(3).value is 80
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 60
-PASS text.x.animVal.getItem(1).value is 70
-PASS text.x.animVal.getItem(2).value is 80
-PASS text.x.animVal.getItem(3).value is 90
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 70
-PASS text.x.animVal.getItem(1).value is 80
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 100
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 60
-PASS text.x.animVal.getItem(2).value is 70
-PASS text.x.animVal.getItem(3).value is 80
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-4.html b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-4.html
deleted file mode 100644
index 1e166e07..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-4.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglengthlist-animation-4.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-5-expected.txt b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-5-expected.txt
deleted file mode 100644
index 1ff220ab..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-5-expected.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-SVG 1.1 dynamic animation tests
-ABCD
-
-Test additive='sum' animation of SVGLengthList.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 60
-PASS text.x.animVal.getItem(2).value is 70
-PASS text.x.animVal.getItem(3).value is 80
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 60
-PASS text.x.animVal.getItem(1).value is 70
-PASS text.x.animVal.getItem(2).value is 80
-PASS text.x.animVal.getItem(3).value is 90
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 70
-PASS text.x.animVal.getItem(1).value is 80
-PASS text.x.animVal.getItem(2).value is 90
-PASS text.x.animVal.getItem(3).value is 100
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS text.x.animVal.numberOfItems is 4
-PASS text.x.animVal.getItem(0).value is 50
-PASS text.x.animVal.getItem(1).value is 60
-PASS text.x.animVal.getItem(2).value is 70
-PASS text.x.animVal.getItem(3).value is 80
-PASS text.x.baseVal.numberOfItems is 4
-PASS text.x.baseVal.getItem(0).value is 50
-PASS text.x.baseVal.getItem(1).value is 60
-PASS text.x.baseVal.getItem(2).value is 70
-PASS text.x.baseVal.getItem(3).value is 80
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-5.html b/third_party/blink/web_tests/svg/animations/svglengthlist-animation-5.html
deleted file mode 100644
index b117494..0000000
--- a/third_party/blink/web_tests/svg/animations/svglengthlist-animation-5.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svglengthlist-animation-5.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-1-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumber-animation-1-expected.txt
deleted file mode 100644
index 4cab56c3..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-1-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test for SVGNumber animation.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS parseFloat(getComputedStyle(rect).opacity) is 0
-PASS parseFloat(getComputedStyle(rect).opacity) is 0.5
-PASS parseFloat(getComputedStyle(rect).opacity) is 1
-PASS parseFloat(getComputedStyle(rect).opacity) is 0
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-1.html b/third_party/blink/web_tests/svg/animations/svgnumber-animation-1.html
deleted file mode 100644
index 7ea7c39..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumber-animation-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-2-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumber-animation-2-expected.txt
deleted file mode 100644
index b9958fe..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-2-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test for SVGNumber animation with different exponents.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS parseFloat(getComputedStyle(rect).opacity) is 0
-PASS parseFloat(getComputedStyle(rect).opacity) is 0.5
-PASS parseFloat(getComputedStyle(rect).opacity) is 1
-PASS parseFloat(getComputedStyle(rect).opacity) is 0
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-2.html b/third_party/blink/web_tests/svg/animations/svgnumber-animation-2.html
deleted file mode 100644
index f91df82..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumber-animation-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-3-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumber-animation-3-expected.txt
deleted file mode 100644
index 3c73fb3..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-3-expected.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test for SVGNumber animation with invalid units.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS getComputedStyle(rect).opacity is '0'
-PASS getComputedStyle(rect).opacity is '0'
-PASS getComputedStyle(rect).opacity is '0'
-PASS getComputedStyle(rect).opacity is '0'
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-3.html b/third_party/blink/web_tests/svg/animations/svgnumber-animation-3.html
deleted file mode 100644
index ec003a8..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-3.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumber-animation-3.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-4-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumber-animation-4-expected.txt
deleted file mode 100644
index fe9fa654..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-4-expected.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test for SVGNumber animation on SVG DOM properties.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS stop1.offset.animVal is 0
-PASS stop1.offset.baseVal is 0
-PASS stop1.offset.animVal is 0.5
-PASS stop1.offset.baseVal is 0
-PASS stop1.offset.animVal is 1
-PASS stop1.offset.baseVal is 0
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumber-animation-4.html b/third_party/blink/web_tests/svg/animations/svgnumber-animation-4.html
deleted file mode 100644
index 7ac0416..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumber-animation-4.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumber-animation-4.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-1-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-1-expected.txt
deleted file mode 100644
index f9ae43bb..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-1-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-SVG 1.1 dynamic animation tests
-ABCD
-
-Test SVGNumberList animation on 'rotate' attribute of text.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.rotate.animVal.numberOfItems is 1
-PASS text.rotate.animVal.getItem(0).value is 15
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 4
-PASS text.rotate.animVal.getItem(0).value is 0
-PASS text.rotate.animVal.getItem(1).value is 0
-PASS text.rotate.animVal.getItem(2).value is 0
-PASS text.rotate.animVal.getItem(3).value is 0
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 4
-PASS text.rotate.animVal.getItem(0).value is 22.5
-PASS text.rotate.animVal.getItem(1).value is 45
-PASS text.rotate.animVal.getItem(2).value is 67.5
-PASS text.rotate.animVal.getItem(3).value is 90
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 4
-PASS text.rotate.animVal.getItem(0).value is 45
-PASS text.rotate.animVal.getItem(1).value is 90
-PASS text.rotate.animVal.getItem(2).value is 135
-PASS text.rotate.animVal.getItem(3).value is 180
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 1
-PASS text.rotate.animVal.getItem(0).value is 15
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-1.html b/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-1.html
deleted file mode 100644
index b2c272c..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumberlist-animation-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-2-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-2-expected.txt
deleted file mode 100644
index b8c536e..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-2-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-SVG 1.1 dynamic animation tests
-ABCD
-
-Test 'by' animation of SVGNumberList on 'rotate' attribute of text.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS text.rotate.animVal.numberOfItems is 1
-PASS text.rotate.animVal.getItem(0).value is 15
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 4
-PASS text.rotate.animVal.getItem(0).value is 0
-PASS text.rotate.animVal.getItem(1).value is 45
-PASS text.rotate.animVal.getItem(2).value is 90
-PASS text.rotate.animVal.getItem(3).value is 135
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 4
-PASS text.rotate.animVal.getItem(0).value is 22.5
-PASS text.rotate.animVal.getItem(1).value is 67.5
-PASS text.rotate.animVal.getItem(2).value is 112.5
-PASS text.rotate.animVal.getItem(3).value is 157.5
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 4
-PASS text.rotate.animVal.getItem(0).value is 45
-PASS text.rotate.animVal.getItem(1).value is 90
-PASS text.rotate.animVal.getItem(2).value is 135
-PASS text.rotate.animVal.getItem(3).value is 180
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS text.rotate.animVal.numberOfItems is 1
-PASS text.rotate.animVal.getItem(0).value is 15
-PASS text.rotate.baseVal.numberOfItems is 1
-PASS text.rotate.baseVal.getItem(0).value is 15
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-2.html b/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-2.html
deleted file mode 100644
index ca45b65..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberlist-animation-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumberlist-animation-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-1-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-1-expected.txt
deleted file mode 100644
index b054d9b4..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-1-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test 'to' animation of SVGNumberOptionalNumber with optional number.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS feGaussianBlur.stdDeviationX.animVal is 5
-PASS feGaussianBlur.stdDeviationY.animVal is 5
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS feGaussianBlur.stdDeviationX.animVal is 22.5
-PASS feGaussianBlur.stdDeviationY.animVal is 7.5
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS feGaussianBlur.stdDeviationX.animVal is 40
-PASS feGaussianBlur.stdDeviationY.animVal is 10
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS feGaussianBlur.stdDeviationX.animVal is 5
-PASS feGaussianBlur.stdDeviationY.animVal is 5
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-1.html b/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-1.html
deleted file mode 100644
index 18306f0b..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-1.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumberoptionalnumber-animation-1.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-2-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-2-expected.txt
deleted file mode 100644
index 749b9a07..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-2-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test 'to' animation of SVGNumberOptionalNumber without optional number.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS feGaussianBlur.stdDeviationX.animVal is 5
-PASS feGaussianBlur.stdDeviationY.animVal is 5
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS feGaussianBlur.stdDeviationX.animVal is 22.5
-PASS feGaussianBlur.stdDeviationY.animVal is 7.5
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS feGaussianBlur.stdDeviationX.animVal is 40
-PASS feGaussianBlur.stdDeviationY.animVal is 10
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS feGaussianBlur.stdDeviationX.animVal is 5
-PASS feGaussianBlur.stdDeviationY.animVal is 5
-PASS feGaussianBlur.stdDeviationX.baseVal is 5
-PASS feGaussianBlur.stdDeviationY.baseVal is 5
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-2.html b/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-2.html
deleted file mode 100644
index 3b89df31..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-2.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumberoptionalnumber-animation-2.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-3-expected.txt b/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-3-expected.txt
deleted file mode 100644
index eb90955..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-3-expected.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-SVG 1.1 dynamic animation tests
-
-Test 'to' animation of SVGNumberOptionalNumber without optional number.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-PASS feGaussianBlur.stdDeviationX.animVal is 40
-PASS feGaussianBlur.stdDeviationY.animVal is 10
-PASS feGaussianBlur.stdDeviationX.baseVal is 40
-PASS feGaussianBlur.stdDeviationY.baseVal is 10
-PASS feGaussianBlur.stdDeviationX.animVal is 22.5
-PASS feGaussianBlur.stdDeviationY.animVal is 7.5
-PASS feGaussianBlur.stdDeviationX.baseVal is 40
-PASS feGaussianBlur.stdDeviationY.baseVal is 10
-PASS feGaussianBlur.stdDeviationX.animVal is 5
-PASS feGaussianBlur.stdDeviationY.animVal is 5
-PASS feGaussianBlur.stdDeviationX.baseVal is 40
-PASS feGaussianBlur.stdDeviationY.baseVal is 10
-PASS feGaussianBlur.stdDeviationX.animVal is 40
-PASS feGaussianBlur.stdDeviationY.animVal is 10
-PASS feGaussianBlur.stdDeviationX.baseVal is 40
-PASS feGaussianBlur.stdDeviationY.baseVal is 10
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-3.html b/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-3.html
deleted file mode 100644
index 84fd466e..0000000
--- a/third_party/blink/web_tests/svg/animations/svgnumberoptionalnumber-animation-3.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src="../../resources/js-test.js"></script>
-<script src="resources/SVGTestCase.js"></script>
-<script src="resources/SVGAnimationTestCase.js"></script>
-</head>
-<body onload="runSMILTest()">
-<h1>SVG 1.1 dynamic animation tests</h1>
-<p id="description"></p>
-<div id="console"></div>
-<script src="script-tests/svgnumberoptionalnumber-animation-3.js"></script>
-</body>
-</html>
diff --git a/third_party/blink/web_tests/svg/filters/feImage-preserveAspectRatio-all-expected.png b/third_party/blink/web_tests/svg/filters/feImage-preserveAspectRatio-all-expected.png
index d52e71d..134cc4c 100644
--- a/third_party/blink/web_tests/svg/filters/feImage-preserveAspectRatio-all-expected.png
+++ b/third_party/blink/web_tests/svg/filters/feImage-preserveAspectRatio-all-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/audio-service/external/wpt/mediacapture-streams/README.txt b/third_party/blink/web_tests/virtual/audio-service/external/wpt/mediacapture-streams/README.txt
new file mode 100644
index 0000000..53221e3
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/audio-service/external/wpt/mediacapture-streams/README.txt
@@ -0,0 +1,2 @@
+Runs external/wpt/mediacapture-streams tests with
+--enable-features=AudioServiceOutOfProcess,AudioServiceSandbox
diff --git a/third_party/blink/web_tests/virtual/audio-service/http/tests/media/README.txt b/third_party/blink/web_tests/virtual/audio-service/http/tests/media/README.txt
new file mode 100644
index 0000000..ff4c6ba
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/audio-service/http/tests/media/README.txt
@@ -0,0 +1,2 @@
+Runs http/tests/media tests with
+--enable-features=AudioServiceOutOfProcess,AudioServiceSandbox
diff --git a/third_party/blink/web_tests/virtual/audio-service/media/README.txt b/third_party/blink/web_tests/virtual/audio-service/media/README.txt
new file mode 100644
index 0000000..bcd289d
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/audio-service/media/README.txt
@@ -0,0 +1,2 @@
+Runs media tests with
+--enable-features=AudioServiceOutOfProcess,AudioServiceSandbox
diff --git a/third_party/blink/web_tests/virtual/cache-storage-parallel/external/wpt/service-workers/README.txt b/third_party/blink/web_tests/virtual/cache-storage-parallel/external/wpt/service-workers/README.txt
new file mode 100644
index 0000000..8e43317
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/cache-storage-parallel/external/wpt/service-workers/README.txt
@@ -0,0 +1,4 @@
+This suite runs the ServiceWorker and CacheStorage tests with the
+CacheStorageParallelOps feature enabled and set to 64 maximum shared
+operations.  This makes cache_storage execute read operations in
+parallel.
diff --git a/third_party/blink/web_tests/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png b/third_party/blink/web_tests/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
new file mode 100644
index 0000000..c388a509
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/controls-refresh/fast/forms/controls-new-ui/color/color-picker-appearance-hsl-format-expected.png
Binary files differ
diff --git a/third_party/closure_compiler/closure_args.gni b/third_party/closure_compiler/closure_args.gni
index c628c25..8a3a620 100644
--- a/third_party/closure_compiler/closure_args.gni
+++ b/third_party/closure_compiler/closure_args.gni
@@ -44,4 +44,21 @@
                          "js_module_root=gen/ui/webui/resources/",
                        ]
 
+polymer3_args = [
+  "browser_resolver_prefix_replacements=\"../polymer/polymer_bundled.min.js=../polymer/polymer_bundled.js\"",
+  "browser_resolver_prefix_replacements=\"chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js=../../third_party/polymer/v3_0/components-chromium/polymer/polymer_bundled.js\"",
+  "browser_resolver_prefix_replacements=\"chrome://resources/polymer/v3_0/=../../third_party/polymer/v3_0/components-chromium/\"",
+
+  # Turn off, primarily because cr.define() should not be used in any
+  # Polymer3/JS module code, but also because of b/133333578.
+  "chrome_pass=false",
+  "hide_warnings_for=externs.zip",
+  "hide_warnings_for=../../third_party/polymer/v3_0/components-chromium/",
+  "module_resolution=BROWSER_WITH_TRANSFORMED_PREFIXES",
+  "polymer_pass=false",
+
+  # Note: "2" is counter-intuitively the correct value to use for Polymer 3.
+  "polymer_version=2",
+]
+
 default_disabled_closure_args = [ "jscomp_off=duplicate" ]
diff --git a/third_party/closure_compiler/compile_js.gni b/third_party/closure_compiler/compile_js.gni
index c1989e73..2686aa6 100644
--- a/third_party/closure_compiler/compile_js.gni
+++ b/third_party/closure_compiler/compile_js.gni
@@ -162,6 +162,7 @@
                              "externs_list",
                              "extra_deps",
                              "outputs",
+                             "is_polymer3",
                              "sources",
                              "testonly",
                            ])
@@ -208,26 +209,41 @@
       sources += config_files
     }
 
+    if (defined(checks_only) && checks_only) {
+      args += [ "--checks-only" ]
+    }
+
+    if (!defined(is_polymer3)) {
+      is_polymer3 = false
+    }
+
     # |minifying_closure_args| from
     # //third_party/closure_compiler/closure_args.gni
     if (!defined(closure_flags)) {
       closure_flags = default_closure_args
-    }
-    if (defined(checks_only) && checks_only) {
-      args += [ "--checks-only" ]
+
+      if (is_polymer3) {
+        closure_flags += polymer3_args
+      }
     }
     args += [ "--flags" ] + closure_flags
     args += [
       "--externs",
       rebase_path("$chrome_externs", root_build_dir),
-      rebase_path("$polymer_externs", root_build_dir),
     ]
     inputs = [
+      "$script_path/closure_args.gni",
       chrome_externs,
       compiler_path,
-      polymer_externs,
     ]
 
+    # |polymer_externs| should only be added for Polymer versions 1 and 2. For
+    # Polymer3, Polymer sources are directly passed to the compiler instead.
+    if (!is_polymer3) {
+      args += [ rebase_path("$polymer_externs", root_build_dir) ]
+      inputs += [ polymer_externs ]
+    }
+
     if (defined(externs_list)) {
       args += rebase_path(externs_list, root_build_dir)
       sources += externs_list
@@ -250,8 +266,9 @@
       checks_only = true
       forward_variables_from(invoker,
                              [
-                               "deps",
                                "closure_flags",
+                               "deps",
+                               "is_polymer3",
                                "testonly",
                              ])
     }
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js
index 61863b16..e8b7d01 100644
--- a/third_party/closure_compiler/externs/file_manager_private.js
+++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -234,6 +234,8 @@
 chrome.fileManagerPrivate.CrostiniEventType = {
   ENABLE: 'enable',
   DISABLE: 'disable',
+  ROOT_ACCESS_ALLOW: 'root_access_allow',
+  ROOT_ACCESS_DISALLOW: 'root_access_disallow',
   SHARE: 'share',
   UNSHARE: 'unshare',
 };
diff --git a/third_party/feed/README.chromium b/third_party/feed/README.chromium
index c9f5e78..58d8f488 100644
--- a/third_party/feed/README.chromium
+++ b/third_party/feed/README.chromium
@@ -2,7 +2,7 @@
 Short name: feed
 URL: https://chromium.googlesource.com/feed
 Version: 0
-Revision: 24f0eac37fc3d70ff410b0391f7a0cadc018df9a
+Revision: 4f87f10f5d5a589dbfd10815222d5d37fe267f06
 License: Apache 2.0
 License File: LICENSE
 Security Critical: yes
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index 6a3b63e..4910e0f 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-10-1-6-g12af46b64
-Revision: 12af46b649fdb946bacf150428e5cdfc3470a7ca
+Version: VER-2-10-1-7-gad3443c93
+Revision: ad3443c93121c59181fc4b46c5179d0d00bfcc4e
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
 License File: src/docs/FTL.TXT
diff --git a/third_party/libcxx-pretty-printers/OWNERS b/third_party/libcxx-pretty-printers/OWNERS
index 69436af..495b84f4 100644
--- a/third_party/libcxx-pretty-printers/OWNERS
+++ b/third_party/libcxx-pretty-printers/OWNERS
@@ -1,3 +1,4 @@
 dpranke@chromium.org
 leszeks@chromium.org
 thomasanderson@chromium.org
+# COMPONENT: Tools
diff --git a/third_party/wayland-protocols/unstable/remote-shell/remote-shell-unstable-v1.xml b/third_party/wayland-protocols/unstable/remote-shell/remote-shell-unstable-v1.xml
index a521701..d5ed3acf 100644
--- a/third_party/wayland-protocols/unstable/remote-shell/remote-shell-unstable-v1.xml
+++ b/third_party/wayland-protocols/unstable/remote-shell/remote-shell-unstable-v1.xml
@@ -38,7 +38,7 @@
     reset.
   </description>
 
-  <interface name="zcr_remote_shell_v1" version="21">
+  <interface name="zcr_remote_shell_v1" version="22">
     <description summary="remote_shell">
       The global interface that allows clients to turn a wl_surface into a
       "real window" which is remotely managed but can be stacked, activated
diff --git a/tools/clang/translation_unit/TranslationUnitGenerator.cpp b/tools/clang/translation_unit/TranslationUnitGenerator.cpp
index 2493b63a..9a2ee78 100644
--- a/tools/clang/translation_unit/TranslationUnitGenerator.cpp
+++ b/tools/clang/translation_unit/TranslationUnitGenerator.cpp
@@ -144,6 +144,14 @@
   source_file_paths_->insert(path);
 }
 
+template <typename T>
+static T* getValueOrNull(llvm::ErrorOr<T*> maybe_val) {
+  if (maybe_val) {
+    return *maybe_val;
+  }
+  return nullptr;
+}
+
 void IncludeFinderPPCallbacks::InclusionDirective(
     clang::SourceLocation hash_loc,
     const clang::Token& include_tok,
@@ -160,12 +168,20 @@
     return;
 
   assert(!current_files_.top().empty());
+#ifdef LLVM_FORCE_HEAD_REVISION
+  const clang::DirectoryEntry* const search_path_entry = getValueOrNull(
+      source_manager_->getFileManager().getDirectory(search_path));
+  const clang::DirectoryEntry* const current_file_parent_entry =
+      (*source_manager_->getFileManager().getFile(current_files_.top().c_str()))
+          ->getDir();
+#else
   const clang::DirectoryEntry* const search_path_entry =
       source_manager_->getFileManager().getDirectory(search_path);
   const clang::DirectoryEntry* const current_file_parent_entry =
       source_manager_->getFileManager()
           .getFile(current_files_.top().c_str())
           ->getDir();
+#endif
 
   // If the include file was found relatively to the current file's parent
   // directory or a search path, we need to normalize it. This is necessary
diff --git a/tools/fuchsia/local-sdk.py b/tools/fuchsia/local-sdk.py
index 51db83b0..4a3610c 100755
--- a/tools/fuchsia/local-sdk.py
+++ b/tools/fuchsia/local-sdk.py
@@ -37,7 +37,8 @@
   Run('scripts/fx', '--dir', build_dir, 'set', 'terminal.qemu-'+ arch,
       '--with=//topaz/packages/sdk:topaz', '--with-base=//sdk/bundles:tools',
       '--args=is_debug=false', '--args=build_sdk_archives=true')
-  Run('scripts/fx', 'build', 'topaz/public/sdk:fuchsia_dart', 'sdk')
+  Run('scripts/fx', 'build', 'topaz/public/sdk:fuchsia_dart', 'sdk',
+      'build/images')
 
 
 def main(args):
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index ba3af5a..12a5e2c 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -419,9 +419,9 @@
       ('infra/tools/luci/logdog/butler/${platform}',
        'git_revision:e1abc57be62d198b5c2f487bfb2fa2d2eb0e867c'),
       ('infra/tools/luci/vpython-native/${platform}',
-       'git_revision:cc09450f1c27c0034ec08b1f6d63bbc298294763'),
+       'git_revision:98a268c6432f18aedd55d62b9621765316dc2a16'),
       ('infra/tools/luci/vpython/${platform}',
-       'git_revision:cc09450f1c27c0034ec08b1f6d63bbc298294763'),
+       'git_revision:98a268c6432f18aedd55d62b9621765316dc2a16'),
     ]
     for pkg, vers in cipd_packages:
       cmd.append('--cipd-package=.swarming_module:%s:%s' % (pkg, vers))
@@ -519,7 +519,7 @@
     if self.platform == 'darwin':
       os_dim = ('os', 'Mac-10.13')
     elif self.platform.startswith('linux'):
-      os_dim = ('os', 'Ubuntu-14.04')
+      os_dim = ('os', 'Ubuntu-16.04')
     elif self.platform == 'win32':
       os_dim = ('os', 'Windows-10')
     else:
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index ebd83ca..7b67dc5 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -75,17 +75,7 @@
 
     'chromium.android.fyi': {
       'Memory Infra Tester': 'android_release_thumb_bot',
-      'NDK Next arm Builder':
-        'android_ndk_next_release_bot_minimal_symbols',
-      'NDK Next arm64 Builder':
-        'android_ndk_next_release_bot_minimal_symbols_arm64',
-      'NDK Next x64 Builder':
-        'android_ndk_next_release_bot_minimal_symbols_x64',
-      'NDK Next x86 Builder':
-        'android_ndk_next_release_bot_minimal_symbols_x86',
-      'x64 Device Tester': 'android_shared_release_bot_x64',
-      'x86 Cloud Tester': 'android_debug_static_bot_x86',
-      'x86 Emulator Tester': 'android_debug_static_bot_x86',
+      'android-pie-x86-fyi-rel': 'android_release_bot_minimal_symbols_x86',
     },
 
     'chromium.chromedriver': {
@@ -407,7 +397,7 @@
       'GPU FYI Win x64 Builder': 'gpu_fyi_tests_release_trybot',
       'GPU FYI Win x64 Builder (dbg)': 'gpu_fyi_tests_debug_trybot',
       'GPU FYI Win x64 dEQP Builder': 'deqp_release_trybot',
-      'GPU FYI XR Win Builder': 'gpu_fyi_tests_release_trybot_x86',
+      'GPU FYI XR Win x64 Builder': 'gpu_fyi_tests_release_trybot',
       'Linux FYI GPU TSAN Release': 'gpu_fyi_tests_release_trybot_tsan',
       'Mac FYI GPU ASAN Release': 'gpu_fyi_tests_release_trybot_asan',
       'Optional Android Release (Nexus 5X)': 'gpu_tests_android_release_trybot_arm64',
@@ -639,6 +629,7 @@
       'android-marshmallow-arm64-rel': 'gpu_tests_android_release_trybot_arm64_resource_whitelisting',
       'android-oreo-arm64-cts-networkservice-dbg': 'android_debug_trybot_arm64',
       'android-oreo-arm64-rel': 'android_release_trybot_arm64_webview_google',
+      'android-pie-x86-fyi-rel': 'android_release_trybot_x86',
       'android_archive_rel_ng': 'android_release_trybot',
       'android_arm64_dbg_recipe': 'android_debug_trybot_compile_only_arm64',
       'android-binary-size': 'android_binary_size',
@@ -692,8 +683,10 @@
       'linux_angle_ozone_rel_ng': 'gpu_fyi_tests_ozone_linux_system_gbm_libdrm_release_trybot',
       'linux_angle_deqp_rel_ng': 'deqp_release_trybot',
       'mac-angle-rel': 'gpu_fyi_tests_release_trybot',
-      'win-angle-rel': 'gpu_fyi_tests_release_trybot_x86',
-      'win_angle_deqp_rel_ng': 'deqp_release_trybot_x86',
+      'win-angle-rel-32': 'gpu_fyi_tests_release_trybot_x86',
+      'win-angle-rel-64': 'gpu_fyi_tests_release_trybot',
+      'win-angle-deqp-rel-32': 'deqp_release_trybot_x86',
+      'win-angle-deqp-rel-64': 'deqp_release_trybot',
     },
 
     'tryserver.chrome': {
@@ -843,20 +836,20 @@
     },
 
     'tryserver.chromium.win': {
-      'gpu-fyi-try-win-xr-builder': 'gpu_fyi_tests_release_trybot_x86',
-      'gpu-fyi-try-win7-amd-dbg': 'gpu_fyi_tests_debug_trybot_x86',
-      'gpu-fyi-try-win7-amd-dqp': 'deqp_release_trybot_x86',
-      'gpu-fyi-try-win7-amd-rel': 'gpu_fyi_tests_release_trybot_x86',
+      'gpu-fyi-try-win-xr-builder-64': 'gpu_fyi_tests_release_trybot',
+      'gpu-fyi-try-win7-amd-dbg-32': 'gpu_fyi_tests_debug_trybot_x86',
+      'gpu-fyi-try-win7-amd-dqp-32': 'deqp_release_trybot_x86',
+      'gpu-fyi-try-win7-amd-rel-32': 'gpu_fyi_tests_release_trybot_x86',
       'gpu-fyi-try-win7-nvidia-dqp-64': 'deqp_release_trybot',
-      'gpu-fyi-try-win7-nvidia-rel': 'gpu_fyi_tests_release_trybot_x86',
+      'gpu-fyi-try-win7-nvidia-rel-32': 'gpu_fyi_tests_release_trybot_x86',
       'gpu-fyi-try-win7-nvidia-rel-64': 'gpu_fyi_tests_release_trybot',
-      'gpu-fyi-try-win10-intel-dqp': 'deqp_release_trybot_x86',
+      'gpu-fyi-try-win10-intel-dqp-64': 'deqp_release_trybot',
       'gpu-fyi-try-win10-intel-exp-64': 'gpu_fyi_tests_release_trybot',
-      'gpu-fyi-try-win10-intel-rel': 'gpu_fyi_tests_release_trybot_x86',
-      'gpu-fyi-try-win10-nvidia-dbg': 'gpu_fyi_tests_debug_trybot_x86',
-      'gpu-fyi-try-win10-nvidia-dqp': 'deqp_release_trybot_x86',
+      'gpu-fyi-try-win10-intel-rel-64': 'gpu_fyi_tests_release_trybot',
+      'gpu-fyi-try-win10-nvidia-dbg-64': 'gpu_fyi_tests_debug_trybot',
+      'gpu-fyi-try-win10-nvidia-dqp-64': 'deqp_release_trybot',
       'gpu-fyi-try-win10-nvidia-exp-64': 'gpu_fyi_tests_release_trybot',
-      'gpu-fyi-try-win10-nvidia-rel': 'gpu_fyi_tests_release_trybot_x86',
+      'gpu-fyi-try-win10-nvidia-rel-64': 'gpu_fyi_tests_release_trybot',
       'gpu-try-win10-nvidia-dbg': 'gpu_tests_debug_trybot_x86',
       'gpu-try-win10-nvidia-rel': 'gpu_tests_release_trybot_x86_resource_whitelisting',
       'win10_chromium_x64_dbg_ng': 'gpu_tests_debug_trybot',
@@ -874,7 +867,7 @@
       'win_chromium_dbg_ng': 'gpu_tests_debug_trybot_x86',
       'win_chromium_x64_rel_ng': 'gpu_tests_release_trybot',
       'win_mojo': 'release_trybot_x86',
-      'win_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot_x86',
+      'win_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot',
       'win_upload_clang': 'release_bot',
     },
 
@@ -1070,22 +1063,6 @@
       'android', 'jumbo', 'release_bot', 'minimal_symbols',
     ],
 
-    'android_ndk_next_release_bot_minimal_symbols': [
-      'android', 'ndk_next', 'release_bot', 'minimal_symbols', 'strip_debug_info',
-    ],
-
-    'android_ndk_next_release_bot_minimal_symbols_arm64': [
-      'android', 'ndk_next', 'release_bot', 'minimal_symbols', 'arm64', 'strip_debug_info',
-    ],
-
-    'android_ndk_next_release_bot_minimal_symbols_x64': [
-      'android', 'ndk_next', 'release_bot', 'minimal_symbols', 'x64', 'strip_debug_info',
-    ],
-
-    'android_ndk_next_release_bot_minimal_symbols_x86': [
-      'android', 'ndk_next', 'release_bot', 'minimal_symbols', 'x86', 'strip_debug_info',
-    ],
-
     'android_release_bot_minimal_symbols': [
       'android', 'release_bot', 'minimal_symbols',
       'strip_debug_info',
@@ -1101,6 +1078,11 @@
       'strip_debug_info', 'webview_google',
     ],
 
+    'android_release_bot_minimal_symbols_x86': [
+      'android', 'release_bot', 'minimal_symbols', 'x86',
+      'strip_debug_info',
+    ],
+
     'android_release_thumb_bot': [
       'android', 'release_bot', 'arm_thumb',
     ],
@@ -1118,8 +1100,8 @@
       'webview_google',
     ],
 
-    'android_shared_release_bot_x64': [
-      'android_without_codecs', 'shared_release_bot', 'x64', 'dcheck_always_on',
+    'android_release_trybot_x86': [
+      'android', 'release_trybot', 'strip_debug_info', 'x86',
     ],
 
     'android_webview_google_debug_static_bot': [
@@ -2250,12 +2232,6 @@
       'gn_args': 'is_msan=true msan_track_origins=0 use_prebuilt_instrumented_libraries=true',
     },
 
-    'ndk_next': {
-      # GCC is unsupported starting in r13.
-      'mixins': ['clang'],
-      'gn_args': 'android_ndk_version="r13b" android_ndk_major_version=13',
-    },
-
     'no_com_init_hooks': {
       'gn_args': 'com_init_check_hook_disabled=true',
     },
@@ -2291,8 +2267,8 @@
 
     'ozone_linux': {
       'gn_args': ('ozone_auto_platforms=false ozone_platform_wayland=true '
-                  'ozone_platform="x11" '
-                  'ozone_platform_x11=true ozone_platform_gbm=true '
+                  'ozone_platform_headless=true ozone_platform_x11=true '
+                  'ozone_platform_gbm=true '
                   'use_xkbcommon=true use_ozone=true'),
     },
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 5abfe39..a0c9145 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -36573,6 +36573,7 @@
   <int value="1373777956" label="disable-threaded-gpu-rasterization"/>
   <int value="1375165388" label="LazyFrameLoading:enabled"/>
   <int value="1376437124" label="show-cert-link"/>
+  <int value="1376535351" label="PrefetchRedirectError:enabled"/>
   <int value="1377056573" label="browser-side-navigation:enabled"/>
   <int value="1378310092" label="disable-suggestions-service"/>
   <int value="1379944457" label="EnableMessagesWebPush:disabled"/>
@@ -36690,6 +36691,7 @@
   <int value="1559034872" label="AutofillPrefilledFields:enabled"/>
   <int value="1560188739" label="reader-mode-heuristics"/>
   <int value="1563255033" label="memlog-stack-mode"/>
+  <int value="1566084951" label="PrefetchRedirectError:disabled"/>
   <int value="1567839560"
       label="ChromeHomePersonalizedOmniboxSuggestions:disabled"/>
   <int value="1571998166" label="DetectingHeavyPages:disabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 8c952a3d..85f90fc 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -54061,7 +54061,7 @@
   <obsolete>
     Removed 2019-07.
   </obsolete>
-  <owner>joenotcharles@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Fine-grained (in msec) time between closing a Javascript dialog and opening
     another, to track very frequent dialogs.
@@ -54074,7 +54074,7 @@
   <obsolete>
     Removed 2019-07.
   </obsolete>
-  <owner>joenotcharles@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Fine-grained (in msec) time between opening a Javascript dialog and opening
     another, to track very frequent dialogs.
@@ -54087,7 +54087,7 @@
   <obsolete>
     Removed 2019-07.
   </obsolete>
-  <owner>joenotcharles@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Fine-grained (in msec) time between opening a Javascript dialog and closing
     it, to track very short-lived dialogs.
@@ -86103,7 +86103,8 @@
     requests to the peak observed queueing delay. The score is the percentage of
     total samples that follow the rule 'the more in-flight requests, the higher
     peak queueing delay' when a new peak queueing delay mapping sample is
-    acquired. This is emitted at the end of the current measurement period.
+    acquired. This is emitted at the end of the current measurement period and
+    only when there are at least 10 cached mapping samples.
   </summary>
 </histogram>
 
@@ -95248,6 +95249,18 @@
 
 <histogram name="PaintHolding.InputTiming" enum="PaintHoldingInputTiming"
     expires_after="M80">
+  <obsolete>
+    Replaced with PaintHolding.InputTiming2 in M-79.
+  </obsolete>
+  <owner>schenney@chromium.org</owner>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Records whether or not input arrived before the first commit.
+  </summary>
+</histogram>
+
+<histogram name="PaintHolding.InputTiming2" enum="PaintHoldingInputTiming"
+    expires_after="M80">
   <owner>schenney@chromium.org</owner>
   <owner>paint-dev@chromium.org</owner>
   <summary>
@@ -124041,6 +124054,18 @@
   </summary>
 </histogram>
 
+<histogram name="ServiceWorkerCache.PeakParallelSharedOps" units="operations"
+    expires_after="M85">
+  <owner>wanderview@chromium.org</owner>
+  <owner>chrome-owp-storage@google.com</owner>
+  <summary>
+    The peak number of shared operations that ran simultaneously during a single
+    &quot;batch&quot; of operations. A batch is defined as the time from when an
+    idle scheduler begins running a shared operation until the count of running
+    shared operations drops back to zero.
+  </summary>
+</histogram>
+
 <histogram name="ServiceWorkerCache.Response.HasDeprecatedURL" enum="Boolean"
     expires_after="M77">
   <obsolete>
@@ -130359,7 +130384,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.CleaningTime" units="ms">
-  <owner>alito@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The time between sending the user's response to the Chrome Cleaner process
     and the Cleaner process terminating. This histogram is logged only for
@@ -130369,7 +130394,7 @@
 
 <histogram name="SoftwareReporter.Cleaner.CleanupResult"
     enum="SoftwareReporterCleanupResult">
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The final status of the Chrome Cleanup Tool run (e.g. succeeded, failed,
     reboot required).
@@ -130382,15 +130407,15 @@
     Deprecated as of 09/2017. Replaced with
     SoftwareReporter.Cleaner.DownloadStatusErrorCode.
   </obsolete>
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The HTTP response code for the Chrome Cleanup Tool download request.
   </summary>
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.DownloadStatus"
-    enum="SoftwareReporterCleanerDownloadStatus" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterCleanerDownloadStatus" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     An indication if an attempt to download the Chrome Cleanup Tool succeeded or
     the reason why it failed.
@@ -130398,8 +130423,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.DownloadStatusErrorCode"
-    enum="CombinedHttpResponseAndNetErrorCode" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="CombinedHttpResponseAndNetErrorCode" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The HTTP response or net error code when trying to download the Chrome
     Cleanup Tool.
@@ -130407,7 +130432,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.HasCompleted" enum="SRTCompleted">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The state of software reporter cleaner tool runs. A value of &quot;Not
     Completed&quot; can mean either the tool crashed, or the tool was still
@@ -130416,7 +130441,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.HasRebooted" enum="BooleanRebooted">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether a reboot happened since the software reporter cleaner tool has
     finished execution with a pre-reboot exit code.
@@ -130428,7 +130453,7 @@
   <obsolete>
     Deprecated on 2018-01-15.
   </obsolete>
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The number of attempts to download the Chrome Cleanup tool until it either
     succeeds or fails.
@@ -130440,7 +130465,7 @@
   <obsolete>
     Deprecated on 2019-05-29.
   </obsolete>
-  <owner>veranika@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Indicates how the user was prompted to reboot the machine to complete a run
     of the Chrome Cleanup Tool.
@@ -130448,7 +130473,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.RebootResponse" enum="Boolean">
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Indicates that the user accepted to initiate a reboot to complete a run of
     the Chrome Cleanup Tool. This is logged the user starts a reboot from the
@@ -130459,12 +130484,12 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.RunningTime" units="ms">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>How long it took to run the software reporter cleaner tool.</summary>
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.ScanningTime" units="ms">
-  <owner>alito@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The time between launching the Chrome Cleaner process and the cleaner having
     scanned the user's machine and Chrome receiving an IPC call with the
@@ -130474,7 +130499,7 @@
 
 <histogram name="SoftwareReporter.Cleaner.SettingsPageActiveOnRebootRequired"
     enum="SoftwareReporterCleanerSettingsPageActiveOnRebootRequired">
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Indicates if the Settings page was the active tab once a cleanup finished
     with reboot required.
@@ -130482,7 +130507,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.TimeToCompleteDownload" units="ms">
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The time between the first attempt to download the Chrome Cleanup tool and a
     successful download or the last unsuccessful attempt to download without
@@ -130491,13 +130516,13 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Cleaner.Version">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>The build version of the software reporter cleaner tool.</summary>
 </histogram>
 
 <histogram name="SoftwareReporter.CleanerLogsAcceptance" enum="BooleanAccepted"
-    expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether the user accepted to upload logs from Chrome Cleanup Tool. This is
     logged when the user accepts the Chrome prompt to start a cleanup either
@@ -130506,8 +130531,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.CleanupCard" enum="Boolean"
-    expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether the Chrome Cleanup Tool card in the Settings page has been shown.
   </summary>
@@ -130515,7 +130540,7 @@
 
 <histogram name="SoftwareReporter.CleanupStarted"
     enum="SoftwareReporterCleanupStarted">
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Indicates where the user started a cleanup from (e.g. from the prompt dialog
     or the settings page).
@@ -130524,7 +130549,7 @@
 
 <histogram name="SoftwareReporter.ExperimentErrors"
     enum="SoftwareReporterExperimentError">
-  <owner>joenotcharles@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether a configuration error prevented the experimental Software Reporter
     from running.
@@ -130532,7 +130557,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.FoundUwSReadError" enum="BooleanError">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether there was an error reading the registry key containing UwS found by
     the Software Removal Tool.
@@ -130540,8 +130565,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.IPCDisconnected"
-    enum="SoftwareReporterIPCDisconnected" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterIPCDisconnected" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Indicates when the IPC with the Chrome Cleanup Tool process is disconnected
     from Chrome. Success is logged when it's disconnected and no longer needed
@@ -130554,13 +130579,13 @@
 </histogram>
 
 <histogram name="SoftwareReporter.LastUploadResult" enum="BooleanSuccess">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>The result of the most recent SRT log upload.</summary>
 </histogram>
 
 <histogram name="SoftwareReporter.LogsUploadEnabled"
-    enum="SoftwareReporterLogsUploadEnabled" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterLogsUploadEnabled" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     If logs uploads are enabled in the Software Reporter or the reason why it is
     disabled. Recorded before each run of the Software Reporter.
@@ -130568,8 +130593,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.LogsUploadResult"
-    enum="SoftwareReporterLogsUploadResult" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterLogsUploadResult" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The result of the most recent Software Reporter logs upload. Written by the
     Software Reporter in the registry and sent by Chrome after the reporter
@@ -130578,8 +130603,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.LogsUploadResultRegistryError"
-    enum="SoftwareReporterLogsUploadResultRegistryError" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterLogsUploadResultRegistryError" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Error encountered when reading the software reporter logs upload result from
     the registry.
@@ -130587,7 +130612,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.MajorVersion">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     As SoftwareReporter.MinorVersion, but a double word combination of the other
     components of the version of the software reporter. The high word is the
@@ -130597,7 +130622,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.MemoryUsed" units="KB">
-  <owner>alito@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The memory used by the software reporter tool as reported by the tool itself
     via the registry. Logged just after the software reporter tool has finished.
@@ -130605,7 +130630,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.MinorVersion">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The last component of the version of the software reporter that was executed
     so we can identify when users are not getting their component updated as
@@ -130614,8 +130639,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.NoPromptReason"
-    enum="SoftwareReporterNoPromptReason" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterNoPromptReason" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The reason why the user has not been prompted to run the Chrome Cleanup Tool
     (e.g. no unwanted software found, user recently prompted).
@@ -130623,16 +130648,16 @@
 </histogram>
 
 <histogram name="SoftwareReporter.NumberOfFilesToDelete" units="counts"
-    expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The number of files to be deleted by the Chrome Cleanup Tool.
   </summary>
 </histogram>
 
 <histogram name="SoftwareReporter.OnDemandUpdateRequired"
-    enum="BooleanRequired" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="BooleanRequired" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether an on-demand update of the Software Reporter component was needed
     for a user-initiated cleanup.
@@ -130640,8 +130665,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.OnDemandUpdateSucceeded"
-    enum="BooleanSuccess" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="BooleanSuccess" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether an on-demand update of the Software Reporter component succeeded,
     when needed for a user-initiated cleanup.
@@ -130649,8 +130674,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.PostCleanupSettingsReset" units="counts"
-    expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The number of profiles whose settings will be reset once a successful
     cleanup completes.
@@ -130658,7 +130683,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.PromptDialog.TimeUntilDone" units="ms">
-  <owner>alito@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The time between the Chrome Cleaner dialog being shown and the dialog being
     closed.
@@ -130666,8 +130691,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.PromptDialogResponse"
-    enum="SoftwareReporterPromptDialogResponse" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterPromptDialogResponse" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The user response on the modal Chrome Cleanup Tool prompt dialog (e.g.
     accepted, cancelled).
@@ -130679,15 +130704,15 @@
   <obsolete>
     Replaced 2017-08-01 with SoftwareReporter.PromptShownWithType.
   </obsolete>
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether the user has been prompted to run the Chrome Cleanup Tool.
   </summary>
 </histogram>
 
 <histogram name="SoftwareReporter.PromptShownWithType"
-    enum="SoftwareReporterPromptShownWithType" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterPromptShownWithType" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether the user has been prompted to run the Chrome Cleanup Tool and which
     type of prompt has been shown.
@@ -130702,19 +130727,19 @@
     Deprecated as of 2017-11-01. Replaced with
     SoftwareReporter.PromptDialogResponse.
   </obsolete>
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>Usage of the Software Removal Tool (SRT) Prompt.</summary>
 </histogram>
 
 <histogram name="SoftwareReporter.ReporterSequenceResult"
     enum="SoftwareReporterSequenceResult">
-  <owner>ftirelo@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>Indicates the result of a reporter sequence once it ends.</summary>
 </histogram>
 
 <histogram name="SoftwareReporter.ReporterSequenceType"
-    enum="SoftwareReporterSequenceType" expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    enum="SoftwareReporterSequenceType" expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Indicates the type of a reporter sequence run on the user system. Logged
     when the sequence is scheduled to start.
@@ -130722,7 +130747,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.RunningTime" units="ms">
-  <owner>alito@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The amount of time it took to run the software reporter tool as reported by
     the tool itself via the registry. Logged just after the software reporter
@@ -130731,7 +130756,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.RunningTimeAccordingToChrome" units="ms">
-  <owner>alito@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The amount of time it took for the software reporter to run as measured by
     chrome. Logged just after the software reporter tool has finished.
@@ -130740,7 +130765,7 @@
 
 <histogram name="SoftwareReporter.RunningTimeRegistryError"
     enum="SwReporterRunningTimeRegistryError">
-  <owner>alito@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Error encountered when reading the software reporter tool's start and end
     times from the registry.
@@ -130748,8 +130773,8 @@
 </histogram>
 
 <histogram name="SoftwareReporter.ScannerLogsAcceptance" enum="BooleanAccepted"
-    expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Whether the user accepted to upload scanner logs from Chrome Cleanup Tool.
     This is logged when the user starts a scan for the Settings page and is only
@@ -130758,15 +130783,15 @@
 </histogram>
 
 <histogram name="SoftwareReporter.Step" enum="SwReporterStep">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The registration and execution steps for the software reporter.
   </summary>
 </histogram>
 
 <histogram name="SoftwareReporter.TaggedProfileForResetting" enum="Boolean"
-    expires_after="M77">
-  <owner>ftirelo@chromium.org</owner>
+    expires_after="M90">
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Registers when a profile is tagged for settings reset before a run of the
     Chrome Cleanup Tool.
@@ -130774,7 +130799,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.UploadFailureCount">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The total count of SRT log upload failures experienced by this machine for
     all time. This value is reported at startup by Chrome and is capped at 64.
@@ -130782,7 +130807,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.UploadLongestFailureRun">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The longest run of upload failures logged by SRT runs. This value is
     reported at startup by Chrome and is capped at 64.
@@ -130790,7 +130815,7 @@
 </histogram>
 
 <histogram name="SoftwareReporter.UploadSuccessCount">
-  <owner>mad@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     The total count of successful SRT log uploads experienced by this machine
     for all time. This value is reported at startup by Chrome and is capped at
@@ -139461,7 +139486,7 @@
   <obsolete>
     Removed 2019-07.
   </obsolete>
-  <owner>joenotcharles@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Fine-grained (in msec) time between closing a tab and opening another, to
     track very frequent tabs.
@@ -139473,7 +139498,7 @@
   <obsolete>
     Removed 2019-07.
   </obsolete>
-  <owner>joenotcharles@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Fine-grained (in msec) time between opening a tab and opening another, to
     track very frequent tabs.
@@ -139485,7 +139510,7 @@
   <obsolete>
     Removed 2019-07.
   </obsolete>
-  <owner>joenotcharles@chromium.org</owner>
+  <owner>joenotcharles@google.com</owner>
   <summary>
     Fine-grained (in msec) time between opening a tab and closing it, to track
     very short-lived tabs.
diff --git a/tools/perf/benchmarks/benchmark_smoke_unittest.py b/tools/perf/benchmarks/benchmark_smoke_unittest.py
index 57880a1..b9ad8db 100644
--- a/tools/perf/benchmarks/benchmark_smoke_unittest.py
+++ b/tools/perf/benchmarks/benchmark_smoke_unittest.py
@@ -24,7 +24,6 @@
 from py_utils import tempfile_ext
 
 from benchmarks import jetstream
-from benchmarks import kraken
 from benchmarks import octane
 from benchmarks import rasterize_and_record_micro
 from benchmarks import speedometer
@@ -104,7 +103,6 @@
     rasterize_and_record_micro,  # Always fails on cq bot.
     speedometer,  # Takes 101 seconds.
     jetstream,  # Take 206 seconds.
-    kraken,  # Flaky on Android, crbug.com/626174.
     v8_browsing, # Flaky on Android, crbug.com/628368.
 }
 
diff --git a/tools/perf/cli_tools/soundwave/studies/__init__.py b/tools/perf/cli_tools/soundwave/studies/__init__.py
index 8e18c687..a7f9ec5 100644
--- a/tools/perf/cli_tools/soundwave/studies/__init__.py
+++ b/tools/perf/cli_tools/soundwave/studies/__init__.py
@@ -27,6 +27,7 @@
       'quarter')['timestamp'].transform('max').dt.date
 
   # Change units for values in ms to seconds, and percent values.
+  df['units'] = df['units'].fillna('')
   is_ms_unit = df['units'].str.startswith('ms_')
   df.loc[is_ms_unit, 'value'] = df['value'] / 1000
 
diff --git a/tools/perf/cli_tools/soundwave/studies/v8_study.py b/tools/perf/cli_tools/soundwave/studies/v8_study.py
index ea50583..77b003e 100644
--- a/tools/perf/cli_tools/soundwave/studies/v8_study.py
+++ b/tools/perf/cli_tools/soundwave/studies/v8_study.py
@@ -8,41 +8,61 @@
 
 CLOUD_PATH = 'gs://chrome-health-tvdata/datasets/v8_report.csv'
 
-ANDROID_GO = 'ChromiumPerf:android-go-perf'
-V8_EFFECTIVE_SIZE = (
-    'memory:chrome:renderer_processes:reported_by_chrome:v8:effective_size')
+PIXEL_32_BITS = 'ChromiumPerf:android-pixel2-perf'
+PIXEL_64_BITS = 'ChromiumPerfFyi:android-pixel2-perf-fyi'
 
-
-TEST_SUITES = {
-    'system_health.memory_mobile': [
-        V8_EFFECTIVE_SIZE],
-    'system_health.common_mobile': [
-        'timeToFirstContentfulPaint', 'timeToFirstMeaningfulPaint',
-        'timeToInteractive'],
-    'v8.browsing_mobile': [
-        'Total:duration', 'V8-Only:duration', V8_EFFECTIVE_SIZE]
+BROWSING_TEST_SUITES = {
+    'v8.browsing_mobile': ['Total:duration', 'V8-Only:duration']
 }
 
+BENCHMARK_TEST_SUITES = {
+    'speedometer2': ['RunsPerMinute'],
+    'octane': ['Total.Score'],
+    'jetstream' : ['Score']
+}
 
-def GetEmergingMarketStories():
+def GetV8BrowsingMobile():
+  # The describe API doesn't currently work with v8.browsing_mobile, so use
+  # system_health.memory_mobile instead since it has the same test cases.
   description = dashboard_service.Describe('system_health.memory_mobile')
-  return description['caseTags']['emerging_market']
+  return description['cases']
 
 
 def IterTestPaths():
-  # We want to track emerging market stories only.
-  test_cases = GetEmergingMarketStories()
+  v8_browsing_test_cases = GetV8BrowsingMobile()
 
-  for test_suite, measurements in TEST_SUITES.iteritems():
-    # v8.browsing_mobile only runs 'browse:*' stories, while other benchmarks
-    # run all of them.
-    browse_only = 'browsing' in test_suite
-    for test_case in test_cases:
-      if browse_only and not test_case.startswith('browse:'):
-        continue
+  for bot in [PIXEL_32_BITS, PIXEL_64_BITS]:
+    bot_path = bot.replace(':', "/")
+    for test_suite, measurements in BROWSING_TEST_SUITES.iteritems():
+      # v8.browsing_mobile only runs 'browse:*' stories, while other benchmarks
+      # run all of them.
+      browse_only = 'browsing' in test_suite
+      for test_case in v8_browsing_test_cases:
+        if browse_only and not test_case.startswith('browse:'):
+          continue
+
+        # Don't yield the page category entries.
+        test_case_parts = test_case.split(':')
+        if len(test_case_parts) <= 2:
+          continue
+
+        # Remove disabled tests from the list of those to be collected.
+        if test_case_parts[2] in ['toi', 'globo', 'flipkart', 'avito']:
+          continue
+
+        page = '_'.join(test_case_parts)
+        page_category = '_'.join(test_case_parts[0:2])
+
+        for measurement in measurements:
+          # The v2 API doesn't support v8.browsing_mobile, so fall back on the v1
+          # API for now.
+          yield '/'.join(
+              [bot_path, test_suite, measurement, page_category, page])
+
+    for test_suite, measurements in BENCHMARK_TEST_SUITES.iteritems():
       for measurement in measurements:
         yield timeseries.Key(
             test_suite=test_suite,
             measurement=measurement,
-            bot=ANDROID_GO,
-            test_case=test_case)
+            bot=bot,
+            test_case='')
diff --git a/tools/perf/core/benchmark_runner.py b/tools/perf/core/benchmark_runner.py
index ec090b7..dd9eb76 100644
--- a/tools/perf/core/benchmark_runner.py
+++ b/tools/perf/core/benchmark_runner.py
@@ -19,5 +19,6 @@
       environment=config,
       results_arg_parser=results_processor.ArgumentParser())
   results_processor.ProcessOptions(options)
-  command_line.RunCommand(options)
-  results_processor.ProcessResults(options)
+  run_return_code = command_line.RunCommand(options)
+  process_return_code = results_processor.ProcessResults(options)
+  return max(run_return_code, process_return_code)
diff --git a/tools/perf/core/results_processor/processor.py b/tools/perf/core/results_processor/processor.py
index 3c2fb97..d721cb62 100644
--- a/tools/perf/core/results_processor/processor.py
+++ b/tools/perf/core/results_processor/processor.py
@@ -111,6 +111,6 @@
       after any adjustments from ProcessOptions were applied.
   """
   if not getattr(options, 'output_formats', None):
-    return
+    return 0
 
   raise NotImplementedError(options.output_formats)
diff --git a/tools/roll_webgl_conformance.py b/tools/roll_webgl_conformance.py
index b773ce2..62a4075 100755
--- a/tools/roll_webgl_conformance.py
+++ b/tools/roll_webgl_conformance.py
@@ -37,7 +37,11 @@
   },
   {
     "mastername": "luci.chromium.try",
-    "buildernames": ["win-angle-rel"]
+    "buildernames": ["win-angle-rel-32"]
+  },
+  {
+    "mastername": "luci.chromium.try",
+    "buildernames": ["win-angle-rel-64"]
   },
 ]
 
diff --git a/tools/run-swarmed.py b/tools/run-swarmed.py
index 7015f3aa..a958ec1a2f 100755
--- a/tools/run-swarmed.py
+++ b/tools/run-swarmed.py
@@ -63,7 +63,7 @@
     # The canonical version numbers are stored in the infra repository here:
     # build/scripts/slave/recipe_modules/swarming/api.py
     cpython_version = 'version:2.7.15.chromium14'
-    vpython_version = 'git_revision:96f81e737868d43124b4661cf1c325296ca04944'
+    vpython_version = 'git_revision:98a268c6432f18aedd55d62b9621765316dc2a16'
     cpython_pkg = (
         '.swarming_module:infra/python/cpython/${platform}:' +
         cpython_version)
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
index 68567d6..c7f26e11 100644
--- a/ui/accessibility/ax_tree.cc
+++ b/ui/accessibility/ax_tree.cc
@@ -233,7 +233,9 @@
 
     // If the node bounds is empty (either width or height is zero),
     // try to compute good bounds from the children.
-    if (bounds.IsEmpty()) {
+    // If a tree update is in progress, skip this step as children may be in a
+    // bad state.
+    if (bounds.IsEmpty() && !GetTreeUpdateInProgressState()) {
       for (size_t i = 0; i < node->children().size(); i++) {
         ui::AXNode* child = node->children()[i];
         bounds.Union(GetTreeBounds(child));
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
index 5d77c90..ef6f2ea 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -670,6 +670,7 @@
 <translation id="8569764466147087991">የሚከፈት ፋይል ይምረጡ</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> ንጥሎችን በማመሳሰል ላይ...</translation>
 <translation id="8600173386174225982">የፋይል ዝርዝር ወደ ድንክየ ዕይታ ተለውጧል።</translation>
+<translation id="8601932370724196034">የCrostini ምስል ፋይል</translation>
 <translation id="8669949407341943408">በመውሰድ ላይ...</translation>
 <translation id="8671210955687109937">አስተያየት መስጠት ይችላሉ</translation>
 <translation id="8686213429977032554">ይህ የDrive ፋይል ገና አልተጋራም</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
index 45302620..d7e0762 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">تحديد ملف لفتحه</translation>
 <translation id="8579285237314169903">جارٍ مزامنة <ph name="NUMBER_OF_FILES" /> من البنود...</translation>
 <translation id="8600173386174225982">تم تغيير قائمة الملف إلى عرض الصور المصغرة.</translation>
+<translation id="8601932370724196034">‏ملف صورة Crostini</translation>
 <translation id="8669949407341943408">جارٍ النقل...</translation>
 <translation id="8671210955687109937">يمكن التعليق</translation>
 <translation id="8686213429977032554">‏لم تتم مشاركة ملف Drive هذا بعد</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
index 203cb1b..18d017f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Изберете файл за отваряне</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> елемента се синхронизират...</translation>
 <translation id="8600173386174225982">Списъкът с файлове е превключен към изглед с миниизображения.</translation>
+<translation id="8601932370724196034">Файл с образ на Crostini</translation>
 <translation id="8669949407341943408">Извършва се преместване...</translation>
 <translation id="8671210955687109937">Може да коментира</translation>
 <translation id="8686213429977032554">Този файл в Диск още не е споделен</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
index 5f672f0..5fcc862 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -670,6 +670,7 @@
 <translation id="8569764466147087991">খুলতে একটি স্ক্রিপ্ট বেছে নিন</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" />টি আইটেম সিঙ্ক করা হচ্ছে...</translation>
 <translation id="8600173386174225982">থাম্বনেল ভিউতে ফাইলের তালিকা পরিবর্তিত হয়েছে।</translation>
+<translation id="8601932370724196034">Crostini ছবির ফাইল</translation>
 <translation id="8669949407341943408">সরানো  হচ্ছে...</translation>
 <translation id="8671210955687109937">মন্তব্য করতে পারবেন</translation>
 <translation id="8686213429977032554">এই ড্রাইভ ফাইল এখনো শেয়ার করা হয়নি</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
index 315f6290..dfdaf10 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Seleccioneu el fitxer que vulgueu obrir</translation>
 <translation id="8579285237314169903">S'estan sincronitzant <ph name="NUMBER_OF_FILES" /> elements...</translation>
 <translation id="8600173386174225982">La llista de fitxers ha canviat a la visualització de miniatures.</translation>
+<translation id="8601932370724196034">Fitxer d'imatge de Crostini</translation>
 <translation id="8669949407341943408">S'estan traslladant...</translation>
 <translation id="8671210955687109937">Pot comentar</translation>
 <translation id="8686213429977032554">Aquest fitxer de Drive encara no s'ha compartit</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
index faf7313..dd7b0db 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -670,6 +670,7 @@
 <translation id="8569764466147087991">Vyberte soubor, který chcete otevřít</translation>
 <translation id="8579285237314169903">Synchronizace <ph name="NUMBER_OF_FILES" /> položek...</translation>
 <translation id="8600173386174225982">Seznam souborů se změnil na zobrazení miniatur.</translation>
+<translation id="8601932370724196034">Soubor obrazu Crostini</translation>
 <translation id="8669949407341943408">Přesouvání...</translation>
 <translation id="8671210955687109937">Může přidávat komentáře</translation>
 <translation id="8686213429977032554">Tento soubor na Disku dosud není sdílen</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
index f18b8c5..8be5aae5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Vælg den fil, der skal åbnes</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> elementer synkroniseres...</translation>
 <translation id="8600173386174225982">Der blev skiftet til miniaturevisning for listen med filer.</translation>
+<translation id="8601932370724196034">Crostini-billedfil</translation>
 <translation id="8669949407341943408">Flytter…</translation>
 <translation id="8671210955687109937">Kan kommentere</translation>
 <translation id="8686213429977032554">Denne Drev-fil deles ikke endnu</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index d13fd83..3d49d82 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Zu öffnende Datei auswählen</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> Elemente werden synchronisiert...</translation>
 <translation id="8600173386174225982">Die Dateiliste wird jetzt in der Miniaturansicht angezeigt.</translation>
+<translation id="8601932370724196034">Crostini-Bilddatei</translation>
 <translation id="8669949407341943408">Verschieben...</translation>
 <translation id="8671210955687109937">Darf kommentieren</translation>
 <translation id="8686213429977032554">Die Drive-Datei wurde noch nicht geteilt.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
index 4f196fe2..03fb2a7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -691,6 +691,7 @@
 <translation id="8569764466147087991">Επιλέξτε αρχείο για άνοιγμα</translation>
 <translation id="8579285237314169903">Γίνεται συγχρονισμός <ph name="NUMBER_OF_FILES" /> στοιχείων…</translation>
 <translation id="8600173386174225982">Η λίστα αρχείων έχει αλλάξει σε προβολή μικρογραφίας.</translation>
+<translation id="8601932370724196034">Αρχείο εικόνας Crostini</translation>
 <translation id="8669949407341943408">Μετακίνηση…</translation>
 <translation id="8671210955687109937">Δυνατότητα σχολιασμού</translation>
 <translation id="8686213429977032554">Δεν μοιράζεστε ακόμα αυτό το αρχείο του Drive</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
index a8f1c24..66c034d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Select a file to open</translation>
 <translation id="8579285237314169903">Syncing <ph name="NUMBER_OF_FILES" /> items...</translation>
 <translation id="8600173386174225982">File list has changed to thumbnail view.</translation>
+<translation id="8601932370724196034">Crostini image file</translation>
 <translation id="8669949407341943408">Moving...</translation>
 <translation id="8671210955687109937">Can comment</translation>
 <translation id="8686213429977032554">This Drive file isn't shared yet</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
index 23abd03..da8c21b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Seleccionar un archivo para abrir</translation>
 <translation id="8579285237314169903">Sincronizando <ph name="NUMBER_OF_FILES" /> elementos…</translation>
 <translation id="8600173386174225982">La lista de archivos cambió a la vista de miniaturas.</translation>
+<translation id="8601932370724196034">Archivo de imagen de Crostini</translation>
 <translation id="8669949407341943408">Moviendo…</translation>
 <translation id="8671210955687109937">Se puede comentar</translation>
 <translation id="8686213429977032554">Este archivo de Drive aún no está compartido</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
index 4993ffea..efc656a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Selecciona un archivo para abrir</translation>
 <translation id="8579285237314169903">Sincronizando <ph name="NUMBER_OF_FILES" /> elementos...</translation>
 <translation id="8600173386174225982">La lista de archivos ha cambiado a la vista de miniaturas.</translation>
+<translation id="8601932370724196034">Archivo de imagen de Crostini</translation>
 <translation id="8669949407341943408">Moviendo...</translation>
 <translation id="8671210955687109937">Puede comentar</translation>
 <translation id="8686213429977032554">Este archivo de Drive aún no se ha compartido</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
index 8cba3224..ad9d346 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Valige avatav fail</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> üksuse sünkroonimine ...</translation>
 <translation id="8600173386174225982">Faililoendi jaoks aktiveeriti pisipildikuva.</translation>
+<translation id="8601932370724196034">Crostini pildifail</translation>
 <translation id="8669949407341943408">Teisaldamine ...</translation>
 <translation id="8671210955687109937">Saab kommenteerida</translation>
 <translation id="8686213429977032554">Seda Drive'i faili pole veel jagatud</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
index c2b4897..9736f4f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">انتخاب فایلی برای باز کردن</translation>
 <translation id="8579285237314169903">در حال همگام‌سازی <ph name="NUMBER_OF_FILES" /> مورد...</translation>
 <translation id="8600173386174225982">فهرست فایل به نمای تصویر کوچک تغییر کرده است.</translation>
+<translation id="8601932370724196034">‏فایل تصویری Crostini</translation>
 <translation id="8669949407341943408">در حال انتقال...</translation>
 <translation id="8671210955687109937">می‌تواند نظر بدهد</translation>
 <translation id="8686213429977032554">‏این فایل Drive هنوز به اشتراک گذاشته نشده است</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
index 8e2722d..052bee0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Valitse avattava tiedosto</translation>
 <translation id="8579285237314169903">Synkronoidaan <ph name="NUMBER_OF_FILES" /> kohdetta…</translation>
 <translation id="8600173386174225982">Tiedostot näkyvät nyt pikkukuvina.</translation>
+<translation id="8601932370724196034">Crostini-kuvatiedosto</translation>
 <translation id="8669949407341943408">Siirretään…</translation>
 <translation id="8671210955687109937">Voi kommentoida</translation>
 <translation id="8686213429977032554">Tätä Drive-tiedostoa ei ole vielä jaettu</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
index fa3604c..35dad64b 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Sélectionnez le fichier à ouvrir</translation>
 <translation id="8579285237314169903">Synchronisation de <ph name="NUMBER_OF_FILES" /> éléments en cours…</translation>
 <translation id="8600173386174225982">Les fichiers s'affichent désormais sous forme de vignettes.</translation>
+<translation id="8601932370724196034">Fichier image Crostini</translation>
 <translation id="8669949407341943408">Déplacement en cours…</translation>
 <translation id="8671210955687109937">Commentateur</translation>
 <translation id="8686213429977032554">Ce fichier Drive n'a pas encore été partagé</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
index a177e21..3ff96959 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -669,6 +669,7 @@
 <translation id="8569764466147087991">ખોલવા માટે એક ફાઇલ પસંદ કરો</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> આઇટમ્સ સમન્વયિત કરી રહ્યાં છે...</translation>
 <translation id="8600173386174225982">ફાઇલ સૂચિને થંબનેલ દૃશ્યમાં બદલી છે.</translation>
+<translation id="8601932370724196034">Crostini છબી ફાઇલ</translation>
 <translation id="8669949407341943408">ખસેડી રહ્યું છે...</translation>
 <translation id="8671210955687109937">ટિપ્પણી કરી શકે છે</translation>
 <translation id="8686213429977032554">આ ડ્રાઇવ ફાઇલ હજી સુધી શેર કરી નથી</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index 93bbeea..13eca08 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">खोलने के लिए फ़ाइल को चुनें</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> आइटम समन्‍वयित कर रहा है...</translation>
 <translation id="8600173386174225982">फ़ाइल की सूची अब थंबनेल की तरह दिखाई जा रही है.</translation>
+<translation id="8601932370724196034">Crostini इमेज फ़ाइल</translation>
 <translation id="8669949407341943408">चल रहे...</translation>
 <translation id="8671210955687109937">टिप्पणी कर सकते हैं</translation>
 <translation id="8686213429977032554">यह डिस्क अभी तक शेयर नहीं की गई है</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
index 39729e1..aa0bb377 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Odaberite datoteku za otvaranje</translation>
 <translation id="8579285237314169903">Sinkronizacija ovoliko stavki: <ph name="NUMBER_OF_FILES" />...</translation>
 <translation id="8600173386174225982">Popis datoteka promijenio se na prikaz minijatura.</translation>
+<translation id="8601932370724196034">Slikovna datoteka Crostinija</translation>
 <translation id="8669949407341943408">Premještanje...</translation>
 <translation id="8671210955687109937">Može komentirati</translation>
 <translation id="8686213429977032554">Ova datoteka na Disku još se ne dijeli</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
index cb6a210..bdcf035 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Válassza ki a megnyitni kívánt fájlt</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> elem szinkronizálása…</translation>
 <translation id="8600173386174225982">A fájllista nézete indexképnézetre változott.</translation>
+<translation id="8601932370724196034">Crostini-képfájl</translation>
 <translation id="8669949407341943408">Áthelyezés…</translation>
 <translation id="8671210955687109937">Megjegyzések fűzhetők hozzá</translation>
 <translation id="8686213429977032554">Ez a Drive-fájl még nincs megosztva</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
index 131e28f..1b849ff 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Pilih file yang akan dibuka</translation>
 <translation id="8579285237314169903">Menyinkronkan <ph name="NUMBER_OF_FILES" /> item...</translation>
 <translation id="8600173386174225982">Daftar file telah diubah menjadi tampilan thumbnail.</translation>
+<translation id="8601932370724196034">File gambar Crostini</translation>
 <translation id="8669949407341943408">Memindahkan...</translation>
 <translation id="8671210955687109937">Dapat mengomentari</translation>
 <translation id="8686213429977032554">File Drive ini belum dibagikan</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
index 376d75b..0e1b424 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -670,6 +670,7 @@
 <translation id="8569764466147087991">Seleziona un file da aprire</translation>
 <translation id="8579285237314169903">Sincronizzazione di <ph name="NUMBER_OF_FILES" /> elementi...</translation>
 <translation id="8600173386174225982">L'elenco dei file è stato modificato in visualizzazione miniatura.</translation>
+<translation id="8601932370724196034">File immagine Crostini</translation>
 <translation id="8669949407341943408">Spostamento...</translation>
 <translation id="8671210955687109937">Può commentare</translation>
 <translation id="8686213429977032554">Questo file di Drive non è stato ancora condiviso</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
index 673923c..3827bdc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">ファイルを選択して開く</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> 個のアイテムを同期しています...</translation>
 <translation id="8600173386174225982">ファイルの一覧がサムネイル表示に切り替わりました。</translation>
+<translation id="8601932370724196034">Crostini 画像ファイル</translation>
 <translation id="8669949407341943408">移動しています...</translation>
 <translation id="8671210955687109937">閲覧者(コメント可)</translation>
 <translation id="8686213429977032554">未共有のドライブ ファイル</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
index cdb9113..966836c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -659,6 +659,7 @@
 <translation id="8569764466147087991">ತೆರೆಯಲು ಫೈಲ್‌ವೊಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> ಐಟಂಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8600173386174225982">ಫೈಲ್ ಪಟ್ಟಿಯನ್ನು, ಥಂಬ್‌ನೇಲ್ ವೀಕ್ಷಣೆಗೆ ಬದಲಿಸಲಾಗಿದೆ.</translation>
+<translation id="8601932370724196034">Crostini ಚಿತ್ರದ ಫೈಲ್</translation>
 <translation id="8669949407341943408">ಸರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8671210955687109937">ಕಾಮೆಂಟ್ ಮಾಡಬಹುದು</translation>
 <translation id="8686213429977032554">ಈ ಡ್ರೈವ್ ಫೈಲ್ ಅನ್ನು ಇನ್ನೂ ಹಂಚಿಕೊಳ್ಳಲಾಗಿಲ್ಲ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
index 4e81191..e7a4d793 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">열려는 파일 선택</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" />개 항목 동기화 중...</translation>
 <translation id="8600173386174225982">파일 목록을 미리보기 이미지 뷰로 변경했습니다.</translation>
+<translation id="8601932370724196034">Crostini 이미지 파일</translation>
 <translation id="8669949407341943408">이동 중...</translation>
 <translation id="8671210955687109937">댓글 가능</translation>
 <translation id="8686213429977032554">드라이브 파일이 아직 공유되지 않음</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
index 9826d8f..3a3feccf0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Pasirinkite norimą atidaryti failą</translation>
 <translation id="8579285237314169903">Sinchronizuojama elementų: <ph name="NUMBER_OF_FILES" />…</translation>
 <translation id="8600173386174225982">Failų sąrašas pakeistas į miniatiūrų rodinį.</translation>
+<translation id="8601932370724196034">„Crostini“ vaizdo failas</translation>
 <translation id="8669949407341943408">Perkeliama...</translation>
 <translation id="8671210955687109937">Galima komentuoti</translation>
 <translation id="8686213429977032554">Šis Disko failas dar nebendrinamas</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
index b7d1108f..729e65f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Atlasīt atveramo failu</translation>
 <translation id="8579285237314169903">Notiek <ph name="NUMBER_OF_FILES" /> vienumu sinhronizēšana...</translation>
 <translation id="8600173386174225982">Failu saraksts ir mainīts uz sīktēlu skatu.</translation>
+<translation id="8601932370724196034">Crostini attēla fails</translation>
 <translation id="8669949407341943408">Notiek pārvietošana...</translation>
 <translation id="8671210955687109937">Var komentēt</translation>
 <translation id="8686213429977032554">Šis Diska fails vēl nav kopīgots</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
index 846ca4a..f181610c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">തുറക്കുന്നതിന് ഒരു ഫയല്‍ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> ഇനങ്ങൾ സമന്വയിപ്പിക്കുന്നു...</translation>
 <translation id="8600173386174225982">ഫയൽ ലിസ്‌റ്റ് ലഘുചിത്ര കാഴ്‌ചയിലേക്ക് മാറ്റിയിട്ടുണ്ട്.</translation>
+<translation id="8601932370724196034">Crostini ചിത്ര ഫയൽ</translation>
 <translation id="8669949407341943408">നീക്കുന്നു...</translation>
 <translation id="8671210955687109937">അഭിപ്രായമിടാനാകുന്നത്</translation>
 <translation id="8686213429977032554">ഈ ഡ്രൈവ് ഫയൽ ഇതുവരെ പങ്കിട്ടില്ല</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index 5473b01..b092ee1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">उघडण्यासाठी फाइल निवडा</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> आयटम संकालित करीत आहे...</translation>
 <translation id="8600173386174225982">फाइल सूची थंबनेल व्ह्यूमध्ये बदलली गेली आहे.</translation>
+<translation id="8601932370724196034">Crostini इमेज फाइल</translation>
 <translation id="8669949407341943408">हलवत आहे...</translation>
 <translation id="8671210955687109937">टिप्पणी देऊ शकत नाही</translation>
 <translation id="8686213429977032554">ही ड्राइव्ह फाईल अद्याप शेअर केलेली नाही</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
index 15db27c..7093f7581 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Pilih fail untuk dibuka</translation>
 <translation id="8579285237314169903">Menyegerakkan <ph name="NUMBER_OF_FILES" /> item...</translation>
 <translation id="8600173386174225982">Senarai fail telah berubah kepada paparan lakaran kecil.</translation>
+<translation id="8601932370724196034">Fail imej Crostini</translation>
 <translation id="8669949407341943408">Bergerak...</translation>
 <translation id="8671210955687109937">Boleh ulas</translation>
 <translation id="8686213429977032554">Fail Drive ini belum dikongsi lagi</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
index 77266c4..4af21eb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -672,6 +672,7 @@
 <translation id="8569764466147087991">Selecteer een bestand om te openen</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> items synchroniseren...</translation>
 <translation id="8600173386174225982">Bestandslijst is gewijzigd naar miniatuurweergave.</translation>
+<translation id="8601932370724196034">Crostini-afbeeldingsbestand</translation>
 <translation id="8669949407341943408">Verplaatsen…</translation>
 <translation id="8671210955687109937">Mag reageren</translation>
 <translation id="8686213429977032554">Dit Drive-bestand is nog niet gedeeld</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
index bc727bc1..6a1efe0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Velg en fil du vil åpne</translation>
 <translation id="8579285237314169903">Synkroniserer <ph name="NUMBER_OF_FILES" /> elementer …</translation>
 <translation id="8600173386174225982">Fillisten vises nå i miniatyrbildevisning.</translation>
+<translation id="8601932370724196034">Crostini-bildefil</translation>
 <translation id="8669949407341943408">Flytter …</translation>
 <translation id="8671210955687109937">Kan kommentere</translation>
 <translation id="8686213429977032554">Denne Disk-filen er ikke delt ennå</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
index 3f82895..d1f61e9 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Wybierz plik do otwarcia</translation>
 <translation id="8579285237314169903">Synchronizuję elementy – <ph name="NUMBER_OF_FILES" />...</translation>
 <translation id="8600173386174225982">Lista plików została przełączona na widok miniatur.</translation>
+<translation id="8601932370724196034">Plik graficzny Crostini</translation>
 <translation id="8669949407341943408">Przenoszę...</translation>
 <translation id="8671210955687109937">Może komentować</translation>
 <translation id="8686213429977032554">Ten plik na Dysku nie jest jeszcze udostępniany</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
index 95012d5..81b216b1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Selecionar um arquivo para ser aberto</translation>
 <translation id="8579285237314169903">Sincronizando <ph name="NUMBER_OF_FILES" /> itens...</translation>
 <translation id="8600173386174225982">A lista de arquivos foi alterada para a visualização em miniatura.</translation>
+<translation id="8601932370724196034">Arquivo de imagem do Crostini</translation>
 <translation id="8669949407341943408">Movendo...</translation>
 <translation id="8671210955687109937">Pode comentar</translation>
 <translation id="8686213429977032554">Este arquivo do Google Drive ainda não foi compartilhado.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
index cd078c5..a0d52c4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Selecione um ficheiro para abrir</translation>
 <translation id="8579285237314169903">A sincronizar <ph name="NUMBER_OF_FILES" /> itens...</translation>
 <translation id="8600173386174225982">A lista de ficheiros foi alterada para a vista de miniatura.</translation>
+<translation id="8601932370724196034">Ficheiro de imagem do Crostini</translation>
 <translation id="8669949407341943408">A mover...</translation>
 <translation id="8671210955687109937">Pode comentar</translation>
 <translation id="8686213429977032554">Este ficheiro do Google Drive ainda não foi partilhado</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
index 06d725f2..1ed69d38 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Selectează un fișier pentru a-l deschide</translation>
 <translation id="8579285237314169903">Se sincronizează <ph name="NUMBER_OF_FILES" /> elemente...</translation>
 <translation id="8600173386174225982">Lista de fișiere s-a modificat la vizualizare cu miniaturi.</translation>
+<translation id="8601932370724196034">Fișier imagine Crostini</translation>
 <translation id="8669949407341943408">Se mută...</translation>
 <translation id="8671210955687109937">Poate face comentarii</translation>
 <translation id="8686213429977032554">La acest fișier din Drive nu s-a permis încă accesul</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
index b1b32097..fd73323 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Выберите файл</translation>
 <translation id="8579285237314169903">Синхронизация файлов (<ph name="NUMBER_OF_FILES" />)...</translation>
 <translation id="8600173386174225982">Файлы отображаются в виде значков.</translation>
+<translation id="8601932370724196034">Графический файл Crostini</translation>
 <translation id="8669949407341943408">Перемещение...</translation>
 <translation id="8671210955687109937">Комментирование</translation>
 <translation id="8686213429977032554">К этому файлу на Диске пока нет доступа</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
index 2917bb2..6a40883 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Vyberte súbor, ktorý chcete otvoriť</translation>
 <translation id="8579285237314169903">Synchronizujú sa položky (počet: <ph name="NUMBER_OF_FILES" />)...</translation>
 <translation id="8600173386174225982">Zoznam súborov sa zmenil na zobrazenie miniatúr.</translation>
+<translation id="8601932370724196034">Súbor obrázka Crostini</translation>
 <translation id="8669949407341943408">Presúva sa...</translation>
 <translation id="8671210955687109937">Môže pridávať komentáre</translation>
 <translation id="8686213429977032554">Tento súbor na Disku sa zatiaľ nezdieľa</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
index 8264f30..71a26a8a 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Izberite datoteko, ki jo želite odpreti</translation>
 <translation id="8579285237314169903">Sinhroniziranje datotek (<ph name="NUMBER_OF_FILES" />) ...</translation>
 <translation id="8600173386174225982">Seznam datotek je spremenjen na pogled sličic.</translation>
+<translation id="8601932370724196034">Slikovna datoteka za Crostini</translation>
 <translation id="8669949407341943408">Premikanje ...</translation>
 <translation id="8671210955687109937">Komentiranje dovoljeno</translation>
 <translation id="8686213429977032554">Ta datoteka v storitvi Google Drive še ni v skupni rabi</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index 175195a..0d73552 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Избор датотеке за отварање</translation>
 <translation id="8579285237314169903">Синхронизују се ставке (<ph name="NUMBER_OF_FILES" />)...</translation>
 <translation id="8600173386174225982">Листа датотека се променила у приказ сличица.</translation>
+<translation id="8601932370724196034">Crostini датотека слике</translation>
 <translation id="8669949407341943408">Премештање...</translation>
 <translation id="8671210955687109937">Може да коментарише</translation>
 <translation id="8686213429977032554">Ова датотека са Диска се још увек не дели</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
index 66f235f..a95fb60 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Välj fil att öppna</translation>
 <translation id="8579285237314169903">Synkroniserar <ph name="NUMBER_OF_FILES" /> objekt ...</translation>
 <translation id="8600173386174225982">Fillistan har ändrats till miniatyrvy.</translation>
+<translation id="8601932370724196034">Bildfil för Crostini</translation>
 <translation id="8669949407341943408">Flyttar …</translation>
 <translation id="8671210955687109937">Kan kommentera</translation>
 <translation id="8686213429977032554">Den här filen i Drive delas inte ännu</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
index d1609f9..618eb2d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Chagua faili ya kufungua</translation>
 <translation id="8579285237314169903">Inasasisha vipengee <ph name="NUMBER_OF_FILES" />...</translation>
 <translation id="8600173386174225982">Orodha ya faili imebadilishwa kuwa mwonekano wa kijipicha.</translation>
+<translation id="8601932370724196034">Picha ya faili ya Crostini</translation>
 <translation id="8669949407341943408">Inahamisha...</translation>
 <translation id="8671210955687109937">Anaweza kutoa maoni</translation>
 <translation id="8686213429977032554">Faili hii ya Hifadhi bado haijashirikiwa</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
index 197b623..299782c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">తెరవడానికి ఫైల్‌ని ఎంచుకోండి</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> అంశాలను సమకాలీకరిస్తోంది...</translation>
 <translation id="8600173386174225982">ఫైల్ జాబితా, "సూక్ష్మచిత్ర వీక్షణ"కు మార్చబడింది.</translation>
+<translation id="8601932370724196034">Crostini చిత్రం ఫైల్</translation>
 <translation id="8669949407341943408">తరలించబడుతున్నాయి...</translation>
 <translation id="8671210955687109937">వ్యాఖ్యానించవచ్చు</translation>
 <translation id="8686213429977032554">ఈ డిస్క్ ఫైల్ ఇంకా భాగస్వామ్యం చేయబడలేదు</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
index 5292110..6c62e63 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">เลือกไฟล์เพื่อเปิด</translation>
 <translation id="8579285237314169903">กำลังซิงค์ <ph name="NUMBER_OF_FILES" /> รายการ...</translation>
 <translation id="8600173386174225982">เปลี่ยนรายการไฟล์เป็นมุมมองภาพขนาดย่อแล้ว</translation>
+<translation id="8601932370724196034">ไฟล์ภาพ Crostini</translation>
 <translation id="8669949407341943408">กำลังย้าย...</translation>
 <translation id="8671210955687109937">สามารถแสดงความคิดเห็นได้</translation>
 <translation id="8686213429977032554">ยังไม่มีการแชร์ไฟล์ไดรฟ์นี้</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
index fdc3dea..7b402da 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Açılacak dosyayı seçin</translation>
 <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> öğe senkronize ediliyor...</translation>
 <translation id="8600173386174225982">Dosya listesi, küçük resim görünümü olarak değiştirildi.</translation>
+<translation id="8601932370724196034">Crostini resim dosyası</translation>
 <translation id="8669949407341943408">Taşınıyor...</translation>
 <translation id="8671210955687109937">Yorum yapabilir</translation>
 <translation id="8686213429977032554">Bu Drive dosyası henüz paylaşılmamış</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
index 68ce7002..314a01c 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Виберіть файл, який потрібно відкрити</translation>
 <translation id="8579285237314169903">Синхронізація стількох елементів: <ph name="NUMBER_OF_FILES" />…</translation>
 <translation id="8600173386174225982">Список файлів тепер відображається у вигляді ескізів.</translation>
+<translation id="8601932370724196034">Файл зображення Crostini</translation>
 <translation id="8669949407341943408">Переміщення…</translation>
 <translation id="8671210955687109937">Може коментувати</translation>
 <translation id="8686213429977032554">Доступ до цього файлу Диска ще не надано</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
index 4d56aa9f..abf7701 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">Chọn tệp để mở</translation>
 <translation id="8579285237314169903">Đang đồng bộ hóa <ph name="NUMBER_OF_FILES" /> mục...</translation>
 <translation id="8600173386174225982">Danh sách tệp đã thay đổi thành chế độ xem hình thu nhỏ.</translation>
+<translation id="8601932370724196034">Tệp hình ảnh Crostini</translation>
 <translation id="8669949407341943408">Đang di chuyển...</translation>
 <translation id="8671210955687109937">Có thể nhận xét</translation>
 <translation id="8686213429977032554">Tệp Drive này chưa được chia sẻ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
index 72e6f074..331dd82 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -666,6 +666,7 @@
 <translation id="8569764466147087991">选择要打开的文件</translation>
 <translation id="8579285237314169903">正在同步 <ph name="NUMBER_OF_FILES" /> 个文件…</translation>
 <translation id="8600173386174225982">文件列表已切换到缩略图视图。</translation>
+<translation id="8601932370724196034">Crostini 映像文件</translation>
 <translation id="8669949407341943408">正在移动…</translation>
 <translation id="8671210955687109937">可以评论</translation>
 <translation id="8686213429977032554">此云端硬盘文件尚未共享</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
index 28bc8a0..5cb323240 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -671,6 +671,7 @@
 <translation id="8569764466147087991">選取要開啟的檔案</translation>
 <translation id="8579285237314169903">正在同步處理 <ph name="NUMBER_OF_FILES" /> 個項目...</translation>
 <translation id="8600173386174225982">檔案清單已變更為縮圖檢視模式。</translation>
+<translation id="8601932370724196034">Crostini 圖片檔</translation>
 <translation id="8669949407341943408">移動中...</translation>
 <translation id="8671210955687109937">可以註解</translation>
 <translation id="8686213429977032554">這個雲端硬碟檔案尚未與你共用</translation>
diff --git a/ui/events/BUILD.gn b/ui/events/BUILD.gn
index 0e86c7ce..f4e54c54 100644
--- a/ui/events/BUILD.gn
+++ b/ui/events/BUILD.gn
@@ -625,7 +625,6 @@
         "ozone/evdev/touch_filter/heuristic_stylus_palm_detection_filter_unittest.cc",
         "ozone/evdev/touch_filter/open_palm_detection_filter_unittest.cc",
         "ozone/evdev/touch_filter/palm_detection_filter_factory_unittest.cc",
-        "ozone/gamepad/generic_gamepad_mapping_unittest.cc",
       ]
 
       if (use_xkbcommon) {
diff --git a/ui/events/ozone/BUILD.gn b/ui/events/ozone/BUILD.gn
index b6e66ad2..4281e65 100644
--- a/ui/events/ozone/BUILD.gn
+++ b/ui/events/ozone/BUILD.gn
@@ -134,16 +134,9 @@
         "evdev/touch_filter/touch_filter.h",
         "gamepad/gamepad_event.cc",
         "gamepad/gamepad_event.h",
-        "gamepad/gamepad_mapping.cc",
-        "gamepad/gamepad_mapping.h",
         "gamepad/gamepad_observer.h",
         "gamepad/gamepad_provider_ozone.cc",
         "gamepad/gamepad_provider_ozone.h",
-        "gamepad/generic_gamepad_mapping.cc",
-        "gamepad/generic_gamepad_mapping.h",
-        "gamepad/static_gamepad_mapping.cc",
-        "gamepad/static_gamepad_mapping.h",
-        "gamepad/webgamepad_constants.h",
       ]
 
       defines = [ "EVENTS_OZONE_EVDEV_IMPLEMENTATION" ]
diff --git a/ui/events/ozone/evdev/gamepad_event_converter_evdev.cc b/ui/events/ozone/evdev/gamepad_event_converter_evdev.cc
index 6dd438d..9ea76eb 100644
--- a/ui/events/ozone/evdev/gamepad_event_converter_evdev.cc
+++ b/ui/events/ozone/evdev/gamepad_event_converter_evdev.cc
@@ -13,81 +13,9 @@
 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h"
 #include "ui/events/ozone/gamepad/gamepad_event.h"
 #include "ui/events/ozone/gamepad/gamepad_provider_ozone.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
-
-namespace {
-constexpr double kHatThreshold = 0.5;
-}
 
 namespace ui {
 
-GamepadEventConverterEvdev::Axis::Axis()
-    : last_value_(0.),
-      scale_(0.),
-      offset_(0.),
-      scaled_fuzz_(0.),
-      scaled_flat_(0.),
-      mapped_type_(GamepadEventType::BUTTON),
-      mapped_code_(0.) {}
-
-GamepadEventConverterEvdev::Axis::Axis(const input_absinfo& abs_info,
-                                       GamepadEventType mapped_type,
-                                       uint16_t mapped_code)
-    : mapped_type_(mapped_type), mapped_code_(mapped_code) {
-  double mapped_abs_min = kWebGamepadJoystickMin;
-  double mapped_abs_max = kWebGamepadJoystickMax;
-  // If the mapped event is a trigger, we set the min and max to trigger
-  // min/max.
-  if (mapped_code == WG_BUTTON_LT || mapped_code == WG_BUTTON_RT) {
-    mapped_abs_min = kWebGamepadTriggerMin;
-    mapped_abs_max = kWebGamepadTriggerMax;
-  }
-
-  scale_ =
-      (mapped_abs_max - mapped_abs_min) / (abs_info.maximum - abs_info.minimum);
-  offset_ = (abs_info.maximum + abs_info.minimum) /
-            (mapped_abs_max - mapped_abs_min) * scale_ * mapped_abs_min;
-
-  scaled_flat_ = abs_info.flat * scale_;
-  scaled_fuzz_ = abs_info.fuzz * scale_;
-  double tmp;
-  // Map the current value and it will be set to value_.
-  MapValue(abs_info.value, &tmp);
-}
-
-bool GamepadEventConverterEvdev::Axis::MapValue(int value,
-                                                double* mapped_value) {
-  *mapped_value = value * scale_ + offset_;
-  // As the definition of linux input_absinfo.flat, value within the range of
-  // flat should be seen as zero.
-  if ((*mapped_value < scaled_flat_) && (*mapped_value > -scaled_flat_)) {
-    *mapped_value = 0.0;
-    // We always send out flat.
-    last_value_ = 0.0;
-    return true;
-  }
-  return ValueChangeSignificantly(*mapped_value);
-}
-
-GamepadEventType GamepadEventConverterEvdev::Axis::mapped_type() {
-  return mapped_type_;
-}
-
-uint16_t GamepadEventConverterEvdev::Axis::mapped_code() {
-  return mapped_code_;
-}
-
-bool GamepadEventConverterEvdev::Axis::ValueChangeSignificantly(
-    double new_value) {
-  // To remove noise, the value must change at least by fuzz.
-  if (new_value >= last_value_ - scaled_fuzz_ &&
-      new_value <= last_value_ + scaled_fuzz_) {
-    return false;
-  }
-  last_value_ = new_value;
-  return true;
-}
-
 GamepadEventConverterEvdev::GamepadEventConverterEvdev(
     base::ScopedFD fd,
     base::FilePath path,
@@ -104,33 +32,9 @@
                           devinfo.product_id(),
                           devinfo.version()),
       will_send_frame_(false),
-      last_hat_left_press_(false),
-      last_hat_right_press_(false),
-      last_hat_up_press_(false),
-      last_hat_down_press_(false),
-      mapper_(GetGamepadMapper(devinfo)),
       input_device_fd_(std::move(fd)),
       dispatcher_(dispatcher) {
   input_absinfo abs_info;
-  GamepadEventType mapped_type;
-  uint16_t mapped_code;
-  // In order to map gamepad, we have to save the abs_info from device_info
-  // and get the gamepad_mapping.
-  for (int code = 0; code < ABS_CNT; ++code) {
-    abs_info = devinfo.GetAbsInfoByCode(code);
-    if (devinfo.HasAbsEvent(code)) {
-      // If fuzz was reported as zero, it will be set to flat * 0.25f. It is
-      // the same thing done in Android InputReader.cpp. See:
-      // frameworks/native/services/inputflinger/InputReader.cpp line 6988 for
-      // more details.
-      if (abs_info.fuzz == 0) {
-        abs_info.fuzz = abs_info.flat * 0.25f;
-      }
-      mapper_->Map(EV_ABS, code, &mapped_type, &mapped_code);
-      axes_[code] = Axis(abs_info, mapped_type, mapped_code);
-    }
-  }
-
   for (int code = 0; code < ABS_CNT; ++code) {
     abs_info = devinfo.GetAbsInfoByCode(code);
     if (devinfo.HasAbsEvent(code)) {
@@ -141,7 +45,7 @@
       axis.flat = abs_info.flat;
       axis.fuzz = abs_info.fuzz;
       axis.resolution = abs_info.resolution;
-      raw_axes_.push_back(axis);
+      axes_.push_back(axis);
     }
   }
 }
@@ -182,7 +86,7 @@
 
 std::vector<ui::GamepadDevice::Axis>
 GamepadEventConverterEvdev::GetGamepadAxes() const {
-  return raw_axes_;
+  return axes_;
 }
 
 void GamepadEventConverterEvdev::ProcessEvent(const input_event& evdev_ev) {
@@ -207,94 +111,42 @@
     uint16_t code,
     int value,
     const base::TimeTicks& timestamp) {
-  GamepadEventType mapped_type;
-  uint16_t mapped_code;
-
-  bool found_map = mapper_->Map(EV_KEY, code, &mapped_type, &mapped_code);
-
-  // If we cannot find a map for this event, it will be discarded.
-  if (!found_map) {
-    return;
-  }
-
-  // If it's btn -> btn mapping, we can send the event and return now.
-  OnButtonChange(mapped_code, code, value, timestamp);
+  if (value)
+    pressed_buttons_.insert(code);
+  else
+    pressed_buttons_.erase(code);
+  GamepadEvent event(input_device_.id, GamepadEventType::BUTTON, code, value,
+                     timestamp);
+  dispatcher_->DispatchGamepadEvent(event);
+  will_send_frame_ = true;
 }
 
 void GamepadEventConverterEvdev::ProcessEvdevAbs(
     uint16_t code,
     int value,
     const base::TimeTicks& timestamp) {
-  // For abs type, notify raw event separately. When you're only interested in
-  // mapped data, you should ignore code == WG_ABS_COUNT for abs type.
-  OnAbsChange(WG_ABS_COUNT, code, value, timestamp);
-
-  GamepadEventType mapped_type;
-  uint16_t mapped_code;
-
-  double mapped_abs_value;
-  Axis& axis = axes_[code];
-  mapped_type = axis.mapped_type();
-  mapped_code = axis.mapped_code();
-
-  if (!axis.MapValue(value, &mapped_abs_value)) {
-    return;
-  }
-
-  // If the mapped type is abs, we can send it now.
-  if (mapped_type == GamepadEventType::AXIS) {
-    OnAbsChange(mapped_code, 0, mapped_abs_value, timestamp);
-    return;
-  }
-
-  // We need to map HAT to DPAD depend on the state of the axis.
-  if (mapped_code == kHAT_X) {
-    bool hat_left_press = (mapped_abs_value < -kHatThreshold);
-    bool hat_right_press = (mapped_abs_value > kHatThreshold);
-    if (hat_left_press != last_hat_left_press_) {
-      OnButtonChange(WG_BUTTON_DPAD_LEFT, 0, hat_left_press, timestamp);
-      last_hat_left_press_ = hat_left_press;
-    }
-
-    if (hat_right_press != last_hat_right_press_) {
-      OnButtonChange(WG_BUTTON_DPAD_RIGHT, 0, hat_right_press, timestamp);
-      last_hat_right_press_ = hat_right_press;
-    }
-  } else if (mapped_code == kHAT_Y) {
-    bool hat_up_press = (mapped_abs_value < -kHatThreshold);
-    bool hat_down_press = (mapped_abs_value > kHatThreshold);
-    if (hat_up_press != last_hat_up_press_) {
-      OnButtonChange(WG_BUTTON_DPAD_UP, 0, hat_up_press, timestamp);
-      last_hat_up_press_ = hat_up_press;
-    }
-
-    if (hat_down_press != last_hat_down_press_) {
-      OnButtonChange(WG_BUTTON_DPAD_DOWN, 0, hat_down_press, timestamp);
-      last_hat_down_press_ = hat_down_press;
-    }
-  } else {
-    OnButtonChange(mapped_code, 0, mapped_abs_value, timestamp);
-  }
+  GamepadEvent event(input_device_.id, GamepadEventType::AXIS, code, value,
+                     timestamp);
+  dispatcher_->DispatchGamepadEvent(event);
+  will_send_frame_ = true;
 }
 
 void GamepadEventConverterEvdev::ResetGamepad() {
   base::TimeTicks timestamp = ui::EventTimeForNow();
-  for (int btn_code = 0; btn_code < WG_BUTTON_COUNT; ++btn_code) {
-    OnButtonChange(btn_code, 0, 0, timestamp);
-  }
-
-  for (int abs_code = 0; abs_code < WG_ABS_COUNT; ++abs_code) {
-    OnAbsChange(abs_code, 0, 0, timestamp);
-  }
+  // Reset all the buttons.
+  for (unsigned int code : pressed_buttons_)
+    ProcessEvdevKey(code, 0, timestamp);
+  // Reset all the axes.
+  for (int code = 0; code < ABS_CNT; ++code)
+    ProcessEvdevAbs(code, 0, timestamp);
   OnSync(timestamp);
 }
 
 void GamepadEventConverterEvdev::ResyncGamepad() {
   base::TimeTicks timestamp = ui::EventTimeForNow();
-  // Reset all the buttons to 0.
-  for (int btn_code = 0; btn_code < WG_BUTTON_COUNT; ++btn_code) {
-    OnButtonChange(btn_code, 0, 0, timestamp);
-  }
+  // Reset all the buttons.
+  for (unsigned int code : pressed_buttons_)
+    ProcessEvdevKey(code, 0, timestamp);
   // Read the state of all axis.
   EventDeviceInfo info;
   if (!info.Initialize(fd_, path_)) {
@@ -311,30 +163,9 @@
   OnSync(timestamp);
 }
 
-void GamepadEventConverterEvdev::OnButtonChange(
-    unsigned int code,
-    unsigned int raw_code,
-    double value,
-    const base::TimeTicks& timestamp) {
-  GamepadEvent event(input_device_.id, GamepadEventType::BUTTON, code, raw_code,
-                     value, timestamp);
-  dispatcher_->DispatchGamepadEvent(event);
-  will_send_frame_ = true;
-}
-
-void GamepadEventConverterEvdev::OnAbsChange(unsigned int code,
-                                             unsigned int raw_code,
-                                             double value,
-                                             const base::TimeTicks& timestamp) {
-  GamepadEvent event(input_device_.id, GamepadEventType::AXIS, code, raw_code,
-                     value, timestamp);
-  dispatcher_->DispatchGamepadEvent(event);
-  will_send_frame_ = true;
-}
-
 void GamepadEventConverterEvdev::OnSync(const base::TimeTicks& timestamp) {
   if (will_send_frame_) {
-    GamepadEvent event(input_device_.id, GamepadEventType::FRAME, 0, 0, 0,
+    GamepadEvent event(input_device_.id, GamepadEventType::FRAME, 0, 0,
                        timestamp);
     dispatcher_->DispatchGamepadEvent(event);
     will_send_frame_ = false;
diff --git a/ui/events/ozone/evdev/gamepad_event_converter_evdev.h b/ui/events/ozone/evdev/gamepad_event_converter_evdev.h
index f3902dce..603a021 100644
--- a/ui/events/ozone/evdev/gamepad_event_converter_evdev.h
+++ b/ui/events/ozone/evdev/gamepad_event_converter_evdev.h
@@ -7,6 +7,7 @@
 
 #include <vector>
 
+#include "base/containers/flat_set.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_file.h"
 #include "base/macros.h"
@@ -15,8 +16,6 @@
 #include "ui/events/ozone/evdev/event_converter_evdev.h"
 #include "ui/events/ozone/evdev/event_device_info.h"
 #include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
-#include "ui/events/ozone/gamepad/gamepad_mapping.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
 
 struct input_event;
 
@@ -61,14 +60,6 @@
   // This function reads current gamepad status and resyncs the gamepad.
   void ResyncGamepad();
 
-  void OnButtonChange(unsigned int code,
-                      unsigned int raw_code,
-                      double value,
-                      const base::TimeTicks& timestamp);
-  void OnAbsChange(unsigned int code,
-                   unsigned int raw_code,
-                   double value,
-                   const base::TimeTicks& timestamp);
   void OnSync(const base::TimeTicks& timestamp);
 
   // Sometimes, we want to drop abs values, when we do so, we no longer want to
@@ -76,43 +67,10 @@
   // when each frame is sent. It is set to true when Btn or Abs event is sent.
   bool will_send_frame_;
 
-  // Internal representation of axis information.
+  std::vector<ui::GamepadDevice::Axis> axes_;
 
-  class Axis {
-   public:
-    Axis();
-    Axis(const input_absinfo& abs_info,
-         GamepadEventType mapped_type,
-         uint16_t mapped_code);
-
-    bool MapValue(int value, double* mapped_value);
-
-    GamepadEventType mapped_type();
-
-    uint16_t mapped_code();
-
-   private:
-    bool ValueChangeSignificantly(double new_value);
-    double last_value_;
-    double scale_;
-    double offset_;
-    double scaled_fuzz_;
-    double scaled_flat_;
-    GamepadEventType mapped_type_;
-    uint16_t mapped_code_;
-  };
-
-  Axis axes_[ABS_CNT];
-
-  std::vector<ui::GamepadDevice::Axis> raw_axes_;
-
-  // These values keeps the state of previous hat.
-  bool last_hat_left_press_;
-  bool last_hat_right_press_;
-  bool last_hat_up_press_;
-  bool last_hat_down_press_;
-
-  std::unique_ptr<GamepadMapper> mapper_;
+  // Evdev scancodes of pressed buttons.
+  base::flat_set<unsigned int> pressed_buttons_;
 
   // Input device file descriptor.
   base::ScopedFD input_device_fd_;
diff --git a/ui/events/ozone/evdev/gamepad_event_converter_evdev_unittest.cc b/ui/events/ozone/evdev/gamepad_event_converter_evdev_unittest.cc
index 1875329..67b4d59 100644
--- a/ui/events/ozone/evdev/gamepad_event_converter_evdev_unittest.cc
+++ b/ui/events/ozone/evdev/gamepad_event_converter_evdev_unittest.cc
@@ -32,7 +32,6 @@
 #include "ui/events/ozone/gamepad/gamepad_event.h"
 #include "ui/events/ozone/gamepad/gamepad_observer.h"
 #include "ui/events/ozone/gamepad/gamepad_provider_ozone.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
 #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
 #include "ui/events/platform/platform_event_dispatcher.h"
 #include "ui/events/platform/platform_event_source.h"
@@ -110,9 +109,6 @@
   double value;
 };
 
-// Double value within this range will be considered equal.
-const double axis_delta = 0.00001;
-
 TEST_F(GamepadEventConverterEvdevTest, XboxGamepadEvents) {
   TestGamepadObserver observer;
   std::unique_ptr<ui::GamepadEventConverterEvdev> dev =
@@ -158,196 +154,29 @@
   clock.SetNowSeconds(1493076833);
 
   struct ExpectedEvent expected_events[] = {
-      {GamepadEventType::AXIS, 4, 19105},
-      {GamepadEventType::AXIS, 0, 0.583062},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 17931},
-      {GamepadEventType::AXIS, 0, 0.547234},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 17398},
-      {GamepadEventType::AXIS, 0, 0.530968},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 4, 1},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 4, 0},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 3, 1},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 3, 0},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 1, 1},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 1, 0},
-      {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 2, 1},
-      {GamepadEventType::FRAME, 0, 0}};
-
-  for (unsigned i = 0; i < base::size(mock_kernel_queue); ++i) {
-    dev->ProcessEvent(mock_kernel_queue[i]);
-  }
-
-  for (unsigned i = 0; i < observer.events.size(); ++i) {
-    EXPECT_EQ(observer.events[i].type(), expected_events[i].type);
-    EXPECT_EQ(observer.events[i].code(), expected_events[i].code);
-    if (observer.events[i].type() != GamepadEventType::AXIS ||
-        observer.events[i].code() != WG_ABS_COUNT) {
-      double d = observer.events[i].value() - expected_events[i].value;
-      d = d > 0 ? d : -d;
-      EXPECT_LT(d, axis_delta);
-    }
-  }
-}
-
-TEST_F(GamepadEventConverterEvdevTest, iBuffaloGamepadEvents) {
-  TestGamepadObserver observer;
-  std::unique_ptr<ui::GamepadEventConverterEvdev> dev =
-      CreateDevice(kiBuffaloGamepad);
-
-  struct input_event mock_kernel_queue[] = {
-      {{1539898801, 229742}, EV_MSC, MSC_SCAN, 589825},
-      {{1539898801, 229742}, EV_KEY, BTN_JOYSTICK, 1},
-      {{1539898801, 229742}, EV_SYN, SYN_REPORT, 0},
-      {{1539898801, 309742}, EV_MSC, MSC_SCAN, 589825},
-      {{1539898801, 309742}, EV_KEY, BTN_JOYSTICK, 0},
-      {{1539898801, 309742}, EV_SYN, SYN_REPORT, 0},
-      {{1539898802, 453726}, EV_MSC, MSC_SCAN, 589826},
-      {{1539898802, 453726}, EV_KEY, BTN_THUMB, 1},
-      {{1539898802, 453726}, EV_SYN, SYN_REPORT, 0},
-      {{1539898802, 517580}, EV_MSC, MSC_SCAN, 589826},
-      {{1539898802, 517580}, EV_KEY, BTN_THUMB, 0},
-      {{1539898802, 517580}, EV_SYN, SYN_REPORT, 0},
-      {{1539898803, 949749}, EV_MSC, MSC_SCAN, 589827},
-      {{1539898803, 949749}, EV_KEY, BTN_THUMB2, 1},
-      {{1539898803, 949749}, EV_SYN, SYN_REPORT, 0},
-      {{1539898803, 997741}, EV_MSC, MSC_SCAN, 589827},
-      {{1539898803, 997741}, EV_KEY, BTN_THUMB2, 0},
-      {{1539898803, 997741}, EV_SYN, SYN_REPORT, 0},
-      {{1539898805, 397581}, EV_MSC, MSC_SCAN, 589828},
-      {{1539898805, 397581}, EV_KEY, BTN_TOP, 1},
-      {{1539898805, 397581}, EV_SYN, SYN_REPORT, 0},
-      {{1539898805, 461689}, EV_MSC, MSC_SCAN, 589828},
-      {{1539898805, 461689}, EV_KEY, BTN_TOP, 0},
-      {{1539898805, 461689}, EV_SYN, SYN_REPORT, 0},
-      {{1539898806, 429752}, EV_MSC, MSC_SCAN, 589829},
-      {{1539898806, 429752}, EV_KEY, BTN_TOP2, 1},
-      {{1539898806, 429752}, EV_SYN, SYN_REPORT, 0},
-      {{1539898806, 589760}, EV_MSC, MSC_SCAN, 589829},
-      {{1539898806, 589760}, EV_KEY, BTN_TOP2, 0},
-      {{1539898806, 589760}, EV_SYN, SYN_REPORT, 0},
-      {{1539898807, 309762}, EV_MSC, MSC_SCAN, 589830},
-      {{1539898807, 309762}, EV_KEY, BTN_PINKIE, 1},
-      {{1539898807, 309762}, EV_SYN, SYN_REPORT, 0},
-      {{1539898807, 381640}, EV_MSC, MSC_SCAN, 589830},
-      {{1539898807, 381640}, EV_KEY, BTN_PINKIE, 0},
-      {{1539898807, 381640}, EV_SYN, SYN_REPORT, 0},
-      {{1539898808, 925751}, EV_MSC, MSC_SCAN, 589831},
-      {{1539898808, 925751}, EV_KEY, BTN_BASE, 1},
-      {{1539898808, 925751}, EV_SYN, SYN_REPORT, 0},
-      {{1539898809, 13752}, EV_MSC, MSC_SCAN, 589831},
-      {{1539898809, 13752}, EV_KEY, BTN_BASE, 0},
-      {{1539898809, 13752}, EV_SYN, SYN_REPORT, 0},
-      {{1539898810, 285649}, EV_MSC, MSC_SCAN, 589832},
-      {{1539898810, 285649}, EV_KEY, BTN_BASE2, 1},
-      {{1539898810, 285649}, EV_SYN, SYN_REPORT, 0},
-      {{1539898810, 397761}, EV_MSC, MSC_SCAN, 589832},
-      {{1539898810, 397761}, EV_KEY, BTN_BASE2, 0},
-      {{1539898810, 397761}, EV_SYN, SYN_REPORT, 0},
-      {{1539898818, 53678}, EV_ABS, ABS_Y, 128},
-      {{1539898818, 53678}, EV_SYN, SYN_REPORT, 0},
-      {{1539898818, 141760}, EV_ABS, ABS_Y, 127},
-      {{1539898818, 141760}, EV_SYN, SYN_REPORT, 0},
-      {{1539898818, 149780}, EV_ABS, ABS_Y, 128},
-      {{1539898818, 149780}, EV_SYN, SYN_REPORT, 0},
-      {{1539898818, 229671}, EV_ABS, ABS_Y, 255},
-      {{1539898818, 229671}, EV_SYN, SYN_REPORT, 0},
-      {{1539898820, 541685}, EV_ABS, ABS_X, 128},
-      {{1539898820, 541685}, EV_SYN, SYN_REPORT, 0},
-      {{1539898820, 597795}, EV_ABS, ABS_X, 127},
-      {{1539898820, 597795}, EV_SYN, SYN_REPORT, 0},
-      {{1539898820, 605799}, EV_ABS, ABS_X, 128},
-      {{1539898820, 605799}, EV_SYN, SYN_REPORT, 0},
-      {{1539898820, 685800}, EV_ABS, ABS_X, 127},
-      {{1539898820, 685800}, EV_SYN, SYN_REPORT, 0},
-      {{1539898820, 693792}, EV_ABS, ABS_X, 128},
-      {{1539898820, 693792}, EV_SYN, SYN_REPORT, 0},
-      {{1539898820, 725788}, EV_ABS, ABS_X, 255},
-      {{1539898820, 725788}, EV_SYN, SYN_REPORT, 0},
-      {{1539898823, 333802}, EV_ABS, ABS_Y, 128},
-      {{1539898823, 333802}, EV_SYN, SYN_REPORT, 0},
-      {{1539898823, 469796}, EV_ABS, ABS_Y, 0},
-      {{1539898823, 469796}, EV_SYN, SYN_REPORT, 0},
-      {{1539898823, 789788}, EV_ABS, ABS_X, 128},
-      {{1539898823, 789788}, EV_SYN, SYN_REPORT, 0},
-      {{1539898824, 501696}, EV_ABS, ABS_X, 255},
-      {{1539898824, 501696}, EV_SYN, SYN_REPORT, 0},
-      {{1539898824, 949713}, EV_ABS, ABS_X, 128},
-      {{1539898824, 949713}, EV_SYN, SYN_REPORT, 0},
-      {{1539898825, 45805}, EV_ABS, ABS_X, 0},
-      {{1539898825, 45805}, EV_SYN, SYN_REPORT, 0},
-      {{1539898825, 133800}, EV_ABS, ABS_Y, 128},
-      {{1539898825, 133800}, EV_SYN, SYN_REPORT, 0},
-      {{1539898825, 189693}, EV_ABS, ABS_Y, 255},
-      {{1539898825, 189693}, EV_SYN, SYN_REPORT, 0},
+      {GamepadEventType::AXIS, 0, 19105}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::AXIS, 0, 17931}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::AXIS, 0, 17398}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 310, 1}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 310, 0}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 308, 1}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 308, 0}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 305, 1}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 305, 0}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 306, 1}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 306, 0}, {GamepadEventType::FRAME, 0, 0},
+      {GamepadEventType::BUTTON, 307, 1}, {GamepadEventType::FRAME, 0, 0},
   };
 
-  // Advance test tick clock so the above events are strictly in the past.
-  ui::test::ScopedEventTestTickClock clock;
-  clock.SetNowSeconds(1493141048);
-
-  struct ExpectedEvent expected_events[] = {
-      {GamepadEventType::BUTTON, 0, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 0, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 1, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 1, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 2, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 2, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 3, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 3, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 6, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 6, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 7, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 7, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 4, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 4, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 5, 1},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::BUTTON, 5, 0},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 128},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 127},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 128},  {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 255},  {GamepadEventType::BUTTON, 13, 1},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 128},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 127},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 128},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 127},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 128},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 255},
-      {GamepadEventType::BUTTON, 15, 1}, {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 128},  {GamepadEventType::BUTTON, 13, 0},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 0},
-      {GamepadEventType::BUTTON, 12, 1}, {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 128},  {GamepadEventType::BUTTON, 15, 0},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 255},
-      {GamepadEventType::BUTTON, 15, 1}, {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 128},  {GamepadEventType::BUTTON, 15, 0},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 0},
-      {GamepadEventType::BUTTON, 14, 1}, {GamepadEventType::FRAME, 0, 0},
-      {GamepadEventType::AXIS, 4, 128},  {GamepadEventType::BUTTON, 12, 0},
-      {GamepadEventType::FRAME, 0, 0},   {GamepadEventType::AXIS, 4, 255},
-      {GamepadEventType::BUTTON, 13, 1}, {GamepadEventType::FRAME, 0, 0}};
-
   for (unsigned i = 0; i < base::size(mock_kernel_queue); ++i) {
     dev->ProcessEvent(mock_kernel_queue[i]);
   }
 
   for (unsigned i = 0; i < observer.events.size(); ++i) {
-    EXPECT_EQ(observer.events[i].type(), expected_events[i].type);
-    EXPECT_EQ(observer.events[i].code(), expected_events[i].code);
-    if (observer.events[i].type() != GamepadEventType::AXIS ||
-        observer.events[i].code() != WG_ABS_COUNT) {
-      double d = observer.events[i].value() - expected_events[i].value;
-      d = d > 0 ? d : -d;
-      EXPECT_LT(d, axis_delta);
-    }
+    EXPECT_EQ(expected_events[i].type, observer.events[i].type());
+    EXPECT_EQ(expected_events[i].code, observer.events[i].code());
+    EXPECT_FLOAT_EQ(expected_events[i].value, observer.events[i].value());
   }
 }
+
 }  // namespace ui
diff --git a/ui/events/ozone/gamepad/gamepad_event.cc b/ui/events/ozone/gamepad/gamepad_event.cc
index d6aff5a..e71aaa2 100644
--- a/ui/events/ozone/gamepad/gamepad_event.cc
+++ b/ui/events/ozone/gamepad/gamepad_event.cc
@@ -9,13 +9,11 @@
 GamepadEvent::GamepadEvent(int device_id,
                            GamepadEventType type,
                            uint16_t code,
-                           uint16_t raw_code,
                            double value,
                            base::TimeTicks timestamp)
     : device_id_(device_id),
       type_(type),
       code_(code),
-      raw_code_(raw_code),
       value_(value),
       timestamp_(timestamp) {}
 
diff --git a/ui/events/ozone/gamepad/gamepad_event.h b/ui/events/ozone/gamepad/gamepad_event.h
index 9d95dc7..8e1bbb9 100644
--- a/ui/events/ozone/gamepad/gamepad_event.h
+++ b/ui/events/ozone/gamepad/gamepad_event.h
@@ -6,16 +6,17 @@
 #define UI_EVENTS_OZONE_GAMEPAD_GAMEPAD_EVENT_H_
 
 #include "base/time/time.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
 
 namespace ui {
 
+// We care about three type of gamepad events.
+enum class GamepadEventType { BUTTON, AXIS, FRAME };
+
 class GamepadEvent {
  public:
   GamepadEvent(int device_id,
                GamepadEventType type,
                uint16_t code,
-               uint16_t raw_code,
                double value,
                base::TimeTicks timestamp);
 
@@ -25,8 +26,6 @@
 
   uint16_t code() const { return code_; }
 
-  uint16_t raw_code() const { return raw_code_; }
-
   double value() const { return value_; }
 
   base::TimeTicks timestamp() const { return timestamp_; }
@@ -36,11 +35,8 @@
 
   GamepadEventType type_;
 
-  // Web Gamepad keycode.
-  uint16_t code_;
-
   // Evdev scancode.
-  uint16_t raw_code_;
+  uint16_t code_;
 
   double value_;
 
diff --git a/ui/events/ozone/gamepad/gamepad_mapping.cc b/ui/events/ozone/gamepad/gamepad_mapping.cc
deleted file mode 100644
index 26c6b73c..0000000
--- a/ui/events/ozone/gamepad/gamepad_mapping.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/events/ozone/gamepad/gamepad_mapping.h"
-
-#include <memory>
-
-#include "ui/events/ozone/evdev/event_device_info.h"
-#include "ui/events/ozone/gamepad/generic_gamepad_mapping.h"
-#include "ui/events/ozone/gamepad/static_gamepad_mapping.h"
-
-namespace ui {
-
-std::unique_ptr<GamepadMapper> GetGamepadMapper(
-    const EventDeviceInfo& devinfo) {
-  std::unique_ptr<GamepadMapper> result(
-      GetStaticGamepadMapper(devinfo.vendor_id(), devinfo.product_id()));
-  if (!result) {
-    return BuildGenericGamepadMapper(devinfo);
-  }
-  return result;
-}
-
-}  // namespace ui
diff --git a/ui/events/ozone/gamepad/gamepad_mapping.h b/ui/events/ozone/gamepad/gamepad_mapping.h
deleted file mode 100644
index 0a739896..0000000
--- a/ui/events/ozone/gamepad/gamepad_mapping.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_EVENTS_OZONE_GAMEPAD_GAMEPAD_MAPPING_H_
-#define UI_EVENTS_OZONE_GAMEPAD_GAMEPAD_MAPPING_H_
-
-#include <memory>
-
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
-
-namespace ui {
-
-class EventDeviceInfo;
-
-// The following HATX and HATY is not part of web gamepad definition, but we
-// need to specially treat them cause HAT_Y can be mapped to DPAD_UP or
-// DPAD_DOWN, and HAT_X can be mapped to DAPD_LEFT or DPAD_RIGHT.
-constexpr int kHAT_X = 4;
-constexpr int kHAT_Y = 5;
-
-// KeyMap maps evdev key code to web gamepad code.
-struct KeyMapEntry {
-  uint16_t evdev_code;
-  uint16_t mapped_code;
-};
-
-// AbsMap maps evdev abs code to web gamepad (type, code).
-struct AbsMapEntry {
-  uint16_t evdev_code;
-  GamepadEventType mapped_type;
-  uint16_t mapped_code;
-};
-
-using KeyMapType = const KeyMapEntry[];
-using AbsMapType = const AbsMapEntry[];
-
-#define TO_BTN(code, mapped_code) \
-  { code, GamepadEventType::BUTTON, mapped_code }
-
-#define TO_ABS(code, mapped_code) \
-  { code, GamepadEventType::AXIS, mapped_code }
-
-class GamepadMapper {
- public:
-  virtual bool Map(uint16_t key,
-                   uint16_t code,
-                   GamepadEventType* mapped_type,
-                   uint16_t* mapped_code) const = 0;
-
-  virtual ~GamepadMapper() {}
-};
-
-// This function gets the best mapper for the gamepad vendor_id and product_id.
-std::unique_ptr<GamepadMapper> GetGamepadMapper(const EventDeviceInfo& devinfo);
-
-}  // namespace ui
-
-#endif  // UI_EVENTS_OZONE_GAMEPAD_GAMEPAD_MAPPING_H_
diff --git a/ui/events/ozone/gamepad/generic_gamepad_mapping.cc b/ui/events/ozone/gamepad/generic_gamepad_mapping.cc
deleted file mode 100644
index d18ff45..0000000
--- a/ui/events/ozone/gamepad/generic_gamepad_mapping.cc
+++ /dev/null
@@ -1,249 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <linux/input.h>
-#include <algorithm>
-#include <bitset>
-#include <cstdint>
-#include <list>
-#include <set>
-#include <vector>
-
-#include "base/macros.h"
-#include "ui/events/ozone/evdev/event_device_info.h"
-#include "ui/events/ozone/gamepad/generic_gamepad_mapping.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
-
-namespace {
-using ui::GamepadEventType;
-
-class GenericGamepadMapper : public ui::GamepadMapper {
- public:
-  GenericGamepadMapper(std::vector<ui::AbsMapEntry> axis_mapping,
-                       std::vector<ui::KeyMapEntry> button_mapping) {
-    axis_mapping.swap(axis_mapping_);
-    button_mapping.swap(button_mapping_);
-  }
-
-  bool Map(uint16_t type,
-           uint16_t code,
-           ui::GamepadEventType* mapped_type,
-           uint16_t* mapped_code) const override {
-    if (type == EV_KEY) {
-      for (auto entry : button_mapping_) {
-        if (entry.evdev_code == code) {
-          *mapped_type = ui::GamepadEventType::BUTTON;
-          *mapped_code = entry.mapped_code;
-          return true;
-        }
-      }
-      return false;
-    }
-
-    if (type == EV_ABS) {
-      for (auto entry : axis_mapping_) {
-        if (entry.evdev_code == code) {
-          *mapped_type = entry.mapped_type;
-          *mapped_code = entry.mapped_code;
-          return true;
-        }
-      }
-      return false;
-    }
-    return false;
-  }
-
-  ~GenericGamepadMapper() override {}
-
- private:
-  std::vector<ui::AbsMapEntry> axis_mapping_;
-  std::vector<ui::KeyMapEntry> button_mapping_;
-};
-
-// This helper class will be used to build generic mapping.
-class GamepadMapperBuilder {
- public:
-  explicit GamepadMapperBuilder(const ui::EventDeviceInfo& devinfo)
-      : devinfo_(devinfo) {}
-
-  std::unique_ptr<ui::GamepadMapper> ToGamepadMapper() {
-    return std::make_unique<GenericGamepadMapper>(std::move(axis_mapping_),
-                                                  std::move(button_mapping_));
-  }
-
-  void MapButton(uint16_t from_button, uint16_t mapped_button) {
-    if (!devinfo_.HasKeyEvent(from_button)) {
-      return;
-    }
-    DCHECK(!IfEvdevButtonMappedFrom(from_button));
-    DCHECK(!IfWebgamepadButtonMappedTo(mapped_button));
-
-    button_mapping_.push_back({from_button, mapped_button});
-    evdev_buttons_.set(from_button);
-    webgamepad_buttons_.set(mapped_button);
-  }
-
-  void MapAxisToButton(uint16_t from_axis, uint16_t mapped_button) {
-    if (!devinfo_.HasAbsEvent(from_axis)) {
-      return;
-    }
-    DCHECK(!IfEvdevAxisMappedFrom(from_axis));
-    evdev_axes_.set(from_axis);
-    axis_mapping_.push_back(TO_BTN(from_axis, mapped_button));
-
-    if (mapped_button == ui::kHAT_X) {
-      DCHECK(!IfWebgamepadButtonMappedTo(ui::WG_BUTTON_DPAD_LEFT));
-      DCHECK(!IfWebgamepadButtonMappedTo(ui::WG_BUTTON_DPAD_RIGHT));
-
-      webgamepad_buttons_.set(ui::WG_BUTTON_DPAD_LEFT);
-      webgamepad_buttons_.set(ui::WG_BUTTON_DPAD_RIGHT);
-    } else if (mapped_button == ui::kHAT_Y) {
-      DCHECK(!IfWebgamepadButtonMappedTo(ui::WG_BUTTON_DPAD_UP));
-      DCHECK(!IfWebgamepadButtonMappedTo(ui::WG_BUTTON_DPAD_DOWN));
-
-      webgamepad_buttons_.set(ui::WG_BUTTON_DPAD_UP);
-      webgamepad_buttons_.set(ui::WG_BUTTON_DPAD_DOWN);
-    } else {
-      DCHECK(!IfWebgamepadButtonMappedTo(mapped_button));
-      webgamepad_buttons_.set(mapped_button);
-    }
-  }
-
-  void MapAxisToAxis(uint16_t from_axis, uint16_t mapped_axis) {
-    if (!devinfo_.HasAbsEvent(from_axis)) {
-      return;
-    }
-    DCHECK(!IfEvdevAxisMappedFrom(from_axis));
-    DCHECK(!IfWebgamepadAxisMappedTo(mapped_axis));
-
-    axis_mapping_.push_back(TO_ABS(from_axis, mapped_axis));
-    evdev_axes_.set(from_axis);
-    webgamepad_axes_.set(mapped_axis);
-  }
-
-  void MapButtonLikeJoydev() {
-    uint16_t next_unmapped_button = 0;
-    // In linux kernel, joydev.c map evdev events in the same way.
-    for (int i = BTN_JOYSTICK - BTN_MISC; i < KEY_MAX - BTN_MISC + 1; i++) {
-      int code = i + BTN_MISC;
-      if (devinfo_.HasKeyEvent(code) && !IfEvdevButtonMappedFrom(code) &&
-          FindNextUnmappedCode(webgamepad_buttons_, &next_unmapped_button)) {
-        MapButton(code, next_unmapped_button);
-      }
-    }
-
-    for (int i = 0; i < BTN_JOYSTICK - BTN_MISC; i++) {
-      int code = i + BTN_MISC;
-      if (devinfo_.HasKeyEvent(code) && !IfEvdevButtonMappedFrom(code) &&
-          FindNextUnmappedCode(webgamepad_buttons_, &next_unmapped_button)) {
-        MapButton(code, next_unmapped_button);
-      }
-    }
-  }
-
-  void MapAxisLikeJoydev() {
-    uint16_t next_unmapped_axis = 0;
-    for (int code = 0; code < ABS_CNT; ++code) {
-      if (devinfo_.HasAbsEvent(code) && !IfEvdevAxisMappedFrom(code) &&
-          FindNextUnmappedCode(webgamepad_axes_, &next_unmapped_axis)) {
-        MapAxisToAxis(code, next_unmapped_axis);
-      }
-    }
-  }
-
- private:
-  // This function helps to find the next unmapped button or axis. Code is the
-  // last unmapped code and will be the next unmapped code when the function
-  // returns.
-  template <typename T>
-  bool FindNextUnmappedCode(const T& bitset, uint16_t* code) {
-    for (uint16_t i = *code; i < bitset.size(); ++i) {
-      if (!bitset.test(i)) {
-        *code = i;
-        return true;
-      }
-    }
-    return false;
-  }
-
-  bool IfEvdevButtonMappedFrom(uint16_t code) {
-    DCHECK_LT(code, KEY_CNT);
-    return evdev_buttons_.test(code);
-  }
-
-  bool IfEvdevAxisMappedFrom(uint16_t code) {
-    DCHECK_LT(code, ABS_CNT);
-    return evdev_axes_.test(code);
-  }
-
-  bool IfWebgamepadButtonMappedTo(uint16_t code) {
-    DCHECK_LT(code, ui::WG_BUTTON_COUNT);
-    return webgamepad_buttons_.test(code);
-  }
-
-  bool IfWebgamepadAxisMappedTo(uint16_t code) {
-    DCHECK_LT(code, ui::WG_ABS_COUNT);
-    return webgamepad_axes_.test(code);
-  }
-
-  const ui::EventDeviceInfo& devinfo_;
-
-  // Mapped webgamepad buttons and axes will be marked as true.
-  std::bitset<ui::WG_BUTTON_COUNT> webgamepad_buttons_;
-  std::bitset<ui::WG_ABS_COUNT> webgamepad_axes_;
-  // Evdev buttons and axes that are already mapped will be marked as true.
-  std::bitset<KEY_CNT> evdev_buttons_;
-  std::bitset<ABS_CNT> evdev_axes_;
-
-  // Generated Mapping.
-  std::vector<ui::AbsMapEntry> axis_mapping_;
-  std::vector<ui::KeyMapEntry> button_mapping_;
-};
-
-void MapSpecialButtons(GamepadMapperBuilder* builder) {
-  // Map mode seperately.
-  builder->MapButton(BTN_MODE, ui::WG_BUTTON_MODE);
-  // Take care of ADT style back and start.
-  builder->MapButton(KEY_BACK, ui::WG_BUTTON_SELECT);
-  builder->MapButton(KEY_HOMEPAGE, ui::WG_BUTTON_START);
-}
-
-void MapSpecialAxes(const ui::EventDeviceInfo& devinfo,
-                    GamepadMapperBuilder* builder) {
-  // HAT0X and HAT0Y always map to DPAD.
-  builder->MapAxisToButton(ABS_HAT0X, ui::kHAT_X);
-  builder->MapAxisToButton(ABS_HAT0Y, ui::kHAT_Y);
-
-  // When ABS_BRAKE and ABS_GAS supported at the same time, they are mapped to
-  // l-trigger and r-trigger.
-  // Otherwise, when x,y,z,rx,ry,rz are all supported, z and rz are mapped to
-  // triggers (As XInput gamepad mapper).
-  if (devinfo.HasAbsEvent(ABS_BRAKE) && devinfo.HasAbsEvent(ABS_GAS)) {
-    builder->MapAxisToButton(ABS_BRAKE, ui::WG_BUTTON_LT);
-    builder->MapAxisToButton(ABS_GAS, ui::WG_BUTTON_RT);
-  } else if (devinfo.HasAbsEvent(ABS_X) && devinfo.HasAbsEvent(ABS_Y) &&
-             devinfo.HasAbsEvent(ABS_Z) && devinfo.HasAbsEvent(ABS_RX) &&
-             devinfo.HasAbsEvent(ABS_RY) && devinfo.HasAbsEvent(ABS_RZ)) {
-    builder->MapAxisToButton(ABS_Z, ui::WG_BUTTON_LT);
-    builder->MapAxisToButton(ABS_RZ, ui::WG_BUTTON_RT);
-  }
-}
-}  // namespace
-
-namespace ui {
-std::unique_ptr<GamepadMapper> BuildGenericGamepadMapper(
-    const EventDeviceInfo& info) {
-  GamepadMapperBuilder builder(info);
-  // Must map axes first as axis might be mapped to button and occupy some
-  // webgamepad button slots.
-  MapSpecialAxes(info, &builder);
-  builder.MapAxisLikeJoydev();
-
-  MapSpecialButtons(&builder);
-  builder.MapButtonLikeJoydev();
-
-  return builder.ToGamepadMapper();
-}
-
-}  // namespace ui
diff --git a/ui/events/ozone/gamepad/generic_gamepad_mapping.h b/ui/events/ozone/gamepad/generic_gamepad_mapping.h
deleted file mode 100644
index e5030e9..0000000
--- a/ui/events/ozone/gamepad/generic_gamepad_mapping.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_EVENTS_OZONE_GENERIC_GAMEPAD_GAMEPAD_MAPPING_H_
-#define UI_EVENTS_OZONE_GENERIC_GAMEPAD_GAMEPAD_MAPPING_H_
-
-#include <vector>
-#include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
-#include "ui/events/ozone/gamepad/gamepad_mapping.h"
-
-namespace ui {
-
-class EventDeviceInfo;
-
-std::unique_ptr<GamepadMapper> EVENTS_OZONE_EVDEV_EXPORT
-BuildGenericGamepadMapper(const EventDeviceInfo& info);
-
-}  // namespace ui
-
-#endif  // UI_EVENTS_OZONE_GENERIC_GAMEPAD_GAMEPAD_MAPPING_H_
diff --git a/ui/events/ozone/gamepad/generic_gamepad_mapping_unittest.cc b/ui/events/ozone/gamepad/generic_gamepad_mapping_unittest.cc
deleted file mode 100644
index 2f40517..0000000
--- a/ui/events/ozone/gamepad/generic_gamepad_mapping_unittest.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/events/ozone/gamepad/generic_gamepad_mapping.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <linux/input.h>
-#include <unistd.h>
-
-#include <memory>
-#include <queue>
-#include <utility>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/files/file_util.h"
-#include "base/macros.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/run_loop.h"
-#include "base/time/time.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/events/event.h"
-#include "ui/events/ozone/device/device_manager.h"
-#include "ui/events/ozone/evdev/event_converter_test_util.h"
-#include "ui/events/ozone/evdev/event_device_info.h"
-#include "ui/events/ozone/evdev/event_device_test_util.h"
-#include "ui/events/ozone/evdev/event_device_util.h"
-#include "ui/events/ozone/evdev/event_factory_evdev.h"
-#include "ui/events/ozone/gamepad/gamepad_event.h"
-#include "ui/events/ozone/gamepad/gamepad_observer.h"
-#include "ui/events/ozone/gamepad/gamepad_provider_ozone.h"
-#include "ui/events/ozone/gamepad/static_gamepad_mapping.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
-#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
-#include "ui/events/platform/platform_event_dispatcher.h"
-#include "ui/events/platform/platform_event_source.h"
-
-namespace ui {
-
-class GenericGamepadMappingTest : public testing::Test {
- public:
-  GenericGamepadMappingTest() {}
-
-  void CompareGamepadMapper(const GamepadMapper* l_mapper,
-                            const GamepadMapper* r_mapper) {
-    bool l_result, r_result;
-    GamepadEventType l_mapped_type, r_mapped_type;
-    uint16_t l_mapped_code, r_mapped_code;
-    for (uint16_t code = BTN_MISC; code < KEY_MAX; code++) {
-      l_result = l_mapper->Map(EV_KEY, code, &l_mapped_type, &l_mapped_code);
-      r_result = r_mapper->Map(EV_KEY, code, &r_mapped_type, &r_mapped_code);
-      EXPECT_EQ(l_result, r_result) << " Current Code: " << code;
-      if (l_result) {
-        EXPECT_EQ(l_mapped_type, r_mapped_type);
-        EXPECT_EQ(r_mapped_code, r_mapped_code);
-      }
-    }
-    for (uint16_t code = ABS_X; code < ABS_MAX; code++) {
-      l_result = l_mapper->Map(EV_ABS, code, &l_mapped_type, &l_mapped_code);
-      r_result = r_mapper->Map(EV_ABS, code, &r_mapped_type, &r_mapped_code);
-      EXPECT_EQ(l_result, r_result);
-      if (l_result) {
-        EXPECT_EQ(l_mapped_type, r_mapped_type);
-        EXPECT_EQ(r_mapped_code, r_mapped_code);
-      }
-    }
-  }
-
-  void TestCompatableWithCapabilities(const DeviceCapabilities& cap) {
-    ui::EventDeviceInfo devinfo;
-    CapabilitiesToDeviceInfo(cap, &devinfo);
-    std::unique_ptr<GamepadMapper> static_mapper(
-        GetStaticGamepadMapper(devinfo.vendor_id(), devinfo.product_id()));
-    std::unique_ptr<GamepadMapper> generic_mapper =
-        BuildGenericGamepadMapper(devinfo);
-    CompareGamepadMapper(static_mapper.get(), generic_mapper.get());
-  }
-};
-
-TEST_F(GenericGamepadMappingTest, XInputGamepad) {
-  TestCompatableWithCapabilities(kXboxGamepad);
-}
-
-TEST_F(GenericGamepadMappingTest, HJCGamepad) {
-  TestCompatableWithCapabilities(kHJCGamepad);
-}
-
-}  // namespace ui
diff --git a/ui/events/ozone/gamepad/static_gamepad_mapping.cc b/ui/events/ozone/gamepad/static_gamepad_mapping.cc
deleted file mode 100644
index e59507d..0000000
--- a/ui/events/ozone/gamepad/static_gamepad_mapping.cc
+++ /dev/null
@@ -1,535 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <linux/input.h>
-#include <cstdint>
-#include <list>
-#include <map>
-#include <vector>
-
-#include "base/stl_util.h"
-#include "ui/events/ozone/evdev/event_device_info.h"
-#include "ui/events/ozone/gamepad/static_gamepad_mapping.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
-
-namespace ui {
-
-typedef bool (*GamepadMapperFunction)(uint16_t key,
-                                      uint16_t code,
-                                      GamepadEventType* mapped_type,
-                                      uint16_t* mapped_code);
-
-#define DO_MAPPING                                                    \
-  DoGamepadMapping(key_mapping, base::size(key_mapping), abs_mapping, \
-                   base::size(abs_mapping), type, code, mapped_type,  \
-                   mapped_code)
-
-bool DoGamepadMapping(const KeyMapEntry* key_mapping,
-                      size_t key_map_size,
-                      const AbsMapEntry* abs_mapping,
-                      size_t abs_map_size,
-                      uint16_t type,
-                      uint16_t code,
-                      GamepadEventType* mapped_type,
-                      uint16_t* mapped_code) {
-  if (type == EV_KEY) {
-    const KeyMapEntry* entry = nullptr;
-    for (size_t i = 0; i < key_map_size; i++) {
-      if (key_mapping[i].evdev_code == code) {
-        entry = key_mapping + i;
-      }
-    }
-    if (!entry) {
-      return false;
-    }
-    *mapped_type = GamepadEventType::BUTTON;
-    *mapped_code = entry->mapped_code;
-    return true;
-  }
-
-  if (type == EV_ABS) {
-    const AbsMapEntry* entry = nullptr;
-    for (size_t i = 0; i < abs_map_size; i++) {
-      if (abs_mapping[i].evdev_code == code) {
-        entry = abs_mapping + i;
-      }
-    }
-    if (!entry) {
-      return false;
-    }
-    *mapped_type = entry->mapped_type;
-    *mapped_code = entry->mapped_code;
-    return true;
-  }
-  return false;
-}
-
-// this mapper mapps gamepads compatible with xbox gamepad.
-bool XInputStyleMapper(uint16_t type,
-                       uint16_t code,
-                       GamepadEventType* mapped_type,
-                       uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},            // btn_a = 304 / 0x130
-      {BTN_B, WG_BUTTON_B},            // btn_b = 305 / 0x131
-      {BTN_X, WG_BUTTON_X},            // btn_x = 307 / 0x133
-      {BTN_Y, WG_BUTTON_Y},            // btn_y = 308 / 0x134
-      {BTN_TL, WG_BUTTON_L1},          // btn_tl = 310 / 0x136
-      {BTN_TR, WG_BUTTON_R1},          // btn_tr = 311 / 0x137
-      {BTN_SELECT, WG_BUTTON_SELECT},  // btn_select = 314 / 0x13a
-      {BTN_START, WG_BUTTON_START},    // btn_start = 315 / 0x13b
-      {BTN_THUMBL, WG_BUTTON_THUMBL},  // btn_thumbl = 317 / 0x13d
-      {BTN_THUMBR, WG_BUTTON_THUMBR},  // btn_thumbr = 318 / 0x13e
-      {BTN_MODE, WG_BUTTON_MODE}       // btn_mode = 316 / 0x13c
-  };
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),       // ABS_X = 0x00
-      TO_ABS(ABS_Y, WG_ABS_Y),       // ABS_Y = 0x01
-      TO_ABS(ABS_RX, WG_ABS_RX),     // ABS_RX = 0x03
-      TO_ABS(ABS_RY, WG_ABS_RY),     // ABS_RZ = 0x04
-      TO_BTN(ABS_Z, WG_BUTTON_LT),   // ABS_Z = 0x02
-      TO_BTN(ABS_RZ, WG_BUTTON_RT),  // ABS_RZ = 0x05
-      TO_BTN(ABS_HAT0X, kHAT_X),     // HAT0X = 0x10
-      TO_BTN(ABS_HAT0Y, kHAT_Y)      // HAT0Y = 0x11
-  };
-  return DO_MAPPING;
-}
-
-bool PlaystationSixAxisMapper(uint16_t type,
-                              uint16_t code,
-                              GamepadEventType* mapped_type,
-                              uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {0x12e, WG_BUTTON_A},
-      {0x12d, WG_BUTTON_B},
-      {BTN_DEAD, WG_BUTTON_X},
-      {0x12c, WG_BUTTON_Y},
-      {BTN_BASE5, WG_BUTTON_L1},
-      {BTN_BASE6, WG_BUTTON_R1},
-      {BTN_BASE3, WG_BUTTON_LT},
-      {BTN_BASE4, WG_BUTTON_RT},
-      {BTN_TRIGGER, WG_BUTTON_SELECT},
-      {BTN_TOP, WG_BUTTON_START},
-      {BTN_THUMB, WG_BUTTON_THUMBL},
-      {BTN_THUMB2, WG_BUTTON_THUMBR},
-      {BTN_TOP2, WG_BUTTON_DPAD_UP},
-      {BTN_BASE, WG_BUTTON_DPAD_DOWN},
-      {BTN_BASE2, WG_BUTTON_DPAD_LEFT},
-      {BTN_PINKIE, WG_BUTTON_DPAD_RIGHT},
-      {BTN_TRIGGER_HAPPY17, WG_BUTTON_MODE},
-  };
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),
-      TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),
-      TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_MT_TOUCH_MAJOR, WG_BUTTON_LT),
-      TO_BTN(ABS_MT_TOUCH_MINOR, WG_BUTTON_RT)};
-  return DO_MAPPING;
-}
-
-bool DualShock4Mapper(uint16_t type,
-                      uint16_t code,
-                      GamepadEventType* mapped_type,
-                      uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},           {BTN_B, WG_BUTTON_B},
-      {BTN_C, WG_BUTTON_X},           {BTN_X, WG_BUTTON_Y},
-      {BTN_Y, WG_BUTTON_L1},          {BTN_Z, WG_BUTTON_R1},
-      {BTN_TL, WG_BUTTON_LT},         {BTN_TR, WG_BUTTON_RT},
-      {BTN_TL2, WG_BUTTON_SELECT},    {BTN_TR2, WG_BUTTON_START},
-      {BTN_SELECT, WG_BUTTON_THUMBL}, {BTN_START, WG_BUTTON_THUMBR}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),      TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_RX, WG_BUTTON_LT), TO_ABS(ABS_RY, WG_BUTTON_RT),
-      TO_ABS(ABS_Z, WG_ABS_RX),     TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_HAT0X, kHAT_X),    TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool NintendoSwitchPro(uint16_t type,
-                       uint16_t code,
-                       GamepadEventType* mapped_type,
-                       uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},           {BTN_B, WG_BUTTON_B},
-      {BTN_C, WG_BUTTON_X},           {BTN_X, WG_BUTTON_Y},
-      {BTN_Y, WG_BUTTON_L1},          {BTN_Z, WG_BUTTON_R1},
-      {BTN_TL, WG_BUTTON_LT},         {BTN_TR, WG_BUTTON_RT},
-      {BTN_TL2, WG_BUTTON_SELECT},    {BTN_TR2, WG_BUTTON_START},
-      {BTN_SELECT, WG_BUTTON_THUMBL}, {BTN_START, WG_BUTTON_THUMBR},
-      {BTN_MODE, WG_BUTTON_MODE}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),   TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_RX, WG_ABS_RX), TO_ABS(ABS_RY, WG_ABS_RY),
-      TO_BTN(ABS_HAT0X, kHAT_X), TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool NintendoSwitchLeft(uint16_t type,
-                        uint16_t code,
-                        GamepadEventType* mapped_type,
-                        uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},        {BTN_B, WG_BUTTON_B},
-      {BTN_C, WG_BUTTON_X},        {BTN_X, WG_BUTTON_Y},
-      {BTN_Y, WG_BUTTON_L1},       {BTN_Z, WG_BUTTON_R1},
-      {BTN_TL2, WG_BUTTON_SELECT}, {BTN_THUMBL, WG_BUTTON_START}};
-
-  static const AbsMapType abs_mapping = {TO_BTN(ABS_HAT0X, kHAT_X),
-                                         TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool NintendoSwitchRight(uint16_t type,
-                         uint16_t code,
-                         GamepadEventType* mapped_type,
-                         uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},         {BTN_B, WG_BUTTON_B},
-      {BTN_C, WG_BUTTON_X},         {BTN_X, WG_BUTTON_Y},
-      {BTN_Y, WG_BUTTON_L1},        {BTN_Z, WG_BUTTON_R1},
-      {BTN_MODE, WG_BUTTON_SELECT}, {BTN_TR2, WG_BUTTON_START}};
-
-  static const AbsMapType abs_mapping = {TO_BTN(ABS_HAT0X, kHAT_X),
-                                         TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool IBuffalocClassicMapper(uint16_t type,
-                            uint16_t code,
-                            GamepadEventType* mapped_type,
-                            uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_TRIGGER, WG_BUTTON_A}, {BTN_THUMB, WG_BUTTON_B},
-      {BTN_THUMB2, WG_BUTTON_X},  {BTN_TOP, WG_BUTTON_Y},
-      {BTN_BASE, WG_BUTTON_L1},   {BTN_BASE2, WG_BUTTON_R1},
-      {BTN_TOP2, WG_BUTTON_LT},   {BTN_PINKIE, WG_BUTTON_RT}};
-
-  static const AbsMapType abs_mapping = {
-      TO_BTN(ABS_X, kHAT_X), TO_BTN(ABS_Y, kHAT_Y),
-  };
-  return DO_MAPPING;
-}
-
-bool ClassicNESMapper(uint16_t type,
-                      uint16_t code,
-                      GamepadEventType* mapped_type,
-                      uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_THUMB, WG_BUTTON_A},      {BTN_THUMB2, WG_BUTTON_B},
-      {BTN_TRIGGER, WG_BUTTON_X},    {BTN_TOP, WG_BUTTON_Y},
-      {BTN_TOP2, WG_BUTTON_L1},      {BTN_PINKIE, WG_BUTTON_R1},
-      {BTN_BASE3, WG_BUTTON_SELECT}, {BTN_BASE4, WG_BUTTON_START}};
-
-  static const AbsMapType abs_mapping = {
-      TO_BTN(ABS_X, kHAT_X), TO_BTN(ABS_Y, kHAT_Y),
-  };
-  return DO_MAPPING;
-}
-
-bool SNesRetroMapper(uint16_t type,
-                     uint16_t code,
-                     GamepadEventType* mapped_type,
-                     uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_C, WG_BUTTON_A},        {BTN_B, WG_BUTTON_B},
-      {BTN_X, WG_BUTTON_X},        {BTN_A, WG_BUTTON_Y},
-      {BTN_Y, WG_BUTTON_L1},       {BTN_Z, WG_BUTTON_R1},
-      {BTN_TL2, WG_BUTTON_SELECT}, {BTN_TR2, WG_BUTTON_START}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, kHAT_X), TO_ABS(ABS_Y, kHAT_Y),
-  };
-  return DO_MAPPING;
-}
-
-bool ADT1Mapper(uint16_t type,
-                uint16_t code,
-                GamepadEventType* mapped_type,
-                uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},           {BTN_B, WG_BUTTON_B},
-      {BTN_X, WG_BUTTON_X},           {BTN_Y, WG_BUTTON_Y},
-      {BTN_TL, WG_BUTTON_L1},         {BTN_TR, WG_BUTTON_R1},
-      {BTN_THUMBL, WG_BUTTON_THUMBL}, {BTN_THUMBR, WG_BUTTON_THUMBR},
-      {BTN_MODE, WG_BUTTON_MODE},     {KEY_BACK, WG_BUTTON_SELECT},
-      {KEY_HOMEPAGE, WG_BUTTON_START}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),         TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),        TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_BRAKE, WG_BUTTON_LT), TO_BTN(ABS_GAS, WG_BUTTON_RT),
-      TO_BTN(ABS_HAT0X, kHAT_X),       TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool Vendor_1d79Product_0009Mapper(uint16_t type,
-                                   uint16_t code,
-                                   GamepadEventType* mapped_type,
-                                   uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {{BTN_A, WG_BUTTON_A},
-                                         {BTN_B, WG_BUTTON_B},
-                                         {BTN_X, WG_BUTTON_X},
-                                         {BTN_Y, WG_BUTTON_Y},
-                                         {BTN_TL, WG_BUTTON_L1},
-                                         {BTN_TR, WG_BUTTON_R1},
-                                         {BTN_START, WG_BUTTON_START},
-                                         {BTN_THUMBL, WG_BUTTON_THUMBL},
-                                         {BTN_THUMBR, WG_BUTTON_THUMBR},
-                                         {KEY_UP, WG_BUTTON_DPAD_UP},
-                                         {KEY_DOWN, WG_BUTTON_DPAD_DOWN},
-                                         {KEY_LEFT, WG_BUTTON_DPAD_LEFT},
-                                         {KEY_RIGHT, WG_BUTTON_DPAD_RIGHT},
-                                         {KEY_BACK, WG_BUTTON_SELECT},
-                                         {KEY_HOMEPAGE, WG_BUTTON_MODE}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),         TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),        TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_BRAKE, WG_BUTTON_LT), TO_BTN(ABS_GAS, WG_BUTTON_RT),
-      TO_BTN(ABS_HAT0X, kHAT_X),       TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool Vendor_046dProduct_b501Mapper(uint16_t type,
-                                   uint16_t code,
-                                   GamepadEventType* mapped_type,
-                                   uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {{BTN_A, WG_BUTTON_A},
-                                         {BTN_B, WG_BUTTON_B},
-                                         {BTN_X, WG_BUTTON_X},
-                                         {BTN_Y, WG_BUTTON_Y},
-                                         {BTN_TL, WG_BUTTON_L1},
-                                         {BTN_TR, WG_BUTTON_R1},
-                                         {BTN_TL2, WG_BUTTON_LT},
-                                         {BTN_TR2, WG_BUTTON_RT},
-                                         {BTN_SELECT, WG_BUTTON_SELECT},
-                                         {BTN_START, WG_BUTTON_START},
-                                         {BTN_THUMBL, WG_BUTTON_THUMBL},
-                                         {BTN_THUMBR, WG_BUTTON_THUMBR},
-                                         {KEY_UP, WG_BUTTON_DPAD_UP},
-                                         {KEY_DOWN, WG_BUTTON_DPAD_DOWN},
-                                         {KEY_LEFT, WG_BUTTON_DPAD_LEFT},
-                                         {KEY_RIGHT, WG_BUTTON_DPAD_RIGHT},
-                                         {BTN_MODE, WG_BUTTON_MODE}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),         TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),        TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_BRAKE, WG_BUTTON_LT), TO_BTN(ABS_GAS, WG_BUTTON_RT),
-      TO_BTN(ABS_HAT0X, kHAT_X),       TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool Vendor_046dProduct_c216Mapper(uint16_t type,
-                                   uint16_t code,
-                                   GamepadEventType* mapped_type,
-                                   uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_TRIGGER, WG_BUTTON_A},    {BTN_TOP, WG_BUTTON_B},
-      {BTN_THUMB, WG_BUTTON_X},      {BTN_THUMB2, WG_BUTTON_Y},
-      {BTN_TOP2, WG_BUTTON_L1},      {BTN_PINKIE, WG_BUTTON_R1},
-      {BTN_BASE, WG_BUTTON_LT},      {BTN_BASE2, WG_BUTTON_RT},
-      {BTN_BASE3, WG_BUTTON_SELECT}, {BTN_BASE4, WG_BUTTON_START},
-      {BTN_BASE5, WG_BUTTON_THUMBL}, {BTN_BASE6, WG_BUTTON_THUMBR}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),   TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),  TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_HAT0X, kHAT_X), TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool Vendor_046dProduct_c219Mapper(uint16_t type,
-                                   uint16_t code,
-                                   GamepadEventType* mapped_type,
-                                   uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_B, WG_BUTTON_A},          {BTN_C, WG_BUTTON_B},
-      {BTN_A, WG_BUTTON_X},          {BTN_X, WG_BUTTON_Y},
-      {BTN_Y, WG_BUTTON_L1},         {BTN_Z, WG_BUTTON_R1},
-      {BTN_TL, WG_BUTTON_LT},        {BTN_TR, WG_BUTTON_RT},
-      {BTN_TR2, WG_BUTTON_START},    {BTN_SELECT, WG_BUTTON_THUMBL},
-      {BTN_START, WG_BUTTON_THUMBR}, {BTN_TL2, WG_BUTTON_SELECT}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),   TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),  TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_HAT0X, kHAT_X), TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool Vendor_1038Product_1412Mapper(uint16_t type,
-                                   uint16_t code,
-                                   GamepadEventType* mapped_type,
-                                   uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},         {BTN_B, WG_BUTTON_B},
-      {BTN_X, WG_BUTTON_X},         {BTN_Y, WG_BUTTON_Y},
-      {BTN_TL, WG_BUTTON_L1},       {BTN_TR, WG_BUTTON_R1},
-      {BTN_MODE, WG_BUTTON_SELECT}, {BTN_START, WG_BUTTON_START},
-  };
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),   TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),  TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_HAT0X, kHAT_X), TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool Vendor_1689Product_fd00Mapper(uint16_t type,
-                                   uint16_t code,
-                                   GamepadEventType* mapped_type,
-                                   uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},
-      {BTN_B, WG_BUTTON_B},
-      {BTN_X, WG_BUTTON_X},
-      {BTN_Y, WG_BUTTON_Y},
-      {BTN_TL, WG_BUTTON_L1},
-      {BTN_TR, WG_BUTTON_R1},
-      {BTN_START, WG_BUTTON_START},
-      {BTN_THUMBL, WG_BUTTON_THUMBL},
-      {BTN_THUMBR, WG_BUTTON_THUMBR},
-      {BTN_TRIGGER_HAPPY3, WG_BUTTON_DPAD_UP},
-      {BTN_TRIGGER_HAPPY4, WG_BUTTON_DPAD_DOWN},
-      {BTN_TRIGGER_HAPPY1, WG_BUTTON_DPAD_LEFT},
-      {BTN_TRIGGER_HAPPY2, WG_BUTTON_DPAD_RIGHT},
-      {BTN_SELECT, WG_BUTTON_SELECT},
-      {BTN_MODE, WG_BUTTON_MODE}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),     TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_RX, WG_ABS_RX),   TO_ABS(ABS_RY, WG_ABS_RY),
-      TO_BTN(ABS_Z, WG_BUTTON_LT), TO_BTN(ABS_RZ, WG_BUTTON_RT)};
-  return DO_MAPPING;
-}
-
-bool JoydevLikeMapper(uint16_t type,
-                      uint16_t code,
-                      GamepadEventType* mapped_type,
-                      uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},           {BTN_B, WG_BUTTON_B},
-      {BTN_C, WG_BUTTON_X},           {BTN_X, WG_BUTTON_Y},
-      {BTN_Y, WG_BUTTON_L1},          {BTN_Z, WG_BUTTON_R1},
-      {BTN_TL, WG_BUTTON_LT},         {BTN_TR, WG_BUTTON_RT},
-      {BTN_TL2, WG_BUTTON_SELECT},    {BTN_TR2, WG_BUTTON_START},
-      {BTN_SELECT, WG_BUTTON_THUMBL}, {BTN_START, WG_BUTTON_THUMBR}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),   TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),  TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_HAT0X, kHAT_X), TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-bool NvidiaShieldMapper(uint16_t type,
-                        uint16_t code,
-                        GamepadEventType* mapped_type,
-                        uint16_t* mapped_code) {
-  static const KeyMapType key_mapping = {
-      {BTN_A, WG_BUTTON_A},           {BTN_B, WG_BUTTON_B},
-      {BTN_X, WG_BUTTON_X},           {BTN_Y, WG_BUTTON_Y},
-      {BTN_TL, WG_BUTTON_L1},         {BTN_TR, WG_BUTTON_R1},
-      {KEY_BACK, WG_BUTTON_SELECT},   {BTN_START, WG_BUTTON_START},
-      {KEY_HOMEPAGE, WG_BUTTON_MODE}, {BTN_THUMBL, WG_BUTTON_THUMBL},
-      {BTN_THUMBR, WG_BUTTON_THUMBR}};
-
-  static const AbsMapType abs_mapping = {
-      TO_ABS(ABS_X, WG_ABS_X),         TO_ABS(ABS_Y, WG_ABS_Y),
-      TO_ABS(ABS_Z, WG_ABS_RX),        TO_ABS(ABS_RZ, WG_ABS_RY),
-      TO_BTN(ABS_BRAKE, WG_BUTTON_LT), TO_BTN(ABS_GAS, WG_BUTTON_RT),
-      TO_BTN(ABS_HAT0X, kHAT_X),       TO_BTN(ABS_HAT0Y, kHAT_Y)};
-  return DO_MAPPING;
-}
-
-static const struct MappingData {
-  uint16_t vendor_id;
-  uint16_t product_id;
-  GamepadMapperFunction mapper;
-} AvailableMappings[] = {
-    // Xbox style gamepad.
-    {0x045e, 0x028e, XInputStyleMapper},  // Xbox 360 wired.
-    {0x045e, 0x028f, XInputStyleMapper},  // Xbox 360 wireless.
-    {0x045e, 0x02a1, XInputStyleMapper},  // Xbox 360 wireless.
-    {0x045e, 0x02d1, XInputStyleMapper},  // Xbox one wired.
-    {0x045e, 0x02dd, XInputStyleMapper},  // Xbox one wired (2015 fw).
-    {0x045e, 0x02e3, XInputStyleMapper},  // Xbox elite wired.
-    {0x045e, 0x02ea, XInputStyleMapper},  // Xbox one s (usb).
-    {0x045e, 0x0719, XInputStyleMapper},  // Xbox 360 wireless.
-    {0x046d, 0xc21d, XInputStyleMapper},  // Logitech f310.
-    {0x046d, 0xc21e, XInputStyleMapper},  // Logitech f510.
-    {0x046d, 0xc21f, XInputStyleMapper},  // Logitech f710.
-    {0x2378, 0x1008, XInputStyleMapper},  // Onlive controller (bluetooth).
-    {0x2378, 0x100a, XInputStyleMapper},  // Onlive controller (wired).
-    {0x1bad, 0xf016, XInputStyleMapper},  // Mad catz gamepad.
-    {0x1bad, 0xf023, XInputStyleMapper},  // Mad catz mlg gamepad for Xbox360.
-    {0x1bad, 0xf027, XInputStyleMapper},  // Mad catz fps pro.
-    {0x1bad, 0xf036, XInputStyleMapper},  // Mad catz generic Xbox controller.
-    {0x1689, 0xfd01, XInputStyleMapper},  // Razer Xbox 360 gamepad.
-    {0x1689, 0xfe00, XInputStyleMapper},  // Razer sabertooth elite.
-    // Sony gamepads.
-    {0x054c, 0x0268, PlaystationSixAxisMapper},  // Playstation 3.
-    {0x054c, 0x05c4, DualShock4Mapper},          // Dualshock 4.
-    // Nintendo switch.
-    {0x057e, 0x2009, NintendoSwitchPro},    // Nintendo switch pro.
-    {0x057e, 0x2006, NintendoSwitchLeft},   // Nintendo switch left.
-    {0x057e, 0x2007, NintendoSwitchRight},  // Nintendo switch right.
-    // NES style gamepad.
-    {0x0583, 0x2060, IBuffalocClassicMapper},         // iBuffalo Classic.
-    {0x0079, 0x0011, ClassicNESMapper},               // Classic NES controller.
-    {0x12bd, 0xd015, SNesRetroMapper},                // Hitgaming SNES retro.
-    {0x3810, 0x9, Vendor_046dProduct_b501Mapper},     // FC30 Pro, bluetooth.
-    {0x1002, 0x9000, Vendor_046dProduct_b501Mapper},  // FC30 Pro, wired.
-    // Android gamepad.
-    {0x0b05, 0x4500, ADT1Mapper},  // Nexus player controller (asus gamepad).
-    {0x1532, 0x0900, ADT1Mapper},  // Razer serval.
-    {0x18d1, 0x2c40, ADT1Mapper},  // ADT-1 controller (odie).
-    // Other gamepads.
-    {0x1d79, 0x0009,
-     Vendor_1d79Product_0009Mapper},  // Nyko playpad / Playpad pro.
-    {0x046d, 0xb501, Vendor_046dProduct_b501Mapper},  // Logitech redhawk.
-    // Logitech dual action controller.
-    {0x046d, 0xc216, Vendor_046dProduct_c216Mapper},
-    // Logitech cordless rumblepad2.
-    {0x046d, 0xc219, Vendor_046dProduct_c219Mapper},
-    {0x1038, 0x1412, Vendor_1038Product_1412Mapper},  // Steelseries free.
-    // Razer onza tournment edition.
-    {0x1689, 0xfd00, Vendor_1689Product_fd00Mapper},
-    {0x0955, 0x7214, NvidiaShieldMapper},  // Nvidia shield.
-    {0x11c5, 0x5506, JoydevLikeMapper}     // HJC Game ZD-V
-};
-
-class StaticGamepadMapper : public GamepadMapper {
- public:
-  StaticGamepadMapper(GamepadMapperFunction fp) : mapper_fp_(fp) {}
-
-  bool Map(uint16_t type,
-           uint16_t code,
-           GamepadEventType* mapped_type,
-           uint16_t* mapped_code) const override {
-    return mapper_fp_(type, code, mapped_type, mapped_code);
-  }
-
- private:
-  GamepadMapperFunction mapper_fp_;
-};
-
-GamepadMapper* GetStaticGamepadMapper(uint16_t vendor_id, uint16_t product_id) {
-  for (size_t i = 0; i < base::size(AvailableMappings); i++) {
-    if (AvailableMappings[i].vendor_id == vendor_id &&
-        AvailableMappings[i].product_id == product_id) {
-      return new StaticGamepadMapper(AvailableMappings[i].mapper);
-    }
-  }
-  return nullptr;
-}
-
-}  // namespace ui
diff --git a/ui/events/ozone/gamepad/static_gamepad_mapping.h b/ui/events/ozone/gamepad/static_gamepad_mapping.h
deleted file mode 100644
index f1cb3bf..0000000
--- a/ui/events/ozone/gamepad/static_gamepad_mapping.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_EVENTS_OZONE_STATIC_GAMEPAD_GAMEPAD_MAPPING_H_
-#define UI_EVENTS_OZONE_STATIC_GAMEPAD_GAMEPAD_MAPPING_H_
-
-#include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
-#include "ui/events/ozone/gamepad/gamepad_mapping.h"
-#include "ui/events/ozone/gamepad/webgamepad_constants.h"
-
-namespace ui {
-
-// This function gets the static mapper for the gamepad vendor_id and
-// product_id.
-GamepadMapper* EVENTS_OZONE_EVDEV_EXPORT
-GetStaticGamepadMapper(uint16_t vendor_id, uint16_t product_id);
-
-}  // namespace ui
-
-#endif  // UI_EVENTS_OZONE_STATIC_GAMEPAD_GAMEPAD_MAPPING_H_
diff --git a/ui/events/ozone/gamepad/webgamepad_constants.h b/ui/events/ozone/gamepad/webgamepad_constants.h
deleted file mode 100644
index d3fd478b..0000000
--- a/ui/events/ozone/gamepad/webgamepad_constants.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_EVENTS_OZONE_GAMEPAD_WEBGAMEPAD_CONSTANTS_H_
-#define UI_EVENTS_OZONE_GAMEPAD_WEBGAMEPAD_CONSTANTS_H_
-
-#include <stdint.h>
-
-namespace ui {
-
-// We care about three type of gamepad events.
-enum class GamepadEventType { BUTTON, AXIS, FRAME };
-
-// This WebGamepadButtonType matches the index of gamepad button defined in w3c
-// standard gamepad.
-enum WebGamepadButtonType {
-  WG_BUTTON_A = 0,
-  WG_BUTTON_B = 1,
-  WG_BUTTON_X = 2,
-  WG_BUTTON_Y = 3,
-  WG_BUTTON_L1 = 4,
-  WG_BUTTON_R1 = 5,
-  WG_BUTTON_LT = 6,
-  WG_BUTTON_RT = 7,
-  WG_BUTTON_SELECT = 8,
-  WG_BUTTON_START = 9,
-  WG_BUTTON_THUMBL = 10,
-  WG_BUTTON_THUMBR = 11,
-  WG_BUTTON_DPAD_UP = 12,
-  WG_BUTTON_DPAD_DOWN = 13,
-  WG_BUTTON_DPAD_LEFT = 14,
-  WG_BUTTON_DPAD_RIGHT = 15,
-  WG_BUTTON_MODE = 16,
-  WG_BUTTON_COUNT = 17
-};
-
-// This WebGamepadAbsType matches the index of gamepad abs defined in w3c
-// standard gamepad.
-enum WebGamepadAbsType {
-  WG_ABS_X = 0,
-  WG_ABS_Y = 1,
-  WG_ABS_RX = 2,
-  WG_ABS_RY = 3,
-  WG_ABS_COUNT = 4
-};
-
-// Following constants are used to normalize abs values to web gamepad standard.
-constexpr double kWebGamepadTriggerMin = 0.0;
-constexpr double kWebGamepadTriggerMax = 1.0;
-constexpr double kWebGamepadJoystickMin = -1.0;
-constexpr double kWebGamepadJoystickMax = 1.0;
-
-}  // namespace ui
-
-#endif  // UI_EVENTS_OZONE_EVDEV_WEBGAMEPAD_CONSTANTS_H_
diff --git a/ui/file_manager/file_manager/background/js/crostini.js b/ui/file_manager/file_manager/background/js/crostini.js
index 6bbbb3be..a9d9675e 100644
--- a/ui/file_manager/file_manager/background/js/crostini.js
+++ b/ui/file_manager/file_manager/background/js/crostini.js
@@ -120,8 +120,6 @@
  * @param {string} vmName
  * @param {boolean} allowed
  */
-// TODO(crbug.com/988375): add dynamic pref change functionality for
-// RootAccessAllowed.
 CrostiniImpl.prototype.setRootAccessAllowed = function(vmName, allowed) {
   this.rootAccessAllowed_[vmName] = allowed;
 };
@@ -219,6 +217,12 @@
     case chrome.fileManagerPrivate.CrostiniEventType.DISABLE:
       this.setEnabled(event.vmName, false);
       break;
+    case chrome.fileManagerPrivate.CrostiniEventType.ROOT_ACCESS_ALLOW:
+      this.setRootAccessAllowed(event.vmName, true);
+      break;
+    case chrome.fileManagerPrivate.CrostiniEventType.ROOT_ACCESS_DISALLOW:
+      this.setRootAccessAllowed(event.vmName, false);
+      break;
     case chrome.fileManagerPrivate.CrostiniEventType.SHARE:
       for (const entry of event.entries) {
         this.registerSharedPath(event.vmName, entry);
diff --git a/ui/file_manager/file_manager/background/js/volume_manager_impl.js b/ui/file_manager/file_manager/background/js/volume_manager_impl.js
index 5e36d6e3..8cb60e5 100644
--- a/ui/file_manager/file_manager/background/js/volume_manager_impl.js
+++ b/ui/file_manager/file_manager/background/js/volume_manager_impl.js
@@ -174,6 +174,8 @@
             const volumeInfo =
                 await this.addVolumeMetadata_(event.volumeMetadata);
             this.finishRequest_(requestKey, event.status, volumeInfo);
+            console.warn(`Mounted '${event.volumeMetadata.sourcePath}' as '${
+                event.volumeMetadata.volumeId}'`);
             break;
           }
 
@@ -184,6 +186,9 @@
             navigationEvent.volumeId = event.volumeMetadata.volumeId;
             this.dispatchEvent(navigationEvent);
             this.finishRequest_(requestKey, event.status);
+            console.error(`'Cannot mount ${
+                event.volumeMetadata.sourcePath}': Already mounted as '${
+                event.volumeMetadata.volumeId}'`);
             break;
           }
 
@@ -211,6 +216,9 @@
           this.finishRequest_(requestKey, status);
           if (event.status === 'success') {
             this.volumeInfoList.remove(event.volumeMetadata.volumeId);
+            console.warn(`Unmounted '${volumeId}'`);
+          } else {
+            console.error(`Cannot unmount '${volumeId}': ${event.status}`);
           }
 
           break;
@@ -240,9 +248,7 @@
     });
     console.warn(`Mounting '${path}'`);
     const key = this.makeRequestKey_('mount', path);
-    const volumeInfo = await this.startRequest_(key);
-    console.warn(`Mounted '${path}' as '${volumeInfo.volumeId}'`);
-    return volumeInfo;
+    return this.startRequest_(key);
   }
 
   /** @override */
@@ -251,7 +257,6 @@
     chrome.fileManagerPrivate.removeMount(volumeInfo.volumeId);
     const key = this.makeRequestKey_('unmount', volumeInfo.volumeId);
     await this.startRequest_(key);
-    console.warn(`Unmounted '${volumeInfo.volumeId}'`);
   }
 
   /** @override */
diff --git a/ui/file_manager/file_manager/foreground/elements/xf_display_panel.js b/ui/file_manager/file_manager/foreground/elements/xf_display_panel.js
index 5409aa3..57b1afb 100644
--- a/ui/file_manager/file_manager/foreground/elements/xf_display_panel.js
+++ b/ui/file_manager/file_manager/foreground/elements/xf_display_panel.js
@@ -85,10 +85,7 @@
               /* Limit to 3 visible progress panels before scroll. */
               #panels {
                   max-height: calc(192px + 28px);
-              }
-              /* Show only the first of any non-progress panels. */
-              xf-panel-item:not([panel-type='0']):not(:first-child) {
-                display: none;
+                  overflow-y: auto;
               }
               xf-panel-item:not(:only-child) {
                 --progress-height: 64px;
@@ -239,8 +236,15 @@
     let summaryHost = this.shadowRoot.querySelector('#summary');
     let summaryPanel = summaryHost.querySelector('#summary-panel');
 
-    // If there's only one panel item active, no need for summary.
-    if (this.items_.length <= 1 && summaryPanel) {
+    // Work out how many progress panels are being shown.
+    let count = 0;
+    for (let i = 0; i < this.items_.length; ++i) {
+      if (this.items_[i].panelType == this.items_[i].panelTypeProgress) {
+        count++;
+      }
+    }
+    // If there's only one progress panel item active, no need for summary.
+    if (count <= 1 && summaryPanel) {
       const button = summaryPanel.primaryButton;
       if (button) {
         button.removeEventListener('click', this.toggleSummary);
@@ -252,12 +256,6 @@
       return;
     }
     // Show summary panel if there are more than 1 progress panels.
-    let count = 0;
-    for (let i = 0; i < this.items_.length; ++i) {
-      if (this.items_[i].panelType == this.items_[i].panelTypeProgress) {
-        count++;
-      }
-    }
     if (count > 1 && !summaryPanel) {
       summaryPanel = document.createElement('xf-panel-item');
       summaryPanel.setAttribute('panel-type', 1);
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager.js b/ui/file_manager/file_manager/foreground/js/file_manager.js
index d1d3775..1246ea7 100644
--- a/ui/file_manager/file_manager/foreground/js/file_manager.js
+++ b/ui/file_manager/file_manager/foreground/js/file_manager.js
@@ -1220,10 +1220,10 @@
    */
   async onCrostiniChanged_(event) {
     // The background |this.crostini_| object also listens to all crostini
-    // events including enable/disable and share/unshare.  But to ensure we
-    // don't have any race conditions between bg and fg, we set enabled status
-    // on it before calling |setupCrostini_| which reads enabled status from it
-    // to determine whether 'Linux files' is shown.
+    // events including enable/disable, allow/disallow and share/unshare.
+    // But to ensure we don't have any race conditions between bg and fg, we
+    // set enabled status on it before calling |setupCrostini_| which reads
+    // enabled status from it to determine whether 'Linux files' is shown.
     switch (event.eventType) {
       case chrome.fileManagerPrivate.CrostiniEventType.ENABLE:
         this.crostini_.setEnabled(event.vmName, true);
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js
index 5a3960f..307b0950 100644
--- a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js
+++ b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js
@@ -592,7 +592,7 @@
         await fileManager.volumeManager.unmount(volume);
       } catch (error) {
         console.error(
-            `Cannot unmount ${volume.volumeId}: ${error.stack || error}`);
+            `Cannot unmount '${volume.volumeId}': ${error.stack || error}`);
         errorCallback(volume.volumeType);
       }
     });
diff --git a/ui/file_manager/file_manager/foreground/js/file_tasks.js b/ui/file_manager/file_manager/foreground/js/file_tasks.js
index cc9d9f9..d417785b 100644
--- a/ui/file_manager/file_manager/foreground/js/file_tasks.js
+++ b/ui/file_manager/file_manager/foreground/js/file_tasks.js
@@ -922,6 +922,7 @@
           this.ui_.alertDialog.show(
               strf('ARCHIVE_MOUNT_FAILED', path.substr(namePos + 1), error),
               null, null);
+          console.error(`Cannot mount '${path}': ${error.stack || error}`);
         }
       });
 
diff --git a/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js b/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js
index c491216..0eb5f5f 100644
--- a/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js
+++ b/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js
@@ -19,6 +19,8 @@
   CrostiniEventType: {
     ENABLE: 'enable',
     DISABLE: 'disable',
+    ROOT_ACCESS_ALLOW: 'root_access_allow',
+    ROOT_ACCESS_DISALLOW: 'root_access_disallow',
     SHARE: 'share',
     UNSHARE: 'unshare',
   },
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index 901b8bd..a4995a8 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -744,7 +744,7 @@
     data += [ "$root_out_dir/ui_test.pak" ]
   }
 
-  if (is_linux || is_android || is_fuchsia) {
+  if (is_linux || is_android || is_fuchsia || is_win) {
     sources += [ "platform_font_skia_unittest.cc" ]
   }
 
diff --git a/ui/gfx/platform_font_skia.cc b/ui/gfx/platform_font_skia.cc
index 3764e0f..ad58474 100644
--- a/ui/gfx/platform_font_skia.cc
+++ b/ui/gfx/platform_font_skia.cc
@@ -123,6 +123,18 @@
   Font::Weight weight = Font::Weight::NORMAL;
   FontRenderParams params;
 
+#if defined(OS_WIN)
+  // On windows, the system default font is retrieved by using the GDI API
+  // SystemParametersInfo(...) (see struct NONCLIENTMETRICS). The font
+  // properties need to be converted as close as possible to a skia font.
+  // The style must be kept (see http://crbug/989476).
+  gfx::Font system_font = win::GetDefaultSystemFont();
+  family = system_font.GetFontName();
+  size_pixels = system_font.GetFontSize();
+  style = system_font.GetStyle();
+  weight = system_font.GetWeight();
+#endif  // OS_WIN
+
   // On Linux, SkiaFontDelegate is used to query the native toolkit (e.g.
   // GTK+) for the default UI font.
   const SkiaFontDelegate* delegate = SkiaFontDelegate::instance();
diff --git a/ui/gfx/platform_font_skia_unittest.cc b/ui/gfx/platform_font_skia_unittest.cc
index acdeab9c..bc6e81f 100644
--- a/ui/gfx/platform_font_skia_unittest.cc
+++ b/ui/gfx/platform_font_skia_unittest.cc
@@ -15,6 +15,10 @@
 #include "ui/gfx/font_render_params.h"
 #include "ui/gfx/skia_font_delegate.h"
 
+#if defined(OS_WIN)
+#include "ui/gfx/system_fonts_win.h"
+#endif
+
 namespace gfx {
 
 // Implementation of SkiaFontDelegate used to control the default font
@@ -117,4 +121,22 @@
   EXPECT_EQ(gfx::Font::Weight::BOLD, font2->GetWeight());
 }
 
+#if defined(OS_WIN)
+TEST(PlatformFontSkiaOnWindowsTest, SystemFont) {
+  // Ensures that the font styles are kept while creating the default font.
+  gfx::Font system_font = win::GetDefaultSystemFont();
+  gfx::Font default_font;
+
+  EXPECT_EQ(system_font.GetFontName(), default_font.GetFontName());
+  EXPECT_EQ(system_font.GetFontSize(), default_font.GetFontSize());
+  EXPECT_EQ(system_font.GetStyle(), default_font.GetStyle());
+  EXPECT_EQ(system_font.GetWeight(), default_font.GetWeight());
+  EXPECT_EQ(system_font.GetHeight(), default_font.GetHeight());
+  EXPECT_EQ(system_font.GetBaseline(), default_font.GetBaseline());
+  EXPECT_EQ(system_font.GetBaseline(), default_font.GetBaseline());
+  EXPECT_EQ(system_font.GetFontRenderParams(),
+            default_font.GetFontRenderParams());
+}
+#endif  // OS_WIN
+
 }  // namespace gfx
diff --git a/ui/gfx/system_fonts_win.cc b/ui/gfx/system_fonts_win.cc
index c084489..4cb0435 100644
--- a/ui/gfx/system_fonts_win.cc
+++ b/ui/gfx/system_fonts_win.cc
@@ -80,15 +80,15 @@
     }
   }
 
-  static Font GetFontFromLOGFONT(const LOGFONT* logfont) {
+  static Font GetFontFromLOGFONT(const LOGFONT& logfont) {
     // Finds a matching font by triggering font mapping. The font mapper finds
     // the closest physical font for a given logical font.
-    base::win::ScopedHFONT font(::CreateFontIndirect(logfont));
+    base::win::ScopedHFONT font(::CreateFontIndirect(&logfont));
     base::win::ScopedGetDC screen_dc(NULL);
     base::win::ScopedSelectObject scoped_font(screen_dc, font.get());
 
     DCHECK(font.get()) << "Font for '"
-                       << base::SysWideToUTF8(logfont->lfFaceName)
+                       << base::SysWideToUTF8(logfont.lfFaceName)
                        << "' has an invalid handle.";
 
     // Retrieve the name and height of the mapped font (physical font).
@@ -102,7 +102,20 @@
         std::max<int>(1, mapped_font_metrics.tmHeight -
                              mapped_font_metrics.tmInternalLeading);
 
-    return Font(PlatformFont::CreateFromNameAndSize(font_name, font_size));
+    Font system_font =
+        Font(PlatformFont::CreateFromNameAndSize(font_name, font_size));
+
+    // System fonts may have different styles when they are manually changed by
+    // the users (see crbug.com/989476).
+    Font::FontStyle style = logfont.lfItalic == 0 ? Font::FontStyle::NORMAL
+                                                  : Font::FontStyle::ITALIC;
+    Font::Weight weight = logfont.lfWeight == 0
+                              ? Font::Weight::NORMAL
+                              : static_cast<Font::Weight>(logfont.lfWeight);
+    if (style != Font::FontStyle::NORMAL || weight != Font::Weight::NORMAL)
+      system_font = system_font.Derive(0, style, weight);
+
+    return system_font;
   }
 
   static void SetGetMinimumFontSizeCallback(
@@ -190,7 +203,7 @@
     // Cap at minimum font size.
     logfont->lfHeight = AdjustFontSize(logfont->lfHeight, 0);
 
-    system_fonts_.emplace(system_font, GetFontFromLOGFONT(logfont));
+    system_fonts_.emplace(system_font, GetFontFromLOGFONT(*logfont));
   }
 
   // Returns the system DPI scale (standard DPI being 1.0).
@@ -237,13 +250,19 @@
   SystemFonts::SetAdjustFontCallback(callback);
 }
 
+const Font& GetDefaultSystemFont() {
+  // The message font is the closest font for a default system font from the
+  // structure NONCLIENTMETRICS. The lfMessageFont field contains information
+  // about the logical font used to display text in message boxes.
+  return GetSystemFont(SystemFont::kMessage);
+}
+
 const Font& GetSystemFont(SystemFont system_font) {
   return SystemFonts::Instance()->GetFont(system_font);
 }
 
-GFX_EXPORT NativeFont
-AdjustExistingSystemFont(NativeFont existing_font,
-                         const FontAdjustment& font_adjustment) {
+NativeFont AdjustExistingSystemFont(NativeFont existing_font,
+                                    const FontAdjustment& font_adjustment) {
   LOGFONT logfont;
   auto result = GetObject(existing_font, sizeof(logfont), &logfont);
   DCHECK(result);
@@ -267,7 +286,12 @@
   SystemFonts::AdjustLOGFONT(font_adjustment, logfont);
 }
 
-GFX_EXPORT void ResetSystemFontsForTesting() {
+// Retrieve a FONT from a LOGFONT structure.
+Font GetFontFromLOGFONTForTesting(const LOGFONT& logfont) {
+  return SystemFonts::GetFontFromLOGFONT(logfont);
+}
+
+void ResetSystemFontsForTesting() {
   SystemFonts::Instance()->ResetForTesting();
 }
 
diff --git a/ui/gfx/system_fonts_win.h b/ui/gfx/system_fonts_win.h
index b10298d..a76431f 100644
--- a/ui/gfx/system_fonts_win.h
+++ b/ui/gfx/system_fonts_win.h
@@ -34,6 +34,10 @@
 typedef void (*AdjustFontCallback)(FontAdjustment* font_adjustment);
 GFX_EXPORT void SetAdjustFontCallback(AdjustFontCallback callback);
 
+// Returns the specified Windows default system font. By default, this is the
+// font used for message boxes (see struct NONCLIENTMETRICS).
+GFX_EXPORT const Font& GetDefaultSystemFont();
+
 // Returns the specified Windows system font, suitable for drawing on screen
 // elements.
 GFX_EXPORT const Font& GetSystemFont(SystemFont system_font);
@@ -54,7 +58,10 @@
 GFX_EXPORT void AdjustLOGFONTForTesting(const FontAdjustment& font_adjustment,
                                         LOGFONT* logfont);
 
-// Clear the system fonts cache. SystemFonts is keeping a global state that
+// Retrieves a FONT from a LOGFONT structure.
+GFX_EXPORT Font GetFontFromLOGFONTForTesting(const LOGFONT& logfont);
+
+// Clears the system fonts cache. SystemFonts is keeping a global state that
 // must be reset in unittests when using |GetMinimumFontSizeCallback| or
 // |SetAdjustFontCallback|.
 GFX_EXPORT void ResetSystemFontsForTesting();
diff --git a/ui/gfx/system_fonts_win_unittest.cc b/ui/gfx/system_fonts_win_unittest.cc
index 28d024e..502c2e86 100644
--- a/ui/gfx/system_fonts_win_unittest.cc
+++ b/ui/gfx/system_fonts_win_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <windows.h>
 
+#include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -145,5 +146,27 @@
   EXPECT_STREQ(kSegoeUI, logfont.lfFaceName);
 }
 
+TEST_F(SystemFontsWinTest, GetFontFromLOGFONT) {
+  LOGFONT logfont = CreateLOGFONT(kSegoeUI, -10);
+  Font font = GetFontFromLOGFONTForTesting(logfont);
+  EXPECT_EQ(font.GetStyle(), Font::FontStyle::NORMAL);
+  EXPECT_EQ(font.GetWeight(), Font::Weight::NORMAL);
+}
+
+TEST_F(SystemFontsWinTest, GetFontFromLOGFONT_WithStyle) {
+  LOGFONT logfont = CreateLOGFONT(kSegoeUI, -10);
+  logfont.lfItalic = 1;
+  logfont.lfWeight = 700;
+
+  Font font = GetFontFromLOGFONTForTesting(logfont);
+  EXPECT_EQ(font.GetStyle(), Font::FontStyle::ITALIC);
+  EXPECT_EQ(font.GetWeight(), Font::Weight::BOLD);
+}
+
+TEST_F(SystemFontsWinTest, GetDefaultSystemFont) {
+  Font system_font = GetDefaultSystemFont();
+  EXPECT_EQ(base::WideToUTF8(kSegoeUI), system_font.GetFontName());
+}
+
 }  // namespace win
 }  // namespace gfx
diff --git a/ui/message_center/views/notification_header_view_unittest.cc b/ui/message_center/views/notification_header_view_unittest.cc
index 86e41a4f..a24b671 100644
--- a/ui/message_center/views/notification_header_view_unittest.cc
+++ b/ui/message_center/views/notification_header_view_unittest.cc
@@ -21,9 +21,9 @@
   // ViewsTestBase:
   void SetUp() override {
     // Setup a mocked time environment.
-    scoped_task_environment_ = new ScopedTaskEnvironment(
-        ScopedTaskEnvironment::MainThreadType::UI,
-        ScopedTaskEnvironment::TimeSource::MOCK_TIME_AND_NOW);
+    scoped_task_environment_ =
+        new ScopedTaskEnvironment(ScopedTaskEnvironment::MainThreadType::UI,
+                                  ScopedTaskEnvironment::TimeSource::MOCK_TIME);
     set_scoped_task_environment(base::WrapUnique(scoped_task_environment_));
 
     ViewsTestBase::SetUp();
diff --git a/ui/native_theme/native_theme.cc b/ui/native_theme/native_theme.cc
index ef5664f1..091f0b7 100644
--- a/ui/native_theme/native_theme.cc
+++ b/ui/native_theme/native_theme.cc
@@ -33,14 +33,14 @@
 }
 
 NativeTheme::NativeTheme()
-    : is_dark_mode_(IsForcedDarkMode()),
+    : should_use_dark_colors_(IsForcedDarkMode()),
       is_high_contrast_(IsForcedHighContrast()),
       preferred_color_scheme_(CalculatePreferredColorScheme()) {}
 
 NativeTheme::~NativeTheme() = default;
 
-bool NativeTheme::SystemDarkModeEnabled() const {
-  return is_dark_mode_;
+bool NativeTheme::ShouldUseDarkColors() const {
+  return should_use_dark_colors_;
 }
 
 bool NativeTheme::SystemDarkModeSupported() const {
@@ -71,8 +71,8 @@
 
 NativeTheme::PreferredColorScheme NativeTheme::CalculatePreferredColorScheme()
     const {
-  return SystemDarkModeEnabled() ? NativeTheme::PreferredColorScheme::kDark
-                                 : NativeTheme::PreferredColorScheme::kLight;
+  return ShouldUseDarkColors() ? NativeTheme::PreferredColorScheme::kDark
+                               : NativeTheme::PreferredColorScheme::kLight;
 }
 
 base::Optional<CaptionStyle> NativeTheme::GetSystemCaptionStyle() const {
@@ -88,14 +88,14 @@
 
 void NativeTheme::ColorSchemeNativeThemeObserver::OnNativeThemeUpdated(
     ui::NativeTheme* observed_theme) {
-  bool is_dark_mode = observed_theme->SystemDarkModeEnabled();
+  bool should_use_dark_colors = observed_theme->ShouldUseDarkColors();
   bool is_high_contrast = observed_theme->UsesHighContrastColors();
   PreferredColorScheme preferred_color_scheme =
       observed_theme->GetPreferredColorScheme();
   bool notify_observers = false;
 
-  if (theme_to_update_->SystemDarkModeEnabled() != is_dark_mode) {
-    theme_to_update_->set_dark_mode(is_dark_mode);
+  if (theme_to_update_->ShouldUseDarkColors() != should_use_dark_colors) {
+    theme_to_update_->set_use_dark_colors(should_use_dark_colors);
     notify_observers = true;
   }
   if (theme_to_update_->UsesHighContrastColors() != is_high_contrast) {
@@ -112,7 +112,7 @@
 }
 
 NativeTheme::ColorScheme NativeTheme::GetSystemColorScheme() const {
-  return SystemDarkModeEnabled() ? ColorScheme::kDark : ColorScheme::kLight;
+  return ShouldUseDarkColors() ? ColorScheme::kDark : ColorScheme::kLight;
 }
 
 }  // namespace ui
diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h
index 66d67f8..8d2e68a0 100644
--- a/ui/native_theme/native_theme.h
+++ b/ui/native_theme/native_theme.h
@@ -426,8 +426,10 @@
   // system accessibility settings and the system theme.
   virtual bool UsesHighContrastColors() const;
 
-  // Whether OS-level dark mode (as in macOS Mojave or Windows 10) is enabled.
-  virtual bool SystemDarkModeEnabled() const;
+  // Returns true when the NativeTheme uses a light-on-dark color scheme. If
+  // you're considering using this function to choose between two hard-coded
+  // colors, you probably shouldn't. Instead, use GetSystemColor().
+  virtual bool ShouldUseDarkColors() const;
 
   // Whether OS-level dark mode is available in the current OS.
   virtual bool SystemDarkModeSupported() const;
@@ -466,7 +468,9 @@
   // be set to no-preference.
   virtual PreferredColorScheme CalculatePreferredColorScheme() const;
 
-  void set_dark_mode(bool is_dark_mode) { is_dark_mode_ = is_dark_mode; }
+  void set_use_dark_colors(bool should_use_dark_colors) {
+    should_use_dark_colors_ = should_use_dark_colors;
+  }
   void set_high_contrast(bool is_high_contrast) {
     is_high_contrast_ = is_high_contrast;
   }
@@ -498,7 +502,7 @@
   // Observers to notify when the native theme changes.
   base::ObserverList<NativeThemeObserver>::Unchecked native_theme_observers_;
 
-  bool is_dark_mode_ = false;
+  bool should_use_dark_colors_ = false;
   bool is_high_contrast_ = false;
   PreferredColorScheme preferred_color_scheme_ =
       PreferredColorScheme::kNoPreference;
diff --git a/ui/native_theme/native_theme_dark_aura.cc b/ui/native_theme/native_theme_dark_aura.cc
index 5b81ed9ac..a8fbfee 100644
--- a/ui/native_theme/native_theme_dark_aura.cc
+++ b/ui/native_theme/native_theme_dark_aura.cc
@@ -19,7 +19,7 @@
   return GetAuraColor(color_id, this, color_scheme);
 }
 
-bool NativeThemeDarkAura::SystemDarkModeEnabled() const {
+bool NativeThemeDarkAura::ShouldUseDarkColors() const {
   return true;
 }
 
diff --git a/ui/native_theme/native_theme_dark_aura.h b/ui/native_theme/native_theme_dark_aura.h
index afa54669..0f298f2 100644
--- a/ui/native_theme/native_theme_dark_aura.h
+++ b/ui/native_theme/native_theme_dark_aura.h
@@ -20,7 +20,7 @@
   // NativeThemeAura:
   SkColor GetSystemColor(ColorId color_id,
                          ColorScheme color_scheme) const override;
-  bool SystemDarkModeEnabled() const override;
+  bool ShouldUseDarkColors() const override;
   PreferredColorScheme GetPreferredColorScheme() const override;
 
  private:
diff --git a/ui/native_theme/native_theme_mac.mm b/ui/native_theme/native_theme_mac.mm
index 6591ccb..9c10086 100644
--- a/ui/native_theme/native_theme_mac.mm
+++ b/ui/native_theme/native_theme_mac.mm
@@ -318,11 +318,11 @@
 
 void NativeThemeMac::InitializeDarkModeStateAndObserver() {
   __block auto theme = this;
-  set_dark_mode(IsDarkMode());
+  set_use_dark_colors(IsDarkMode());
   set_preferred_color_scheme(CalculatePreferredColorScheme());
   appearance_observer_.reset(
       [[NativeThemeEffectiveAppearanceObserver alloc] initWithHandler:^{
-        theme->set_dark_mode(IsDarkMode());
+        theme->set_use_dark_colors(IsDarkMode());
         theme->set_preferred_color_scheme(CalculatePreferredColorScheme());
         theme->NotifyObservers();
       }]);
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc
index 9159b2b..78e3b14 100644
--- a/ui/native_theme/native_theme_win.cc
+++ b/ui/native_theme/native_theme_win.cc
@@ -565,13 +565,13 @@
   return gfx::Rect();
 }
 
-bool NativeThemeWin::SystemDarkModeEnabled() const {
+bool NativeThemeWin::ShouldUseDarkColors() const {
   // Windows high contrast modes are entirely different themes,
   // so let them take priority over dark mode.
   // ...unless --force-dark-mode was specified in which case caveat emptor.
   if (UsesHighContrastColors() && !IsForcedDarkMode())
     return false;
-  return NativeTheme::SystemDarkModeEnabled();
+  return NativeTheme::ShouldUseDarkColors();
 }
 
 bool NativeThemeWin::SystemDarkModeSupported() const {
@@ -1936,14 +1936,14 @@
 }
 
 void NativeThemeWin::UpdateDarkModeStatus() {
-  bool fDarkModeEnabled = false;
+  bool dark_mode_enabled = false;
   if (hkcu_themes_regkey_.Valid()) {
     DWORD apps_use_light_theme = 1;
     hkcu_themes_regkey_.ReadValueDW(L"AppsUseLightTheme",
                                     &apps_use_light_theme);
-    fDarkModeEnabled = (apps_use_light_theme == 0);
+    dark_mode_enabled = (apps_use_light_theme == 0);
   }
-  set_dark_mode(fDarkModeEnabled);
+  set_use_dark_colors(dark_mode_enabled);
   set_preferred_color_scheme(CalculatePreferredColorScheme());
   NotifyObservers();
 }
diff --git a/ui/native_theme/native_theme_win.h b/ui/native_theme/native_theme_win.h
index 79606037..574559c 100644
--- a/ui/native_theme/native_theme_win.h
+++ b/ui/native_theme/native_theme_win.h
@@ -81,7 +81,7 @@
   bool SupportsNinePatch(Part part) const override;
   gfx::Size GetNinePatchCanvasSize(Part part) const override;
   gfx::Rect GetNinePatchAperture(Part part) const override;
-  bool SystemDarkModeEnabled() const override;
+  bool ShouldUseDarkColors() const override;
   bool SystemDarkModeSupported() const override;
   PreferredColorScheme CalculatePreferredColorScheme() const override;
 
diff --git a/ui/native_theme/native_theme_win_unittest.cc b/ui/native_theme/native_theme_win_unittest.cc
index c16d0e3..a2864e55 100644
--- a/ui/native_theme/native_theme_win_unittest.cc
+++ b/ui/native_theme/native_theme_win_unittest.cc
@@ -16,7 +16,7 @@
 
   // NativeTheme:
   bool UsesHighContrastColors() const override { return high_contrast_; }
-  bool SystemDarkModeEnabled() const override { return dark_mode_; }
+  bool ShouldUseDarkColors() const override { return dark_mode_; }
 
   void SetDarkMode(bool dark_mode) { dark_mode_ = dark_mode; }
   void SetUsesHighContrastColors(bool high_contrast) {
diff --git a/ui/native_theme/test_native_theme.cc b/ui/native_theme/test_native_theme.cc
index 863e142..d58ecafd 100644
--- a/ui/native_theme/test_native_theme.cc
+++ b/ui/native_theme/test_native_theme.cc
@@ -43,7 +43,7 @@
   return high_contrast_;
 }
 
-bool TestNativeTheme::SystemDarkModeEnabled() const {
+bool TestNativeTheme::ShouldUseDarkColors() const {
   return dark_mode_;
 }
 
diff --git a/ui/native_theme/test_native_theme.h b/ui/native_theme/test_native_theme.h
index 2c0f9ab..60df9898 100644
--- a/ui/native_theme/test_native_theme.h
+++ b/ui/native_theme/test_native_theme.h
@@ -31,7 +31,7 @@
   gfx::Size GetNinePatchCanvasSize(Part part) const override;
   gfx::Rect GetNinePatchAperture(Part part) const override;
   bool UsesHighContrastColors() const override;
-  bool SystemDarkModeEnabled() const override;
+  bool ShouldUseDarkColors() const override;
   PreferredColorScheme GetPreferredColorScheme() const override;
 
   void SetDarkMode(bool dark_mode) { dark_mode_ = dark_mode; }
diff --git a/ui/strings/translations/ui_strings_am.xtb b/ui/strings/translations/ui_strings_am.xtb
index 3d218c6..bd338cb 100644
--- a/ui/strings/translations/ui_strings_am.xtb
+++ b/ui/strings/translations/ui_strings_am.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{ከ1 ወር በፊት}one{ከ# ወሮች በፊት}other{ከ# ወሮች በፊት}}</translation>
 <translation id="4289300219472526559">መናገር ይጀምሩ</translation>
 <translation id="4316910396681052118">ሁሉም መተግበሪያዎች</translation>
+<translation id="4467014365953759647">ቁጥርን መላክ አልተቻለም</translation>
 <translation id="4588090240171750605">ወደ ቀኝ ሸብልል</translation>
 <translation id="4690510401873698237">መደርደሪያ ከታች</translation>
 <translation id="4724120544754982507">የማሳወቂያ ማዕከል፣ <ph name="UNREAD_NOTIFICATION_COUNT" /> ያልተነበቡ ማሳወቂያዎች</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">ማስጀመሪያ፣ ከፊል እይታ</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 ደቂቃ በፊት}one{# ደቂቃዎች በፊት}other{# ደቂቃዎች በፊት}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">የስልክዎን ግንኙነት ይፈትሹና እንደገና ይሞክሩ</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 ደቂቃ ቀርቷል}one{# ደቂቃዎች ቀርቷል}other{# ደቂቃዎች ቀርተዋል}}</translation>
 <translation id="7430878839542012341">ይሄ ፍለጋ ከታሪክዎ ይሰረዝ?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> ቴባ</translation>
diff --git a/ui/strings/translations/ui_strings_ar.xtb b/ui/strings/translations/ui_strings_ar.xtb
index e654bf5..aa4470be 100644
--- a/ui/strings/translations/ui_strings_ar.xtb
+++ b/ui/strings/translations/ui_strings_ar.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{قبل شهر واحد}zero{قبل # شهر}two{قبل شهرين (#)}few{قبل # أشهر}many{قبل # شهرًا}other{قبل # شهر}}</translation>
 <translation id="4289300219472526559">بدء التحدث</translation>
 <translation id="4316910396681052118">جميع التطبيقات</translation>
+<translation id="4467014365953759647">يتعذّر إرسال الرقم.</translation>
 <translation id="4588090240171750605">التمرير إلى اليسار</translation>
 <translation id="4690510401873698237">الرف في الجزء السفلي</translation>
 <translation id="4724120544754982507">مركز الإشعارات، <ph name="UNREAD_NOTIFICATION_COUNT" /> من الإشعارات غير المقروءة</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">‏Launcher، عرض جزئي</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{قبل دقيقة واحدة}zero{قبل # من الدقاق}two{قبل دقيقتين (#)}few{قبل # دقائق}many{قبل # دقيقة}other{قبل # من الدقائق}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">يُرجى التحقّق من اتصال هاتفك ثم إعادة المحاولة.</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{يتبقى دقيقة واحدة}zero{يتبقى # من الدقائق}two{يتبقى دقيقتان (#)}few{يتبقى # دقائق}many{يتبقى # دقيقة}other{يتبقى # من الدقائق}}</translation>
 <translation id="7430878839542012341">هل تريد حذف هذا البحث من السجل؟</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> تيرابايت</translation>
diff --git a/ui/strings/translations/ui_strings_bg.xtb b/ui/strings/translations/ui_strings_bg.xtb
index 131dcf0..995e5b33 100644
--- a/ui/strings/translations/ui_strings_bg.xtb
+++ b/ui/strings/translations/ui_strings_bg.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Преди 1 месец}other{Преди # месеца}}</translation>
 <translation id="4289300219472526559">Start Speaking</translation>
 <translation id="4316910396681052118">ВСИЧКИ ПРИЛОЖЕНИЯ</translation>
+<translation id="4467014365953759647">Номерът не може да бъде изпратен</translation>
 <translation id="4588090240171750605">Превъртане надясно</translation>
 <translation id="4690510401873698237">Лавицата е най-долу</translation>
 <translation id="4724120544754982507">Център за известия, <ph name="UNREAD_NOTIFICATION_COUNT" /> непрочетени</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Стартов панел, частичен изглед</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Преди 1 мин}other{Преди # мин}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Проверете връзката на телефона си и опитайте отново</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Остава 1 минута}other{Остават # минути}}</translation>
 <translation id="7430878839542012341">Да се изтрие ли това търсене от историята ви?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> ТБ</translation>
diff --git a/ui/strings/translations/ui_strings_bn.xtb b/ui/strings/translations/ui_strings_bn.xtb
index 95bb6a1..2ec75ac 100644
--- a/ui/strings/translations/ui_strings_bn.xtb
+++ b/ui/strings/translations/ui_strings_bn.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{১ মাস আগে}one{# মাস আগে}other{# মাস আগে}}</translation>
 <translation id="4289300219472526559">কথা বলা শুরু করুন</translation>
 <translation id="4316910396681052118">সব অ্যাপ</translation>
+<translation id="4467014365953759647">নম্বর পাঠানো যাচ্ছে না</translation>
 <translation id="4588090240171750605">ডান দিকে স্ক্রল করুন</translation>
 <translation id="4690510401873698237">শেল্ফ নিচে দেখানো হচ্ছে</translation>
 <translation id="4724120544754982507">বিজ্ঞপ্তি কেন্দ্র, <ph name="UNREAD_NOTIFICATION_COUNT" />টি না পড়া বিজ্ঞপ্তি</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">লঞ্চার, আংশিক দেখুন</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{১ মিনিট পূর্বে}one{# মিনিট পূর্বে}other{# মিনিট পূর্বে}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">আপনার ফোনের কানেকশন ঠিক আছে কিনা দেখে নিয়ে আবার চেষ্টা করুন</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{১ মিনিট বাকি}one{# মিনিট বাকি}other{# মিনিট বাকি}}</translation>
 <translation id="7430878839542012341">এই সার্চ কি ইতিহাস থেকে মুছে দিতে চান?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_ca.xtb b/ui/strings/translations/ui_strings_ca.xtb
index 2c260c70..ef290c0 100644
--- a/ui/strings/translations/ui_strings_ca.xtb
+++ b/ui/strings/translations/ui_strings_ca.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Fa 1 mes}other{Fa # mesos}}</translation>
 <translation id="4289300219472526559">Comença a parlar</translation>
 <translation id="4316910396681052118">TOTES LES APLICACIONS</translation>
+<translation id="4467014365953759647">No es pot enviar el número</translation>
 <translation id="4588090240171750605">Desplaçament a la dreta</translation>
 <translation id="4690510401873698237">El prestatge és a la part inferior</translation>
 <translation id="4724120544754982507">Centre de notificacions, <ph name="UNREAD_NOTIFICATION_COUNT" /> notificacions no llegides</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Menú d'aplicacions, visualització parcial</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{fa 1 min}other{fa # min}}</translation>
 <translation id="7389409599945284130">: <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Comprova la connexió del telèfon i torna-ho a provar</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minut restant}other{# minuts restants}}</translation>
 <translation id="7430878839542012341">Vols suprimir aquesta cerca de l'historial?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_cs.xtb b/ui/strings/translations/ui_strings_cs.xtb
index 718a6337..62a780b 100644
--- a/ui/strings/translations/ui_strings_cs.xtb
+++ b/ui/strings/translations/ui_strings_cs.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{před 1 měsícem}few{před # měsíci}many{před # měsíce}other{před # měsíci}}</translation>
 <translation id="4289300219472526559">Začít mluvit</translation>
 <translation id="4316910396681052118">VŠECHNY APLIKACE</translation>
+<translation id="4467014365953759647">Číslo nelze odeslat</translation>
 <translation id="4588090240171750605">Posuv doprava</translation>
 <translation id="4690510401873698237">Polička dole</translation>
 <translation id="4724120544754982507">Centrum oznámení – nepřečtená oznámení: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Spouštěč, částečné zobrazení</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Před 1 min}few{Před # min}many{Před # min}other{Před # min}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Zkontrolujte připojení telefonu a zkuste to znovu</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Zbývá 1 minuta}few{Zbývají # minuty}many{Zbývá # minuty}other{Zbývá # minut}}</translation>
 <translation id="7430878839542012341">Vymazat toto vyhledávání z historie?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb
index 9bc7559..e8fccae 100644
--- a/ui/strings/translations/ui_strings_da.xtb
+++ b/ui/strings/translations/ui_strings_da.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{For 1 måned siden}one{For # måned siden}other{For # måneder siden}}</translation>
 <translation id="4289300219472526559">Start indtaling</translation>
 <translation id="4316910396681052118">ALLE APPS</translation>
+<translation id="4467014365953759647">Nummeret kan ikke sendes</translation>
 <translation id="4588090240171750605">Scroll til højre</translation>
 <translation id="4690510401873698237">Hylden er i bunden</translation>
 <translation id="4724120544754982507">Notifikationscenter, <ph name="UNREAD_NOTIFICATION_COUNT" /> ulæste notifikationer</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Appliste, delvis visning</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{for 1 min. siden}one{for # min. siden}other{for # min. siden}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Tjek din telefons forbindelse, og prøv igen</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minut tilbage}one{# minutter tilbage}other{# minutter tilbage}}</translation>
 <translation id="7430878839542012341">Vil du slette denne søgning fra historikken?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_de.xtb b/ui/strings/translations/ui_strings_de.xtb
index 357d9d1..9ab138f 100644
--- a/ui/strings/translations/ui_strings_de.xtb
+++ b/ui/strings/translations/ui_strings_de.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{vor 1 Monat}other{vor # Monaten}}</translation>
 <translation id="4289300219472526559">Sprachausgabe starten</translation>
 <translation id="4316910396681052118">ALLE APPS</translation>
+<translation id="4467014365953759647">Nummer kann nicht gesendet werden</translation>
 <translation id="4588090240171750605">Nach rechts blättern</translation>
 <translation id="4690510401873698237">Ablage unten</translation>
 <translation id="4724120544754982507">Benachrichtigungscenter, <ph name="UNREAD_NOTIFICATION_COUNT" /> ungelesene Benachrichtigungen</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Übersicht, Teilansicht</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{vor 1 Min.}other{vor # Min.}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Überprüfen Sie die Verbindung Ihres Smartphones und versuchen Sie es noch einmal</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 Minute übrig}other{# Minuten übrig}}</translation>
 <translation id="7430878839542012341">Diese Suchanfrage aus dem Verlauf löschen?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_el.xtb b/ui/strings/translations/ui_strings_el.xtb
index f6f552e..a40cd77 100644
--- a/ui/strings/translations/ui_strings_el.xtb
+++ b/ui/strings/translations/ui_strings_el.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Πριν από 1 μήνα}other{Πριν από # μήνες}}</translation>
 <translation id="4289300219472526559">Έναρξη ομιλίας</translation>
 <translation id="4316910396681052118">ΟΛΕΣ ΟΙ ΕΦΑΡΜΟΓΕΣ</translation>
+<translation id="4467014365953759647">Δεν είναι δυνατή η αποστολή του αριθμού</translation>
 <translation id="4588090240171750605">Κύλιση δεξιά</translation>
 <translation id="4690510401873698237">Ράφι στο κάτω μέρος</translation>
 <translation id="4724120544754982507">Κέντρο ειδοποιήσεων, <ph name="UNREAD_NOTIFICATION_COUNT" /> μη αναγνωσμένες ειδοποιήσεις</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Εφαρμογή εκκίνησης, μερική προβολή</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Πριν από 1 λεπτό}other{Πριν από # λεπτά}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Ελέγξτε τη σύνδεση του τηλεφώνου σας και δοκιμάστε ξανά</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Απομένει 1 λεπτό}other{Απομένουν # λεπτά}}</translation>
 <translation id="7430878839542012341">Να διαγραφεί αυτή η αναζήτηση από το ιστορικό σας;</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_en-GB.xtb b/ui/strings/translations/ui_strings_en-GB.xtb
index 770be1b..d56d2ef5 100644
--- a/ui/strings/translations/ui_strings_en-GB.xtb
+++ b/ui/strings/translations/ui_strings_en-GB.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 month ago}other{# months ago}}</translation>
 <translation id="4289300219472526559">Start Speaking</translation>
 <translation id="4316910396681052118">ALL APPS</translation>
+<translation id="4467014365953759647">Can't send number</translation>
 <translation id="4588090240171750605">Scroll Right</translation>
 <translation id="4690510401873698237">Shelf on bottom</translation>
 <translation id="4724120544754982507">Notification Centre, <ph name="UNREAD_NOTIFICATION_COUNT" /> unread notifications</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Launcher, partial view</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 min ago}other{# mins ago}}</translation>
 <translation id="7389409599945284130"><ph name="MESSAGE" />..</translation>
+<translation id="7399254631220132461">Check your phone's connection and try again</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minute left}other{# minutes left}}</translation>
 <translation id="7430878839542012341">Delete this search from your history?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_es-419.xtb b/ui/strings/translations/ui_strings_es-419.xtb
index 21676420..e990e01 100644
--- a/ui/strings/translations/ui_strings_es-419.xtb
+++ b/ui/strings/translations/ui_strings_es-419.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Hace 1 mes}other{Hace # meses}}</translation>
 <translation id="4289300219472526559">Empezar a hablar</translation>
 <translation id="4316910396681052118">TODAS LAS APPS</translation>
+<translation id="4467014365953759647">No se puede enviar el número</translation>
 <translation id="4588090240171750605">Desplazar a la derecha</translation>
 <translation id="4690510401873698237">Biblioteca en la parte inferior</translation>
 <translation id="4724120544754982507">Centro de notificaciones, notificaciones sin leer: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Launcher, vista parcial</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Hace 1 min.}other{Hace # min.}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Revisa la conexión del teléfono y vuelve a intentarlo</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Falta 1 minuto.}other{Faltan # minutos.}}</translation>
 <translation id="7430878839542012341">¿Deseas borrar esta búsqueda de tu Historial?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_es.xtb b/ui/strings/translations/ui_strings_es.xtb
index 2285e65..1950bc02 100644
--- a/ui/strings/translations/ui_strings_es.xtb
+++ b/ui/strings/translations/ui_strings_es.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Hace 1 mes}other{Hace # meses}}</translation>
 <translation id="4289300219472526559">Empezar a hablar</translation>
 <translation id="4316910396681052118">TODAS LAS APLICACIONES</translation>
+<translation id="4467014365953759647">No se puede enviar el número</translation>
 <translation id="4588090240171750605">Desplazar a la derecha</translation>
 <translation id="4690510401873698237">La estantería está en la parte inferior</translation>
 <translation id="4724120544754982507">Centro de notificaciones: <ph name="UNREAD_NOTIFICATION_COUNT" /> notificaciones sin leer</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Menú de aplicaciones, vista parcial</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Hace 1 min}other{Hace # min}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Comprueba la conexión del teléfono y vuelve a intentarlo</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Queda 1 minuto}other{Quedan # minutos}}</translation>
 <translation id="7430878839542012341">¿Quieres eliminar esta búsqueda de tu historial?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_et.xtb b/ui/strings/translations/ui_strings_et.xtb
index a3136a9..a6feb036 100644
--- a/ui/strings/translations/ui_strings_et.xtb
+++ b/ui/strings/translations/ui_strings_et.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 kuu tagasi}other{# kuud tagasi}}</translation>
 <translation id="4289300219472526559">Alusta rääkimist</translation>
 <translation id="4316910396681052118">KÕIK RAKENDUSED</translation>
+<translation id="4467014365953759647">Ei saa numbrit saata</translation>
 <translation id="4588090240171750605">Keri paremale</translation>
 <translation id="4690510401873698237">Riiul asub allpool</translation>
 <translation id="4724120544754982507">Märguandekeskus, <ph name="UNREAD_NOTIFICATION_COUNT" /> lugemata märguannet</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Käivitusprogramm, osaline vaade</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 min tagasi}other{# min tagasi}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Kontrollige oma telefoni ühendust ja proovige uuesti</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minut on jäänud}other{# minutit on jäänud}}</translation>
 <translation id="7430878839542012341">Kas kustutada see otsing teie ajaloost?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_fa.xtb b/ui/strings/translations/ui_strings_fa.xtb
index 4dd42137..b34cbb7 100644
--- a/ui/strings/translations/ui_strings_fa.xtb
+++ b/ui/strings/translations/ui_strings_fa.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{۱ ماه قبل}one{# ماه قبل}other{# ماه قبل}}</translation>
 <translation id="4289300219472526559">شروع صحبت</translation>
 <translation id="4316910396681052118">همه برنامه‌ها</translation>
+<translation id="4467014365953759647">شماره ارسال نمی‌شود</translation>
 <translation id="4588090240171750605">پیمایش به راست</translation>
 <translation id="4690510401873698237">قفسه در پایین است</translation>
 <translation id="4724120544754982507">مرکز اعلان، <ph name="UNREAD_NOTIFICATION_COUNT" /> اعلان خوانده‌نشده</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">راه‌انداز، نمای جزئی</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{۱ دقیقه قبل}one{# دقیقه قبل}other{# دقیقه قبل}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">اتصال تلفنتان را بررسی کنید و دوباره امتحان کنید</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{۱ دقیقه باقی مانده است}one{# دقیقه باقی مانده است}other{# دقیقه باقی مانده است}}</translation>
 <translation id="7430878839542012341">این جستجو از سابقه‌تان حذف شود؟</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> ترابایت</translation>
diff --git a/ui/strings/translations/ui_strings_fi.xtb b/ui/strings/translations/ui_strings_fi.xtb
index ab9214ec..59d58a0 100644
--- a/ui/strings/translations/ui_strings_fi.xtb
+++ b/ui/strings/translations/ui_strings_fi.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 kuukausi sitten}other{# kuukautta sitten}}</translation>
 <translation id="4289300219472526559">Aloita puhuminen</translation>
 <translation id="4316910396681052118">KAIKKI SOVELLUKSET</translation>
+<translation id="4467014365953759647">Numeroa ei voi lähettää</translation>
 <translation id="4588090240171750605">Vieritä oikealle</translation>
 <translation id="4690510401873698237">Hylly alareunassa</translation>
 <translation id="4724120544754982507">Ilmoituskeskus, <ph name="UNREAD_NOTIFICATION_COUNT" /> lukematonta ilmoitusta</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Käynnistysohjelma, osittainen näkymä</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 min sitten}other{# min sitten}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Tarkista puhelimen yhteys ja yritä uudelleen</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minuutti jäljellä}other{# minuuttia jäljellä}}</translation>
 <translation id="7430878839542012341">Poistetaanko tämä haku historiastasi?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> Tt</translation>
diff --git a/ui/strings/translations/ui_strings_fr.xtb b/ui/strings/translations/ui_strings_fr.xtb
index 537de34..0c382135 100644
--- a/ui/strings/translations/ui_strings_fr.xtb
+++ b/ui/strings/translations/ui_strings_fr.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Il y a 1 mois}one{Il y a # mois}other{Il y a # mois}}</translation>
 <translation id="4289300219472526559">Commencer à parler</translation>
 <translation id="4316910396681052118">TOUTES LES APPLICATIONS</translation>
+<translation id="4467014365953759647">Impossible d'envoyer le numéro</translation>
 <translation id="4588090240171750605">Défilement vers la droite</translation>
 <translation id="4690510401873698237">Étagère en bas</translation>
 <translation id="4724120544754982507">Centre de notification, <ph name="UNREAD_NOTIFICATION_COUNT" /> notifications non lues</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Lanceur d'applications, vue partielle</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Il y a 1 min}one{Il y a # min}other{Il y a # min}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Vérifiez la connexion de votre téléphone, puis réessayez</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minute restante}one{# minute restante}other{# minutes restantes}}</translation>
 <translation id="7430878839542012341">Supprimer cette recherche de votre historique ?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> To</translation>
diff --git a/ui/strings/translations/ui_strings_gu.xtb b/ui/strings/translations/ui_strings_gu.xtb
index 220d9eb..df3b209 100644
--- a/ui/strings/translations/ui_strings_gu.xtb
+++ b/ui/strings/translations/ui_strings_gu.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 મહિના પહેલાં}one{# મહિના પહેલાં}other{# મહિના પહેલાં}}</translation>
 <translation id="4289300219472526559">બોલવાનું પ્રારંભ કરો</translation>
 <translation id="4316910396681052118">બધી ઍપ્લિકેશનો</translation>
+<translation id="4467014365953759647">નંબર મોકલી શકાતો નથી</translation>
 <translation id="4588090240171750605">જમણે સ્ક્રોલ કરો</translation>
 <translation id="4690510401873698237">શેલ્ફ સૌથી નીચે છે</translation>
 <translation id="4724120544754982507">સૂચના કેન્દ્ર, વાંચ્યા વગરની <ph name="UNREAD_NOTIFICATION_COUNT" /> સૂચનાઓ</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">લૉન્ચર, આંશિક દૃશ્ય</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 મિ પહેલાં}one{# મિ પહેલાં}other{# મિ પહેલાં}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">તમારા ફોનનું કનેક્શન ચેક કરો અને ફરી પ્રયાસ કરો</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 મિનિટ બાકી}one{# મિનિટ બાકી}other{# મિનિટ બાકી}}</translation>
 <translation id="7430878839542012341">તમારા ઇતિહાસમાંથી આ શોધ ડિલીટ કરીએ?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_hi.xtb b/ui/strings/translations/ui_strings_hi.xtb
index a3db0f8..183969f 100644
--- a/ui/strings/translations/ui_strings_hi.xtb
+++ b/ui/strings/translations/ui_strings_hi.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 माह पहले}one{# माह पहले}other{# माह पहले}}</translation>
 <translation id="4289300219472526559">बोलना प्रारंभ करें</translation>
 <translation id="4316910396681052118">सभी ऐप्लिकेशन</translation>
+<translation id="4467014365953759647">फ़ोन नंबर नहीं भेजा जा सकता</translation>
 <translation id="4588090240171750605">दाएं स्क्रोल करें</translation>
 <translation id="4690510401873698237">शेल्फ़, स्क्रीन पर सबसे नीचे है</translation>
 <translation id="4724120544754982507">सूचना केंद्र, <ph name="UNREAD_NOTIFICATION_COUNT" /> नहीं पढ़ी गई सूचनाएं</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">लॉन्चर, आंशिक व्यू</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 मिनट पहले}one{# मिनट पहले}other{# मिनट पहले}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">अपने फ़ोन के कनेक्शन की जाँच करें और फिर कोशिश करें</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 मिनट शेष}one{# मिनट शेष}other{# मिनट शेष}}</translation>
 <translation id="7430878839542012341">अपने इतिहास से यह खोज मिटाना चाहते हैं?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_hr.xtb b/ui/strings/translations/ui_strings_hr.xtb
index 206814b..fc59284 100644
--- a/ui/strings/translations/ui_strings_hr.xtb
+++ b/ui/strings/translations/ui_strings_hr.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Prije mjesec dana}one{Prije # mjeseca}few{Prije # mjeseca}other{Prije # mjeseci}}</translation>
 <translation id="4289300219472526559">Počni govoriti</translation>
 <translation id="4316910396681052118">SVE APLIKACIJE</translation>
+<translation id="4467014365953759647">Broj se ne može poslati</translation>
 <translation id="4588090240171750605">Pomakni se desno</translation>
 <translation id="4690510401873698237">Polica pri dnu</translation>
 <translation id="4724120544754982507">Centar za obavijesti, nepročitanih obavijesti: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Pokretač, djelomični prikaz</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Prije 1 min}one{Prije # min}few{Prije # min}other{Prije # min}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Provjerite vezu telefona i pokušajte ponovo</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Još 1 minuta}one{Još # minuta}few{Još # minute}other{Još # minuta}}</translation>
 <translation id="7430878839542012341">Želite li izbrisati to pretraživanje iz povijesti?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_hu.xtb b/ui/strings/translations/ui_strings_hu.xtb
index 08ac25f..975a97d 100644
--- a/ui/strings/translations/ui_strings_hu.xtb
+++ b/ui/strings/translations/ui_strings_hu.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 hónapja}other{# hónapja}}</translation>
 <translation id="4289300219472526559">Beszéd megkezdése</translation>
 <translation id="4316910396681052118">MINDEN ALKALMAZÁS</translation>
+<translation id="4467014365953759647">Nem sikerült a szám elküldése</translation>
 <translation id="4588090240171750605">Görgetés jobbra</translation>
 <translation id="4690510401873698237">A polc alul található</translation>
 <translation id="4724120544754982507">Értesítési központ, <ph name="UNREAD_NOTIFICATION_COUNT" /> olvasatlan értesítés</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Indító, részleges nézet</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 perce}other{# perce}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Ellenőrizze a telefon kapcsolatát, és próbálja újra</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 perc van hátra}other{# perc van hátra}}</translation>
 <translation id="7430878839542012341">Törli ezt a keresést az előzmények közül?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_id.xtb b/ui/strings/translations/ui_strings_id.xtb
index 4b799a4e..e6c6d0c5d 100644
--- a/ui/strings/translations/ui_strings_id.xtb
+++ b/ui/strings/translations/ui_strings_id.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 bulan yang lalu}other{# bulan yang lalu}}</translation>
 <translation id="4289300219472526559">Mulai Berbicara</translation>
 <translation id="4316910396681052118">SEMUA APLIKASI</translation>
+<translation id="4467014365953759647">Tidak dapat mengirim nomor</translation>
 <translation id="4588090240171750605">Gulir ke Kanan</translation>
 <translation id="4690510401873698237">Rak di bagian bawah</translation>
 <translation id="4724120544754982507">Pusat Notifikasi, <ph name="UNREAD_NOTIFICATION_COUNT" /> notifikasi belum dibaca</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Peluncur, tampilan sebagian</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 mnt yang lalu}other{# mnt yang lalu}}</translation>
 <translation id="7389409599945284130"><ph name="MESSAGE" /> -</translation>
+<translation id="7399254631220132461">Periksa koneksi ponsel dan coba lagi</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 menit lagi}other{# menit lagi}}</translation>
 <translation id="7430878839542012341">Hapus penelusuran ini dari histori Anda?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_it.xtb b/ui/strings/translations/ui_strings_it.xtb
index 35ea2c1a..5cc3f22 100644
--- a/ui/strings/translations/ui_strings_it.xtb
+++ b/ui/strings/translations/ui_strings_it.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 mese fa}other{# mesi fa}}</translation>
 <translation id="4289300219472526559">Avvia comandi vocali</translation>
 <translation id="4316910396681052118">TUTTE LE APP</translation>
+<translation id="4467014365953759647">Impossibile inviare il numero</translation>
 <translation id="4588090240171750605">Scorri a destra</translation>
 <translation id="4690510401873698237">Shelf in basso</translation>
 <translation id="4724120544754982507">Centro notifiche, <ph name="UNREAD_NOTIFICATION_COUNT" /> notifiche da leggere</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Avvio applicazioni, visualizzazione parziale</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 min fa}other{# min fa}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Controlla la connessione del telefono e riprova</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minuto rimanente}other{# minuti rimanenti}}</translation>
 <translation id="7430878839542012341">Eliminare questa ricerca dalla cronologia?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_ja.xtb b/ui/strings/translations/ui_strings_ja.xtb
index 5cd7df5..90d7313 100644
--- a/ui/strings/translations/ui_strings_ja.xtb
+++ b/ui/strings/translations/ui_strings_ja.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 か月前}other{# か月前}}</translation>
 <translation id="4289300219472526559">読み上げを開始</translation>
 <translation id="4316910396681052118">すべてのアプリ</translation>
+<translation id="4467014365953759647">番号を送信できません</translation>
 <translation id="4588090240171750605">右にスクロール</translation>
 <translation id="4690510401873698237">シェルフは一番下にあります</translation>
 <translation id="4724120544754982507">通知センター: <ph name="UNREAD_NOTIFICATION_COUNT" /> 件の未読通知</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">ランチャー、一部のみ表示</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 分前}other{# 分前}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">スマートフォンの接続を確認し、もう一度お試しください</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{残り 1 分}other{残り # 分}}</translation>
 <translation id="7430878839542012341">この検索キーワードを履歴から削除しますか?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_kn.xtb b/ui/strings/translations/ui_strings_kn.xtb
index c2f32f3..c81051a 100644
--- a/ui/strings/translations/ui_strings_kn.xtb
+++ b/ui/strings/translations/ui_strings_kn.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 ತಿಂಗಳ ಹಿಂದೆ}one{# ತಿಂಗಳುಗಳ ಹಿಂದೆ}other{# ತಿಂಗಳುಗಳ ಹಿಂದೆ}}</translation>
 <translation id="4289300219472526559">ಮಾತನಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="4316910396681052118">ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು</translation>
+<translation id="4467014365953759647">ಸಂಖ್ಯೆಯನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="4588090240171750605">ಬಲಕ್ಕೆ ಸ್ಕ್ರೋಲ್ ಮಾಡಿ</translation>
 <translation id="4690510401873698237">ಪರದೆಯ ಕೆಳಭಾಗದಲ್ಲಿ ಶೆಲ್ಫ್ ಇದೆ</translation>
 <translation id="4724120544754982507">ಅಧಿಸೂಚನೆ ಕೇಂದ್ರ, <ph name="UNREAD_NOTIFICATION_COUNT" /> ಓದದಿರುವ ಅಧಿಸೂಚನೆಗಳು</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">ಲಾಂಚರ್, ಭಾಗಶಃ ವೀಕ್ಷಣೆ</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 ನಿಮಿ ಹಿಂದೆ}one{# ನಿಮಿಷಗಳ ಹಿಂದೆ}other{# ನಿಮಿಷಗಳ ಹಿಂದೆ}}</translation>
 <translation id="7389409599945284130"><ph name="MESSAGE" /> -</translation>
+<translation id="7399254631220132461">ನಿಮ್ಮ ಫೋನ್‌ನ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ, ಪುನಃ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 ನಿಮಿಷ ಉಳಿದಿದೆ}one{# ನಿಮಿಷಗಳು ಉಳಿದಿವೆ}other{# ನಿಮಿಷಗಳು ಉಳಿದಿವೆ}}</translation>
 <translation id="7430878839542012341">ನಿಮ್ಮ ಇತಿಹಾಸದಿಂದ ಈ ಹುಡುಕಾಟವನ್ನು ಅಳಿಸುವುದೇ?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_ko.xtb b/ui/strings/translations/ui_strings_ko.xtb
index af984f6a..7780fbd8 100644
--- a/ui/strings/translations/ui_strings_ko.xtb
+++ b/ui/strings/translations/ui_strings_ko.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1개월 전}other{#개월 전}}</translation>
 <translation id="4289300219472526559">말하기 시작</translation>
 <translation id="4316910396681052118">모든 앱</translation>
+<translation id="4467014365953759647">번호를 보낼 수 없음</translation>
 <translation id="4588090240171750605">오른쪽 스크롤</translation>
 <translation id="4690510401873698237">실행기 하단에 표시</translation>
 <translation id="4724120544754982507">알림 센터, 읽지 않은 알림 <ph name="UNREAD_NOTIFICATION_COUNT" />개</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">런처, 부분 뷰</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1분 전}other{#분 전}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">휴대전화의 연결을 확인하고 다시 시도하세요.</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1분 남음}other{#분 남음}}</translation>
 <translation id="7430878839542012341">기록에서 검색어를 삭제하시겠습니까?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" />TB</translation>
diff --git a/ui/strings/translations/ui_strings_lt.xtb b/ui/strings/translations/ui_strings_lt.xtb
index ee594b3..d6cefd6 100644
--- a/ui/strings/translations/ui_strings_lt.xtb
+++ b/ui/strings/translations/ui_strings_lt.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Prieš 1 mėnesį}one{Prieš # mėnesį}few{Prieš # mėnesius}many{Prieš # mėnesio}other{Prieš # mėnesių}}</translation>
 <translation id="4289300219472526559">Pradėti kalbėti</translation>
 <translation id="4316910396681052118">VISOS PROGRAMOS</translation>
+<translation id="4467014365953759647">Nepavyko išsiųsti numerio</translation>
 <translation id="4588090240171750605">Slinkti į dešinę</translation>
 <translation id="4690510401873698237">Lentyna apačioje</translation>
 <translation id="4724120544754982507">Pranešimų centras, neskaitytų pranešimų: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Paleidimo priemonė, dalinis rodinys</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Prieš 1 min.}one{Prieš # min.}few{Prieš # min.}many{Prieš # min.}other{Prieš # min.}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Patikrinkite telefono ryšį ir bandykite dar kartą</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Liko 1 minutė}one{Liko # minutė}few{Liko # minutės}many{Liko # minutės}other{Liko # minučių}}</translation>
 <translation id="7430878839542012341">Ištrinti šią paiešką iš istorijos?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_lv.xtb b/ui/strings/translations/ui_strings_lv.xtb
index 3d0a0ab4..1c9b69ed2 100644
--- a/ui/strings/translations/ui_strings_lv.xtb
+++ b/ui/strings/translations/ui_strings_lv.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Pirms 1 mēneša}zero{Pirms # mēnešiem}one{Pirms # mēneša}other{Pirms # mēnešiem}}</translation>
 <translation id="4289300219472526559">Sākt runāt</translation>
 <translation id="4316910396681052118">VISAS LIETOTNES</translation>
+<translation id="4467014365953759647">Nevar nosūtīt numuru</translation>
 <translation id="4588090240171750605">Ritināt pa labi</translation>
 <translation id="4690510401873698237">Plaukts tiek rādīts apakšā</translation>
 <translation id="4724120544754982507">Paziņojumu centrs, <ph name="UNREAD_NOTIFICATION_COUNT" /> nelasīts(-i) paziņojums(-i)</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Palaišanas programma, daļējs skats</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Pirms 1 min}zero{Pirms # min}one{Pirms # min}other{Pirms # min}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Pārbaudiet tālruņa savienojumu un mēģiniet vēlreiz</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Atlikusi 1 minūte}zero{Atlikušas # minūtes}one{Atlikusi # minūte}other{Atlikušas # minūtes}}</translation>
 <translation id="7430878839542012341">Vai dzēst šo meklēšanas vaicājumu no vēstures?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb
index c4cf95b..67f910f8 100644
--- a/ui/strings/translations/ui_strings_ml.xtb
+++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{ഒരു മാസം മുമ്പ്}other{# മാസം മുമ്പ്}}</translation>
 <translation id="4289300219472526559">സംഭാഷണം ആരംഭിക്കുക</translation>
 <translation id="4316910396681052118">എല്ലാ ആപ്പുകളും</translation>
+<translation id="4467014365953759647">നമ്പർ അയയ്‌ക്കാനായില്ല</translation>
 <translation id="4588090240171750605">വലത്തോട്ട് സ്ക്രോള്‍ ചെയ്യുക</translation>
 <translation id="4690510401873698237">സ്‌ക്രീനിൻ്റെ ചുവടെയാണ് ഷെൽഫ്</translation>
 <translation id="4724120544754982507">അറിയിപ്പ് കേന്ദ്രം, <ph name="UNREAD_NOTIFICATION_COUNT" /> വായിക്കാത്ത അറിയിപ്പുകൾ</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">ലോഞ്ചർ, ഭാഗിക കാഴ്ച</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{ഒരു മിനിറ്റ് മുമ്പ്}other{# മിനിറ്റ് മുമ്പ്}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">നിങ്ങളുടെ ഫോണിന്റെ കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{ഒരു മിനിറ്റ് ശേഷിക്കുന്നു}other{# മിനിറ്റ് ശേഷിക്കുന്നു}}</translation>
 <translation id="7430878839542012341">നിങ്ങളുടെ ചരിത്രത്തിൽ നിന്ന് ഈ തിരയൽ ഇല്ലാതാക്കണോ?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_mr.xtb b/ui/strings/translations/ui_strings_mr.xtb
index 0656c4c..2283dc8 100644
--- a/ui/strings/translations/ui_strings_mr.xtb
+++ b/ui/strings/translations/ui_strings_mr.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 महिन्यापूर्वी}other{# महिन्यांपूर्वी}}</translation>
 <translation id="4289300219472526559">बोलणे प्रारंभ करा</translation>
 <translation id="4316910396681052118">सर्व अ‍ॅप्स</translation>
+<translation id="4467014365953759647">नंबर पाठवू शकत नाही</translation>
 <translation id="4588090240171750605">उजवे स्क्रोल करा</translation>
 <translation id="4690510401873698237">शेल्फ तळाशी आहे</translation>
 <translation id="4724120544754982507">सूचना केंद्र, <ph name="UNREAD_NOTIFICATION_COUNT" /> न वाचलेल्या सूचना</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">लाँचर, आंशिक दृश्य</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 मिनिटापूर्वी}other{# मिनिटांपूर्वी}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">तुमच्या फोनचे कनेक्शन तपासा आणि पुन्हा प्रयत्न करा</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 मिनिट शिल्लक}other{# मिनिटे शिल्लक}}</translation>
 <translation id="7430878839542012341">तुमच्या इतिहासातून हा शोध हटवायचा आहे का?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_ms.xtb b/ui/strings/translations/ui_strings_ms.xtb
index af4f0e3..f030175a 100644
--- a/ui/strings/translations/ui_strings_ms.xtb
+++ b/ui/strings/translations/ui_strings_ms.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 bulan yang lalu}other{# bulan yang lalu}}</translation>
 <translation id="4289300219472526559">Mula Bercakap</translation>
 <translation id="4316910396681052118">SEMUA APL</translation>
+<translation id="4467014365953759647">Tidak dapat menghantar nombor</translation>
 <translation id="4588090240171750605">Tatal ke Kanan</translation>
 <translation id="4690510401873698237">Rak di bahagian bawah</translation>
 <translation id="4724120544754982507">Pusat Pemberitahuan, <ph name="UNREAD_NOTIFICATION_COUNT" /> pemberitahuan belum dibaca</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Pelancar, paparan separa</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 min yang lalu}other{# min yang lalu}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Periksa sambungan telefon anda dan cuba lagi</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minit lagi}other{# minit lagi}}</translation>
 <translation id="7430878839542012341">Padamkan carian ini daripada sejarah anda?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_nl.xtb b/ui/strings/translations/ui_strings_nl.xtb
index c45e5ca..71df2a7 100644
--- a/ui/strings/translations/ui_strings_nl.xtb
+++ b/ui/strings/translations/ui_strings_nl.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 maand geleden}other{# maanden geleden}}</translation>
 <translation id="4289300219472526559">Inspreken starten</translation>
 <translation id="4316910396681052118">ALLE APPS</translation>
+<translation id="4467014365953759647">Kan nummer niet verzenden</translation>
 <translation id="4588090240171750605">Naar rechts bladeren</translation>
 <translation id="4690510401873698237">Plank aan onderkant</translation>
 <translation id="4724120544754982507">Meldingscentrum, <ph name="UNREAD_NOTIFICATION_COUNT" /> ongelezen meldingen</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Launcher, gedeeltelijke weergave</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 min. geleden}other{# min. geleden}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Controleer de verbinding van je telefoon en probeer het opnieuw</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minuut resterend}other{# minuten resterend}}</translation>
 <translation id="7430878839542012341">Deze zoekopdracht uit je geschiedenis verwijderen?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_no.xtb b/ui/strings/translations/ui_strings_no.xtb
index 80c103e..02bf2b6 100644
--- a/ui/strings/translations/ui_strings_no.xtb
+++ b/ui/strings/translations/ui_strings_no.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{for 1 måned siden}other{for # måneder siden}}</translation>
 <translation id="4289300219472526559">Begynn å snakke</translation>
 <translation id="4316910396681052118">ALLE APPER</translation>
+<translation id="4467014365953759647">Kan ikke sende nummeret</translation>
 <translation id="4588090240171750605">Rull mot høyre</translation>
 <translation id="4690510401873698237">Hyllen er nederst</translation>
 <translation id="4724120544754982507">Varselsenter, <ph name="UNREAD_NOTIFICATION_COUNT" /> uleste varsler</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Appoversikt, delvis visning</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{For 1 min siden}other{For # min siden}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Kontrollér telefonens tilkobling og prøv på nytt</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minutt igjen}other{# minutter igjen}}</translation>
 <translation id="7430878839542012341">Vil du slette dette søket fra loggen?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_pl.xtb b/ui/strings/translations/ui_strings_pl.xtb
index 09998523..ae0fecd 100644
--- a/ui/strings/translations/ui_strings_pl.xtb
+++ b/ui/strings/translations/ui_strings_pl.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{miesiąc temu}few{# miesiące temu}many{# miesięcy temu}other{# miesiąca temu}}</translation>
 <translation id="4289300219472526559">Zacznij mówić</translation>
 <translation id="4316910396681052118">WSZYSTKIE APLIKACJE</translation>
+<translation id="4467014365953759647">Nie można wysłać numeru</translation>
 <translation id="4588090240171750605">Przewiń w prawo</translation>
 <translation id="4690510401873698237">Półka na dole</translation>
 <translation id="4724120544754982507">Centrum powiadomień, liczba nieprzeczytanych powiadomień: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Menu z aplikacjami, widok częściowy</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 min temu}few{# min temu}many{# min temu}other{# min temu}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Sprawdź połączenie telefonu i spróbuj ponownie</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Pozostała 1 minuta}few{Pozostały # minuty}many{Pozostały # minut}other{Pozostało # minuty}}</translation>
 <translation id="7430878839542012341">Usunąć to hasło z historii wyszukiwania?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_pt-BR.xtb b/ui/strings/translations/ui_strings_pt-BR.xtb
index 14e89f19..f95cc79c 100644
--- a/ui/strings/translations/ui_strings_pt-BR.xtb
+++ b/ui/strings/translations/ui_strings_pt-BR.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 mês atrás}one{# mês atrás}other{# meses atrás}}</translation>
 <translation id="4289300219472526559">Comece a falar</translation>
 <translation id="4316910396681052118">TODOS OS APPS</translation>
+<translation id="4467014365953759647">Não é possível enviar o número</translation>
 <translation id="4588090240171750605">Percorrer à direita</translation>
 <translation id="4690510401873698237">Estante na parte inferior</translation>
 <translation id="4724120544754982507">Central de Notificações: <ph name="UNREAD_NOTIFICATION_COUNT" /> notificações não lidas</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Iniciador, visualização parcial</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Um minuto atrás}one{# minutos atrás}other{# minutos atrás}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Verifique a conexão do smartphone e tente novamente</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Um minuto restante}one{# minutos restantes}other{# minutos restantes}}</translation>
 <translation id="7430878839542012341">Excluir essa pesquisa do seu histórico?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_pt-PT.xtb b/ui/strings/translations/ui_strings_pt-PT.xtb
index 7e350aaf..e2f4396 100644
--- a/ui/strings/translations/ui_strings_pt-PT.xtb
+++ b/ui/strings/translations/ui_strings_pt-PT.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Há 1 mês}other{Há # meses}}</translation>
 <translation id="4289300219472526559">Comece a Falar</translation>
 <translation id="4316910396681052118">TODAS AS APLICAÇÕES</translation>
+<translation id="4467014365953759647">Não é possível enviar o número</translation>
 <translation id="4588090240171750605">Deslocar-se para a direita</translation>
 <translation id="4690510401873698237">Prateleira na parte inferior</translation>
 <translation id="4724120544754982507">Centro de notificações, <ph name="UNREAD_NOTIFICATION_COUNT" /> notificações não lidas</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Iniciador, vista parcial</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Há 1 min}other{Há # min}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Verifique a ligação do telemóvel e tente novamente</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Falta 1 minuto}other{Faltam # minutos}}</translation>
 <translation id="7430878839542012341">Pretende eliminar esta pesquisa do seu histórico?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_ro.xtb b/ui/strings/translations/ui_strings_ro.xtb
index 0215ad6..fca2b39 100644
--- a/ui/strings/translations/ui_strings_ro.xtb
+++ b/ui/strings/translations/ui_strings_ro.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Acum 1 lună}few{Acum # luni}other{Acum # de luni}}</translation>
 <translation id="4289300219472526559">Începeți să vorbiți</translation>
 <translation id="4316910396681052118">TOATE APLICAȚIILE</translation>
+<translation id="4467014365953759647">Numărul nu poate fi trimis</translation>
 <translation id="4588090240171750605">Derulează spre dreapta</translation>
 <translation id="4690510401873698237">Raft în partea de jos</translation>
 <translation id="4724120544754982507">Centrul de notificări, <ph name="UNREAD_NOTIFICATION_COUNT" /> notificări necitite</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Lansator, afișare parțială</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Acum un min.}few{Acum # min.}other{Acum # min.}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Verifică-ți conexiunea telefonului și încearcă din nou</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Un minut rămas}few{# minute rămase}other{# de minute rămase}}</translation>
 <translation id="7430878839542012341">Ștergi această căutare din istoric?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_ru.xtb b/ui/strings/translations/ui_strings_ru.xtb
index 808546a..3579200 100644
--- a/ui/strings/translations/ui_strings_ru.xtb
+++ b/ui/strings/translations/ui_strings_ru.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{месяц назад}one{# месяц назад}few{# месяца назад}many{# месяцев назад}other{# месяца назад}}</translation>
 <translation id="4289300219472526559">Начать голосовой ввод</translation>
 <translation id="4316910396681052118">ВСЕ ПРИЛОЖЕНИЯ</translation>
+<translation id="4467014365953759647">Не удается отправить номер</translation>
 <translation id="4588090240171750605">Прокрутка вправо</translation>
 <translation id="4690510401873698237">Временное хранилище размещено в нижней части экрана</translation>
 <translation id="4724120544754982507">Центр уведомлений. Непрочитанных: <ph name="UNREAD_NOTIFICATION_COUNT" />.</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Панель запуска, частичный список приложений</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 мин. назад}one{# мин. назад}few{# мин. назад}many{# мин. назад}other{# мин. назад}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Проверьте подключение к мобильной сети и повторите попытку.</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Осталась 1 минута}one{Осталась # минута}few{Осталось # минуты}many{Осталось # минут}other{Осталось # минуты}}</translation>
 <translation id="7430878839542012341">Удалить этот запрос из истории поиска?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> ТБ</translation>
diff --git a/ui/strings/translations/ui_strings_sk.xtb b/ui/strings/translations/ui_strings_sk.xtb
index d18e3d6..b1da5ec 100644
--- a/ui/strings/translations/ui_strings_sk.xtb
+++ b/ui/strings/translations/ui_strings_sk.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{pred mesiacom}few{pred # mesiacmi}many{pred # mesiacom}other{pred # mesiacmi}}</translation>
 <translation id="4289300219472526559">Začať hovoriť</translation>
 <translation id="4316910396681052118">VŠETKY APLIKÁCIE</translation>
+<translation id="4467014365953759647">Číslo sa nedá odoslať</translation>
 <translation id="4588090240171750605">Rolovať doprava</translation>
 <translation id="4690510401873698237">Polička dolu</translation>
 <translation id="4724120544754982507">Centrum upozornení – počet neprečítaných upozornení: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Launcher, čiastočné zobrazenie</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Pred 1 min}few{Pred # min}many{Pred # min}other{Pred # min}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Skontrolujte pripojenie telefónu a skúste to znova</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Zostáva 1 minúta}few{Zostávajú # minúty}many{Zostáva # minúty}other{Zostáva # minút}}</translation>
 <translation id="7430878839542012341">Chcete odstrániť toto vyhľadávanie z histórie?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_sl.xtb b/ui/strings/translations/ui_strings_sl.xtb
index 185ac1442..adf17ca 100644
--- a/ui/strings/translations/ui_strings_sl.xtb
+++ b/ui/strings/translations/ui_strings_sl.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Pred 1 mesecem}one{Pred # mesecem}two{Pred # mesecema}few{Pred # meseci}other{Pred # meseci}}</translation>
 <translation id="4289300219472526559">Start Speaking</translation>
 <translation id="4316910396681052118">VSE APLIKACIJE</translation>
+<translation id="4467014365953759647">Številke ni mogoče poslati</translation>
 <translation id="4588090240171750605">Pomik desno</translation>
 <translation id="4690510401873698237">Polica na dnu</translation>
 <translation id="4724120544754982507">Središče za obvestila, št. neprebranih sporočil: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -173,6 +174,7 @@
 <translation id="7319740667687257810">Zaganjalnik, delni pogled</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Pred 1 min}one{Pred # min}two{Pred # min}few{Pred # min}other{Pred # min}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Preverite povezavo telefona in poskusite znova</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Še 1 min}one{Še # min}two{Še # min}few{Še # min}other{Še # min}}</translation>
 <translation id="7430878839542012341">Želite izbrisati to iskanje iz zgodovine?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_sr.xtb b/ui/strings/translations/ui_strings_sr.xtb
index 3e9f253..c365b9d 100644
--- a/ui/strings/translations/ui_strings_sr.xtb
+++ b/ui/strings/translations/ui_strings_sr.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Пре месец дана}one{Пре # месец}few{Пре # месеца}other{Пре # месеци}}</translation>
 <translation id="4289300219472526559">Почните да говорите</translation>
 <translation id="4316910396681052118">СВЕ АПЛИКАЦИЈЕ</translation>
+<translation id="4467014365953759647">Слање броја није успело</translation>
 <translation id="4588090240171750605">Помери надесно</translation>
 <translation id="4690510401873698237">Полица у дну</translation>
 <translation id="4724120544754982507">Центар за обавештења, непрочитаних обавештења: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Покретач, делимичан приказ</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Пре 1 мин}one{Пре # мин}few{Пре # мин}other{Пре # мин}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Проверите везу телефона и пробајте поново</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Још 1 минут}one{Још # минут}few{Још # минута}other{Још # минута}}</translation>
 <translation id="7430878839542012341">Желите ли да избришете ову претрагу из историје?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_sv.xtb b/ui/strings/translations/ui_strings_sv.xtb
index f1d910aa..70c2126 100644
--- a/ui/strings/translations/ui_strings_sv.xtb
+++ b/ui/strings/translations/ui_strings_sv.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 månad sedan}other{# månader sedan}}</translation>
 <translation id="4289300219472526559">Börja tala</translation>
 <translation id="4316910396681052118">ALLA APPAR</translation>
+<translation id="4467014365953759647">Det gick inte att skicka numret</translation>
 <translation id="4588090240171750605">Rulla åt höger</translation>
 <translation id="4690510401873698237">Hyllan längst ned</translation>
 <translation id="4724120544754982507"><ph name="UNREAD_NOTIFICATION_COUNT" /> olästa aviseringar i meddelandecentret</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Översikt, delvy</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{för 1 min sedan}other{för # min sedan}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Kontrollera telefonens anslutning och försök igen</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 minut kvar}other{# minuter kvar}}</translation>
 <translation id="7430878839542012341">Vill du radera den här sökningen från historiken?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_sw.xtb b/ui/strings/translations/ui_strings_sw.xtb
index a19f897..69dd8ce 100644
--- a/ui/strings/translations/ui_strings_sw.xtb
+++ b/ui/strings/translations/ui_strings_sw.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{Mwezi 1 uliopita}other{Miezi # iliyopita}}</translation>
 <translation id="4289300219472526559">Anza Kuzungumza</translation>
 <translation id="4316910396681052118">PROGRAMU ZOTE</translation>
+<translation id="4467014365953759647">Imeshindwa kutuma nambari</translation>
 <translation id="4588090240171750605">Sogeza Kulia</translation>
 <translation id="4690510401873698237">Rafu iko upande wa chini</translation>
 <translation id="4724120544754982507">Kituo cha Arifa, arifa <ph name="UNREAD_NOTIFICATION_COUNT" /> ambazo hujasoma</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Kifungua programu, mwonekano mdogo</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{Dakika 1 iliyopita}other{Dakika # zilizopita}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Angalia muunganisho wa simu yako kisha ujaribu tena.</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Imesalia dakika 1}other{Zimesalia dakika #}}</translation>
 <translation id="7430878839542012341">Ungependa kufuta utafutaji huu kwenye historia yako?</translation>
 <translation id="7460907917090416791">TB <ph name="QUANTITY" /></translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb
index 8781b50..58eaec7 100644
--- a/ui/strings/translations/ui_strings_te.xtb
+++ b/ui/strings/translations/ui_strings_te.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 నెల క్రితం}other{# నెలల క్రితం}}</translation>
 <translation id="4289300219472526559">మాట్లాడటాన్ని ప్రారంభించు</translation>
 <translation id="4316910396681052118">అన్ని అనువర్తనాలు</translation>
+<translation id="4467014365953759647">నంబర్‌ను పంపడం సాధ్యపడలేదు</translation>
 <translation id="4588090240171750605">కుడికి స్క్రోల్ చేయి</translation>
 <translation id="4690510401873698237">అర కింది భాగంలో ఉంది</translation>
 <translation id="4724120544754982507">నోటిఫికేషన్ కేంద్రం, <ph name="UNREAD_NOTIFICATION_COUNT" /> చదవని నోటిఫికేషన్‌లు</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">లాంఛ‌ర్‌, పాక్షిక వీక్షణ</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 నిమి. క్రితం}other{# నిమి. క్రితం}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">మీ ఫోన్ కనెక్షన్‌ను సరిచూసుకుని ఉంటే, ఆపై మళ్లీ ప్రయత్నించండి</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 నిమిషం మిగిలి ఉంది}other{# నిమిషాలు మిగిలి ఉన్నాయి}}</translation>
 <translation id="7430878839542012341">మీ చరిత్ర నుండి ఈ శోధనను తొలగించాలా?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_th.xtb b/ui/strings/translations/ui_strings_th.xtb
index f5b4013..bdc53f8 100644
--- a/ui/strings/translations/ui_strings_th.xtb
+++ b/ui/strings/translations/ui_strings_th.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 เดือนที่ผ่านมา}other{# เดือนที่ผ่านมา}}</translation>
 <translation id="4289300219472526559">เริ่มพูด</translation>
 <translation id="4316910396681052118">แอปทั้งหมด</translation>
+<translation id="4467014365953759647">ส่งหมายเลขไม่ได้</translation>
 <translation id="4588090240171750605">เลื่อนทางขวา</translation>
 <translation id="4690510401873698237">ชั้นวางอยู่ด้านล่าง</translation>
 <translation id="4724120544754982507">ศูนย์การแจ้งเตือนมีการแจ้งเตือนที่ยังไม่อ่าน <ph name="UNREAD_NOTIFICATION_COUNT" /> รายการ</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Launcher มุมมองบางส่วน</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 นาทีที่ผ่านมา}other{# นาทีที่ผ่านมา}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">ตรวจสอบการเชื่อมต่อของโทรศัพท์แล้วลองอีกครั้ง</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{เหลือ 1 นาที}other{เหลือ # นาที}}</translation>
 <translation id="7430878839542012341">ลบการค้นหานี้ออกจากประวัติการเข้าชมไหม</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_tr.xtb b/ui/strings/translations/ui_strings_tr.xtb
index cb4f359..c8197dd 100644
--- a/ui/strings/translations/ui_strings_tr.xtb
+++ b/ui/strings/translations/ui_strings_tr.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 ay önce}other{# ay önce}}</translation>
 <translation id="4289300219472526559">Konuşmaya Başla</translation>
 <translation id="4316910396681052118">TÜM UYGULAMALAR</translation>
+<translation id="4467014365953759647">Numara gönderilemiyor</translation>
 <translation id="4588090240171750605">Sağa Kaydır</translation>
 <translation id="4690510401873698237">Raf, ekranın alt tarafında</translation>
 <translation id="4724120544754982507">Bildirim Merkezi, <ph name="UNREAD_NOTIFICATION_COUNT" /> okunmamış bildirim</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Launcher, kısmi görünüm</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 dk. önce}other{# dk. önce}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Telefonunuzun bağlantısını kontrol edip tekrar deneyin</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{1 dakika kaldı}other{# dakika kaldı}}</translation>
 <translation id="7430878839542012341">Bu arama, geçmişinizden silinsin mi?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_uk.xtb b/ui/strings/translations/ui_strings_uk.xtb
index 828f8681..ca05879 100644
--- a/ui/strings/translations/ui_strings_uk.xtb
+++ b/ui/strings/translations/ui_strings_uk.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 місяць тому}one{# місяць тому}few{# місяці тому}many{# місяців тому}other{# місяця тому}}</translation>
 <translation id="4289300219472526559">Start Speaking</translation>
 <translation id="4316910396681052118">УСІ ДОДАТКИ</translation>
+<translation id="4467014365953759647">Не вдалося надіслати номер</translation>
 <translation id="4588090240171750605">Прокрутка вправо</translation>
 <translation id="4690510401873698237">Полицю розміщено внизу</translation>
 <translation id="4724120544754982507">Центр сповіщень, непрочитаних сповіщень: <ph name="UNREAD_NOTIFICATION_COUNT" /></translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Панель запуску, частковий перегляд</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 хв тому}one{# хв тому}few{# хв тому}many{# хв тому}other{# хв тому}}</translation>
 <translation id="7389409599945284130">– <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Перевірте з'єднання телефона й повторіть спробу</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Залишилась 1 хвилина}one{Залишилася # хвилина}few{Залишилося # хвилини}many{Залишилося # хвилин}other{Залишилося # хвилини}}</translation>
 <translation id="7430878839542012341">Видалити цей пошуковий запит з історії?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> ТБ</translation>
diff --git a/ui/strings/translations/ui_strings_vi.xtb b/ui/strings/translations/ui_strings_vi.xtb
index 060f10f9..0f067a7a 100644
--- a/ui/strings/translations/ui_strings_vi.xtb
+++ b/ui/strings/translations/ui_strings_vi.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 tháng trước}other{# tháng trước}}</translation>
 <translation id="4289300219472526559">Bắt đầu nói</translation>
 <translation id="4316910396681052118">TẤT CẢ ỨNG DỤNG</translation>
+<translation id="4467014365953759647">Không thể gửi số điện thoại</translation>
 <translation id="4588090240171750605">Cuộn qua Phải</translation>
 <translation id="4690510401873698237">Giá ở dưới cùng</translation>
 <translation id="4724120544754982507">Trung tâm thông báo, <ph name="UNREAD_NOTIFICATION_COUNT" /> thông báo chưa đọc</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">Trình khởi chạy, chế độ xem một phần</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 phút trước}other{# phút trước}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">Hãy kiểm tra kết nối của điện thoại rồi thử lại</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{Còn 1 phút}other{Còn # phút}}</translation>
 <translation id="7430878839542012341">Xóa nội dung tìm kiếm này khỏi lịch sử của bạn?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_zh-CN.xtb b/ui/strings/translations/ui_strings_zh-CN.xtb
index 49fc0e8e..3daaf480 100644
--- a/ui/strings/translations/ui_strings_zh-CN.xtb
+++ b/ui/strings/translations/ui_strings_zh-CN.xtb
@@ -46,7 +46,7 @@
 <translation id="2289052229480071835">点按您屏幕上的触摸目标。</translation>
 <translation id="2295140143284145483">调查问卷</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY" /> TB/s</translation>
-<translation id="2388990488038464401">从手机拨打此号码?</translation>
+<translation id="2388990488038464401">要用手机拨打此号码?</translation>
 <translation id="24452542372838207">展开通知</translation>
 <translation id="2445449901874883781">使用高密度</translation>
 <translation id="2451871130406122810">已发送到设备</translation>
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 个月前}other{# 个月前}}</translation>
 <translation id="4289300219472526559">开始讲话</translation>
 <translation id="4316910396681052118">所有应用</translation>
+<translation id="4467014365953759647">无法发送电话号码</translation>
 <translation id="4588090240171750605">向右滚动</translation>
 <translation id="4690510401873698237">任务栏位于屏幕底部</translation>
 <translation id="4724120544754982507">通知中心,<ph name="UNREAD_NOTIFICATION_COUNT" /> 条未读通知</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">启动器,局部视图</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 分钟前}other{# 分钟前}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">请检查手机的网络连接,然后重试</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{还剩 1 分钟}other{还剩 # 分钟}}</translation>
 <translation id="7430878839542012341">要将这项搜索从您的历史记录中删除吗?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/strings/translations/ui_strings_zh-TW.xtb b/ui/strings/translations/ui_strings_zh-TW.xtb
index c0ce4caa..c313740 100644
--- a/ui/strings/translations/ui_strings_zh-TW.xtb
+++ b/ui/strings/translations/ui_strings_zh-TW.xtb
@@ -100,6 +100,7 @@
 <translation id="4266252015790371705">{MONTHS,plural, =1{1 個月前}other{# 個月前}}</translation>
 <translation id="4289300219472526559">Start Speaking</translation>
 <translation id="4316910396681052118">所有應用程式</translation>
+<translation id="4467014365953759647">無法傳送號碼</translation>
 <translation id="4588090240171750605">向右捲動</translation>
 <translation id="4690510401873698237">在底部顯示檔案櫃</translation>
 <translation id="4724120544754982507">通知中心,<ph name="UNREAD_NOTIFICATION_COUNT" /> 則未讀通知</translation>
@@ -174,6 +175,7 @@
 <translation id="7319740667687257810">啟動器,部分檢視</translation>
 <translation id="7365057348334984696">{MINUTES,plural, =1{1 分鐘前}other{# 分鐘前}}</translation>
 <translation id="7389409599945284130">- <ph name="MESSAGE" /></translation>
+<translation id="7399254631220132461">請檢查你的手機連線,然後再試一次。</translation>
 <translation id="7410957453383678442">{MINUTES,plural, =1{還剩 1 分鐘}other{還剩 # 分鐘}}</translation>
 <translation id="7430878839542012341">要將這個搜尋從你的記錄中刪除嗎?</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY" /> TB</translation>
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index 1508e41f..a345ac5 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -85,8 +85,7 @@
   default_title_->SetVisible(false);
   AddChildView(default_title_);
 
-  auto close =
-      CreateCloseButton(this, GetNativeTheme()->SystemDarkModeEnabled());
+  auto close = CreateCloseButton(this, GetNativeTheme()->ShouldUseDarkColors());
   close->SetVisible(false);
 #if defined(OS_WIN)
   // Windows will automatically create a tooltip for the close button based on
@@ -111,11 +110,12 @@
 // static
 std::unique_ptr<Button> BubbleFrameView::CreateCloseButton(
     ButtonListener* listener,
-    bool is_dark_mode) {
+    bool should_use_dark_colors) {
   auto close_button = CreateVectorImageButton(listener);
   SetImageFromVectorIconWithColor(
       close_button.get(), vector_icons::kCloseRoundedIcon,
-      is_dark_mode ? SkColorSetA(SK_ColorWHITE, 0xDD) : gfx::kGoogleGrey700);
+      should_use_dark_colors ? SkColorSetA(SK_ColorWHITE, 0xDD)
+                             : gfx::kGoogleGrey700);
   close_button->SetTooltipText(l10n_util::GetStringUTF16(IDS_APP_CLOSE));
   close_button->SizeToPreferredSize();
 
diff --git a/ui/views/bubble/bubble_frame_view.h b/ui/views/bubble/bubble_frame_view.h
index 45eb1ef8..2296ad0 100644
--- a/ui/views/bubble/bubble_frame_view.h
+++ b/ui/views/bubble/bubble_frame_view.h
@@ -42,7 +42,7 @@
 
   // Creates a close button used in the corner of the dialog.
   static std::unique_ptr<Button> CreateCloseButton(ButtonListener* listener,
-                                                   bool is_dark_mode);
+                                                   bool should_use_dark_colors);
 
   // NonClientFrameView:
   gfx::Rect GetBoundsForClientView() const override;
diff --git a/ui/views/bubble/footnote_container_view.cc b/ui/views/bubble/footnote_container_view.cc
index 33a01690..362172c 100644
--- a/ui/views/bubble/footnote_container_view.cc
+++ b/ui/views/bubble/footnote_container_view.cc
@@ -86,7 +86,7 @@
 
 void FootnoteContainerView::ResetBorder() {
   SetBorder(CreateSolidSidedBorder(1, 0, 0, 0,
-                                   GetNativeTheme()->SystemDarkModeEnabled()
+                                   GetNativeTheme()->ShouldUseDarkColors()
                                        ? gfx::kGoogleGrey900
                                        : gfx::kGoogleGrey200));
 }
diff --git a/ui/views/controls/button/md_text_button.cc b/ui/views/controls/button/md_text_button.cc
index 0b4f7d7..65f109a 100644
--- a/ui/views/controls/button/md_text_button.cc
+++ b/ui/views/controls/button/md_text_button.cc
@@ -93,12 +93,13 @@
 void MdTextButton::OnPaintBackground(gfx::Canvas* canvas) {
   LabelButton::OnPaintBackground(canvas);
   if (hover_animation().is_animating() || state() == STATE_HOVERED) {
-    bool is_dark_mode = GetNativeTheme()->SystemDarkModeEnabled();
+    bool should_use_dark_colors = GetNativeTheme()->ShouldUseDarkColors();
     int hover_alpha = is_prominent_ ? 0x0C : 0x05;
-    if (is_dark_mode)
+    if (should_use_dark_colors)
       hover_alpha = 0x0A;
-    const SkColor hover_color =
-        is_dark_mode && !is_prominent_ ? gfx::kGoogleBlue300 : SK_ColorBLACK;
+    const SkColor hover_color = should_use_dark_colors && !is_prominent_
+                                    ? gfx::kGoogleBlue300
+                                    : SK_ColorBLACK;
     SkScalar alpha = hover_animation().CurrentValueBetween(0, hover_alpha);
     cc::PaintFlags flags;
     flags.setColor(SkColorSetA(hover_color, alpha));
@@ -134,13 +135,14 @@
 
 std::unique_ptr<views::InkDropHighlight> MdTextButton::CreateInkDropHighlight()
     const {
-  bool is_dark_mode = GetNativeTheme()->SystemDarkModeEnabled();
+  bool should_use_dark_colors = GetNativeTheme()->ShouldUseDarkColors();
   // The prominent button hover effect is a shadow.
   constexpr int kYOffset = 1;
   constexpr int kSkiaBlurRadius = 2;
   const int shadow_alpha = is_prominent_ ? 0x3D : 0x1A;
-  const SkColor shadow_color =
-      is_dark_mode && is_prominent_ ? gfx::kGoogleBlue300 : SK_ColorBLACK;
+  const SkColor shadow_color = should_use_dark_colors && is_prominent_
+                                   ? gfx::kGoogleBlue300
+                                   : SK_ColorBLACK;
   std::vector<gfx::ShadowValue> shadows;
   // The notion of blur that gfx::ShadowValue uses is twice the Skia/CSS value.
   // Skia counts the number of pixels outside the mask area whereas
@@ -148,7 +150,7 @@
   // the mask bounds.
   shadows.emplace_back(
       gfx::Vector2d(0, kYOffset), 2 * kSkiaBlurRadius,
-      SkColorSetA(shadow_color, is_dark_mode ? 0x7F : shadow_alpha));
+      SkColorSetA(shadow_color, should_use_dark_colors ? 0x7F : shadow_alpha));
   const SkColor fill_color =
       SkColorSetA(SK_ColorWHITE, is_prominent_ ? 0x0D : 0x05);
   return std::make_unique<InkDropHighlight>(
diff --git a/ui/views/controls/menu/menu_config.h b/ui/views/controls/menu/menu_config.h
index 5c8ed0b..33ab4eb 100644
--- a/ui/views/controls/menu/menu_config.h
+++ b/ui/views/controls/menu/menu_config.h
@@ -6,6 +6,7 @@
 #define UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_
 
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/color_palette.h"
 #include "ui/gfx/font_list.h"
 #include "ui/views/controls/menu/menu_image_util.h"
 #include "ui/views/round_rect_painter.h"
@@ -87,7 +88,7 @@
   int touchable_icon_size = 20;
 
   // The color used for icons in touchable menu items.
-  SkColor touchable_icon_color = SkColorSetRGB(0x5F, 0x63, 0x60);
+  SkColor touchable_icon_color = gfx::kGoogleGrey700;
 
   // The space reserved for the check. The actual size of the image may be
   // different.
diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn
index 47a5a90..c79b211 100644
--- a/ui/webui/resources/cr_elements/BUILD.gn
+++ b/ui/webui/resources/cr_elements/BUILD.gn
@@ -26,6 +26,13 @@
     "cr_toggle:closure_compile",
     "cr_view_manager:closure_compile",
     "policy:closure_compile",
+
+    # Targets for auto-generated Polymer 3 JS Modules
+    "cr_button:closure_compile_module",
+    "cr_checkbox:closure_compile_module",
+    "cr_toast:closure_compile_module",
+    "cr_toggle:closure_compile_module",
+    "cr_view_manager:closure_compile_module",
   ]
 
   if (is_chromeos) {
diff --git a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html
index 672ae8a..67228aef 100644
--- a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html
+++ b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_list.html
@@ -72,7 +72,7 @@
         <template is="dom-if" if="[[chooseFileLabel]]">
           <!-- Selects the file picker as the picture source. -->
           <iron-icon data-type$="[[selectionTypesEnum_.FILE]]" role="radio"
-              icon="cr:folder" title="[[chooseFileLabel]]">
+              icon="cr:folder-filled" title="[[chooseFileLabel]]">
           </iron-icon>
         </template>
         <!-- Shows and selects the current profile picture. -->
diff --git a/ui/webui/resources/cr_elements/cr_button/BUILD.gn b/ui/webui/resources/cr_elements/cr_button/BUILD.gn
index 4a25178..c224703c 100644
--- a/ui/webui/resources/cr_elements/cr_button/BUILD.gn
+++ b/ui/webui/resources/cr_elements/cr_button/BUILD.gn
@@ -23,3 +23,22 @@
   html_file = "cr_button.html"
   html_type = "dom-module"
 }
+
+js_type_check("closure_compile_module") {
+  is_polymer3 = true
+  deps = [
+    ":cr_button.m",
+  ]
+}
+
+js_library("cr_button.m") {
+  sources = [
+    "$root_gen_dir/ui/webui/resources/cr_elements/cr_button/cr_button.m.js",
+  ]
+  deps = [
+    "//third_party/polymer/v3_0/components-chromium/paper-behaviors:paper-ripple-behavior",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+    "//ui/webui/resources/js/cr/ui:focus_outline_manager.m",
+  ]
+  extra_deps = [ ":cr_button_module" ]
+}
diff --git a/ui/webui/resources/cr_elements/cr_checkbox/BUILD.gn b/ui/webui/resources/cr_elements/cr_checkbox/BUILD.gn
index 710bc24..621cd2f 100644
--- a/ui/webui/resources/cr_elements/cr_checkbox/BUILD.gn
+++ b/ui/webui/resources/cr_elements/cr_checkbox/BUILD.gn
@@ -22,3 +22,21 @@
   html_file = "cr_checkbox.html"
   html_type = "dom-module"
 }
+
+js_type_check("closure_compile_module") {
+  is_polymer3 = true
+  deps = [
+    ":cr_checkbox.m",
+  ]
+}
+
+js_library("cr_checkbox.m") {
+  sources = [
+    "$root_gen_dir/ui/webui/resources/cr_elements/cr_checkbox/cr_checkbox.m.js",
+  ]
+  deps = [
+    "//third_party/polymer/v3_0/components-chromium/paper-behaviors:paper-ripple-behavior",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+  ]
+  extra_deps = [ ":cr_checkbox_module" ]
+}
diff --git a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html
index 963c6c8..69e8949 100644
--- a/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html
+++ b/ui/webui/resources/cr_elements/cr_searchable_drop_down/cr_searchable_drop_down.html
@@ -30,7 +30,7 @@
         padding: 8px 0;
       }
 
-      #progress-container {
+      #input-overlay {
         border-radius: 4px;
         height: 100%;
         left: 0;
@@ -41,6 +41,19 @@
         width: 100%;
       }
 
+      #input-box {
+        height: 100%;
+        left: 0;
+        pointer-events: none;
+        top: 0;
+        width: 100%;
+      }
+
+      #dropdown-box {
+        pointer-events: initial;
+        width: 100%;
+      }
+
       paper-progress {
         --paper-progress-active-color: var(--google-blue-600);
         --paper-progress-height: 2px;
@@ -74,20 +87,24 @@
         placeholder="[[placeholder]]" readonly="[[readonly]]"
         error-message="[[getErrorMessage_(errorMessage, errorMessageAllowed)]]"
         invalid="[[shouldShowErrorMessage_(errorMessage, errorMessageAllowed)]]">
-      <div id="progress-container" slot="suffix">
-        <paper-progress id="loading" indeterminate hidden="[[!showLoading]]">
-        </paper-progress>
+      <div id="input-overlay" slot="suffix">
+        <div id="input-box">
+          <paper-progress id="loading" indeterminate hidden="[[!showLoading]]">
+          </paper-progress>
+        </div>
+        <div id="dropdown-box">
+          <iron-dropdown horizontal-align="left" vertical-align="top"
+              vertical-offset="4">
+            <div slot="dropdown-content">
+              <template is="dom-repeat" items="[[items]]"
+                  filter="[[filterItems_(searchTerm_)]]">
+                <button class="list-item" on-click="onSelect_">[[item]]</button>
+              </template>
+            </div>
+          </iron-dropdown>
+        </div>
       </div>
     </cr-input>
-    <iron-dropdown horizontal-align="left" vertical-align="top"
-        vertical-offset="52">
-      <div slot="dropdown-content">
-        <template is="dom-repeat" items="[[items]]"
-            filter="[[filterItems_(searchTerm_)]]">
-          <button class="list-item" on-click="onSelect_">[[item]]</button>
-        </template>
-      </div>
-    </iron-dropdown>
   </template>
   <script src="cr_searchable_drop_down.js"></script>
 </dom-module>
diff --git a/ui/webui/resources/cr_elements/cr_toast/BUILD.gn b/ui/webui/resources/cr_elements/cr_toast/BUILD.gn
index 926d3df6..a4527c0c 100644
--- a/ui/webui/resources/cr_elements/cr_toast/BUILD.gn
+++ b/ui/webui/resources/cr_elements/cr_toast/BUILD.gn
@@ -29,3 +29,20 @@
   html_file = "cr_toast.html"
   html_type = "dom-module"
 }
+
+js_type_check("closure_compile_module") {
+  is_polymer3 = true
+  deps = [
+    ":cr_toast.m",
+  ]
+}
+
+js_library("cr_toast.m") {
+  sources = [
+    "$root_gen_dir/ui/webui/resources/cr_elements/cr_toast/cr_toast.m.js",
+  ]
+  deps = [
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+  ]
+  extra_deps = [ ":cr_toast_module" ]
+}
diff --git a/ui/webui/resources/cr_elements/cr_toggle/BUILD.gn b/ui/webui/resources/cr_elements/cr_toggle/BUILD.gn
index 83d0724..76dc309c 100644
--- a/ui/webui/resources/cr_elements/cr_toggle/BUILD.gn
+++ b/ui/webui/resources/cr_elements/cr_toggle/BUILD.gn
@@ -13,7 +13,6 @@
 
 js_library("cr_toggle") {
   deps = [
-    "//third_party/polymer/v1_0/components-chromium/iron-behaviors:iron-button-state-extracted",
     "//third_party/polymer/v1_0/components-chromium/paper-behaviors:paper-ripple-behavior-extracted",
   ]
 }
@@ -23,3 +22,21 @@
   html_file = "cr_toggle.html"
   html_type = "dom-module"
 }
+
+js_type_check("closure_compile_module") {
+  is_polymer3 = true
+  deps = [
+    ":cr_toggle.m",
+  ]
+}
+
+js_library("cr_toggle.m") {
+  sources = [
+    "$root_gen_dir/ui/webui/resources/cr_elements/cr_toggle/cr_toggle.m.js",
+  ]
+  deps = [
+    "//third_party/polymer/v3_0/components-chromium/paper-behaviors:paper-ripple-behavior",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+  ]
+  extra_deps = [ ":cr_toggle_module" ]
+}
diff --git a/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn b/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn
index 40151b2..83079976 100644
--- a/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn
+++ b/ui/webui/resources/cr_elements/cr_view_manager/BUILD.gn
@@ -24,3 +24,21 @@
   html_type = "dom-module"
   auto_imports = [ "ui/webui/resources/html/assert.html|assert" ]
 }
+
+js_type_check("closure_compile_module") {
+  is_polymer3 = true
+  deps = [
+    ":cr_view_manager.m",
+  ]
+}
+
+js_library("cr_view_manager.m") {
+  sources = [
+    "$root_gen_dir/ui/webui/resources/cr_elements/cr_view_manager/cr_view_manager.m.js",
+  ]
+  deps = [
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+    "//ui/webui/resources/js:assert.m",
+  ]
+  extra_deps = [ ":cr_view_manager_module" ]
+}
diff --git a/ui/webui/resources/cr_elements/icons.html b/ui/webui/resources/cr_elements/icons.html
index 2679bc3d..40d13ac 100644
--- a/ui/webui/resources/cr_elements/icons.html
+++ b/ui/webui/resources/cr_elements/icons.html
@@ -22,6 +22,9 @@
       <g id="menu"><path d="M2 4h16v2H2zM2 9h16v2H2zM2 14h16v2H2z"></path></g>
   </svg>
 </iron-iconset-svg>
+
+<!-- NOTE: In the common case that the final icon will be 20x20, export the SVG
+     at 20px and place it in the section above. -->
 <iron-iconset-svg name="cr" size="24">
   <svg>
     <defs>
@@ -54,7 +57,9 @@
       <g id="expand-more"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"></path></g>
       <g id="extension"><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"></path></g>
       <g id="file-download"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path></g>
-      <g id="folder"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></g>
+<if expr="chromeos">
+      <g id="folder-filled"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"></path></g>
+</if>
       <g id="fullscreen"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"></path></g>
       <g id="group"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"></path></g>
       <g id="help-outline"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"></path></g>
diff --git a/ui/webui/resources/js/cr/ui/BUILD.gn b/ui/webui/resources/js/cr/ui/BUILD.gn
index 562b157..38935cf 100644
--- a/ui/webui/resources/js/cr/ui/BUILD.gn
+++ b/ui/webui/resources/js/cr/ui/BUILD.gn
@@ -268,3 +268,10 @@
 js_modulizer("modulize") {
   input_files = [ "focus_outline_manager.js" ]
 }
+
+js_library("focus_outline_manager.m") {
+  sources = [
+    "$root_gen_dir/ui/webui/resources/js/cr/ui/focus_outline_manager.m.js",
+  ]
+  extra_deps = [ ":modulize" ]
+}